- ブロックチェーンのいたるところにハッシュ関数が使われている
- 「SHA-256」は多種あるハッシュ関数の種類のうちの1つ
- ビットコインのブロックチェーンでは「SHA-256」が使われている
SHA-256とはハッシュ関数の名前で、ハッシュ関数は仮想通貨を支えるブロックチェーン技術を支える暗号技術です。そもそもブロックチェーンがどのような仕組みの上で動いているのか、その中でSHA-256はどのような役割を担っているかを理解することは、今後普及し世界を変えるであろうブロックチェーンの理解を深めることに繋がります。
ブロックチェーンとは何か?
日本語でブロックチェーンは「分散型台帳」と訳され、大まかに説明すると記録(取引内容)を1つのブロックに刻み、それをチェーン(鎖)の様につなげたものです。
「分散型」と呼ばれる理由は、ブロックチェーンがP2Pネットワークを用いているからです。記録を1つのブロックに残し台帳を生成し、その台帳をブロックチェーンネットワークの参加者(ノード)が分散的に保存しています。
データの分散的な保管
従来の中央にサーバーを置くクライアント・サーバー型ネットワークでは、サーバーが全てのデータの管理・通信を行います。データはサーバーの一か所に集められて保管され、個々の端末がサーバーと通信して必要な情報を取得します。
一方で、P2Pネットワークでは、各ノードがデータを分散的に管理し、それぞれが対等な関係でデータを共有し通信しています。そのため、一つの端末が機能しなくなったとしても、ネットワーク上のその他の端末が台帳の記録を保有しているので、ネットワーク全体としてデータが失われることはありません。
データの改竄性
P2Pネットワーク内のノードがすべて同じ記録を共有しているとは限らず、データを改竄したり、今まで繋げてきたチェーン(鎖)を分岐させて新たなチェーンを生成している可能性もあります。
それぞれのブロックは取引の内容、前ブロックのハッシュ値、ナンスと呼ばれる特別な値(「マイニング」で説明します)を含んでいます。仮に、すでに生成されたブロック内の取引内容を改竄した場合、そのブロックのハッシュ値は変わり、次のブロックに含まれる、前ブロックのハッシュ値とは一致しないことが判明します。
その場合、不正、データの改竄が認められ、51%のノードで使われているハッシュ値に戻されます。また、分岐しているブロックがあれば、より長いチェーンが選ばれます。これらは51%以上のノードが正しい選択すると仮定した場合に成立しますが、後に説明するブロック生成には多くの計算資源を必要とする上に、正しいブロック生成に対しては報酬が渡されることを考えると、51%以上のノードが善意をもつ行動を選択することは十分に可能であると言えると思います。
以上をまとめると、ブロックチェーンとは「分散的に保管する改竄不可能な台帳(記録)」と定義できるといえます。
ハッシュ関数とは?
暗号関数の一つで、ある入力値からそれを要約する固定長の乱数列を生成する方式を指します。
関数:何かを入力すると、それに対応した出力値を返してくれる演算方式
ハッシュ関数は、データを入力すると、それに対応する数字を含む文字列を生成してくれます。それぞれのブロックには、取引内容などが記録されます。そのデータを文字列や値に変換することでデータの暗号化を行っています。
ハッシュ関数の特徴
一方向関数
暗号関数とハッシュ関数には以下のような違いがあります。
上記のように、ハッシュ関数は一方向にしか働かない関数であり、そのためより強固な暗号化が可能になると言えます。こうすることで、万が一情報が漏洩した場合でも、ハッシュ値の状態であれば値から中身のデータを復元することができないため、乱数列でそれ自体には意味のない値が漏洩したとしてもデータ自体の流出をふせぐことができます。
入力値が異なれば出力値も異なる
データの中身が少しでも異なる場合、変換して出力されるハッシュ値は全く異なるものになります。そのため、データに変更が加えられた場合、ハッシュ値もそれに伴って自動的に変更されるため、次のブロックに含まれる前のブロックのハッシュ値と照合することで、データの改竄があったかどうかがすぐに判明します。
衝突性
異なるデータからは、異なるハッシュ値が生成されることが理想的ですが、類似したデータから似ているハッシュ値が生成されたり、既存のデータのハッシュ値と等しくなるような新たなデータの生成を防ぐことが課題になります。
ハッシュ値が同じになるような、異なる2つのデータを見つけ出すことが困難な状態を強衝突耐性とよび、あるデータのハッシュ値と同じになるようなデータを見つけ出すことが困難な状態を弱衝突耐性と定義されています。
ブロックチェーンにおけるハッシュ関数の役割
ハッシュ関数は入力値を文字や数字からなる乱数列に変換する方式で、ブロックチェーンにおける入力値とは、ブロック内の情報になります。ブロック内には、前述の通り取引履歴の情報、ナンスと呼ばれる値、そして1つ前のブロックのハッシュ値の3つを含んでいます。そのブロックのハッシュ値は、それら3つの情報を入力値として割り出されます。そして、次のブロックを繋げるために、このハッシュ値を計算して求める過程をマイニングと呼びます。
マイニング
マイニングとは、ナンスを用いてある値より小さいハッシュ値を求めるプロセスです。ここでナンスについて、説明していきます。
ナンスとは「nonce」、「number used once」の略で、一度のみ使われる数字という意味です。それぞれのブロックに特定の32ビットの値が割り振られます。
マイニングにおいて、このナンスと呼ばれる値を手がかりにして、できるだけ小さいハッシュ値を探し出すことになります。
ブロック内において、取引内容、ナンス、前のブロックのハッシュ値の3つの内、取引内容と前のブロックのハッシュ値はすでに定まっており、マイニングとは、当てはまるナンスを探し出して入力し、それに対応するハッシュ値を計算するプロセスになります。
また、できるだけ小さい値というのは、ハッシュ値の先頭にできるだけ多くの0が並ぶものになります。このできるだけ小さい値が求まるまでコンピュータでの計算を繰り返し、その値を見つけ新たなブロックを繋げた人に報酬としてコイン(仮想通貨)が支払われます。
一つのハッシュ値を求めるのに与えられる時間は定められており、ビットコインの場合10分間で、その時間の間にできるだけ小さいハッシュ値を求める必要があります。
マイニングをする方法
マイニングをするためには以下の3つの方法があります。
- クラウドマイニング
- マイニングプール
- ソロマイニング
それぞれ詳しく説明していきます。
クラウドマイニング
マイニングをしているグループにお金を定期的に支払うことで、そのお金に見合うマイニング報酬が支払わます。クラウドマイニングの利点は、少額の資金からマイニングに参加できることや、マイニングに必要な高額のコンピューターなどの機械を買う必要がないことです。
マイニングプール
マイニング参加者と協力して、お互いにコンピューターの計算力を提供しあい、得られた報酬を提供した計算量に見合う比率で分配します。マイニングプールは、その他のマイニング手法に比べて、大規模な計算量を確保でき安定したマイニング報酬が期待できることが利点であると言えます。
ソロマイニング
マイニングに必要なコンピューターなどの機械を購入し、一人でハッシュ値を計算して求めます。他のマイニング手法に比べて、得られた報酬全てが自分の取り分になることが良い点です。
電子署名
電子署名(デジタル署名)とは、ブロックチェーン参加者が取引を行う時に、本人自身がその取引が正当であると保証することです。ブロックチェーン参加者は、公開鍵と秘密鍵をもっており、これはブロックチェーン内においてアカウントを持っていることを意味します。
公開鍵(パブリックキー)
メッセージ受信者に公開する鍵で、受信者はそのキーを使ってメッセージを開けることができます。
秘密鍵(プライベートキー)
他者に公開せず、メッセージが正当なものであると署名する時に使われます。
メッセージを送っても、そのメッセージが不正なものであるかどうかは本文を見ただけでは分かりません。そこで、ハッシュ値の、「入力値が少しでも異なれば、出力値も全く異なったものになる」という特性をいかして、そのメッセージが正当であるかを確かめることができます。
メッセージ送信者は、メッセージ本文と公開鍵、そして電子署名を送信し、受信者は公開鍵で送信されたハッシュ値と、そのメッセージ本文をハッシュ関数にかけて生成されたハッシュ値が同じであるかを確かめることができます。そうすることで、メッセージが不正なものでないと確かめることができます。ブロックチェーンにおいては、ブロック内の取引内容が正当なものであるかどうかを、ハッシュ値を用いて双方の取引者が確認することができます。
SHA-256について
今まで説明してきたハッシュ関数にはいくつかの種類があります。SHA-256もその一つで、ブロックチェーンにおけるハッシュ関数はこれを用いています。
以下にそれぞれのハッシュ関数の違い、特徴をまとめました。
SHA-256
SHA-2系統の一種で、32ビットベースのコンピューターを想定しています。
MD5
セキュリティーの観点からみると弱く、同じハッシュ値を持つデータを複製することが可能。
SHA-1
元々セキュリティーは安定はしていると考えられていましたが、効率的な攻撃法が見つかり比較的高い確率で同じハッシュ値を持つデータが複製できると判明しました。そのためSHA-2系統に比べると脆弱。
SHA-256はMD5に比べて、2倍のBit数であるためハッシュ値の衝突の可能性は低いと言えます。また、SHA-2系統であれば、ハッシュ値から元のデータを復元できる可能性は低いですが、元々のデータが十分に長い場合に効力を発揮します。
まとめ
ブロックチェーンとは日本語では分散型台帳といい、暗号技術の組み合わせにより成り立っています。その中の1つにハッシュ関数があり、仮想通貨では一般的に「SHA-256」が使われています。このように体系的に知識をつけることで、より理解が深まります。