はじめに
1. 基礎技術
2. アルゴリズム
3. ブロックチェーンの種類
4. 仕組みに関する用語
5. 規格に関する用語
6. 機能に関する用語
最初に重要なことをお伝えします。この本を読んでもブロックチェーンを体系的に学ぶことはできません。一度入門書などで体系的に学んでいただいて、更に理解を深める段階で、個別の用語について深く掘り下げていくときのお供として、本書を執筆いたしました。
2009年の1月3日に誕生したビットコイン以降、ブロックチェーンは世の中のどこかでずっとその歩みを進めてきました。1度動き出したら、ノードが全てなくなるまで決して止まることのないこの台帳技術が世界を変えると言われて10年。まだ世界は変わってはいませんが、その兆しは少しずつ見えつつあります。
ブロックチェーンという単語は、2017年の仮想通貨ブームである程度世の中に浸透しました。しかし、それ以外の関連用語についてはまだまだ一般的ではありません。そして、ブロックチェーンの用語をまとめた書籍も世の中にはまだまだ広がっていません。
本書は、ブロックチェーンという単語は知っているが、それ以外は詳しく知らないという方が便利に使っていただけるように、株式会社ガイアックスが運営するブロックチェーンの情報サイト、Blockchain Biz(https://gaiax-blockchain.com)から書き起こした用語集です。
ブロックチェーンを学び、理解し、そして実際のプロダクトやサービスに活用する際に、必ずそばに置いておける用語集として辞書代わりに活用されれば幸いです。
株式会社ガイアックス
Blockchain Biz 編集部
峯 荒夢
ハッシュは、ブロックチェーンを支える最も基礎的な技術です。あらゆることで使われているため、ブロックチェーンを理解する上で、必ず抑えておかないといけない技術です。
ハッシュとは、あるルールに基づいてデータを変換すると得られる固定長のデータを指します。そして、このハッシュを得るために使われる関数がハッシュ関数です。ハッシュ関数は数値やドキュメントのような文字列など、どんな値でも固定の長さの数値に変換することができます。
暗号関数はデータを暗号化したり復号できるのに対し、ハッシュ関数はデータを一方向にしか変換できないのが特徴です。ハッシュ化されたデータを元のデータに戻すことは基本的に不可能です。また、元のデータを一文字でも変更すると、ハッシュ化された結果は全く違うものとなり、ハッシュ化された結果から元データを推測することも不可能になっています。
よくハッシュが使われる場所として、ウェブサイトなどのパスワードの保存が挙げられます。パスワードはハッシュ化した状態でデータベースに保存します。そして、パスワードの照合を行う際は、入力されたパスワードのハッシュ値と算出し、データベースに保存されていたパスワードのハッシュ値と比較し、これらが一致するかを見ることでパスワードを照合しています。この時、ハッシュ化されたパスワードしかデータベースに保存されていないため、データベースに保存されている数値からパスワードは復元できず、もしデータベースの内容が漏洩したとしても一定の安全性が保たれます。
ビットコインなどのブロックチェーンにおいて、ハッシュはあらゆるところで使われています。特にマイニングでは何度もハッシュ関数を使うため、ハッシュを計算する効率がとても重要になってきます。そのために、ハッシュ計算に特化したハードウェアなども開発されています。
ビットコインで使われているSHA256は、任意の長さの原文から固定長の特徴的な値を算出するハッシュ関数の一つであり、どんな長さの原文からも256ビットのハッシュ値を算出することができます。SHA256は実装のしやすさや計算速度、暗号学的な安全性のバランスに優れ、広く普及しています。
ビットコインで使用されるハッシュ関数はSHA256とRIPEMD160と呼ばれる方式です。これらのハッシュ関数はGPUや計算専用のハードウェアであるASICでの計算に向いています。これに対し、その他のブロックチェーンでは普通のPCのCPUでもマイニングしやすいように、ASICでは計算しづらいハッシュアルゴリズムを使っているものも多く存在しています。
上記のような特徴を理解するために、実際にデータをSHA256ハッシュ関数にかけて以下のように変換してみます。
このように、1文字または1ビット異なるだけで、ハッシュ値は全く異なる結果になります。
また長い文字列の場合でも、出力される数値の長さ(ビット数)は常に同じになることが特徴です。どんなに長い文字列も一定の長さに変換されるため、文章や画像ファイルを一意に要約する機能として、よく活用されています。
ダブルハッシュとは、ハッシュ関数を重ねて使うことです。一度ハッシュ関数に入れた出力値を、もう一度ハッシュ関数にかけます。ダブルハッシュを行うメリットは、一回ハッシュ関数を適用するよりも安全性が二乗になることです。このため、ビットコインなどでは様々な場面でダブルハッシュが使用されています。
前述したように、ビットコインでは使われているSHA256とRIPEMD160というハッシュ関数のうち、SHA256を二回適用したハッシュがよく使われています。しかし、より短いハッシュが必要な場合は、一度SHA256を適用したハッシュに、さらにRIPEMD160を適用したハッシュが用いられています。
どんなデータも、一定の長さに変換するハッシュは、限られたデータしか書き込めないブロックチェーンには欠かせない技術です。ハッシュを理解すれば、いろいろなサービスの仕組みの理解が進み、新しいブロックチェーンの使い方を検討するときの幅が広がります。ハッシュを理解して、よりブロックチェーンを楽しみましょう。
Base58とは、バイナリデータ(0と1だけで表されるデータ)を58種類の文字列で表現するフォーマットです。
ビットコインなどのブロックチェーンでは、アドレスや秘密鍵の文字列の表現にこのBase58というフォーマットを用いています。
「Base58」は聞いたことがないが、「Base64」であれば聞いたことがあるという人もいると思います。それは、Base64が電子メールや電子掲示板などにおいて、よく使われているフォーマットだからです。例えば電子メールでは、メールの送信プロトコルであるSMTPなどの制約により7ビットで表現されるデータしか送ることが出来ません。そこで、Base64という0から63までの64個の数値を「a-z、A-Z、0-9、 +、/ 」の 64種類の文字で表現できるフォーマットが使われています。特に、画像や音声といった添付ファイルなどのデータを送信する際にBase64が標準的に利用されています。Base58はBase64からの派生で、Base64では64種類の文字で表現されることに対し、58種類の文字で表現するフォーマットです。
Base58のフォーマットでは、Base64で使われている文字から「 +、/、0(数字)、O(oの大文字)、I(iの大文字)、l(Lの小文字)の6文字を除いた58文字が使われています。これらの文字を除く理由は、似ていてまぎらわしく、書き写す際に間違えやすいからです。実際に、「0Oo」、「Il1」を見分けるのに苦労していた経験がある人も多いと思います。
従って、Base58において使用可能な文字は
「123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz」
の58文字となります。
ブロックチェーンでは、秘密鍵やアドレスなど間違えてしまうと取り返しのつかないことになるデータを扱うため、このような見間違えてしまう文字列を排除する工夫をしています。
Base58の実際に使用されているサービスの例としては、以下のものが挙げられます。
・ビットコインのアドレス
・Rippleのアドレス
・Flickrの短縮URL
これら3つの応用例において使われている58文字は次の図のようになります。
このように、使用される58種類の文字は同じものですが、サービスによって並び順が違っています。この表では、サービスによって実際に割り当てられている順番が違っていることを表しています。このように、「Base58で」と言っても、一意の変換テーブルにはなっていないので気をつけなくてはなりません。
ビットコインやRippleは台帳技術なので、Base58はアドレスや鍵の表示に使用されますが、Flickerでは、画像の短縮URLを表示するためのエンコーディング形式としてBase58が使用されます。このように、長く複雑な文字列を分かりやすい形で表現できることから、Base58は様々なアプリケーションで利用されています。
ブロックチェーンでは、高度なセキュリティを担保しつつ、使いやすさも重視した仕様になっていることが理解できたかと思います。今後、仮想通貨のアドレスや鍵を目にするときに、Base58という工夫されたフォーマットが使われていることに注目して見てみると、またブロックチェーンが面白くなるかもしれません。
ブロックチェーンにおいて、ハッシュ関数は様々な場面で使用されます。そしてハッシュ関数は以下の特徴があります。
・任意の長さのデータから固定長の出力データを返す
・ハッシュ化されたデータを元のデータに戻すことは基本的に不可能
SHA-256は、このハッシュ関数の一種です。そして、SHA-256は「Secure Hash Algorithm 256-bit」の略であり、その名前が示す通り256ビット(32バイト)長のハッシュ値を得ることができます。 ハッシュ関数の性質通り、同じデータからは必ず同じ値が得られるようになっています。一方、少しでも異なるデータからは、まったく違う値が得られるようにもなっています。また、いわゆる暗号学的ハッシュ関数として設計されており、あるデータを元に、同じハッシュ値になる別のデータを効率よく探索することは困難なようになっています。
SHAのアルゴリズムでは、初期のハッシュ値が決まっており、この初期ハッシュを変化させるために使われる情報が入力データです。 SHA-256の場合、入力データは64バイトごとに分割されます。 分割されたデータは「メッセージブロック」と名づけられています。入力データの量が64バイトを超える場合は、複数のメッセージブロックが形成されることになります。
次に、初期ハッシュを最初のメッセージブロックを使って変化させ、新しいハッシュ値を算出します。さらに、そのハッシュ値を次のメッセージブロックで変化させて新しいハッシュ値を得て、さらに次のメッセージブロックで……という具合に処理されていきます。 そして最後のメッセージブロックで算出されたハッシュ値が最終結果になります。
このように64バイトに分割した入力データを使ってハッシュ値を変化させていくことで、入力データ量に関係なく同じビット長の値が得られるようになっているのです。
SHA-256はNSA(米国家安全保障局)が考案し、2001年にNIST(米国標準技術局)によって連邦情報処理標準の一つ(FIPS 180-4)として標準化された「SHA-2」規格の一部として定義されています。SHA-2では他にハッシュ値の長さが224ビットのSHA-224、384ビットのSHA-384、512ビットのSHA-512などが定義されています。
ハッシュ値のアルゴリズムを考える上で重要なのが「ハッシュ衝突」と呼ばれる現象です。これは異なるデータから同じハッシュ値が生成されてしまう事態を指します。 元のデータがどんな長さであっても、生成される値のビット長が決められている以上、絶対に衝突のないハッシュ関数は有り得ません。 従って、ハッシュ値のビット長が長ければ長いほどハッシュ衝突は起こりにくくなります。
ハッシュ衝突の回避率はビット数が1増えただけで2倍になるので、256ビット長のハッシュ値は、128ビット長のハッシュ値より2を128回かけた分だけ、ハッシュ衝突の回避率が上がることになります。逆に、ハッシュ衝突するデータを見つけるにはかなりの時間がかかることとなり、元データの割り出しは現在ではほぼ不可能とされています。
また、512ビット長の方が高いハッシュ強度を得られますが、SHA-512は64ビットCPU向けに最適化されたアルゴリズムなので、32ビットCPU向けに最適化されたSHA-256とはCPUの演算系が異なります。
一般的には、SHA-2の中で最長のSHA-512が最も安全性が高く、一方でSHA-256は実装のしやすさや計算速度、暗号学的な安全性のバランスに優れ、最も広く普及していると言われています。
ビットコインではSHA-256とRIPEMD-160の2つのハッシュ関数が使われています。これらのハッシュはGPUや計算専用のハードウェアであるASIC(Application Specific Integrated Circuit)で計算するのに向いています。これに対し、他のブロックチェーンでは普通のPCでもマイニングしやすいように、GPUやASICでは計算しづらいよう工夫されたハッシュアルゴリズムを使っているものも多く存在しています。
マイニングにおけるSHA-256の計算は当初はCPUで行われていましたが、GPUを使って並列計算を行うGPUマイニングに移行し、続いてFPGA(Field-Programmable Gate Arra)を使ったFPGAマイニングが主流になりました。しかし、この論理を実行するASICを作れば、消費電力が少なく、高速で演算ができることから、現在では専用のASICを使ったマイニングが主流となっています。
また、WebブラウザとWebサーバ間でSSL(Secure Socket Layer)暗号化通信を行うための電子証明書であるSSLサーバー証明書もハッシュ関数を使用しています。数年前までは、SHA-1と呼ばれるハッシュ関数がよく使われていましたが、現在はSHA-2が主流になっています。
SHA-2の前規格であるSHA-1は160ビット(20バイト)のハッシュ値を生成するハッシュ関数であり、多くのアプリケーションやプロトコルに採用されていました。しかし、SHA-1はその脆弱性・危険性が見つかり、懸念されていたにも関わらず世の中のほとんどのWebサイトで使用され続けていました。この状況に対してNISTは、広く暗号化に使用されてきたSHA-1に関して2010年までにSHA-2への移行勧告を出しましたが、SHA-2の普及は広まらず、SHA-1に関しては「非推奨」という表現にとどまっていました。
ところが、2013年にMicrosoftがSHA-1ハッシュ関数を使用したSSLサーバー証明書に関して、2017年以降使用不可にするSHA-1廃止ポリシーの発表を出したことを皮切りに、GoogleやMozillaもSHA-1使用に対して同様に廃止ポリシーが発表されました。これにより、IEやChromeなどのブラウザでSHA-1からSHA-2への移行が行われ、現在はSHA-2が世界標準となっています。Appleも、2019年6月にiOS13及び、MacOS10.15でSHA-1を非サポートとする発表をしました。
このように、ビットコインのみにとどまらず様々なところでSHA-256が利用されています。現在はこの様々なところで標準的に使われている、SHA-256は絶対に抑えておきたい、技術の1つと言えるでしょう。