【コラム】ハッシュ関数とは何か

 最近やたらハッシュ関数という言葉を聞く。IT業界では昔からおなじみでも、日常生活の中ではそうそう登場することがなかった用語である。私自身も身近な世界ではバーガーチェーンのモーニングメニューくらいでしか遭遇したことがない(SNSで、話題のグループ化に使う「ハッシュタグ」はよく耳にするが、あれは成り立ちが違う)。

 しかし、インターネットの暗号化やブロックチェーンなどを通して、ビジネスでも頻繁に目にするようになった。今回はハッシュ関数に触れてみたいと思う。

 ハッシュ関数は、ある情報を加工して、別の情報を作る関数である。

 もとの情報 → ハッシュ関数 → 新しい情報

 そして、ここで作られた「新しい情報」(ハッシュ値という)には、次のような特徴がある。

・「もとの情報」が同じなら、「新しい情報」も必ず同じものが出てくる。

・「もとの情報」が少しでも違っていると、「新しい情報」は似ても似つかないものになる。

・「もとの情報」が長かろうが、短かろうが、必ず決まった長さになる。

・「新しい情報」から、「もとの情報」を復元することはできない。

 「もとの情報」から、全く異なる「新しい情報」を作る意味では、暗号に似ているようにも思える。しかし、暗号の場合は暗号キーさえ知っていれば、「新しい情報」(暗号文)から「もとの情報」(平文)を復元することができる。ハッシュ関数にはできない。ここは決定的な違いである。

 では、なぜハッシュ関数を使うのだろうか? ハッシュ関数はいろいろな用途で使われているが、改ざん対策ととても相性がよいのである。ちょっとでも「もとの情報」に手を加えると、「新しい情報」(ハッシュ値)は似ても似つかない値になるので、改ざんがバレるのだ。

 Windowsにはハッシュ関数が標準機能として含まれているので、それを使って実験してみよう。コマンドプロンプトを使ってハッシュ関数を使ってみる。「CertUtil」というのがハッシュ関数を使うための命令だ。ハッシュ関数にはとてもたくさんの種類があるが、古典的な「MD5」というハッシュ関数を使ってみよう。

 「もとの情報」が入っているファイルがhogehoge.txtである。ここでは、「もとの情報」として、「10万円借した」というテキストデータが保存されている。

 すると、「d092fc284d269d063523dacd2cffe7b6」という結果が出てくる。これが「10万円貸した」のMD5におけるハッシュ値である。何度やっても「もとの情報」が変わらない限り、同じ値が出てくる。

 ここで悪い人がいて、「もとの情報」を「100万円貸した」に変更したとする。0が1個足されただけなので、人間によるチェックでは目が滑って発見できないかもしれない。

 しかし、ハッシュ関数を使えば一目瞭然である。「100万円貸した」のハッシュ値は「157c0866afcc568dce9d7f253c20b29d」で、先ほどとは似ても似つかない値になっている。不正な改ざんを素早く明瞭に見つけることができるのだ。

 であれば、ハッシュ値の方もつじつまが合うように改ざんしてしまえば、不正ができるのでは? と思ってしまうが、ハッシュ値から「もとの情報」へ戻すことができないため、両者をつじつまが合うように改ざんすることは事実上不可能になっている。

 だから、例えばアプリなどが設定されたパスワードそのものをサーバやパソコンに保存すると不用心なので、そのハッシュ値を保存する。情報漏洩や不正侵入で、仮に悪意の第三者がハッシュ値を入手しても、パスワードを復元できないから、漏洩に怯えなくてすむ。

 一方、パスワードの確認は、入力されたパスワードからハッシュ値を計算し、それを保存してあるハッシュ値と比較すればすぐにできる。生のパスワードを保存するようなリスクを冒さなくても、パスワードが正しいかチェックできるのだ。

 ファイルを配る時に、そのファイルのハッシュ値を自社のホームページに載せたりすることもある。悪い人が配布されたファイルをウイルス入りのものにすり替えたとしても、そこから得られるハッシュ値は、ホームページに掲載されているハッシュ値と異なるものになるので、すり替えがバレるわけである。

【筆者略歴】

岡嶋裕史(おかじま・ゆうし) 中央大学国際情報学部開設準備室副室長。富士総合研究所、関東学院大学情報科学センター所長を経て現職。著書多数。近著に「ビッグデータの罠」(新潮社)など。


K.K. Kyodo News Facebookページ

ニュース解説特集や映像レポート、エンタメ情報、各種イベント案内や開催報告などがご覧いただけます。

第98回天皇杯 トピックス

決勝の結果(12月9日開催)

浦和レッズ   1-0   ベガルタ仙台

矢野経済研究所
ふるさと発見 新聞社の本
DRIVE & LOVE
11月11日はいただきますの日
野球知識検定
キャッチボールクラシック
このページのトップへ