前回のおさらい
今から約14年前の2008年10月31日、国家や銀行のような仲買人を必要としない「P2Pで支払いが完了する電子通貨システムのコンセプト(Bitcoin)」が、サトシ・ナカモト氏より発表されました。そして2013年12月、トランザクション(取引履歴)上でのプログラマブルな制御、つまりスマートコントラクトが提唱され、通貨システムの枠を超える「分散コンピューティングプラットフォーム」としての可能性がEthereumにて示唆されました。このBitcoinとEthereumの中心技術が、このTechblogでご紹介する「Blockchain」となります。
Blockchainとは(超ざっくり言うと)
Blockchainは分散台帳管理システムとも呼ばれ、所謂、商取引を記す台帳の1つとなります。この台帳は過去から成長し続ける膨大な台帳にも成り、全てのトランザクション(商取引)、つまり、「誰が・何を・誰から・幾らで買った」の情報を永久に記しておくことが出来ます。この台帳はクロノロジカル(年代順)に記されており、改竄が不可な特性を持っています。
<Blockchainの特徴>
成長し続ける台帳
全てのトランザクション(商取引など)を永久に記す
クロノロジカル - 年代順、過去から現在に至る全てのトランザクションを記す
セキュア - 不変、改竄不可
Blockhainを構成する5つのファンクション
これらBlockchainが持つ特徴は、特に改竄が絶対に不可である特徴は、どのように実現されているのでしょうか?答えは、Blockchainが持つ以下5つのファンクションで説明が出来ます。
Hashアルゴリズム
マイニング
改竄不可性
P2P分散ネットワーク
コンセンサス・メカニズム
それでは、1つ1つを詳しく見ていくこととしましょう。
機能1 - Hashアルゴリズム
1つめの機能は「Hashアルゴリズム」です。Hashは、あるデータを(例えば、ドキュメントのような意味を持つデータを)よく解らない文字の羅列に変更する事が出来ます。このHashには幾つか特性があります。
一方向性
Hashは常に一方方向で作用します。つまり、ドキュメントから生成されたHash値から元のドキュメントを作成することは出来ません。あくまで一方向(データからHashを作るだけ)で作用します。Deterministic(決定論的)
HashはDeterministic(決定論的)な特徴があります。つまり、同一のInputデータに対しては常に同じ値を返します。素早い計算結果
計算が素早いのもHashの特徴でして、何かしらのInputデータをHash関数に渡すと、直ぐに乱数を返してくれます。Avalanche effect(雪崩効果)
これは、Inputデータを少量でも変えると、OutputのHash値が大幅に変わる特性となります。
衝突耐性
異なるInputから同じHash値が生成されません、つまり、Hash値は必ず一意、オリジナルである、という特性となります。
実践1 - Hashアルゴリズム
それでは実際のHashの動きを見てみましょう。
上記の動画は、インターネット上に公開されているToolでHashの動きを確認しています。(皆様も是非、ご自分で試してみてください。)
<動画説明>
先ず、入力部分に「Hi all!」と入力しています。このように何か入力すると、直ぐにその入力値に応じたHash値を返してくれています。
入力部分を「Hi all!??」と少し変更すると、Hash値が大幅に変化することが分かると思います。これがAvalanche effect(雪崩効果)となります。
Blockchain : Hash - 繋ぎ(Chain)
次に「このHashをどのようにBlockchainで使っているか?」を説明したいと思います。Blockchainでは、前BlockのHash値をInputに含める事で、各Blockを暗号的に繋ぎ合わせています。この前BlockのHashで各Blockを数珠繋ぎにする事で、Blockchainと呼ばれています。この数珠つなぎにする所の意味合いについては、後ほどご説明いたします。今のところは、各ブロックがHash値による繋がっている(チェーンされている)、と言うことをイメージとして理解してください。
機能2 - マイニング
Blockchainでは、各Block内の計算結果として生成されるHash値に制限を設けています。先頭数桁の数値が0である必要がある、このような制限です。しかし、Hashの値はInputデータ毎に一意なものです。Hashの1つの特性であるDetermistic(決定論的)な特性があるため、あるInputに対してHashは常に同じ値として生成されます。そのため、この先頭4桁の0の条件をクリアするには、Inputデータを変更する必要があります。しかし、当然、商取引記録に相当するトランザクションデータを変更するわけにはいきません。その為、Blockchainでは、ナンスと呼ぶデータをInputデータに追加しています。
そして、このナンスを適時変更する事で、Hash値の先頭数桁が0とする制限を達成しています。
Hashは一方向性を持つので、Hash値の制限を満たすInputデータを、つまりナンスを探すのは、巨大な山から1粒の金を掘り当てるようなもので、非常に骨の折れる仕事です。Blockchainで言うマイニングは、このナンスを探し出す作業を表します。
実践2- マイニング
<動画説明>
先ず試しに、Nanceに '“1234abc” と値を入れてみます。
Blockナンバー、Nance(1234abc)、Data、Previous Hash、これらのデータをInputとして、Hash値が計算されます。
結果、Nance “1234abc” ではHash値が “9987667” となり、先頭4桁0の制限を満たせずNGとなります。
では次に、Nanceに ”85493df” を入れてみます。
同様に、このNance(85493df) ではHashが “89087667“ となり、条件を満たせずにNGとなります。
Nanceに ”34ac34” を入れてみます。
同様に、このNance(34ac34) ではHashが “68087dd7“ となり、条件を満たせずにNGとなります。
では、Nanceに ”9485df5” を入れてみましょう。
結果、Hash値が “000072a7“ となり、先頭4桁を0とする条件を満たすことが出来ました。
この正しいNance(000072a7)を見つけることが出来た人が今回の勝者であり、報酬(暗号通貨)を獲得出来ます。
同様にインターネット上に公開されているToolでマイニングの動きを確認することが出来ます。以下では “Hi all,” と “Hi all, have a good day!” を入力値とした時のマイニング(Nanceを探す作業)を確認しています。
機能3 - 改竄不可性
次は改竄不可性(Immutability)の説明となります。Hashの説明の際に、前BlockのHashを現BlockのInputに含める事で互いに暗号的につなぎ合わせている、と説明をしました。また、マイニングでは、Hashに制限(先頭4桁が0)を設けていると先ほど説明しました。この2つルール、つまり制限付きHash値で互いを結ぶ事で、改竄不可を達成しています。
この動きは実際に動作を見てもらうのが早いので、以下の動画をご覧ください。
<動画説明>
このBlockchainは、3から6まで、正常にTransactionが記録されています。
各Blockは前HashをInputに入れ、そしてナンスを計算してHash値の制限をクリアしています。
ここで、悪意のある人がBlock4の商取引を改竄したとします。
するとInputデータが変わったので、雪崩効果もありHash値は大幅に変わります。
そのほぼ全てのケースが、先頭4つが0の制限を満たせない事になります。
その為、このBlockは無効となります。
そして、Block4のHashが変わったので、Block5のPrevious Hashも変更されます。
そして同様にHashの再計算が走り、このBlockも制限を満たせませんので無効となります。
同じ事が、Block6でも発生します。
このようにして、Blockchainでは改竄不可性を実現しています。この改竄不可性(Immutability)も、このページでご自身にて確認出来ます。
機能4/5 - P2P分散ネットワークとコンセンサス・メカニズム
最後に、P2Pネッットワークとコンセンサスメカニズム、となります。
P2P分散ネットワーク
P2Pはもう説明の必要が無いかと思いますが、各Nodeが繋がり同期する事で同じ台帳を保持する、という事になります。
コンセンサス・メカニズム
例えば、あるNode上でトランザクションが改竄されたとします。通常は先の改竄不可性(Immutability)で直ぐに発見できるのですが、以下のようにNanceを「計算し直す」という事も出来ないわけではありません。
しかし、Blockchainが持つコンセンサスメカニズムにより、この取り組みはWorkしません。ビサンチン将軍問題、とも呼ばれているのですが、ざっくりいうと、多数決で各NodeはBlockの正常性を判断します。そのため、この単一のノードから来た、再計算された一応制限がクリアされたBlockは、事実上、無視されます。
まとめ
Hashは一方向性関数。あるデータを元に乱数を導き出すが、その乱数から元のデータに復元することは出来ない。また、Deterministic(決定論的)で対衝突性な特性を持ち、同一のデータからは常に同じHash値を生成するが(決定論的)、異なるデータから同一のHashを生成することはない(耐衝突性)。
前ブロックのHash値を組み込むことで、各ブロックを暗号的につなぎ合わせている(Blockchain)。
マイニングは制限付きHashをクリアするためのNanceを探し出す作業。
制限付きHashで各Blockを繋ぎ止める事で、改竄不可性を実現している。
さらに、P2Pネットワークの同期性とコンセンサス・メカニズムにより、改竄不可性をより強固としている。
おまけ:カリスマたちの言葉
Trust is the new currency, blockchain will enable that trust.” —Tim Vasko, Founder BlockCerts International
信頼こそが新たな通貨、そしてBlockchainがその信頼を可能にする。-ティム・バスコ、BlockCerts International設立者
“We have elected to put our money and faith in a mathematical framework that is free of politics and human error.”
我々は、政治だったり人為的なミスが全く無い「数学的な枠組み」に、お金と信用を置くことにした。-テイラー・ウィンクルボス、Winklevoss Capital設立者、Facebook共同作成者
“The main event isn’t bitcoin. It’s using the blockchain to disrupt other industries and Wall Street.”
Bitcoinが重要なんじゃないよ。Blockchainを使っていて、それで他産業やウォール・ストリートをぶっ壊せる事が重要なんだ。-パトリック・M・バーン、Overstock.com CEO