ハッシュチェーンとブロック連結
ハッシュポインターを使った最小限のブロックチェーンを構築し、不変性を理解します。
「ハッシュチェーンとブロック連結」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
ハッシュチェーンとは
ハッシュチェーンはデータブロックを連結し、各ブロックに前のブロックのハッシュを含めます。いずれかのブロックを変更するとそのハッシュが変わり、それ以降のすべてのブロックが無効になります。これにより、改ざんを検知できる追記専用台帳が作られます。
ブロックの構造
各ブロックには、次のものが含まれます: (1) データペイロード(トランザクション)、(2) 前のブロックのハッシュ(前のブロックへのポインター)、(3) タイムスタンプ、(4) nonce(PoW用)、(5) トランザクションのMerkleルート。最初のブロック(genesis)では、prev_hash = "0"*64 となります。
Pythonによる最小限のブロックチェーン
import hashlib, json class Block: def __init__(self, data, prev_hash): self.data = data self.prev_hash = prev_hash self.hash = hashlib.sha256( json.dumps({'data':data,'prev':prev_hash}).encode() ).hexdigest()
ハッシュポインターが完全性を保証する理由
攻撃者がブロック3のデータを変更すると、ブロック3のハッシュが変わります。ブロック4はブロック3の古いハッシュを参照しているため、ブロック4でチェーンが壊れます。攻撃者はブロック3、4、5、...からチェーンの先端まで、すべてのハッシュを再計算しなければなりません。PoWがある場合、これは計算上実行不可能です。
不変性と改ざん検知可能性
ハッシュチェーンだけでは不変性は保証されず、改ざんの証拠を提供するにとどまります。追加の仕組み(PoW、デジタル署名、分散化)がなければ、チェーンを制御する攻撃者はチェーンを書き換えられます。実際にブロックチェーンを改ざんに強くするのは、分散コンセンサスです。
最長チェーンルール
Bitcoinの最長チェーンルールでは、累積プルーフ・オブ・ワークが最も多い有効なチェーンを正規のチェーンとします。攻撃者がチェーンをフォークした場合、正当なマイナーは正規のチェーンをより速く延長します(51%の仮定)。攻撃者のフォークは短くなり、破棄されます。
ヘッダーと完全なブロック
BitcoinのSPV(Simple Payment Verification)クライアントは、80バイトのブロックヘッダー(前のハッシュ、Merkleルート、nonce、タイムスタンプ、bitsを含む)だけをダウンロードします。フルノードはすべてのトランザクションを保存します。SPVクライアントは、ヘッダーのMerkleルートに対するMerkle証明によってトランザクションを検証します。
ジェネシスブロック
Bitcoinのジェネシスブロック(ブロック0、2009年1月3日)では、prev_hash = 0x000...0 です。Satoshiはタイムスタンプの証明として、見出し「The Times 03/Jan/2009 Chancellor on brink of second bailout for banks」をcoinbaseトランザクションに埋め込みました。
管理履歴の連鎖
ハッシュチェーンはブロックチェーンより前から存在します。用途には、ハッシュで連結した証明書失効リスト、前のログエントリのハッシュを使ったログの完全性、DNSSECの信頼の連鎖があります。この概念は、各エントリがそれ以前のすべてのエントリへのコミットメントを含む、任意の追記専用構造に一般化できます。
チェックポイント
初期同期を高速化するため、Bitcoin Coreはチェックポイントをハードコードしています。これは、特定の高さにある有効性が既知のブロックハッシュです。同期を開始するクライアントは、ハードコードされたハッシュを信頼し、チェックポイントより前のブロックについてPoW検証を省略できます。トレードオフとして、信頼の最小化が低下します。
コンテンツアドレッシング
Gitも同じ原理を使用しています。各コミットは、そのコンテンツと親コミットのハッシュに対するSHA-1/SHA-256によって識別されます。特定のコミットハッシュをチェックアウトすると、まさにその状態が得られます。Gitの履歴全体は、ハッシュで連結されたオブジェクトのツリーです。
確認問題
1つのブロックを変更した後、攻撃者がそれ以降のすべてのブロックのハッシュを再計算しなければならないのはなぜですか。
まとめ
ハッシュチェーンは、暗号学的ポインターによってブロックを連結します。変更の影響は、それ以降のすべてのブロックに連鎖します。これをPoWと分散コンセンサスと組み合わせることで、ブロックチェーンは実際上改ざん不能になります。次は、トランザクションの完全性を効率的に検証するためのMerkleツリーです。
よくある質問
「ハッシュチェーンとブロック連結」レッスンは無料ですか?
はい。「ハッシュチェーンとブロック連結」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「ハッシュチェーンとブロック連結」で何を学びますか?
ハッシュポインターを使った最小限のブロックチェーンを構築し、不変性を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ハッシュチェーンとブロック連結」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。