はじめに
みなさんこんにちは。
VIPPOOL でエンジニアをやっています、星月です。
前回は、暗号資産の安全性を説明するために、攻撃者の役になり切って、
どうやって改ざんを行うかについて考えました。
そして、その方法を数学で説明できるモデルに落とし込むところまでお話しました。
今回は、このモデルについて解析して、どういう条件で攻撃が成功するのか考え、
その反対の条件を満たせば安全だ、というお話をします。
ランダムウォークモデルでゴールする確率
これは前回出したモデルです。
ここで登場するのが、承認数です。このすごろくの出発点とします。
つまり、攻撃者がどのタイミングから攻撃を開始するか、
という数字なわけです。とりあえず z としておきましょう。
bitcoin の元論文でも言及されていますが、
確率過程の面倒な議論はすっ飛ばして結果だけ書くと、
の確率で改ざん攻撃に失敗します。一般的に確率は 100% を 1 とするので、
1 からこの値を引けば、成功する確率になります。
計算めんどうですね。そんなときは、みんな大好き Wolfram|Alpha: Computational Intelligence で計算できます。
以下の数式を入力してみてください。
sum (z*p/(1-p))^k*e^(-z*p/(1-p))/k!*(1-(p/(1-p))^(z-k)), k=0 to z, where p=0.4, z=6
p=0.4、つまり攻撃者のハッシュレートが全体の 40%、
z=6、つまり承認数 6 の状態から追いかけっこを開始した場合、
0.49602。つまり 49.602% の確率で失敗します。
1 から引いて 0.50398、つまり 50.398% の確率で成功します。
最後の where 以降がパラメータです。いろいろ変えてみて試してみてください。
専用の計算機を公開してる人もいます。
https://people.xiph.org/~greg/attack_success.html
こちらは成功率をそのまま表示します。
さて、ここから何がわかるでしょう
この式を見て、何かを感じ取れる人はそうそう居ないと思いますので、
いろいろパラメータを変えて試してみましょう。
10% | 30% | 49.99% | 50% | |
---|---|---|---|---|
1 | 20.4% | 62.7% | 99.9% | 100% |
6 | 0.02% | 13.2% | 99.9% | 100% |
10 | 0.000012% | 4.16% | 99.9% | 100% |
144 | ≒0 | ≒0 | 99.8% | 100% |
承認数と、攻撃者のハッシュレートの割合を変えながら、攻撃の成功率を求めてみました。
お気づきになられたでしょうか。攻撃者のハッシュレートの割合が 50% になった瞬間、
承認数をいくら増やしても、成功率が 100% になるのです。
これが「51% 攻撃」の意味です。
「どれだけ承認数を確保しても必ず改ざんが成功する条件」、
それが、「ハッシュレートの割合の 50% 以上を占める」なのです。
じゃあ、承認数いくつなら安全なの?
今度はモナコインを受け取る側、攻撃される側に立ってみましょう。
- あなたは何かの商品を販売しています
- お客さんからモナコインで支払いを受けました
- さて、承認数いくつまで待てば安全でしょうか?
これは、bitcoin wiki の Confirmation - Bitcoin Wiki ページにあるとおり、
ケースバイケースとしか言いようがありません。
例えば、100円の価値のものを販売したとして、
1% の確率で持ち逃げされる可能性は高いと感じますか?低いと感じますか?
そのためにわざわざ何承認も待つより、いっそ 0 承認でも、
他のお客さんの接客をした方が利益になりませんか?
例えば、1億円の価値にあるものを販売したとして、
0.1% の確率で持ち逃げされる可能性は、高いと感じますか?低いと感じますか?
どこまで攻撃成功率が下がるまで待てば安心できますか?
これはそういう話になります。
また別の観点もあります。
攻撃用のハッシュレートを高めるにはそれなりの機材と電気代がかかります。
100円の価値のものを持ち逃げするために、数万、数十万と機材や電気代をかけますか?
昔から付き合いのある会社で、これからも付き合いがある可能性の高い取引先が、
高い費用と信用を失ってまで改ざんすると思えますか?
そういうことを総合的に見て、安全と思える承認数を決めてね、と bitcoin wiki には書いてあります。
適切に承認数を決めれば、通貨として安全に使えますよ、というのが、暗号資産の安全性の本質です。
まとめ
今回は、前回のランダムウォークモデルから攻撃成功率を計算して、
その意味や、承認数についてお話ししました。
承認数を適切に決めることで、安全性と利便性のバランスの取れた運用をするのが本来あるべき姿です。
また、51% 攻撃の意味についても少し触れました。正確な認識がもっと広まると嬉しいです。
今回はここまで。
ご質問、ご意見等ありましたらお気軽にリプライください。