ナカモトサトシ白書解説(6)
以下は2016年12月28日に私が以下のホームページに掲載した記事です。https://officemoorea.wordpress.com/最近、web3という文脈でブロックチェーンが注目されていることや、上記ホームページの更新ができていないことから、古い記事ですが、noteに転載します。
■ナカモトサトシ白書解説 価値の結合や分割
一つ一つのコインを個別に扱うことも可能であるが、取引に使われる金額を1セントずつ個別に取引することは非常に不便だ。価値の分割や結合を可能にするために、取引には複数のインプットとアウトプットが含まれるようにする。通常、インプットはより価値の大きい前の取引からの一つのインプットか小額のものをいくつか合わせた複数のインプットで、アウトプットは多くても二つ、次の支払いに向かうものが一つと、おつりがあればそれを支払い元に戻すものが一つである。
解説
例えば複数の取引で合わせて10BTCンを持っている人(正確にはビットコインアドレス)が0.3BTCを別の人(別のビットコインアドレス)に支払い、取引手数料を0.001BTCにしたいとする。上の図で、Inはビットコインを入手した複数の取引であり、Outは支払い先のアドレスに対する0.3BTC、自分のアドレスに対する9.699BTCとする。
Inの合計は10BTC、Outの合計は9.999BTCなので、その差0.001BTCは採掘者への手数料となる。この結果、残高は9.699BTC(自分に9.699BTCが戻ってくる)となる。
■ナカモトサトシ白書解説 プライバシー
従来の銀行モデルは、情報へのアクセスを関連団体と信頼のおける第三者機関に限定することで一定レベルのプライバシーを実現している。
ブロックチェーンでは全取引を公開する必要性があるので、情報アクセスを限定することはできないが、パブリック・キーを匿名にすることでプライバシーを保つことができる。誰かが他者にどれだけのコインを送っているかは公開されるが、その取引情報は誰にもリンクされていない。これは個別の取引の時間やサイズ、「テープ」は公開されても取引の当事者は明らかにされない証券取引で公表されるのと同等の情報レベルである。
追加のファイアウォールとして、同一の所有者にリンクされることを防止するために、取引は一回ごとに新しいペアのキーを用いる必要がある。複数インプットの場合はそれらのインプットが同じ所有者に所有されていることがどうしても露見するので、多少のリンクを避けることはできない。リスクは、もしキーの所有者が明らかになった場合、そのリンクにより同じ所有者が関わった他の取引も露見する可能性があることである。
解説
ブロックチェーンではすべての取引が全ノードに共有されているので、取引を秘密にすることは不可能である。その代わりにアドレスを完全に匿名にして、アドレスの持ち主が誰であるかをわからないようにすることで、プライバシーを守っている。
アドレス(公開鍵)は誰でも、いくらでも作成でき、その持ち主が誰であるかは作成した人だけが知っている。ビットコインを受け取るにはアドレスを教える必要があるが、そのアドレスは取引毎に生成することができる。
ただし、受け取ったコインを使うときには、受け取ったときのアドレスが必要になるので、すべての取引をビッグデータとして解析すればある程度の推測ができる可能性はある。
■ナカモトサトシ白書解説 計算
攻撃者が正当なチェーンよりも速いスピードで偽のチェーンを作成しようとするシナリオを考えてみる。仮にそれに成功したとしても、コインを無から創り出したり攻撃者自身が所有したことのないコインを盗んだりというようにシステムを自由に操れるようになるわけではない。ノードは無効な取引を用いた支払いも無効な取引を含んだブロックも拒絶するからである。
攻撃者にできるのは自身の取引記録を書き換えることで、最近支払った金額を取り返そうとすることだけである。良心的なチェーンと攻撃者のチェーンの競争は二項酔歩(二項ランダムウォーク)と特徴づけられる。成功のイベントは良心的なチェーンが一ブロック延長してリードが一つ増えること、失敗のイベントは攻撃者のチェーンが一ブロック延長して差が一つ縮められることである。
攻撃者が与えられた遅れを取り戻す確率はギャンブラー破産の問題と似ている。無限の資金を持つギャンブラーが赤字からスタートして損益分岐点を目指して無数の賭けを行うと仮定する。彼が損益分岐点に到達する確率、もしくは攻撃者が良心的なチェーンに追いつく確率は以下のように計算することができる。
P = 良心的なノードが次のブロックを見つける確率
q = 攻撃者が次のブロックを見つける確率
qz= 攻撃者がzブロックの遅れから追いつく確率
p>q というわれわれの仮定を前提とすると、追いつかなくてはならないブロックの数が増えるにしたがい確率は指数関数的に下がっていく。この分の悪い確率のもとでは、初期の段階でよほどの幸運に恵まれて突進しない限り、彼が追いつく確率は、さらに遅れをとっていく中でまずあり得ないほど小さくなっていく。
次に、新しい取引の受け手が、送り手がもう取引内容を変更できないと確信できるまでにどれだけの時間、待つ必要があるかを考える。
送り手が攻撃者で、受け手に支払いを済ませたとしばらくの間信じ込ませたのちに自分に払い戻そうとしていると仮定する。その場合受け手はアラートを受信するが、送り手(攻撃者)はその時点ですでに手遅れとなっていることを望むものとする。
受け手はパブリック・キーを作成し、電子署名する直前にそれを送り手に送る。これにより、送り手が前もって偽のチェーンを用意しておきパブリック・キーが送られてきた瞬間に偽の取引を行うことを防止できる。取引が送信されるやいなや、不正な送り手(攻撃者)は密かにもう一つのバージョンの取引を含んだパラレル・チェーンの作成に取りかかる。
受け手は自分の取引がブロックに加えられ、z 個のブロックがその後にリンクされるまで待つ。受け手には攻撃者の正確な進捗は分からないが、正当なブロックが平均的な時間で作成されたと仮定すると、攻撃者の進捗は以下のポアソン分布の期待値で求められる:
攻撃者がこの時点で追いつくことのできる確率を求めるには、彼の行うことのできた仕事量あたりのポアソン分布密度を、その時点での追いつくことができた確率で掛ける。
分布の無限テールの加算を避けるために整理すると…
Pが0.1%以下の時について値を求めると…
P < 0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
解説
攻撃者ノードが偽のブロックを作ったとしても、他のノードはそのブロックの正当性をチェックして拒絶するため、そのブロックは承認されない。したがってコインを無から創り出したり攻撃者自身が所有したことのないコインを使ったりすることはできない。
しかし、自分の支払った取引記録を書き換えることは可能である。持ち主の電子署名がある取引は正当なブロックとしてみなされる。
ただしこの場合でも、書き換えたブロックがブロックチェーンの一番長いものである必要がある。このため書き換えたブロックに次のブロックをどんどん付け加えて、正当なブロックチェーンよりも長くのばさなくてはならない。
このような攻撃が成功する確率を、計算したところ、p>q すなわち攻撃者が少数派である限り、ブロックが付け加わる毎に攻撃成功の確率が低くなる。攻撃者のCPU能力が他のノード全体のCPU能力の10%である場合、z=5 すなわちブロックが5つ付け加われば、攻撃者の成功確率は0.1%以下となる。
この記事が気に入ったらサポートをしてみませんか?