Mastering Bitcoinを読む Chapter4 公開鍵、ビットコインアドレス

f:id:yzono:20150125190527j:plain

はじめに

前回は秘密鍵の作成まで読みました。今回は公開鍵、ビットコインアドレス作成までを読みます。

目次

公開鍵作成

f:id:yzono:20150125190252p:plain

Private and Public Keys

公開鍵(Public Key)は楕円曲線公開鍵暗号(ECC)を使用して作成します。楕円曲線公開鍵暗号についてはよく分かってません。ECCは鍵長が短くて済みCPUの負荷を低減させる効果があり、トランザクションが頻発するような環境には有効らしいです。

Kenji Urushimaさんのスライドがすごい詳しいです。(私はこれを読んでもまだ理解できてませんが)

K(公開鍵) = k(秘密鍵) * G(Generator point)

この公式で秘密鍵を特定できない公開鍵が作成できる。とりあえず今はそれだけの理解です。

ちなみにこの本を読みましたが私には易しくありませんでした..

トコトンやさしい暗号の本 (B&Tブックス―今日からモノ知りシリーズ)

トコトンやさしい暗号の本 (B&Tブックス―今日からモノ知りシリーズ)

ビットコインアドレス作成

f:id:yzono:20150125190310p:plain

Private and Public Keys

公開鍵を元にしていくつかの処理を行いビットコインアドレスが作成されます。

1. 公開鍵を"Double Hash"してハッシュ済公開鍵(20bytes)を作成します。

A = RIPEMD160(SHA256(K))

Kenji Urushimaさんのスライドによると、ビットコインで利用されるハッシュ関数はSHA256(32バイト)とRIPEMD160(20バイト)の2種類だそうです。

2. Base58Checkエンコードしてdataを作成します。

data = Base58CheckEncode(A)

Base58 alphabetは以下です。

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

3. dataに対してversion prefixを付けます。

prefix+data = prefix + data

prefixはタイプにより複数あります。

例)
Bitcoin Address 0x00(1)
Bitcoin Testnet Address 0x6F(m or n)

4. prefix+dataに対してSHA256を2回実行してチェックサムを作成します。

checksum = SHA256(SHA256(prefix+data))

5. checksumの最初の4bytesを追加します。

Bitcoin Address = prefix + data + checksumの最初の4bytes

以上がビットコインアドレスの作成の流れです。(間違いありそうですが..)

まとめ

次回も引き続きChapter4を読みます。

参考

Bitcoinを技術的に理解する

SSL暗号アルゴリズム

楕円曲線暗号とはどういうものなのでしょうか

1 楕円曲線暗号の整備動向

次世代暗号アルゴリズム「ECC」と「常時SSL」で変わるウェブセキュリティ最新トレンド/日本ベリサイン