0から分かる仮想通貨とブロックチェーン 〜銀行なしで『ズル』を防ぐ暗号の鎖〜

2026-11-03 / シリーズ「0から分かる」 第4回

1. 3行でわかる結論と全体図

暗号を次の箱に刻印 暗号を次の箱に刻印 第1ブロック 取引:A→Bに100円 前の暗号:0000 第2ブロック 取引:B→Cに50円 前の暗号:8f3a 第3ブロック 取引:C→Dに10円 前の暗号:4c9b

触って試す:ハッシュの雪崩効果と改ざん検知

🔐 ハッシュの雪崩効果と改ざん検知

下の文章は、第1ブロックの「取引」そのものです。1文字だけ変えてみてください(例:「100円」を「100万円」に)。ハッシュ値(SHA-256)がまったく別物に変わり、後ろのブロックとの鎖が壊れる様子が分かります。元に戻すと鎖も直ります。

入力した文章のハッシュ値(SHA-256・全文)

計算中…

⭕ 鎖は正常につながっています。


2. なぜ生まれたか?(昔の不便と解決策)

私たちが普段、銀行振込やPayPayなどでお金を送れるのは、真ん中に**「銀行」という絶対的な審判**がいて、巨大な金庫の中の通帳データを管理してくれているからです。

しかし、この仕組みには3つの弱点がありました。 1つ目は、銀行に高い手数料を払わなければならず、海外にお金を送ると何日もかかること。 2つ目は、もし銀行のシステムが止まったり、銀行自体が倒産したりすると、お金が使えなくなること。 3つ目は、第3回で見たように、真ん中の金庫(データベース)がハッカーに突破されたら、データが書き換えられてしまうことです。

そこで2008年、「サトシ・ナカモト」と名乗る謎の人物が、インターネット上にたった9ページの論文を発表しました。 そのアイデアは、**「真ん中の銀行をなくしてしまおう。代わりに、クラス全員(世界中のパソコン)にまったく同じ連絡帳を配り、第3回で登場した『ハッシュ関数(元に戻せないミキサー)』でページ同士を鎖でつなげば、誰もズルができなくなる」**というものでした。

これが、世界初の仮想通貨「ビットコイン」と、それを支える「ブロックチェーン」の始まりです。


3. 仕組みの種明かし(3つの重要ルール)

ブロックチェーンが絶対に改ざんできない理由は、以下の3つの仕組みが組み合わさっているからです。

専門用語小学生でもわかる例え実際にやっていること
ブロックとチェーン封印シール付きの連絡帳10分間の取引記録を1つの箱(ブロック)にまとめ、第3回で学んだ「ハッシュ化ミキサー(SHA-256)」で暗号を作ります。次の箱には「前の箱の暗号」を必ず書き込むため、鎖(チェーン)のように繋がります。
マイニング (採掘)超難問の宝探しゲーム新しい箱を鎖につなぐには、「箱の暗号の先頭が『0000』になるようなラッキーナンバー(ナンス)を見つけ出す」という、当てずっぽうの計算競争に勝つ必要があります。一番最初に見つけた人に、ご褒美として新しいコインが配られます。
51%攻撃の壁多数決のルールもし過去の記録を1箇所でも書き換えると、後ろの箱の暗号がすべてズレます。ズルを通すには、世界中のライバル全員の合計を超えるスピードで計算し直さなければならず、事実上不可能です。
ビットコインのマイニング専用マシン(Avalon)の内部。ASICチップが並んだ基板とヒートシンク、冷却ファンが見える
マイニング専用マシンの実物。基板いっぱいに並んだ専用チップ(ASIC)が、ラッキーナンバー(ナンス)探しの計算だけをひたすら繰り返している。写真:张楠赓(CC0/Wikimedia Commons)
😈 ズルをしたい人:過去の「第1ブロック」を100円→100万円に書き換える! ⛓️ 第1ブロックの暗号(ハッシュ)が「8f3a」→「9999」に変わってしまう! ⛓️ 第2・第3ブロックの「前の暗号」と食い違い、鎖が破壊される 🌍 世界中のパソコン:「暗号が壊れていますよ!」と多数決で即座に却下

