見出し画像

ブロックチェーン入門_#5:基礎技術「暗号学的ハッシュ関数」 - 同じかどうかを確かめる

ブロックチェーンの構造のあらゆる場所に登場する「暗号学的ハッシュ関数」とは何でしょうか。特徴と実例を解説します。


ハッシュ関数って何?

■関数の基本概念

関数は、入力を受け取り、それに基づいて特定の結果(出力)を返す仕組みです。例えば、数学の授業で習ったy=f(x)のようなものです。この場合、fが関数、xが入力で、yが出力です。xが決まれば、yはいつも決まった値になります。

■ハッシュ関数とその特徴

ハッシュ関数は、入力に対してある決まった範囲、例えば0〜255(8ビット)の間の数のどれかを返します。入力は、数だけに限らず文字列等、どんなデジタルデータでも大丈夫です。関数のため、入力が決まれば出力はいつも決まった値になりますが、たくさんの入力について結果を見ると、出力は関数ごとに決まった範囲の中で偏らず一様に分布します。

ハッシュ関数の出力のことを「ハッシュ値」または単に「ハッシュ」などと呼びます。

暗号学的ハッシュ関数とは何か?

■様々な暗号学的ハッシュ関数

暗号学的ハッシュ関数には様々な種類がありますが、米国の国立標準技術研究所(NIST)が標準化しているSHA(Secure Hash Algorithm:セキュアなハッシュアルゴリズム)シリーズが有名です。SHAシリーズには160ビットの値を出力するSHA-1(間もなく廃止されます)、256ビットや512ビット等の値を出力するSHA-2があり、そして最近では同様に多様な出力の幅を持てるSHA-3が使われ始めています。

■暗号学的ハッシュ関数とその特徴

暗号学的ハッシュ関数はハッシュ関数の一種ですが、他のハッシュ関数に比べて、高いセキュリティ性を有しているという特徴があります。出力の範囲が160ビットや256ビット等、とてつもなく広くなっているのも特徴の一つです。

どのくらい広い範囲かというと、32ビットで約40億までの数を表せますが、例えば256ビットはその8倍のビット幅のため、約40億×40億×40億×40億×40億×40億×40億×40億までの数を表せることになります。とてつもなく巨大な数になるため、10進数ではなく16進数(0~9に加えてa~fを数字として使う)を用いてできるだけ短く、かつビットと数字の対応が分かりやすくなる(16進数の数字一つ=4ビット)ように書かれることが一般的です。

例 : 2f50f9dc8fb7a0a5e397b7c54d536b7dda21d91ec293c135d069a7a2537bf23a

暗号学的ハッシュ関数のもう一つの特徴は、入力がわずかに異なるだけでも、出力が大きく異なることです。そして、出力から元の入力データを復元することはほぼ不可能です。

暗号学的ハッシュ関数の出力のことは「メッセージダイジェスト」「暗号学的ダイジェスト」または単に「ダイジェスト」などと呼びます。色々なデータに暗号学的ハッシュ関数を適用しておくと、その結果はそれぞれ大きく異なるため、元のデータの中身を見なくてもデータを区別できます。そのことがダイジェスト(要約)を見ることに似ていると言えます。

暗号学的ハッシュ関数の出力を指して「ハッシュ値」「ハッシュ」と呼ぶ場合もありますが、それはハッシュ関数一般の出力のことであり、正確ではありません。

■衝突とは何か?

暗号学的ハッシュ関数は、どんな入力でも引き受けて、広大な数の空間のどれかの値を返します。可能な入力の種類は無限です。出力はとてつもなく広いものの、限りがある範囲のどれかのため有限です。無限の範囲のものを有限の範囲にマッピングするため、必ず、異なる入力でも出力が同じになる場合が存在します。これが「衝突」です。

よく設計された暗号学的ハッシュ関数は、衝突について次のような性質を持ちます。

・同じダイジェストとなるような、異なる二つの入力を見つけることが非常に困難

もし、ある暗号学的ハッシュ関数に対して一つでも衝突が見つかれば、その関数は安全とは見なされなくなります。SHAシリーズでは、2017年にSHA-1に衝突が見つかっており、NISTは2030年末にSHA-1の使用を全廃するとしています。

ブロックチェーンのどんなところで使われているか?

暗号学的ハッシュ関数は、ブロックチェーンの構造のあらゆる場所で以下のように利用されています。

・ブロックの識別子:各ブロックのダイジェストを、ブロックを一意に識別するために用いる
・トランザクションの識別子:各トランザクションデータのダイジェストを、トランザクションを一意に識別するために用いる
・アカウントの識別子:ブロックチェーンでのアカウントのアドレスは、一般にユーザの公開鍵のダイジェストに基づいている

また、記録の正しさを検証するために用いるマークル木(Merkle tree)という構造や作業証明(プルーフ・オブ・ワーク)のためにも暗号学的ハッシュ関数が用いられています。(関連単元:ブロックチェーン技術「プルーフ・オブ・ワーク」 - 改ざんを防ぐ

次回はブロックチェーンを支える基礎技術の一つである「デジタル署名」について解説します。ユーザー本人の意思を確認するために使用する「デジタル署名」はブロックチェーン以外にも様々なところで利用されています。ぜひご確認ください。


Web3ポケットキャンパスはスマホアプリでも学習ができます。
アプリではnote版にはない「クイズ」と「学習履歴」の機能もあり、
よりWeb3学習を楽しく続けられます。

ぜひご利用ください

▼スマホアプリインストールはこちら

この記事が気に入ったらサポートをしてみませんか?