Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

2018-05-01から1ヶ月間の記事一覧

BabyStep GiantStep法(BSGS法)

DLP問題を解くアルゴリズムの一つとしてBabyStep GiantStep法があります。 www.pebblewind.com DLP問題とは、対称群の位数nに対して、生成元をg、群のある元をaとして、 を満たすxを求める問題です。 ここで、解はただ一つのみ必ず存在することは前提としま…

主要な仮想通貨のネットワークハッシュレート

いくつかの主要な仮想通貨のネットワークハッシュレートを調べてみました。 値が大きいほど、ある種の攻撃に対して耐性を持ちます。 ビットコインの現在のネットワークハッシュレートはこちらによると https://blockchain.info/charts/hash-rate 30G * GHash…

Hasseの定理から導き出される補題

楕円曲線に限定した Hasse の定理 上の任意の楕円曲線の有理点の個数 の範囲は以下となる。 補題 楕円曲線 E () に含まれる点Pで、 となる m が Hasse の定理により定まる曲線の位数の区間 に唯一存在する時、 となる。 この補題は Hasse の定理から導かれま…

256bitの暗号化はどの程度強固なのか

256bit(=32バイト)の暗号化はどの程度強固なのかというのを説明したYouTubeの動画が面白かったのでリンクを貼っておきます。 www.youtube.com 内容としては、まず、8つの大きさに分解します。 それぞれ、M1, M2, M3, ..., M8と表すことにします。 そして、 …

リカバリーIDについて小さな例を用いて実感する

一つ前の記事では署名のリカバリーIDについて書きました。 Ethereum の署名とBitcoin の署名 - Pebble Coding が、いまいち分からんと思うので、実感するため、小さい例で考えてみます。 曲線はsecp256k1と同じ、 を使いますが、法素数は31=pを使います。 こ…

Ethereum の署名とBitcoin の署名

Ethereum の署名の仕様はイエローペーパー https://ethereum.github.io/yellowpaper/paper.pdf に記載されています。 n = 115792089237316195423570985008687907852837564279074904382605163141518161494337 Rは点でx座標とy座標を持ちます。 n は secp256k1…

base58checkフォーマット出力の先頭文字が決まる理由

ビットコインで使われているbase58checkフォーマット出力の先頭の文字が何になるかって教科書にはよく書かれていますが、 どうやって算出しているのか気になったので、確かめてみました。 取りうる最小値と最大値を与えれば出力値の範囲が分かるという理屈で…

base58check フォーマットとビットコインアドレス

bitcoinでは色々なところでbase58checkフォーマットが使われています。 base58checkフォーマットを行う関数をb58checkとして実装してみたのが以下です。 ここでは、公開鍵から、メインネットのビットコインアドレスを計算しています。 ビットコインアドレス…

macOS に bitcoin explorer をインストールする

$ brew install bx 秘密鍵を生成しファイルに出力(32バイトhex) $ bx seed | bx ec-new > private_key $ cat private_key 4a1bdbb5164f0b096ab56ec74399222e44d13b2a93d5ad7fe8a341bbfa197c46 秘密鍵から公開鍵を計算しファイルに出力(33バイトhex) 先頭が0x…

ripemd160をpythonで試す

ripemd160は160ビット(=20バイト)の値を返すハッシュ関数です。 pythonでは以下で計算できます。 #!/usr/bin/env python import hashlib h = hashlib.new('ripemd160') h.update(b"abc") r1 = h.hexdigest() print(r1) print("len "+str(len(r1))) 8eb208f7e…

base58をpythonで試す

base58は大まかに言ってbase64を改良したものです。 base64は64個の文字とパディングに=(イコール)を使うものです。WEBプログラマなら説明は不要でしょう。 base58はbase64から小文字のl(エル),大文字のI(アイ),大文字のO(オー),0(数字のゼロ),+(プラス),/(…