Translate

2018年8月8日水曜日

仮想通貨を理解する(7) ーブロックチェーン

1 ブロックチェーンと仮想通貨は別

 ブロックチェーンは、最初の仮想通貨であるビットコインに使われた技術です。仮想通貨を設計するうえで、ブロックチェーン技術が考えられたようです。ということは、サトシ・ナカモトが考えたということだと思います。
 ブロックチェーンは、仮想通貨のために考えられた技術ですが、仮想通貨以外にいろいろな使い道があるとされています。それをブロックチェーン2.0と呼ぶそうです。

2 仮想通貨には、暗号技術とブロックチェーン技術が使われている

 仮想通貨とブロックチェーンは切っても切れない関係なので、仮想通貨の説明をしているのか、ブロックチェーンの説明をしているのか区別がつかないことがあります。これをあえて分けて説明するとすると、仮想通貨は、暗号化技術とブロックチェーン技術の組み合わせである、ということが言えそうです。すでにお話したマイニング(取引の承認)は、ブロックチェーンのproof of workに対応しますが、仮想通貨におけるマイニングは、proof of workに、仮想通貨のエコシステムが自律的に稼働するようなインセンティブの意味合いがあります。

 このため、マイニングは仮想通貨独自の仕組みですが、それを一般化したのがproof of workということになり、これはブロックチェーンの重要な機能の一つです。

3 仮想通貨に使われている暗号化技術とは

 ブロックチェーンの具体的な説明に入る前に、仮想通貨における暗号化技術について説明しておきます。電子署名(デジタル署名)の技術を使って、一つ一つの仮想通貨の取引について、1送ったのは確かに署名者であること(本人確認)2通信の途上で金額や内容が改ざんされていないこと(改ざん防止)3取引の事実を後で否定できないこと(否認の防止)ができます。仮想通貨の受け渡しの正当性を確保することが暗号化技術の役割になります。

4 ブロックチェーンの中身

 このようにして作成された取引記録が保管されるのがブロックチェーンです。ブロックチェーンは、ブロックがチェーンで繋がっているので、そのように呼ばれているのだと思います。「分散台帳技術」とも呼ばれます。それはインターネット上に誰でも見れる状態で存在します。

 ブロックの中には取引が入っています。ビットコインの場合には、10分間に1つのブロックが作られるように設計されています。ビットコインの場合1秒間に7件の取引を扱うことができるので、10分間(600秒)には最大4,200件の取引が1つのブロックに入ることになります。

 この1ブロックに4,200件という制限は、取引量が増えてくることによって問題になり、当初は1ブロック1MBだったのが、その後2MBと8MBの2種類のビットコインに分かれるという、いわゆる「分裂」が起こりました。これについて、また後日ご説明します。

 ブロックの中には、「取引データ」だけでなく、「前ブロックのハッシュ値」と「ナンス値」が入っています。この辺りからちょっとややこしくなります。

5 ハッシュ値とは

 このハッシュ値は、一つ前のブロックの「取引データ」、「前ブロックのハッシュ値」、「ナンス値」から計算された値です。

 ハッシュ値とナンス値は数値と理解できますので、計算の対象になるというのは分かると思います。しかし、取引データを計算するというのはどういうことでしょうか。
 
 ご存じのとおり、デジタルデータは0と1の組み合わせでできています。文字であっても数字であっても、コンピュータはすべて0と1で認識しています。このため、文字も数値として計算する対象にすることができます。

 1つのブロックに4,200件入っている取引データが、その並んでいる順番で数値として認識して計算できるというわけです。一定の計算式で計算した答えを「ハッシュ値」と呼びます。その答えから、もとの取引データが復元することができないような計算式になっています。ハッシュ値から元の取引データを復元できないので、不可逆な一方向の計算です。
 
 ハッシュ値というものがどういうものかが分かったところで、ハッシュ関数という言葉もあるので、ちょっと説明しておきます。関数というと難しく聞こえますが、ハッシュ関数というのは、ハッシュ値を計算するための計算式のことです。ビットコインではSHA-256というハッシュ関数が使われています。

 ハッシュ関数の入力値、出力値という言い方もあります。入力値はハッシュ値を計算する元の数値(ブロックチェーンの場合は取引データなど)、出力値はハッシュ値です。

 ちなみに、ハッシュ値とかハッシュ関数というのは、筆者がコンピュータの勉強を始めた40年近く前からありましたので、仮想通貨やブロックチェーンよりずっと前からある技術です。

 それに近いものとして、「チェックディジット」があります。一定の数字の最後の1桁や2桁がチェックディジットになっているものとして、銀行の口座番号、クレジットカード番号、運転免許証番号、保険者番号、個人番号などがあります。これらの数値から一定の計算式で計算した結果が、チェックディジットになっており、入力間違いを発見するために使われます。チェックディジットでは間違いを100%発見できませんが、ハッシュ関数の場合は、入力値を少しでも変更したら、出力値が変わるというレベルの高いものです。

 ビットコインの場合は、1つのブロックに含まれる「前ブロックのハッシュ値」は、先頭に一定数のゼロが連続する値です。ハッシュ値は、必ずしも「先頭に一定数のゼロが連続する値」になるわけではありません。

6 ナンス値の役割

 ここで「ナンス値」が出てきます。ナンス(nonce)は、Number used once(一度だけ使用される使い捨ての数字)のことです。これは、「取引データ」+「前ブロックのハッシュ値」+「ナンス値」のハッシュ値を計算してみて、「先頭に一定数のゼロが連続する値」になるような値が「ナンス値」です。

 このナンス値の計算は、「総当たり」「しらみつぶし」でないと見つけることができません。実は、この「総当たり」作業が「マイニング」です。ここでようやくマイニングの説明をすることができました。

 マイニングとは、「先頭に一定数のゼロが連続する値」であるハッシュ値を計算するためのコンピュータ処理作業のことです。すでに説明したように、マイニングというのは取引承認ということです。ナンス値を求めることが、ブロックに入った取引データを承認したということになるわけです。

7 ナンス値を求めることが取引承認になる

 ナンス値を求めることが承認になるので、この作業がproof of workと呼ばれています。
ブロックには、取引データ」+「前ブロックのハッシュ値」+「ナンス値」が入っており、そのブロックがチェーンのように次々繋がっているため、一つのブロックの中の取引データを改ざんて、新たなナンス値を計算したとしても、次のブロックに入っている「前ブロックのハッシュ値」と合わなくなり、それを新なハッシュ値に変更し、ナンス値も入れ替えて、、というような膨大な作業が必要になります。

 ナンス値総当たりの計算=マイニングです。すでにお話したようにマイニングには、専用コンピュータを年中動かし続けるようなコンピュータ処理を行う必要があります。これを過去のブロックチェーンに戻ってやり直すことは、不可能と言えます。

 その結果、ブロックチェーンのブロックに入っている取引データが改ざんされることがない仕組みが出来上がるということになります。

0 件のコメント:

コメントを投稿