まずはハッシュ関数の概要を抑えよう
そもそも関数とは、Excelでお馴染みのSUM関数(合計値を出力値として返す)やAVERAGE関数(平均値を出力値として返す)などのように、特定の入力値に対して同じ出力値を返す仕組みのことです。
ハッシュ関数は、出力値が全く予想できず、出力値から入力値を求めることは極めて困難という特徴を持ちます。
ちなみに、ハッシュ関数にかけることをハッシュ化といい、ハッシュ関数から出力される値をハッシュ値といいます。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.
身の回りのハッシュ関数に触れておこう
ハッシュ関数の、
- 入力値に対して必ず同じ出力値を返す
- 出力値が全く予想できない
- 出力値から入力値を求めることは極めて困難
という3つの特徴を活用している実用例は、ブロックチェーンに限らず意外と身近に存在しています。
例えば、Webサービスを使用する際に設定するパスワードの管理にもハッシュ関数が使用されています。
サービス提供者は、ユーザーのパスワードをハッシュ化し、そのハッシュ値をデータベースに保存しています。
「入力値に対して必ず同じ出力値を返す」という性質から、ユーザーがログイン時に入力するパスワードを毎回ハッシュ化し、そのハッシュ値をデータベースに保存しているハッシュ値と照合することで、パスワードの正否をチェックしています。
もし入力したパスワードが1文字でも違うと、全く異なるハッシュ値が生成されるため、ログインすることはできないという仕組みです。
また「出力値から入力値を求めることは極めて困難」であるため、サービス提供者がデータベースに保存しているハッシュ値から元のパスワードを知ることはできません。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.
ブロックチェーンはハッシュ関数をどこで使っているの?
ブロックチェーンは、その仕組みを実現するために非常に多くの場面でハッシュ関数を活用しています。
この先のレッスンを進める中でハッシュ関数の使い方は度々登場するため、ここではプルーフオブワーク(PoW)におけるハッシュ関数の活用方法について触れておきます。
プルーフオブワーク(Proof of Work:PoW)とは、マイニングを行うための規則のことです。
カリキュラム「仮想通貨」の「【レッスン③】マイニングって具体的に何をしているの?」で学習した通り、マイニングとはある特定の数字(ノンス)を見つける作業のことを意味していました。
この作業の手順を定義しているのがPoWです。
すなわち、PoWの手順に従ってノンスを見つける計算作業を行うことがマイニングということになります。
ハッシュ関数の特徴に「出力値から入力値を求めることは極めて困難」というものがありました。
しかし、PoWすなわちマイニングではこの難問に挑戦しようとします。
どういうことかというと、ハッシュ値のペアになる元の値を、どうにかこうにか片っ端から探し出そうとするのがPoWなのです。
「それが出来たらハッシュ関数の特徴が成立しないじゃないか」という疑問を抱いた方、正しいご指摘です。
繰り返しますが、実際にハッシュ値から元の値を探し出すことは極めて困難です。
SHA256というハッシュ関数(ハッシュ関数にもいくつか種類があります)を使用した場合、出力されるハッシュ値の総数は2の256乗+1という途方もない数になります。
これは宇宙に存在する原子の数に匹敵すると言われています。
実は、PoWにおけるマイニングでは、完全なハッシュ値の逆算は求められていません。
マイニングでは、ハッシュ化した時に特定の値以下になるような元のデータを探し出す計算を行なっているのです。
ここで定められている先頭の0の数は、マイニングの成功状況によって自動的に変動しています。
これがディフィカルティ(採掘難易度)です。
0の数を増やすことでマイニング難易度を高くし、どんなに性能の良いコンピュータが登場したとしても、常に同じ間隔でマイニングが行われるよう予め設計されているのです。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.
暗号化とハッシュ化は異なることを理解しよう
便宜上、暗号技術のカリキュラムでハッシュ化について学習しましたが、暗号化とハッシュ化は異なります。
・暗号化 > ハッシュ化ではない
・暗号化:元データは復号できる
・ハッシュ化:元データを算出することは極めて困難
一見、暗号技術のようにもみえるハッシュ化ですが、暗号技術は復号できないと意味がないため、元データを算出することが難しいハッシュ化は暗号技術とはいえません。
反対に、元データを復号できてしまう暗号技術は、元データを算出することが難しいハッシュ化とはいえない、ということになります。
Check your achievement
Click the “Tick” button
if you understand the lesson so far.