銀行システムとはどのように違う? トラストの有無と攻撃リスク|ビットコイン(BTC)プロトコルのセキュリティ編①

本稿は、コラム連載企画の4回目の記事です。前回の記事は以下からご覧ください。

前回の記事紹介
前回の記事では、ビットコインのマイニングとトランザクションの仕組み、どのように二重支払いを防止しているかについて解説しています。
ビットコイン(BTC)安全性の確保と価値の担保の仕組み|仮想通貨プロトコルの概要編③

本連載は論文の翻訳そのままではなく独自の解説を行っていますが、各章のタイトルには論文と対応する番号を振っていますので参考にしてください。

Bitcoinプロトコルのセキュリティ

ご存知のように、Bitcoinはユーザー間でそれぞれに価値の交換、つまり取引が行えるようにすることを目的とした仮想的な通貨です。

ユーザーはスマートフォン、パソコン、あるいはUSBの専用デバイスかもしれませんがBitcoinを保有する際、端末に秘密鍵を保管します。この秘密鍵を、取引先やほかの人に開示することなく取引ができるというのがBitcoinの強みです。

なお、本稿は論文をベースにしているため、論文で対象外としているシナリオ、例えばウェブウォレットや取引所のように秘密鍵を自身で保管しない場合は除きます。

多くの場合、そういったシステムではユーザーに多要素認証を課しており、各ユーザーのトランザクションは自動的に生成される仕組みになっているはずです。

しかし一方で、自分で秘密鍵を管理する場合と比べて、被攻撃領域、つまり攻撃を受ける可能性は、既存の銀行システムと同じようなレベルになってしまいます。

2.1 Bitcoinと銀行システムの比較

ここでは、Bitcoinと既存の銀行システムの違いを取り上げ解説したいと思います。

既存の銀行システムにおいては、システム管理者をターゲットとしたフィッシング(水飲み場攻撃)などが一般的に知られていますが、仮想的な通貨であるBitcoinの世界では全く異なった設計になっています。
もちろん攻撃が全くないわけではありませんが、被攻撃領域、つまりどのような攻撃を受ける可能性があるか、という点は考えておくべきです。

ネットワークアーキテクチャ

大きな違いは、既存の電子的な銀行システムでは旧来のクライアントサーバーモデルになっているのに対し、Bitcoinはピアツーピア(P2P)のモデルを採用している点です。

既存の銀行システムの場合、サーバーが顧客のすべてのデータをデータベース上で管理し、顧客のリクエストに応じてアップデートを行います。

このように、データベースにビジネスロジック(例えるなら月末締めなどの定期処理など)を一元的に実装できることは良い面もありますが、一方でデータベースサーバーが停止するとビジネスも止まってしまいます。これは単一障害点(SPOF)と呼ばれます。

もちろんバックアップをとっていたり、待機系に切り替えて即座に処理を継続できたりすると思いますが、時折、そのバックアップや待機系に不備があったり、問題が複数のサーバーに波及したりすることすらあります。

また、攻撃は外部からだけでなく内部の社員による行為の可能性もあり、もし防御が完璧だったとしても完全に防ぐことはできません。そして、そもそもゼロデイといった未知の攻撃を受ける可能性は否定できず、完璧な防御というものはありえません。

BitcoinではP2Pモデルを採用しているため、秘密鍵を盗まれるというのが利用者にとって最悪のケースですが、これによって他の利用者がサービスを使えなくなったり、秘密鍵を盗まれたりするといったことはありません。盗難などの攻撃は個別に発生するだけの事象なのです。

また、銀行システムでは DDoS(Distributed Denial of Service)攻撃を受けたとき、集中的に管理されているという性質のため、そのサービスに大きな影響があります。

攻撃によって膨大な量の通信パケットが届き、それを処理するためのネットワークやサーバーが高負荷に耐えられなくなると、サービスは遅くなったり、あるいは止まってしまうかもしれません。ときに攻撃者は脅迫を行い、支払いを行わないとDDoS攻撃を行うとサービス運営者を脅すこともあります。(一般に、Bitcoinなどの仮想的な通貨を要求します)これを防ぐことは簡単ではありません。

DDoS攻撃ではDistributedという単語が示すように、分散した場所から沢山の機械を使って通信を送ります。この大半はマルウェアに感染してしまい乗っ取られたコンピュータやルーター等であり、個別に防ぐことは困難です。

Bitcoinでは、やはりP2Pモデルにより、サービスを構成するノードは世界中に分散されているため、サービスを止めようとすると全ノードに多量の通信パケットを送り付けなければなりません。これは現実的な攻撃手段ではないのです。

信頼の有無

銀行システムは、人々が信頼することで成り立っています。

旧来のシステムでは便利な部分もあります。銀行が悪用を検知して自動で口座を止めたり、犯罪者の行為を発見して対処したり、監査だって行っているでしょう。

しかし、実際にそういった行為が発生するかどうかはともかく、社員が口座情報を悪用する可能性は否定することができません。加えて、監査が完璧である保証もありません。監査のための記録自体が、権限を持つ人間によって改ざんされている可能性は否定できず、顧客がそれを確かめる術もありません。したがって、突き詰めて言えば顧客が銀行システムを信頼しているからこそ、システムが成り立っているのです。

一方でBitcoinはどうでしょうか。Bitcoinでは信頼が不要な仕組みになっています。

たくさんのノードが協調して動作しており、マイナーが計算を行って結果を算出し、それをブロックとして積み重ねていくことで改ざんが困難になっていきます。

人が介在しないので内部で悪用するケースは発生しないのですが、例えばノード側で何か悪いことを考えたとしましょう。簡単な例として、とあるお店Aに嫌がらせをしたいと思います。

ノードはマイニングができたときにトランザクションを集めてブロックを生成しますが、ここにAのトランザクションを含めないようにします。しかし、こういった嫌がらせは嫌がらせ以上の意味を持ちません。なぜなら、お店Aは新しいウォレットアドレスを生成するだけで、そういった嫌がらせを回避できてしまうからです。

まとめ

既存の銀行システムとの比較について、二つの視点から解説を行いました。
次回は、続けて残り2つの視点、フィッシングや DNSハイジャック、そしてユーザビリティについて見てみたいと思います。

坪 和樹


クラウド業界で働くエンジニア、アイルランド在住。
MtGox や The DAO では被害を受けたが、ブロックチェーンのセキュリティに興味を持ち続けている。セキュリティカンファレンスでの講演、OWASP Japan の運営協力や Mini Hardening といったイベント立ち上げなど、コミュニティ活動も実績あり。

フィッシングやDNSハイジャックの手法とは? 敵の手口を知って資産防衛|ビットコインプロトコルのセキュリティ編②

次回記事では、今回に続きビットコインと銀行を比較した上での、システムへの攻撃手法について詳しく解説していきます。フィッシングやDNSハイジャックなど、攻撃者の手段を知ることは自身の資産を守る上で重要になってくるでしょう。

スポンサーリンク

Posted by k.kamoda