bitcoin関連ワード一言メモ


すぐ忘れるんでメモ書きます

暗号学的Hash関数

bitcoinで使われているものを軽く紹介
1.SHA256
出力は256bit
2.RIPEND-160
出力は160bit OpenSSLにも使われているらしい

address作るときにはRIPEND-160(SHA256(pubkey))をつかう

base64

バイナリを文字を0-9の数字と大/小文字alphabetと+,/で置き換えるencoding手法. 16進数表示のつよいやつみたいな

base58

base64だと0とoとか見分けつかなくて困るからそいつらをなくしたり, 特殊文字である+と/をなくした版. 2のべきになっていないのでbase64より非効率.

base58Check encoding

bitcoinで採用されているencoding形式. P2SHとかP2PKHとかで使われている 中身は↓

base58-encode: [one-byte version][20-byte hash][4-byte checksum]

[one-byte version]: testnetかmainnetか書いてある. mainnetだと0x00, testnetだと0x03.
[20-byte hash]: utxoを使えるようにするためのscriptのhashが書いてある.
[4-byte checksum]: 上の2つを合わせたものにSHA256で2回Hashを取ったもののはじめの4byteが書いてある.

問題点

  1. QRコードにしたら大きくなりすぎる. それを作るときにalphanumeric mode encodingが使えない
  2. 大文字小文字が混ざってると人が書いたり読み上げたりするときに不便
  3. SHA256で二回HASHとる処理は重く, チェックサムを確認してもエラーをdetectできるとは限らない
  4. ほとんどの研究によるとエラーをdetectできるのはencodeされたときのcharacterの数が素数のべきになっているときだが, 58はそうでない
  5. decodeが煩雑で遅い

全部ここにかいてある

bech32

segwitのAddressのフォーマット. base32のchecksumの問題点をいくつか解消したもの BIP173で提案された.

後で書き足します