ハッシュ関数がビットコインの骨格になった理由
SHA-256はどのようにしてビットコインのプルーフ・オブ・ワーク、マークルツリー、アドレス体系、ブロック連鎖までをすべて支えているのか。一方向関数の核心的な性質から、ビットコインがその関数をどこにどう使っているかまでを整理します。
ビットコインを一行に縮めれば「ハッシュ関数の上に作られたお金」です。プルーフ・オブ・ワークも、ブロック連鎖も、マークルツリーも、アドレス生成も、すべて同じひとつの関数に依存しています。SHA-256です。
ハッシュ関数とは
ハッシュ関数は任意の長さの入力を受け取り、固定長の出力を返す関数です。ビットコインが使うSHA-256は、何を入れても256ビット(64文字の16進数)を返します。1バイトの文字も、1ギガバイトの動画も、同じ64文字に還元されます。
この関数が暗号学的に役立つには、4つの性質が必要です。
**決定性。**同じ入力は常に同じ出力になります。誰がいつ実行しても結果が一致します。
**計算効率。**入力からハッシュを計算するのは高速です。普通のノートPCでも毎秒数百万回回せます。
**原像耐性。**ハッシュ結果から元の入力を逆算するのは事実上不可能です。可能な入力を全部試す以外に近道はありません。
**衝突耐性。**異なる2つの入力が同じハッシュを生む組を見つけることも事実上不可能です。SHA-256ではおよそ2の128乗回の試行が必要です。
最後の性質がアバランチ効果を生みます。入力の1ビットを変えるだけで出力ビットの半分近くが反転します。ビットコインが依存している核心的な性質です。
ビットコインのどこに使われているか
ハッシュ関数はビットコインのほぼ全域に登場します。セキュリティが必要な場所にはほぼ例外なくいます。
**プルーフ・オブ・ワーク。**マイナーはブロックヘッダのハッシュが難易度ターゲットを下回るまで、nonce値を変えながらSHA-256を回し続けます。平均10分で1ブロックが見つかるよう、難易度が自動調整されます。答えを見つけるのは難しいが、検証は1回のハッシュ計算で終わります。この非対称性が肝です。
**ブロック連鎖。**各ブロックヘッダには直前のブロックヘッダのハッシュが含まれています。過去のどこかのブロックの1ビットでも変えれば、そのブロックのハッシュが変わり、それを参照する次のブロックのハッシュも変わり、連鎖的に現在までのすべてのヘッダが壊れます。これが「ブロックチェーン」という名前の根拠です。
**マークルツリー。**1ブロックに入る数千件の取引は、隣り合う2つずつをハッシュし、その結果をまた2つずつハッシュする操作を繰り返して、1つのマークルルートに集約されます。このルートがブロックヘッダに収まります。ライトノードは取引全体を受信しなくても、特定の取引がブロックに含まれていることをSPV証明で確認できます。
**アドレス生成。**ビットコインアドレスは公開鍵をSHA-256で一度、RIPEMD-160でもう一度ハッシュした結果をエンコードしたものです。二度ハッシュすることで、公開鍵そのものが露出する時点を取引使用時点まで遅らせます。
**トランザクションID。**取引のTXIDは取引データ全体を二重SHA-256した値です。1ビットでも変われば変わります。デジタル指紋として機能します。
なぜSHA-256なのか
サトシはビットコインのリリース時点ですでに標準だったSHA-256を選びました。NISTが2001年に標準化し、2008年時点で最も検証されていたハッシュ関数だったからです。その後SHA-3などの後続標準が出ましたが、ビットコインはSHA-256のままです。
理由があります。ビットコインは合意の上で動いており、ハッシュ関数を変えることは事実上新しいコインを作ることと同じです。すべてのノードが同時にアップグレードする必要があり、既存のマイニング機器がすべて使い物にならなくなります。変更コストが天文学的なので、可能な限り触りません。
もうひとつの理由は、量子コンピュータの脅威がSHA-256よりも非対称鍵アルゴリズムに向きやすいからです。SHA-256はグローバーのアルゴリズムで攻撃されてもセキュリティ強度が半分(128ビット)に減るだけで、それすら現実的な量子ハードウェアではかなり遠い話です。優先順位が低いのです。
ひとことで
ハッシュ関数は、ビットコインが信頼なしでも完全性と合意を生み出す土台です。プルーフ・オブ・ワークの非対称性も、マークルツリーの効率も、ブロックの連鎖も、アドレスの匿名性も、取引の指紋も、すべて同じ関数の異なる使い方にすぎません。SHA-256ひとつがビットコインの骨格の半分を担っています。