ハッシュ化の概要
メニューを表示するにはスワイプしてください
ハッシュ化やブロックハッシュについてはこれまでに何度か言及されてきましたが、その概念自体についてはまだ詳しく説明されていません。ここで、ハッシュ化とは何かを理解します。
ハッシュ化は、入力を受け取り、通常は16進数で表現される固定長のバイト列を生成するプロセス。出力はハッシュと呼ばれ、ランダムに見え、入力がわずかでも変化すると完全に異なる値になる「アバランチ効果」という特性を持つ。
ハッシュ関数の特性
ブロックチェーンでは、ハッシュ関数は以下の用途で使用される:
- 各トランザクションに固有のフィンガープリントを作成し、取引を保護する;
- 公開鍵からアドレスを生成する;
- ブロックハッシュによってブロックチェーン内のリンクを作成する。
これらを踏まえ、ブロックチェーンに適したハッシュ関数にはいくつかの重要な特性がある:
ハッシュ化、特に優れたハッシュ関数を用いる場合は、スムージーを作ることに例えられる。次のイラストを参照:
実際のところ、ハッシュから元の入力を見つけることは可能ですが、現実的な時間内で行うのは非常に困難です。
ブロックハッシュ化
特定のブロックのハッシュを取得するために、ビットコインはSHA-256ハッシュ関数を使用します。これは256ビット(32バイト)のハッシュを出力します。SHA-2ファミリーの一部であり、**アメリカ国家安全保障局(NSA)**によって設計され、強力なセキュリティ特性で知られており、衝突やプレイメージ攻撃、その他の暗号学的脆弱性に対して耐性があります。
ビットコインブロックのハッシュは、ブロックヘッダーデータを取得して計算されます。このデータはSHA-256ハッシュ関数に2回入力され、ダブルSHA-256と呼ばれるプロセスで処理されます。
以下の画像で説明します:
生成される256ビットハッシュ値は、ネットワークの難易度ターゲットで定義された特定の基準を満たす必要があります。ハッシュ値がターゲット未満でない場合、ナンスが調整され、条件を満たすハッシュ値が見つかるまで再計算が繰り返されます。この最終的なハッシュ値がブロックの一意の識別子となります。
メルクルルート
メルクルルートは、ブロックに含まれるすべてのトランザクションを表す単一のハッシュ値です。その計算は、各トランザクションごとのハッシュ値をダブルSHA-256で生成することから始まります。
各トランザクションハッシュは他のハッシュとペアになり、そのペアをまとめてハッシュ化して新しいハッシュ値を生成します。このペアリングとハッシュ化のプロセスは、1つのハッシュ値が残るまで階層的に繰り返されます。最終的なハッシュ値がメルクルルートであり、すべてのトランザクションを1つの値にエンコードすることで完全性を保証します。この階層構造はメルクルツリーと呼ばれます。
次の例は、メルクルツリーがどのように形成されるかを示しています。
ご覧のとおり、ブロックには6つのトランザクション(それぞれTxと表記)があります。ハッシュ化と新しいハッシュのペアリングによって、マークルルートが計算されます。
右端のハッシュにペアが存在しない場合(例ではHash56)、この最後のハッシュは複製されてペアが作成されます。この手法により、トランザクションやハッシュの数が奇数の場合でも、マークルツリー構造の整合性と効率性が維持されます。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください