【初心者向け】ブロックチェーンの超簡単基礎知識3〜ハッシュってなに?〜
はろーブロックチェーン。
こんにちは。りえへいです。
今日は暗号化のもう一つの重要技術、ハッシュ関数についてサクッとお話しします。
ハッシュと言えばハッシュタグしか思い浮かばなかったりえへいですが、ブロックチェーン関連本では頻出必至のとても大事な技術です。
ハッシュ関数とは?
ハッシュ関数は、
1.ある入力値に関して常に同じ値を返す
2.ただし、どのような値を返すのかが、全く予想できない
という性質を持った数学上の仕組みです。
また、ハッシュ関数から得られた値をハッシュ値と呼びます。
みなさん数学の1次関数って覚えていますか?
y=3Xとかいうあれです。
例えば、X=2の場合、yは6になりますね。
この場合、X=2という入力に関して、常に6を返すため、ハッシュ関数の1.の性質は満たしています。
しかし、どのような値になるのかというのは、6だと簡単に計算できてしまうため、2の性質は満たしていないということがお分りいただけるかと思います。
このような1次関数とは異なり、ハッシュ関数では、入力値からは想像もつかないような値が返ってきます。
1文字違うだけで、返ってくる値が全然違うんですよね。
ハッシュ値を実際に調べてみよう
以下のサイトで実際にハッシュ値を生成してみました。
「りえへい」と入力するとハッシュ値はこうなります。
AF51A0C12D72B03F264B729EBCB54EC4DF2153BD8D
5AC0CF6A69340C56D1A26454DDF5BCFB81A3ADBC99
175617969F2ECBD3F9FA505372DDD348BA5F096D4A84
「りえへん」と入力するとハッシュ値はこうでした。
F21312AB514D788E95C2AB208A74C955821F662E3F7
116A4AD1B4509D0518AFB4551F4F0D1F95A96BEF4FC
00B5C4AB1C371E729D95FD233F076264842ED3A55A
全然違う、、、、そして意味は全くわからない!笑
ちなみに、このハッシュ値はどんなデータを入力しても128桁の文字列が返ってきます。
(SHA-512という方式の場合)
なので、例えば小説一冊分の文字を打ち込んでも、128桁の文字列が生成されます。
そして、仮に小説の文字が1文字違うだけで、出てくる数字は全く異なります。
ハッシュ値を比べることで、データが改ざんされていないか一発で分かる
これはとても便利な仕組みで、2つの本を渡されて、全く同一の中身かどうか検証しろと言われたときに、わざわざ文章を1文字ずつ見比べる必要はありません。
ハッシュ値を生成すれば、128桁の文字列が同じかどうかチェックすれば簡単に調べることができます。
つまり、データの改ざんが行われていないか一瞬で見抜けるんですよね。
ハッシュ値からは元のデータは分からない
また、このハッシュ値の重要なポイントは、ハッシュ値から元のデータを復元することが不可能な点です。
「りえへい」のハッシュ値は一瞬で、AF51A0C12D72B03F264B729EBCB54EC4DF2153BD8D
5AC0CF6A69340C56D1A26454DDF5BCFB81A3ADBC99
175617969F2ECBD3F9FA505372DDD348BA5F096D4A84
と出せますが、
AF51A0C12D72B03F264B729EBCB54EC4DF2153BD8D
5AC0CF6A69340C56D1A26454DDF5BCFB81A3ADBC99
175617969F2ECBD3F9FA505372DDD348BA5F096D4A84
がなんという言葉から生成されたハッシュ値か逆算することは不可能なんです!
うーん、何度考えても摩訶不思議でよくできた仕組みだなと思います。
このハッシュ関数と先日記事に書いた公開鍵暗号を組み合わせによって、ブロックチェーン上では電子署名の確からしさを保証しています。
ひとまず、今回はハッシュ値が何かということがぼんやりとわかってもらえると嬉しいですー!
まとめ
ハッシュ関数とは、どんな値が出てくるか全く予想ができないびっくり箱みたいな仕組みだよ。
でも同じ内容を入力すれば、かならず同じ数値が出てくるのがまた不思議。
この性質を利用すれば、大きなデータも一瞬で元データに変更が加えられていないかを見抜くことができるよ。