メインコンテンツへスキップ

検証ラボ

「変えると、どこに表れる?」自分で文字を書き換えて、ハッシュとブロックのつながりを確かめます。

入力はこのブラウザ内だけで計算し、保存・送信しません。秘密鍵や個人情報は入力しないでください。

1文字変えると、結果はどうなる?

ハッシュは、入力から計算する固定長の値です。ここでは文字列をUTF-8のバイト列にして、SHA-256を1回計算します。同じ入力なら、結果はいつも同じです。

比較元の入力

Bitcoin

SHA-256(16進数64桁)

b4056df6691f8dc72e56302ddad345d65fead3ead9299609a826e2344eb63aa4

まず「Bitcoin」の B を小文字にしてみましょう。空白や改行も計算に含まれます。

SHA-256(16進数64桁)

b4056df6691f8dc72e56302ddad345d65fead3ead9299609a826e2344eb63aa4

比較元と同じ入力なので、64桁すべてが一致しています。

前の記録を書き換えると、鎖はどうなる?

各ブロックは「文字列」と「前のブロックのハッシュ」を材料に、別のハッシュを作ります。A を A! に変えて検証すると、次のブロックに残る参照との違いを見つけられます。

参照はすべて一致しています。これは、このモデル内のつながりだけの確認です。

  1. ブロック 1

    保存されている前のハッシュ
    0000000000000000000000000000000000000000000000000000000000000000
    このブロックの計算結果
    ee5a56d8291207c6c21ed6c7c9694e41651c023232bc60f654c0d77fb7fc1c29

    先頭用の固定値(ゼロ64桁)

  2. ブロック 2

    保存されている前のハッシュ
    ee5a56d8291207c6c21ed6c7c9694e41651c023232bc60f654c0d77fb7fc1c29
    このブロックの計算結果
    de67a93b548c3f86e4e95b627a30564175b88029bc559b2a3be4431f696a6ce4

    前のブロックと一致

  3. ブロック 3

    保存されている前のハッシュ
    de67a93b548c3f86e4e95b627a30564175b88029bc559b2a3be4431f696a6ce4
    このブロックの計算結果
    4ad350a24c372cc409a376695831cd39f27428c1416e8949d21256ad08b46ad9

    前のブロックと一致

末尾の記録には、まだそれを参照する後続ブロックがありません。末尾だけを変えるとハッシュは変わりますが、この鎖の中では参照の不一致は起きません。

このモデルの計算方法を見る

各ハッシュは、次のJSON配列のUTF-8表現に対する1回のSHA-256です。区切りを曖昧にしないためJSONを使い、先頭の参照にはゼロ64桁を置きます。Bitcoinのブロック形式ではありません。

["bitcoin-library-lab-v1", previousHash, text]

ここで分かること。まだ分からないこと。

ハッシュをつなぐと、過去の変更が後続の参照に表れます。でも「参照が一致する」ことと「正しい履歴として受け入れられる」ことは別です。

再現していること
SHA-256の実計算と、前のハッシュを含めた参照のつながりだけです。ハッシュは暗号化や電子署名ではありません。
省いていること
Bitcoinの80バイトのブロックヘッダー、二重SHA-256、取引とMerkle tree、電子署名、Proof of Work、ノードの検証と合意は再現していません。
Bitcoinで必要なこと
実際のノードは取引やブロックのルールを検証します。過去のブロックを置き換えるには、後続も含むProof of Workをやり直し、競合する有効な鎖との累積作業量の競争が必要です。

仕組みを本文と原資料で深める

この実験の根拠