ブロックチェーン vol.3 ハッシュ関数

1.ハッシュ関数との思い出

ハッシュ関数に初めて触れたのは仕事でユーザデータを扱った時だった。
ハッシュ化を行えばセキュリティも高められるし、データ量も一定にできるので便利というので利用した記憶がある。

ただ、試験の際は苦労した。
ハッシュ化された値から元のデータを復元できなかったから。
試験パターンからハッシュ元の値を想像してハッシュ化した値と実際の試験データを見比べて、結果のOK/NGを判断して苦労した思い出がある。

2.ハッシュ関数の特長

ハッシュ関数の特長は、なんといっても(事実的に)不可逆なこと
暗号化と間違えやすいけど、暗号化は復元できるが、ハッシュ化された値は元の値を求めるのは事実的に不可能。だからセキュリティの分野で使用されている。

3.暗号学的ハッシュ関数

じゃあ、なぜセキュリティが高いのか?
ポイントは色々あると思うけど、特には「改ざん」「なりすまし」だと思っている。

例えば、あるフリーソフトについて改ざん防止としてそのソフトのハッシュ値が提供されているとする。
悪意のある人が、そのハッシュ値となる別の元データを作成することができれば、改ざんされたフリーソフトを配布することが可能になる。
(※ただし、実際はそんな簡単な話ではないと思うが)

また、「なりすまし」については、例えばパスワードをハッシュ化した値をNWキャプチャ等で取得された場合、そのハッシュ値となる元データを求めることができれば、パスワードを突破される可能性がある。

そのようなセキュリティの課題に対して、暗号学的ハッシュ関数は以下の特長がある。

ここは、wikiや他サイトから抜粋。

①原像計算困難性

ハッシュ値 h が与えられたとき、そこから h = hash(m) となるような任意のメッセージ m を探すことが困難でなければならない。

② 第2原像計算困難性 ( 弱衝突耐性 )

入力 m1 が与えられたとき、hash(m1) = hash(m2) となる(すなわち、衝突する)ような別の入力 m2m1とは異なる入力)を作成することが困難でなければならない。これを「弱衝突耐性」ともいう。

③ 強衝突耐性

hash(m1) = hash(m2) となるような m1m2を見つけることが困難でなければならない

②の弱衝突耐性と③強衝突耐性は、②の弱衝突耐性の方がセキュリティ強度が強い
※なんて面倒くさい日本語訳・・・。

詳細は以下のサイトを参照
https://zoom-blc.com/hash-function
ブロックチェーンの技術「一方向性ハッシュ関数」を理解しよう
https://alis.to/penyoo/articles/3k94QA4991lR
ハッシュ関数の強衝突耐性を実感できる例えを考える。

あわせて読みたい