本稿は、連載企画の 7本目の記事です。前回の記事は以下からご覧ください。
- 前回の記事紹介
- 前回の記事では、秘密鍵がどのように盗まれてしまうのか、またセキュリティを高める技術「マルチシグ」の仕組みについて解説しました。「マルチシグ」で資産を守る その仕組みを分かりやすく解説|ビットコインプロトコルのセキュリティ編(3)
- 初回記事はこちら 非中央集権で信頼を担保する ビットコイン(BTC)ネットワークの仕組みを解説|仮想通貨プロトコルの概要編(1)
本連載は論文の翻訳そのままではなく独自の解説を行っていますが、各章のタイトルには論文と対応する番号を振ってあるので参考にされると良いでしょう。今回はトランザクションの改ざんについて、どのように抑止されているのかを解説しました。
2.3 トランザクション改ざんの抑止
ここではトランザクションの改ざんとして、4つのシナリオを考えます。 分かりやすさのため、やはりAliceとBobに登場してもらい、AliceがBobに1 BTCを支払う場合を考えてみましょう。
- Alice がトランザクションを送出したが、それを中継するノードがトランザクションを改ざんするケース。支払い先の情報(Bob宛)を改ざんしようとする。
- Bob がトランザクションにおける支払い量を改ざんし、1 BTCのところを 2 BTCに書き換えるなど、より多くのビットコインを転送させようと仕組むケース。なお、この場合は整合性のため、お釣りのトランザクションも一緒に書き換える必要があります。
- トランザクションの送金先を書き換えるケース。お釣りや他の人への支払いを書き換えてしまうことが考えられます。
- Alice が過去のトランザクションを改ざんしようとするケース。過去のトランザクション履歴を削除したり、あるいは送金の金額、送金先を書き換えたりなど。
このうち、1-3の三つのシナリオでは、Aliceの秘密鍵で生成した署名が攻撃を防ぎます。署名は改ざんすることが難しいため、送金先や金額を改ざんしても、簡単に検知できてしまうと思って頂ければいいと思います。
4つ目のシナリオは送金元のAliceが悪意を持っているケースですが、例外的なケースを除き、過去のトランザクションの書き変えが難しくなるまで一定時間待つことで、Bobは攻撃を防ぐことができます。
未確認のトランザクションを攻撃する場合
トランザクションには、データが入ったメッセージ部と、そのメッセージから生成された署名部が含まれます。 この署名というのは、メッセージを秘密鍵で処理し、生成されたものです。手で書いて “サインする” のとは異なり、技術的に裏付けを持つ署名です。署名があるお陰で、1文字でもメッセージが改ざんされた場合、誰でも改ざんを検知することができます。
もう少し説明すると、Aliceはトランザクションを送出するとき、秘密鍵とトランザクションのメッセージから署名を行います。 トランザクションに含まれた署名と公開鍵があれば、公開鍵暗号における秘密鍵と公開鍵の性質から、メッセージが改ざんされていないかどうかを確認することができるのです。
そして、署名は秘密鍵を知らなくては生成できません。つまり、秘密鍵を知らない人間がメッセージを改ざんしても署名を公開鍵で検証することですぐにバレてしまうため、改ざんは困難である、と断言できるのです。
実装などの詳細については、こちらのブログ記事、あるいはBitcointalkの議論なども読んでいただくと良いでしょう。
確認済みのトランザクションを攻撃する場合
4つ目のシナリオである、Aliceが確認済みのトランザクションを書き換えるケースについて考えてみましょう。 つまり、ビットコインを受け取ってしばらく経ち、Bobは対価としてサービスや何かのモノを提供してしまいました。Aliceはどうにかして支払いを取り消したいと考えます。
ここで、確認済みのトランザクションはブロックチェーン上に取り込まれてしまっていますが、書き換えが完全に不可能というわけではありません。
ブロックチェーンの世界において、既存のチェーンよりも長いチェーンを創り出し、それを全体のネットワークに通知することで、古いブロックを”なかったこと“にすることができます。いわゆる 51% 攻撃です。
しかし、Proof of Workの性質上、これは簡単ではありません。一定の長さのチェーンを自分で準備するというのは相当に大変なことです。
その理由の一つとして、過去のトランザクションを書き換える都合上、途中の計算の前提が変わるため、マイナーが一度計算したハッシュ値は再利用できません。
“A -> B -> C”と連なってきたブロックチェーンの世界でAを書き換えようとした場合、”A’ -> B -> C”ではなく、”A’ -> B’ -> C'”に変化するため、B と B’ 、C と C’ は完全に別なものとなります。つまり、”A’ -> X -> Y”と考えたほうがいいでしょう。(世界線といった方が、一部の人にはわかりやすいかもしれませんね)
ですがここで、A, B, C の次の D が計算される前に、A’, X, Y の次の Z を見つけることができたとして、その結果をすぐにネットワーク上に流したらどうでしょうか。
ブロックチェーンの世界では、より長いチェーンを正しいものとして扱いますので、C よりも先の Z という結果に多くのノードが追従します。最終的には、A ではなく A’ が正しいブロックとして上書きされてしまうのです。
この攻撃が成功する前提として、書き換えを企図する Alice は全体の半分よりも少し多く、つまり 51% 以上のハッシュレートを確保する必要があります。これが 51%攻撃と呼ばれる所以です。
51% 以上のハッシュレートを持っていれば、攻撃が成功する見込みがあります。確実ではありませんが、時間をかければ確率的に成功しやすいといえます。成功確率やインセンティブについては、こちらの記事が分析を行っており、大変興味深いのでお勧めです。
モナコイン(MONA)やEthereum Classic(ETC)が 51%攻撃の対象になってしまったのは記憶に新しいですが、crypto51を見ると、ビットコインで1時間51%を維持するのに46万ドルほど、Ethereum(ETH)では88000ドルほどが必要なようでした。(2019/4末時点)
これに加えて、Nicehashなどで攻撃者がお金を払ってマイニングの計算パワーを借りることができるかどうかも重要な要素です。 51% のハッシュパワーを長時間確保しなければならないという攻撃手法や、必ず成功するわけではないという点から、51%攻撃を実行できるのは資金力を持つ人間あるいは組織に限られると思います。
まとめ
以上、トランザクションの改ざんが保護されている点について、事例なども交えて紹介させていただきました。
次回はプロトコル破壊です。51%攻撃などのように自分が利益を得るのではなく、ビットコイン全体を破壊する可能性について、検討していきたいと思います。
ビットコインを壊すことは可能なのか? プロトコル破壊について検証|ビットコインプロトコルのセキュリティ編(5)
次回記事では、ビットコイン自体を壊すことは可能なのか、「空ブロックのマイニング」や「スパムトランザクション」などの手法から、プロトコルの破壊について検討していきます。