前回、ビットコインとは?をまとめましたが、引き続き、システムの内容も追加で調べました。暗号化と取引の流れついて調べたところ次のような感じです。
暗号化
暗号化は自分がバックグランドで実施して、それを使って取引をするもの。暗号化の手順は次の通り;
-
乱数=秘密鍵の生成:暗号学的に安全な乱数生成器RNGを使用して、秘密鍵となる32バイトの乱数を生成します。
-
公開鍵の生成:この秘密鍵を楕円曲線暗号(Elliptic Curve Cryptography, ECC)の一部であるsecp256k1という楕円曲線上の点として解釈します。そして、この点に対して楕円曲線上の加算を行うことで公開鍵を生成します。
-
ハッシュとエンコーディング:生成された公開鍵に対して、SHA-256とRIPEMD-160の2つのハッシュ関数を順に適用します。そして、結果となるハッシュ値に対してBase58Checkエンコーディングを行うことで、ビットコインアドレスが生成されます。
《ハッシュとエンコーディングの明細》
- SHA-256ハッシュ処理;
Secure Hash Algorithm 2 (SHA-2) の一部で、256ビットのハッシュ値を生成する。アルゴリズムは以下の通り。
- 入力データを512ビットのブロックに分割します。
- 各ブロックに対して、一連の複雑な数学的操作(ビットシフト、ビット回転、論理演算など)を適用します。
- これらの操作の結果を、前のブロックの結果と組み合わせて、新しいハッシュ値を生成します。
- RIPEMD-160ハッシュ処理;
RACE Integrity Primitives Evaluation Message Digest (RIPEMD) の一部で、160ビットのハッシュ値を生成する。アルゴリズムは以下の通り。
- 入力データを512ビットのブロックに分割します。
- 各ブロックに対して、一連の複雑な数学的操作(ビットシフト、ビット回転、論理演算など)を適用します。
- これらの操作の結果を、前のブロックの結果と組み合わせて、新しいハッシュ値を生成します。
- Base85Check;
-
バージョンプレフィックスの追加:バージョン情報を示すプレフィックス(ビットコインアドレスの場合は
0x00
)をハッシュ値の先頭に追加します。 -
チェックサムの計算と追加:追加したバージョンプレフィックスとハッシュ値を結合したデータに対して、SHA-256ハッシュ関数を2回適用します。その結果得られるハッシュ値の最初の4バイトをチェックサムとして、元のデータの末尾に追加します。
-
Base58エンコーディング:バージョンプレフィックス、ハッシュ値、チェックサムを結合したデータをBase58エンコーディングします。Base58エンコーディングは、0-9の数字と26の英大文字、26の英小文字からなる58文字のセットを使用しますが、視認性を考慮していくつかの文字(0, O, I, l)が除外されます。
取引とマイニング
-
取引の作成:Aさんは新しい取引を作成します。この取引には、Aさんが送信するビットコインの量と、そのビットコインを受け取るBさんのビットコインアドレスが含まれます。また、この取引には前回の取引(Aさんがビットコインを受け取った取引、Cさんのハッシュ値)も含まれます。これにより、Aさんが送信するビットコインが正当なものであることが証明されます。
-
取引の署名:次に、Aさんはこの取引を自身の秘密鍵で署名します。これにより、取引がAさんによって作成され、改ざんされていないことが証明されます。
-
取引のブロードキャスト:署名された取引は、ビットコインネットワークにブロードキャストされます。これにより、全てのノード(マイナーを含む)がこの取引を受け取ることができます。
-
取引の確認:マイナーは、受け取った取引が正当なものであることを確認します。具体的には、取引が正しく署名されているか、そしてAさんが送信しようとしているビットコインを本当に所有しているかを確認します。
-
取引の採掘(マイニング):取引が正当であると確認されたら、マイナーはその取引を新しいブロックに追加し、そのブロックをマイニングします。ブロックがマイニングされると、その中に含まれる全ての取引が承認され、ビットコインの送信が完了します。