4. 作って暴く!(Google Colab 15分ミニ実験)

「本当に過去を書き換えると鎖が壊れるのか?」「マイニングの宝探し計算とはどんなものか?」を、自分の手で動かして確かめてみましょう。 以下のリンクからGoogle Colabを開き、2つの実験コードを貼り付けて再生ボタン(▶)を押してください。

👉 Google Colabを開いて実験を始める

実験①:30行で「ミニ・ブロックチェーン」を作り、ズルを暴く

まず、3つのブロックを暗号の鎖でつなぎ、後から第1ブロックの金額をこっそり書き換えると何が起きるかを実験します。

# === 実験①:ミニ・ブロックチェーンの自作と、改ざん(ズル)の自動検知 ===
import hashlib, json

# ブロックの中身をミキサー(SHA-256)にかけて16文字の暗号にする関数
def calc_hash(block):
text = json.dumps(block, sort_keys=True, ensure_ascii=False)
return hashlib.sha256(text.encode()).hexdigest()[:16]

# 1. 鎖(チェーン)でつながった3つのブロックを作る
chain = []
chain.append({"番号": 1, "取引": "A→Bに100円", "前の暗号": "0000000000000000"})
chain.append({"番号": 2, "取引": "B→Cに50円", "前の暗号": calc_hash(chain[0])})
chain.append({"番号": 3, "取引": "C→Dに10円", "前の暗号": calc_hash(chain[1])})

print("--- ⭕ 正常なブロックチェーンの中身 ---")
for b in chain:
print(f"第{b['番号']}ブロック | 取引: {b['取引']} | 前の暗号: {b['前の暗号']} | 自分の暗号: {calc_hash(b)}")

# 2. 😈 悪い人が、過去の第1ブロックを「100円」から「100万円」にこっそり書き換える!
print("\n--- 😈 第1ブロックの取引を『100万円』に改ざんします... ---")
chain[0]["取引"] = "A→Bに100万円"

# 3. 鎖が正しくつながっているかチェックする
print("\n--- 🔍 ブロックチェーンの監査結果 ---")
for i in range(1, len(chain)):
real_prev_hash = calc_hash(chain[i-1]) # 実際の前のブロックから計算した暗号
recorded_hash = chain[i]["前の暗号"] # 次のブロックに記録されている暗号
if real_prev_hash!= recorded_hash:
print(f"🚨 警告! 第{i}ブロックの鎖がちぎれています!(第{i}ブロックの前が改ざんされました)")
print(f" 記録されていた暗号: {recorded_hash}")
print(f" 実際の前の暗号: {real_prev_hash}")

実験①の種明かし

第1ブロックの文字を少し変えただけで、第1ブロックの暗号(ハッシュ値)がまったく別物に変わってしまい、第2ブロックに刻印されていた「前の暗号」と一致しなくなりました。 では、「第2ブロックと第3ブロックの暗号も、全部高速で計算し直して書き換えればバレないのではないか?」と思うかもしれません。それを防ぐのが、次の実験②「マイニング」です。


実験②:マイニング(採掘)の正体!「0000」が出るまでサイコロを振る

ブロックチェーンでは、「ただ暗号を計算するだけ」では新しいブロックを作れません。 **「ブロックの中に『ラッキーナンバー(ナンス)』を入れ、出来上がる暗号の先頭が『0000』になるまで、1、2、3…と順番に数字を変えて何万回も計算し直す」**という厳しいルール(Proof of Work)があります。実際にあなたの手でマイニングをしてみましょう!

# === 実験②:ビットコインの「マイニング(宝探し計算)」を自分の手で回す実験 ===
import hashlib, time

transaction = "CさんからDさんへ10円を送る"
target = "0000" # ルール:暗号の先頭がこの4文字(ゼロ4つ)になるまで合格できない!

print(f"⛏️ マイニング開始!(暗号の先頭が『{target}』になるラッキーナンバーを探します...)")
start_time = time.time()

