bitcoin_mark

連載『bitcoinに迫る!』第3回 ~敵を味方に変える保護メカニズム~

  • このエントリーをはてなブックマークに追加

by [2013年12月05日]

前回の記事ではbitcoinの信頼性を確保するための仕組みを見ました。

今回はbitcoinの二重利用などの不正・異常に対応するための仕組みについて考えてみたいと思います。

二重利用を防ぐためのメカニズム

実体を持たない電子コインによる仮想通貨の取引で重要な課題の一つに、その仮想通貨が二重に存在することを防ぐメカニズムの実装があります。

データとしては容易に複製可能な電子コインを、最初に取引に用いられたものを固有の存在として扱い、それ以降複製されたものの流通を拒否するのは、実際の通貨で偽金の流通を防ぐのと同様、通貨の信用を保つために必要なことです。

そこでbitcoinでは、電子コインの最初の流通とこの二重利用を防ぐのを目的として、proof of workと呼ばれるシステムを導入しています。

これはまず、タイムスタンプ、つまり作成された時間の情報を付与されたデータブロックについてハッシュ関数を用いてハッシュ値(要約値)を生成し、それをネットワーク上で広く公開することを基本としています。

プルーフ・オブ・ワークの概念図
bitcoinのタイムスタンプネットワークでは、新しいデータブロックがタイムスタンプごと前のデータブロックのハッシュ(Prev Hash)を取り込んで構成されるため、途中の特定のデータブロックのみを改竄しても、前後関係で矛盾が生じるためネットワークから排除される。

このハッシュ値は次にデータブロックから新しいハッシュ値を生成する際に、そのデータブロックの一部として含まれることになるため、ハッシュはそれぞれのデータブロック作成時のタイムスタンプ情報を含んだ形(チェイン構造)で連鎖的に生成されることとなり、途中だけ改竄することを難しくします。

というのも、途中のある時点について改竄を行うには、タイムスタンプの連鎖について前後の依存関係に矛盾が生じないよう、チェインの先頭にまで遡って全てのハッシュを再計算して生成し、該当する全てのブロックを上書きせねばならないためです。つまり、bitcoinはたとえ局所的にデータを改竄したとしても過去の取引で依存関係が存在しており、しかもそのデータは公開されているため、現在のデータだけ書き換えても過去データに矛盾が生じるため改竄の発見は容易なのです。

この仕組みにより、データの改竄により利益を得ることをを企てる悪意ある攻撃者は、bitcoinの善良な利用者たちの保有するマシンのプロセッサパワーを大幅に上回る処理能力を備えたマシンを用意せねば、それらの善良な利用者達のマシンによって生成される「正しい」タイムスタンプを備えたブロックを追い越して「正しい」タイムスタンプを備えたデータブロックになりすませるデータブロックの生成ができず、このP2Pネットワークに接続する全マシンのデータブロックを書き換えて目的を達成することもまたできません。

これは、bitcoinのP2Pネットワークに参加する各マシンは異なる2つのタイムスタンプを持ったデータブロックを受け取った場合、より長いタイムスタンプの連鎖を持つ方のデータブロックを残し、またブロックにエラーがあった場合そのブロックの受け入れを拒否するという動作をするため、善良な利用者達のマシンによる「正しい」タイムスタンプの連鎖より長く矛盾のないタイムスタンプの連鎖を生成できない限り、悪意ある攻撃者は改竄の目的を達することができないためです。

bitcoinにおいて、このタイムスタンプの連鎖を用いて行われる各データブロックのプルーフ・オブ・ワーク(proof of work)と呼ばれる特別なハッシュ値の算出作業は、「正しい」タイムスタンプのものを生成する場合ですら桁外れに膨大なマシンパワーを要する処理であり、しかもその計算の難易度は単位時間あたりに生成されるブロック数を一定に保つ=bitcoinの生成速度を一定に保つため、このP2Pネットワークでproof of workの計算作業に参加するマシンの計算速度が高くなればなるほど自動的に計算の難易度を引き上げる、という実にいやらしい(けれども非常に合理的な)動作をするようになっています。

ちなみにこの処理は本当に桁外れの数値、具体的には最大で2の64乗ビット、つまり1844京6744兆737億955万1616ビットもの大きさの原データから、SHA-256と呼ばれる256ビットのハッシュ値を算出するための計算アルゴリズムを用いて計算するのですが、何しろ扱う桁数が天文学的であるため、必要な値が得られるまで延々と膨大な量の数値計算を続ける必要があります。

