連載
» 2016年03月01日 05時00分 UPDATE

Tech Basics/Keyword:ブロックチェーン

分散型の仮想通貨システムBitcoinで使われているブロックチェーンの概要を解説。通貨だけに限らず、さまざまな分野での利用が期待されている。

[打越浩幸,デジタルアドバンテージ]
Tech Basics/Keyword
Windows Server Insider


「Tech Basics/Keyword」のインデックス

連載目次

 「ブロックチェーン(block chain)」は、分散型の仮想通貨システム「Bitcoin」で使われた、トランザクション履歴を管理するための技術。中央集中型のシステムを使わずとも、安全で信頼性があり、安価なコストで、世界中のどこからでも簡単に使える仮想通貨を実現するための基幹テクノロジーとして注目されている。金融/通貨に限らず、さまざまな分野での応用が期待されている

 本記事では、Bitcoinにおけるブロックチェーンの基礎を解説する。

Bitcoinとは

 「Bitcoin」は、一般の銀行や金融機関のような集中的な管理機構を持たない、分散型の仮想通貨システムである。全ての取引はP2P(Peer to Peer)技術を使った分散ネットワーク上で行われる。取引の実行や取引履歴の保存などはBitcoinネットワークに参加している全てのノードが相互に協力しながら行うため、システムのダウンで使えなくなるということはない。またコストも安価、そしていつでもどこでも、たとえ国境を越えた場合でも、取引を実行できる*1

*1 Bitcoinでは「BTC」という単位の仮想通貨を扱う。だが、現実の通貨との交換などの機能はBitcoinの仕様には含まれない。Bitcoinの取引所などでは現実の通貨と交換できるし、Bitcoinの“相場”もあるが(2016年2月時点では1 BTCは400ドル前後)、ここでは触れない。


 このようなシステムを実現するためにBitcoinでは、過去の全ての「トランザクション(取引)」の履歴を各ノードに持たせている(ウォレット機能しか持たない軽量ノードなどは除く)。これにより、あるユーザーの口座にいくらの残高があるのか、過去にどのような取引が行われたのかなどが、この履歴をたどることによって、いつでもすぐに分かる(軽量ノードの場合は一部のヘッダ情報しか持っておらず、必要ならネットワークに問い合わせて情報を取得する)。ちなみに原稿執筆時点では、このトランザクションの合計ログサイズは60GB強になっている。

 とはいえ、全取引を1つのデータベースシステムなどで保存するのではなく、「ブロック」という小さなサイズに分けて管理している。ブロックのサイズは(現在は)最大1MBで、1つのブロック内には500〜2000トランザクション程度が記録されている。これをリンクで数珠つなぎに接続して管理するので「ブロックチェーン」と呼ばれている。

ブロックチェーンでトランザクションを管理するBitcoin ブロックチェーンでトランザクションを管理するBitcoin
Bitcoinでは過去のBitcoinの残高やその取引の記録(トランザクション)をすべてブロックチェーン上に保存している。新しいトランザクションが発生すれば、それをブロックにまとめて、チェーンの末尾に順次追加する。中央集中型の管理システムを持たない完全な分散型のネットワーク上で、どうやってブロックチェーンのデータを保持したり、トランザクションを処理するのか、データの一貫性の維持や不正な改ざんなどからの防御はどうするのか、などがBitcoin(ブロックチェーン)技術の核心である。

 このブロックチェーンには、取引データを分散管理したり、改ざんを防ぐためのさまざまな対策が施されている。

