マイナンバー・ICTが拓くセキュアで豊かな社会
第18回 カフェ発 鍵を公開しても安全? 公開鍵暗号と共通鍵暗号(1)
ICT
2019.06.07
第18回 カフェ発マイナンバー・ICTが拓くセキュアで豊かな社会
鍵を公開しても安全?
公開鍵暗号と共通鍵暗号(1)
プログラミングで使うハッシュ関数の特徴とは
ある日の午前、都内文田区にあるカフェデラクレ(Café de la clé)。今年初めての台風が来るという天気予報がある日で、店には誰もいなかった。
* * *
カランカラン♪
「いらっしゃいませ。」
マスターの加藤が顔を上げて、声をかけた。
「おはよう、加藤くん。誰もいないんだね。」
常連の竹見が店内を見回して言った。手には少しぬれた傘を持っている。
「そうなんですよ。まだあんまり降ってなさそうなので、もう少しはくると思っていましたが、なかなか。」
加藤は、洗い終わったグラスを整理しながら言った。
「風はかなり強くなってきたしね。ところで絵美ちゃんの勤務日じゃなかったっけ?」
風の音が、ビュービューと中まで響いていた。
「今日は、台風がひどそうなので、お休みしていいと言いました。あんまりお客さんも期待できないですし。」
絵美は、近くの大学に通う学生で、講義の合間にこの店のアルバイトを続けていた。
「確かに。」
話しながら、竹見はカウンターに腰掛けた。
「いつものでよろしいですか?」
グラスの水を出しながら加藤は尋ねた。
「今日はお昼も食べるかな。」
「うちの営業を気にしていただいてありがとうございます。今日はハッシュドビーフを仕込んだんですが。」
「じゃあ、それにしよう。」
加藤は手際よく、小鍋に大鍋からソースをとり火にかけ、冷蔵庫から既に皿に盛り付けられていたサラダを出すと、竹見に出した。
「ハッシュドビーフをつくるたびに、竹見先生の講義を思い出します。」
「あぁ、暗号の講義か。ずいぶん昔の話だね。」
竹見はクスッと思い出し笑いをした。
「『単純にハッシュとは細かく刻むことで、細切れの肉料理であるハッシュドビーフも同じ語源だよ。』っていう話です。僕には新鮮でした。ハッシュ関数はプログラミングの講義で使っていた身近な用語だったのに、使い方や考え方が違う(*)ということが。」
加藤は、鍋をお玉でかきまわしながら言った。
「この点、なかなか浸透しなかったねぇ。最近はだいぶましになってきたが。」
竹見はフォークを片手にサラダを手に取った。
「そうですね。パスワードの保存は一方向性の性質を利用してハッシュ値で保存するものですが、検索なんかで利用する暗号学的には、意味がないハッシュ関数で簡易実装していたようなケースも昔はありましたね。」
「うん、一方向性の大事さが伝わってきているようでうれしいよ。一方向だから、保存されているハッシュ値からパスワードの文字列に戻せない、ってことはちゃんとわかってほしいことだからね。といっても、まだサーバ管理者にパスワードそのものを教えて下さい、と言ってくる学生はいるようだが。」
「パスワードがそのまま保存されているイメージを持つ人は多いでしょうね。」
加藤は、沸騰した鍋を火から下ろし、炊飯器からお米をよそうと、鍋のソースを皿にうつし、すぐに竹見へ出した。
*同じ言葉でも使い方や考え方が違う
暗号で利用する暗号学的なハッシュ関数とプログラミングなどで利用するハッシュ関数、利用の目的も違いますし必要とされている要件が違います。
通常のハッシュ関数の目的は、情報の長さを切り詰め、一定の長さに揃えることです。これにより、不定の長さであった情報が短い固定長となり、メモリ上での扱いが容易になります。この性質を利用して、検索などをより簡単に行うことができるようになります。一方で、暗号分野で利用される一方向性ハッシュ関数は、(可変長)情報の代表値を見つける(=情報の指紋のようなもの、その情報の特長を表している)を見つけることを目的とし、導き出されたハッシュ値から入力データを見つけることが出来ない、という性質が大事となります。