最大の防壁は人間の欲を逆手に取ったものだった

こうした、proof of workのための膨大な演算リソースの必要性は、bitcoinのP2Pネットワークが充分大きくなっていない初期段階では、別の理由でも悪意ある攻撃者によるデータブロック改竄を防ぐ最大の防壁となるように計画されています。

なぜなら、特に初期段階ではproof of workのための計算の総量が充分多くなっておらず、悪意ある攻撃者によるデータブロック改竄が成功する危険がわずかながらあったためです。

GUIMiner
bitcoinのマイニングに使用されたソフトの一例。ご覧のように、Deivce欄で演算処理に割り当てるプロセッサ(GPGPUあるいはCPU)を、さらにCPUの場合は演算処理に割り当てるCPUコア数(画像の例では12コア中8コア)を、それぞれ指定できるようになっており、マイニングが非常に「重い」演算処理であることを物語る。当然ながら投じるプロセッサパワーが大きければ大きいほど、得られる見返りとしてのbitcoinの数も多い。つまり、最初期に大きなプロセッサパワーを投じた者ほど(タイムスタンプネットワークの確立とその維持拡大に貢献することで)効果的に利益を得られた。

それゆえ、「マイニング」と呼ばれる初期データブロック作成を目的としたproof of workの計算作業の負荷が低かった最初期においては、この「マイニング」を行った=初期のタイムスタンプネットワークの維持拡大に大きな貢献をなした利用者に与えられる報酬(電子コイン)の生成速度がそれ以後よりも大きくなるように設定されていました。

つまり、莫大な手間暇をかけてデータ改竄を行えるマシンパワーがあるのならば、「マイニング」と呼ばれるビットコインの最初のデータブロックを生成する作業のためのハッシュ値計算作業に手持ちのマシンに備わった全プロセッサパワーを投じた方が、よほど得られる利益(=bitcoinの電子コインの数)が大きくなるように設計されていたのです。

データブロック改竄の攻撃を成功させる可能性があるだけの大きなプロセッサパワーを保有している攻撃者は、言い換えれば「マイニング」の作業において、bitcoinのP2Pネットワークに参加する他のどのユーザーよりも大きな額のbitcoinを得ることのできる、高性能なハードウェアを保有している人物でもあります。

そのため、計算量に比して得られるbitcoinの数が非常に大きく設定されていたこの時期に、そのような高性能なハードウェアを保有していながらマイニングへ持てるプロセッサパワーを投入せず無益なデータ改竄に精を出す、という判断を行う人物がいたとしたら、その人物はよほど愚かであるか、さもなくばひどく歪んだ心証を備えた破滅型の愉快犯の類であり、仮にいたとしても少数にとどまるだろう、ということになります。

また、そもそもデータブロック改竄は既に存在する、つまりそのデータブロックの連鎖の最初の時点で既にbitcoinは生成済みであるため、改竄を行って得られる利益はほとんどありません。

もし誰かがデータブロック改竄に成功したとしても、中本論文でも指摘されているように「攻撃者にできるのは自身の取引記録を書き換えることで、最近支払った金額を取り返そうとすることだけ」なのです。

そのため、恐ろしく大きなプロセッサパワー(および電力)を消費する割に得るところの少ないデータブロック改竄に精を出すくらいならば、(少なくとも初期段階では)「マイニング」にそのプロセッサパワーを全て投じて初期のデータブロック生成による報酬としてbitcoinを受け取ることを選ぶはずだ、とする中本氏が論文で示した洞察は、熟練のハッカーおよびクラッカーの心理およびその行動をよく理解した人ならではのものと言えます。

中本氏の正体については幾つかの説が唱えられているようですが、こうして攻撃者となり得る人物の心理に踏み込んで考察し、彼らすら利益提示によりbitcoinを成立させるためのP2Pネットワーク強化の協力者に仕立て上げ、(恐らくは)bitcoin唯一の弱点を攻撃から守るのに利用しようとする洞察の深さや大胆不敵さは、この謎に包まれた人物のプロフィールがうっすらと透けて見える部分です。

次回は、bitcoinの普及・流通がもたらすものについて考えてみたいと思います。

コメントは受け付けていません。

PageTopへ