前回に引き続き、一般の人々には理解しづらい「暗号資産(または暗号通貨)」について、
日本の義務教育でほとんど教えていないブロックチェーンの解説です。
やや専門用語に近いキーワード
匿名性( anonymity )
透明性( transparency )
このうち、匿名性については、全てのブロックチェーンのユーザーは64文字の16進数で特定されていることを中心に紹介しました。つまり、秘密鍵と公開鍵です。
今回は、秘匿性とは真逆の「透明性」について紹介します。
大事な定義なので繰り返します。ブロックチェーン技術は
- P2Pという通信環境で
- 共有されているデータベースにおいて
- 全ての取引の
- 匿名性をサポートし
- 透明性をサポートしながら※
- 銀行のような仲介組織を利用せずに
- 取引を成立させる
ものです。
※ここでさらっと「透明性をサポート」と書いていますが、ここには本当はもっと強い技術要件があり、ます。ブロックチェーンやビットコインの透明性は極めて信頼性が高く、データーベースとしては消滅したり改廃されたりしない特性を持っています。
この解説のポイントは次の通りです。
- 暗号通貨の透明性は10分毎に繰り返されているデータベースの内容確認の結果
- 過去の取引情報はタグ付けされたロシア人形のようなブロックに収められている
では、順番に説明していきます。
ロシア人形の電子化
ブロックチェーンのデータベースは、簡単に言えば、ロシアの「マトリョーシュカ人形」(матрёшкаマトリョーシュカ)を電子的に作り続けているシステムです。
マトリョーシュカ人形は木製の人形で中身が空洞になっています。空洞の中には同じマトリョーシュカ人形が一回り小さいものが入っていて、その人形の中身も空洞で別のマトリョーシュカ人形が入っているというもの。
特徴として、見た目は1体の人形ですが、
- この人形はいわゆる「入れ子構造」になっている
- 中に入っている人形の構造は同じであり、サイズだけが違う
- 入れ子になる人形の総数は物理的に可能な範囲に止まる
ということになります。写真の例は、入れ子にできるのは5体までです。
入れ子構造(Wikipedia)
同様の形状の大きさの異なる容器などを順に中に入れたもの。重箱や杯などの入れ子細工。よく知られたものとして神奈川県箱根町の箱根細工の入れ子人形、ロシアのマトリョーシカ人形がある。ログラミングにおけるネスティング(入れ子構造)のこと。
この人形をコンピューター・データの世界で作れば、物理的な制約からは自由になります。ですから、複数の人形の「入れ子」の順番が決まっていれば、人形の数には制限はありません。このとき、「人形」を「ブロック」に置き換えるのです。
すると、見た目は一つのデータ(ブロック)ですが、
- このデータ(ブロック)は「入れ子構造」になっている
- 中に入っているブロックの構造は同じであり、大きさは自由
- 入れ子になる人形の総数は無数(但し、コンピューターシステムの限界範囲)
というわけです。
2024年の9月28日9時31分の時点でビットコインは863,147のブロックを生成して積み上げています。そして、この86万以上のブロック全てが、たった一つの「入れ子構造」になっているのです。
ビットコインのブロックが86万も作られていると聞くと、普通に思い浮かぶのが、「連番」です。つまり、1から始まって863,147までの整数の連番がそれぞれのブロックのIDになっているというイメージです。そのIDの連番の通りに入れ子構造にすれば良いというわけです。
当然そういう管理は可能です。
しかし、それだけでは、ネット社会に無数に散らばっているデータベースと何も違いませんし、データはいくらでも改廃されて異なるバージョンが無数に増えていってしまいます。
正当な理由なくコピーしたり、内容を書き換えることができないブロックチェーンにはどんな技術的な魔法が隠されているのでしょうか?
ハッシュタグ
実は、ブロックチェーンのシステムがビットコインという「唯一無二」のデータベースを15年以上も管理して、消失も改竄もされずにブロックを増やし続けている技術には
データのハッシュ化
という計算方法があるのです。
ネット空間で扱うデータは、文章であれ、数字であれ、画像であれ、ある計算方法を使えば、任意の長さの文字列に変換できます。これがデータの「ハッシュ関数」です。
ハッシュ関数は、暗号化技術の一つで、長い年月をかけて世界標準として優秀な技術者や研究団体が話し合って開発したものです。いくつか種類があるのですが、最も一般的なハッシュ関数は SHA256 と呼ばれていて、ビットコインなどのブロックチェーンにフル活用されています。
SHAと 256 は次のような意味を持っています。
SHA は “Secure Hash Algorithm” の略で、日本語では「安全なハッシュアルゴリズム」と訳されます。SHAは、データのハッシュ値を生成するために使用される暗号学的ハッシュ関数の一種です。ハッシュ関数は、任意のサイズのデータを固定長のハッシュ値に変換します。
256 は、SHAアルゴリズムが生成するハッシュ値の長さを示しています。SHA-256では、ハッシュ値の長さが 256ビット(32バイト) です。これにより、SHA-256で生成されるハッシュ値は常に256ビットの固定長となります。
そして、この sha256 というハッシュ関数に、「abc0」という文字列と「abc1」という文字列を計算させると、それぞれ個別の 32バイトの文字列を返します。
SHA256 ( “abc0” ) = 6ebf92bee9004832f465d8efd13808688c73f6419a4beac3a6ba459f780ffa81
SHA256 ( “abc1” ) = 840786ae4c270f8862c502e8dd4fca59a0337cf8293f81d36bfa33c1330eef95
ハッシュ化の前の文字列は1文字しか違わないのに、結果として出力されたハッシュ値は、まったく異なる32文字のデータに変換されています。ハッシュ化の前の文字列は何度計算しても、全く同じ結果を出しますから、確かにもとの文字列のID番号として有効です。
そして、ここがハッシュ関数の特徴なんですが、それぞれの32バイトの文字列からもとのデータである abc0 や abc1 のような文字列を「解読」することは、現代のコンピュータ技術ではほぼ不可能であることが証明されているのです。(ハッシュ関数は一方向)
そして、ブロックチェーンのそれぞれのブロックには、この「ハッシュ関数」にかけられて
固定長(32バイト=文字)の一方向「ハッシュ値」が与えられます。
この解説文では、ブロックに付けられるハッシュ値のことを「ハッシュタグ」と呼びます。
SNSで活用されている「#ハッシュタグ」とは別のものですので、ご注意ください。ここでのハッシュタグは32文字の固定長のブロックのハッシュ値です。
つまり、ビットコインのようなブロックチェーンのブロックには全て「ハッシュタグ」がついていて、データベースから呼び出す時にこの32文字のハッシュタグが大活躍しているのです。
ハッシュ値の「入れ子構造」
最後に、ブロックチェーンがロシア人形のような「入れ子構造」を保つためのアイデアを解説します。この部分のアイデアは、ブロックチェーンの開発者のサトシ・ナカモトの論文でブロックチェーン技術の中心部分の一つとして発表されたものです。
全てのブロックに SHA256 によるハッシュタグを付けただけでは、入れ子構造を壊されずに維持することはできません。ブロックを順番に並べても、システムに詳しいハッカーにとって順番を変えてしまうぐらいは簡単です。
ブロックチェーンのブロックの連鎖が強固なのは、SHA256 などのハッシュ関数の使い方に独特の工夫があるからなのです。
- ビットコインの一番最初のブロックのハッシュタグは、そのブロック全体の情報をハッシュ関数を通して32バイトのデータにしたものです。ここまでは、今までの説明と同じ。
- では次に2番目のブロックのハッシュタグになりますが、実は、この2番目以降のハッシュタグを作るために準備するデータは、2番目のブロックのデータだけでなく、その直前に生成してあった1番目のハッシュタグの情報も含める段取りになっています。
- つまり、2番ブロックのハッシュタグは、2番ブロックだけでなく、最初のブロックのハッシュタグをくっつけた文字列をハッシュ化したものであり、1番と2番のブロックを合わせたデータのハッシュ値なのです。
- 同じように3番ブロックのハッシュタグは、直前に作られた最初の2つのブロックのハッシュタグを3番ブロックのデータに加えてハッシュ関数にかけています。
これを続けてきたのですから、2024年の9月28日9時31分の時点の863,147番目のブロックのハッシュタグには、15年前に生成された最初のブロックのハッシュタグのハッシュ化の結果が含まれているということになります。その他のブロックのハッシュタグも然りです。
不正な利用者が、連鎖するブロックのごく一部でも順番を変えたり、1文字でもデータの内容を変えたりすると、前述の abc0 と abc1 のハッシュ値のように、「全く異なる」ハッシュタグが計算されるという事態を引き起こします。
そういうことが起きると、不正な利用者がアップしようとしたデータはブロックチェーンの仕組みのなかで、即座に却下されて、受け付けられることはないのです。
ブロックチェーンの利用者から見れば、最後のブロックの積み上げの瞬間にハッシュ化計算のための情報メンバーとして上がってきている、直前のブロックのハッシュタグを見るだけで、その時点の全データが不正かどうかすぐに判断できるというわけです。
これは、あくまでビットコインの場合ですが、
現在世界中に数千から1万人規模のビットコインの専門ユーザーが、現存するビットコインのブロックデータを監視する役割を担っています。
彼らは、ビットコインの基本的なシステムを操作して、新しいブロックが生成される都度、最初のブロックから直近のブロックまでの全ブロックのハッシュ値を再計算して、全てのハッシュタグが、過去のものと全く違わないものであることを検証してくれています。こういうユーザーのことを専門用語で「フルノード」と呼んでいます。
不正が起きていないことを確認して新たなブロックを生成する時間は、ほぼ10分程度になるように調整されています。このことは別の講座で説明します。
ハッシュ化データの透明度
ブロックチェーンのブロックのデータがハッシュ関数にかけられて、ハッシュタグになってしまうと、ブロックの内容は読めなくなってしまうのでは?
という疑問を持たれると思います。
心配ご無用です。ブロックチェーンのハッシュ化技術とハッシュ値は、あくまでブロックチェーンを管理するための数値や文字列であり、これらのハッシュ値の元のデータである生の数字や日付などの情報は、それぞれのブロックの中で、人間が読んで解読できる形式できちんと保管されて、いつでも引き出せて参照できます。
ネット上では、様々なブロックチェーンの生のデータを引き出して参照するエクスプローラーが点在していて、いつでもどこでもデータをチェックできるのです。次のサイトはその一例です。
サイトにアクセスすると、ダッシュボードが有り、そのダッシュボードからビットコインを選択して、任意の取引のID情報を与えればその取引の内容を誰でも閲覧できます。
任意の公開鍵のデータを打ち込めば、その公開鍵の持ち主の取引も全部見られるようになっています。
前回紹介した、シルクロードが悪用したウルブリヒト本人のビットコインの公開鍵の取引情報も、公開鍵のデータさえあれば、誰でも見られるようになっています。
このように自由に参照できる情報に「嘘がない」ことを保証するために、ブロックチェーン技術は、ハッシュ化の技術と「入れ子構造」をうまく組み合わせて、データの改ざんや上書きが絶対できないデータベースを運用しているのです。
ハッシュタグはブロックの鍵
全く同じブロックチェーンの構造説明のスライドがあります。2021年に筆者が作成したものです。
この説明では、ハッシュ関数で生成するハッシュ値(このブログではハッシュタグ)をブロックの「鍵」に例えて説明しています。
最後まで読んでいただき、ありがとうございます。
講座1から読み直す方はこちら
コメント