すぐ忘れるんでメモ書きます
暗号学的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が書いてある.
問題点
- QRコードにしたら大きくなりすぎる. それを作るときにalphanumeric mode encodingが使えない
- 大文字小文字が混ざってると人が書いたり読み上げたりするときに不便
- SHA256で二回HASHとる処理は重く, チェックサムを確認してもエラーをdetectできるとは限らない
- ほとんどの研究によるとエラーをdetectできるのはencodeされたときのcharacterの数が素数のべきになっているときだが, 58はそうでない
- decodeが煩雑で遅い
全部ここにかいてある
bech32
segwitのAddressのフォーマット. base32のchecksumの問題点をいくつか解消したもの BIP173で提案された.
後で書き足します