Bitcoinウォレット

 「ウォレット」とは、Bitcoinの仮想通貨を入れておくための口座であり、通常は「1JhiSm453fvfxx93sfe……」のような「Bitcoinアドレス(ハッシュ値*2」が付けられている。

*2 「ハッシュ値」とは、あるデータブロックの内容を短く表現した数値情報のこと。例えばデータブロックの内容を全て加算したりXOR演算したりして、32bitの固定長のデータに変換する。すると、2つのデータブロックの内容が等しいかどうかを、ハッシュ値を比較するだけで素早く判断できるようになる。ハッシュ値が同じになるようにデータを偽造するのは困難なので、改ざんされていないかどうかのチェックなどにもよく使われる。BitcoinではSHA-256とRIPEMD-160を使用している。


 なお正確には、ウォレットに保存されているのは「×× BTC入っている」といった情報ではなく、「○○から△△へ×× BTC送金された」というトランザクションの記録である。Bitcoinでは、BTCを全てトランザクションの連なりとして扱っている。例えば「3 BTC入金された」という記録があるが、出金の記録がなければ、ウォレットには3 BTCあると判断できる。

トランザクションとその確認

 Bitcoinのトランザクションとは、「あるBitcoinアドレスから指定したBitcoinアドレスに対して、××× BTCを送金する」といった指示のことである。Bitcoinを送金するユーザーと受け取るユーザーが同意すれば、Bitcoinクライアントなどを使って送金を指示すればよい。送金先がオンラインなら、送金したBitcoinはすぐに相手(のBitcoinアドレス)に到着するだろう。

Bitcoinウォレットアプリ Bitcoinウォレットアプリ
これはAndroid版のBitcoinウォレットアプリでBitcoinを送金しようとしているところ。「mBTC」は1000分の1 BTC。ローカルにウォレットを持たず、Bitcoin取引所(のウォレット)を使うならWebブラウザでもよい。

 ただし、これだけではまだ完了ではなく、トランザクションをBitcoinのネットワークで「確認(confirmation)」してもらわなければならない。確認とは、そのトランザクションが正当なものであるとBitcoinネットワークが認識し、ブロックチェーンの末尾にトランザクションを追加して、そのブロックが以後改ざんされないように保証する、という処理のことである。状況にもよるが、この処理に10分ほどかかる。

トランザクション内容の確認

 Bitcoinの送金処理を行うと、そのデータはP2Pネットワーク全体にも送信され、トランザクションデータの正当性が各ノードによって検証される。以下はその一例だ。

  • トランザクションデータは正しいか: ウォレットやトランザクションは公開鍵暗号などで署名されているが、それが改ざんされていないか
  • 送信元のBitcoinの所有者は正当か: 他人のBitcoinを送信しようとしていないか
  • 既に完了したトランザクションと重複していないか: 同じ要求を再送していないか

 正しいトランザクションであると確認されたら、次のようにして、ブロックチェーンへの追加処理が行われる。

新しいブロックのマイニングとブロックチェーンへの追加

 トランザクションの確認やブロックの追加は、Bitcoinネットワークに接続されているノードのうち、CPUパワー(計算能力)があって、新しいブロックを「マイニング(mining、採掘)」できたノードが自動的に行う。

 Bitcoinで新しいブロックをマイニングするには、ネットワーク全体のノードの51%以上の計算能力が必要なように、調整されている。これを「Proof of Work」という。不正なノードが悪意のあるブロックやトランザクションなどを追加してBitcoinシステムを乗っ取ってしまわないようにするためである。過半数を維持できれば、不正なマイニングを行うシステムよりも先に新ブロックを見つけることができ、ネットワークの正常性を維持できるだろう。

 実際のマイニングでは、トランザクション要求を集めて新ブロック用のひな型を作り、そのハッシュ値を計算する。このとき「nonce(number used once)」と呼ばれる32bitの整数値を変更させながら、ハッシュ値がある状態(例:256bitのハッシュ値のうち、先頭から64bit以上、0が連続する状態)になるようなnonce値を求める。

 この処理には多大な試行が必要になるため、新しいブロックを採掘できるのは約10分に1回程度である。計算時間はコンピューティング技術の向上と共に短縮されるものの、それに応じて目標値も自動的に上げるように設計されているので、新ブロックの追加にはいつも10分程度の時間がかかるようになっている。

 新しいブロックが見つかれば、それをブロックチェーンの末尾に追加してネットワーク全体に送信する。チェーン内のブロックには、直前のブロックを表すハッシュ値などが含まれているので、後ろに新ブロックが追加された時点で、そのブロックの改ざんは非常に難しいものになる。ハッシュ値を変更させずにブロックの内容を偽装するのは困難だからだ。これにより、先ほどの「未確認」状態だったトランザクションは「確認済み」状態になる。

ブロックの追加 ブロックの追加
ブロックチェーンの末尾に新しいブロックを追加することをマイニングという。新しいブロックを追加するには、未確認状態のトランザクションを集めて、さらにブロックのハッシュ値がある特定の条件を満たすようなnonce値を求める必要がある。一番早くマイニングが完了したブロックだけが正規のチェーンに追加でき、その報酬を得られる。ブロックの追加は、平均して10分に1回程度行われる。

 新しいブロックを採掘できた場合はその報酬として、25BTCが採掘者に譲与される(これは現在の報酬。だいたい4年に1回、半減することになっている。2016年中には12.5BTCになる予定)。これがわざわざ計算能力を強化してまで採掘に励むインセンティブとなっている(ブロック内のトランザクションからも若干の手数料がもらえる)。発行済みのBTCの総量は、この採掘によってのみ増加する。採掘というと、金鉱山でも掘り当てるというような、ややネガティブなイメージを持つかもしれないが、Bitcoinのブロックチェーンにとっては、トランザクションを記録するために必要な基本的な処理である。

ブロックの分岐と破棄

 以上のようにして、約10分ごとに1つ新しいブロックが順次追加され、ブロックチェーンが長くなっていく。だが、場合によってはブロックが分岐してしまうこともある。離れた場所にある2つ以上のノードが、同時に新ブロックの追加作業を行ってしまうことがあるからだ。

 ブロックの分岐が検出された場合、Bitcoinでは長い方のチェーンを採用して、短い方の枝は削除することになっている(削除する枝にしかないトランザクションは正しいチェーンに入れ直す)。この仕組みにより、分散環境でも正しくブロックチェーンを維持できる。また不正なブロックが追加されたとしても、計算量の関係で正当なチェーンの方が早く伸び、不正なチェーンが使われることはないだろう。

ブロックチェーンの分岐 ブロックチェーンの分岐
同時にブロックを追加するなどして、ブロックチェーンが2つに分岐した場合は、そのままにしておき、次にブロックが追加された時点で短い方を破棄する。

 このように、時々最後に追加されたブロックが破棄されることがあるので、重要なトランザクションの場合は(送金BTCの量が多い場合や、取引所などで実際の現金と交換したりする場合などは)、確認作業を何回か繰り返してから(該当のトランザクションが含まれるブロックの後ろにさらに何ブロックか追加されてから)確定扱いにすることがある(例:「3 確認したら完了とみなす」、など)。

Bitcoinを越えて

 以上がBitcoinのブロックチェーンの概要である。分散ネットワーク環境でも、ブロックチェーンという仕組みを使えば、十分に実用的な電子通貨システムを構築できることがBitcoinによって実証された。

 だが、ブロックサイズが最大1MBと小さく、今後のトランザクション数の伸びに追い付かないとか(採掘が間に合わないとトランザクション処理が待たされる)、採掘に掛かるコストが高すぎる(今後はさらに計算能力が要求されるが、報酬額は次第に減額される)など、いろいろと懸念事項もある(ニュース記事「ビットコインは『失敗した』 離脱を表明した主要開発者が語る、その問題点」参照)。

 現在では、Bitcoinで得られたブロックチェーンの知見を応用して、異なる通貨システム(総称して「Bitcoin 2.0」などと呼ばれることがある)を構築したり、通貨に限らずさまざまな分散型のアプリケーションへの応用などが模索されたりしている(関連記事参照)。

■関連リンク


■更新履歴

【2016/03/01】Bitcoinの概要解説図「ブロックチェーンでトランザクションを管理するBitcoin」を追加しました。


「Tech Basics/Keyword」のインデックス

Tech Basics/Keyword

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。