nonce = 0 # ラッキーナンバー(ナンス)を 0 から順番に試す
while True:
nonce += 1
# 取引データとラッキーナンバーを合体させてミキサー(SHA-256)にかける
data = f"{transaction}:{nonce}"
hash_result = hashlib.sha256(data.encode()).hexdigest()

# もし暗号の先頭が「0000」になったら宝探し成功!
if hash_result.startswith(target):
elapsed = time.time() - start_time
print(f"\n🎉 採掘(マイニング)成功!!")
print(f"・見つけたラッキーナンバー (Nonce): {nonce} 回目の計算で発見!")
print(f"・出来上がった奇跡の暗号 (Hash): {hash_result}")
print(f"・かかった時間: {elapsed:.3f} 秒")
break

実験②の種明かし

実行すると、たった「ゼロが4つ並ぶ数字」を見つけるだけでも、コンピュータが数万回〜十数万回も当てずっぽうの計算を繰り返したことが分かります。 実際のビットコインでは、このルールが「先頭にゼロが19個以上並ぶこと」のように極限まで難しく設定されており、世界中のスーパーコンピュータが束になっても**「1個のブロックを作るのに約10分」**かかります。

そのため、もし悪人が過去のブロックを書き換えて、後ろのブロックもすべて再計算(マイニング)し直そうとしても、1ブロックあたり10分かかるため、世界中の正しい計算スピードに追いつくことは絶対にできないのです。

大規模なビットコインマイニング施設。壁一面にラックが並び、マイニングマシンの緑色のLEDが光っている
倉庫いっぱいに並ぶマイニングマシン。世界中のこうした計算力の合計を超えるスピードで再計算しなければズルは通らないため、改ざんは事実上不可能になる。写真:Marko Ahtisaari(CC BY 2.0/Wikimedia Commons)

5. 現実世界での注意点と、全4回の種明かし(伏線回収)

「ブロックチェーンは絶対にハッキングされない」と聞いたことがあるかもしれませんが、ニュースでは毎年のように「仮想通貨取引所から何百億円も盗まれた!」という事件が起きています。なぜでしょうか?

理由はシンプルです。 ブロックチェーンという「連絡帳」そのものは破られていませんが、その連絡帳にサインするための**「個人の暗証番号(秘密鍵)」を預かっている取引所のWebサイト(第3回で見たような普通のシステム)がハッキングされて、暗証番号を盗まれているから**です。 どんなに頑丈な鎖を作っても、鍵をポケットから落とせば盗まれてしまうのは現実世界と同じです。


🎓 序盤4テーマの総まとめ(最大の伏線回収)

ここまで4つの講義を駆け抜けてきました。最後にもう一度、第1回から第4回までの技術を並べてみましょう。

  1. 第1回(GitとGitHub):ファイルの歴史を「差分」で記録し、みんなで共有するタイムマシン。
  2. 第2回(大規模言語モデル):言葉のつながりを学習し、確率のサイコロを振って文章を作る計算機。
  3. 第3回(ハッキングと防御):命令とデータの隙間を突くパズルと、元に戻せない暗号「ハッシュ関数」。
  4. 第4回(仮想通貨):ハッシュ関数を鎖のようにつなぎ、誰も改ざんできない歴史を作る「ブロックチェーン」。

ここで、1つ驚くべき事実(種明かし)をお伝えします。 実は、第1回であなたが使ったタイムマシン**「Git」の裏側も、第4回の「ブロックチェーン」とまったく同じ仕組み**で作られています。

Gitでセーブ(コミット)をすると、そのセーブデータには「前のセーブデータのハッシュ値」が自動的に埋め込まれ、鎖のようにつながって保存されます。 つまり、あなたは第1回の実験をした時点で、すでに自分の手でブロックチェーンの兄弟を動かしていたのです。

一見バラバラに見える最先端のIT技術も、箱を開けて中を覗けば、「テキスト」「確率」「ハッシュ値」というシンプルな部品の組み合わせで動いています。 この「作って暴く」視点さえあれば、これからどんな新しい技術が現れても、あなたはもうブラックボックスを怖がることはありません。


確認クイズ

📝 確認クイズ(3問)