Merkle木:大規模環境でのトランザクション完全性
Merkle木を構築し、包含証明を効率的に生成します。
「Merkle木:大規模環境でのトランザクション完全性」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
課題: トランザクションを効率的に検証する
Bitcoinのブロックには約2,000件のトランザクションが含まれます。2,000件すべてのトランザクションをダウンロードせずに、トランザクションTが含まれていることを証明するには、コンパクトな証明が必要です。Merkleツリーがこの問題を解決します。証明のサイズは、O(n)件のトランザクションではなく、O(log n)個のハッシュです。
Merkleツリーの構築
リーフ: 各トランザクションのSHA256d(SHA-256を2回適用したもの)。親: SHA256d(left_child_hash || right_child_hash)。1つのルートハッシュになるまで繰り返します。ノード数が奇数の場合は、最後のノードを複製します。ルートはブロックヘッダーに保存されるMerkleルートです(32バイト)。
PythonによるMerkleルート
import hashlib def sha256d(x): return hashlib.sha256(hashlib.sha256(x).digest()).digest() def merkle_root(txids): if len(txids)%2: txids.append(txids[-1]) while len(txids)>1: txids=[sha256d(txids[i]+txids[i+1]) for i in range(0,len(txids),2)] return txids[0].hex()
Merkle証明(包含証明)
トランザクションTが位置iにあることを証明するには、Tのリーフからルートまでの各レベルで、隣接する兄弟ノードのハッシュを提供します(O(log n)個のハッシュ)。検証者は、Tと兄弟ノードのパスからルートを再計算します。計算したルートがブロックヘッダーのMerkleルートと一致すれば、Tが含まれていることが証明されます。
証明サイズの例
1,024件のトランザクション → Merkle証明 = 10個のハッシュ = 320バイト。完全なブロック = 約1 MB。SPVクライアントは、関心のある各トランザクションについて、80バイトのヘッダーと320バイトのMerkle証明だけをダウンロードします。完全なブロックをダウンロードする場合と比べて、帯域幅を99.97%節約できます。
改ざんの検出
ツリー内のいずれかのトランザクションが変更されると、そのリーフハッシュが変わり、上位へ伝播してMerkleルートが変わります。変更後のルートは、PoWによって保護されたブロックヘッダーと一致しなくなります。トランザクションからルートを計算することで、あらゆる変更を検出できます。
Patricia Merkle Trie(Ethereum)
Ethereumは、trie(Patricia Merkle Trie)によってMerkleツリーを拡張しています。これは、hex-prefixでエンコードされたradix trieで、各ノードがMerkleハッシュ化されます。アカウント残高のstate trie、transaction trie、receipt trieに使用されます。フルノードのデータがなくても、アカウント状態を効率的に証明できます。
Merkle Mountain Range
Merkle Mountain Range(MMR)は、ログ形式のデータ向けの追記専用Merkle構造です。新しい要素を追加し、2のべき乗サイズのサブツリーのルートであるピークを維持します。Grin/MimbleWimbleやZCashで、追記専用ログに対する効率的でコンパクトな証明に使用されています。
Verkleツリー
Ethereumのロードマップ(EIP-6800)では、MerkleツリーをVerkleツリーに置き換えます。ハッシュの代わりに、ベクトルコミットメント(KZG多項式コミットメント)を使用します。証明サイズは、MerkleのO(log n)に対してO(1)です。これにより、ステートレスクライアントは完全なtrieを保存せずに状態を検証できます。
MerkleログとしてのCertificate Transparency
Certificate Transparency(RFC 6962)は、追記専用のMerkleログを使用します。各CA発行証明書がリーフになります。包含証明によって、証明書がログに記録されていることを検証します。一貫性証明によって、ログが追記専用であること(削除や挿入がないこと)を検証します。ブラウザベンダーは、このログを通じてSCTを検証します。
Gitオブジェクトモデル
Gitのtree(ディレクトリのスナップショット)はMerkleツリーです。各treeノードは、ファイルのblobとサブツリーをハッシュします。コミットハッシュは、コードベース全体の状態を一意に識別します。これが、git checkout
確認問題
1,024個のリーフを持つツリーで包含を証明するには、Merkle証明にいくつのハッシュが必要ですか。
まとめ
Merkleツリーによって、O(log n)の包含証明が可能になります。BitcoinはブロックヘッダーにMerkleルートを保存し、SPVクライアントは証明を使用します。EthereumはこれをPatricia Merkle Trieへ拡張しています。将来的には、O(1)の証明を実現するためにVerkleツリーがMerkleツリーに置き換わります。次は、Proof of Workのマイニングと難易度です。
よくある質問
「Merkle木:大規模環境でのトランザクション完全性」レッスンは無料ですか?
はい。「Merkle木:大規模環境でのトランザクション完全性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「Merkle木:大規模環境でのトランザクション完全性」で何を学びますか?
Merkle木を構築し、包含証明を効率的に生成します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Merkle木:大規模環境でのトランザクション完全性」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ハッシュチェーンとブロック連結
- Merkle木:大規模環境でのトランザクション完全性
- Proof of Work:マイニングと難易度調整
- Bitcoin ScriptとUTXO署名検証