ハッシュポテトと目玉焼きの朝食。「ハッシュ」は「細切れにする」という意味 Photo by Getty Images

ブロックチェーンが「挑戦」であることの根幹「ハッシュ」って何だ?

謎の文字列を作る「関数」の深い意味
発売後ただちに重版となったブルーバックスの話題書『ブロックチェーン』。同書を開くと、「ハッシュ」という謎の技術の解説に多くのページが割かれている。これはどういうことなのか。著者・岡嶋裕史氏による特別エッセイで、「ハッシュ」を知ることの絶大なメリットを教えてもらおう。

5600f6f63e7bbdcf636401fd46567acb183b62ba
acba2ddd835902f59aa949bc69b8f0aa6c4221e6

それぞれ40文字からなるこの2つの文字列はいったい何なのか。暗号か、未知の借金証文か、あるいは異星生命体からの最後通牒か。

実はどれも違う。夏目漱石の『それから』より引いた一節である。

具体的にはクライマックスが近い、「彼は彼の頭の中に(中略)三千代以外には、父も兄も社会も人間も悉く敵であった。」の部分である。そして1つめの文字列は原文そのまま、2つめは文章の最後にあった「。」だけを削ったものである。

これらが原文と似ても似つかない見た目になっているのは、原文を「ハッシュ関数」にかけて得られた結果である「ハッシュ値」だからだ。

ハッシュという言葉を耳にしたことがある方は多いと思う。10年前はハンバーガーチェーンのモーニングメニューでしかお目にかからなかったが、近年急速に日常生活の中に割り込んできた。

ハッシュポテト「ハッシュポテト」は和製英語。正しい英語では「ハッシュブラウンズ」だ Photo by Masaaki Komori on Unsplash

本来「hash」とは「細切れにする」という意味。だからハッシュポテトは、じゃがいもを細切れにして揚げたものを表す和製英語で、冒頭のハッシュ値は原データを細切れにして一定の文字数にまとめたものだ。そのため「要約値」などと呼ばれることもある。

ハッシュ値を作るためのハッシュ関数にはさまざまな種類がある。冒頭で使っているハッシュ関数はSHA-1といって、原データを40文字の16進数に変換する。

だが、冒頭のアレが、『それから』の要約だよと言われても、戸惑う方が多いと思う。こんな、要約になっていなさそうな要約を、どうしてみんな有り難がるのだろう?

実はハッシュ値には、次のような性質がある。

必ず一定の文字数になる扱いやすい
何度繰り返しても、原文が同じなら同じハッシュ値になるデータのチェックに使える
原文をちょっとでも改変すると、ハッシュ値は似ても似つかない値になるデータの悪用(改竄)対策に使える
ハッシュ値から原文を復元できないデータの悪用対策に使える