パスワードを暗号化するために利用されているハッシュ関数。ハッシュ値から元のパスワードデータを復元することができないというのが、ハッシュ関数の特徴である。
2
しかし、パスワードなんてしょせん10文字以内。
今のコンピュータ性能であれば、できるのでは?
この疑問に関して、ズバリ過去問(H20SV午後Ⅰ問4)で解説されている。
M君 :しかし,部門サーバのOSでは,パスワードはハッシュ化されています。ハッシュ値からパスワードを復元することは,困難なのではないでしょうか。
H主任:パスワード候補のハッシュ値をあらかじめ計算し蓄えておいたテーブルを利用して,ハッシュ値からパスワードを特定する方法もある。例えば,小文字のアルファベットと数字で作成される7文字のパスワードの候補数は,[ d ]で表されるから,約780億通りになる。1秒間にパスワードを1万回試すことができるとすると,すべてのパスワードを試すには,約91日必要だ。ところが,テーブルがソート済みで2分探索法を利用できるとすると,テーブルのデータ数をNとして,最大比較回数は[ e ]を超えない整数値になる。1回の比較に100ミリ秒かかるとしても,最大3.7秒で探索できることになる。
M君 :なるほど。ただし,約780億通りだとすると,テーブルのサイズはかなり大きくなりそうですね。
H主任:そのとおりだ。パスワードとハッシュ値の一組当たりのサイズを30バイトとすると,全体で約2.4 T (W)バイトのテーブルになる。しかし,レインボーテーブルというテーブルを用いた攻撃では,ハッジュ値の計算を併用することによって,テーブルのサイズを抑えつつ,数秒から数分でほとんどのパスワードを解読できたという報告がある。
M君 :それは危険ですね。では,どうしたらいいのでしょうか。
H主任:パスワードの情報だけでなく,ソルトという情報を付加してハッシュ値を計算することによって,ハッシュ値からパスワードを特定しにくくする方法を採用したOSを導入するのがいいだろう。

設問4 サーバに対する不正ログインについて, (1)~(3)に答えよ。
(1)本文中の[ d ],[ e ]に入れる適切な数式を解答群の中から選び,記号で答えよ。
解答群
ア 736 イ 36^ ウ 36^7 工 36^7
オ log2N カ log10N キ N log2N ク Nlog10N
(3)ソルトを使用するとハッジュ値からパスワードを特定しにくくなるのはなぜか。その理由を, 40字以内で具体的に述べよ。
この、問題(3)を考えましょう。
難しい問題ですが、順を追って説明します。

パスワードの保存方法
ユーザ認証用のパスワードは、認証サーバにて、そのままの平文で保存されているわけではない。ハッシュ値によって暗号化されている。
SE娘の剣)ソルトその1
929c854c

最近は不正アクセスによって、OCNのIDパスワードが最大400万件流出の可能性というニュースを聞きました。でも、確かにこのようにハッシュ化されていれば、元のパスワードは分からないですね。
そうなんだ。でも、最近は攻撃者もあの手この手で攻めてくる。
以下のように、パスワードとハッシュ値をデータベース化しておくのだ(レインボーテーブル)。そして、不正入手したパスワードのハッシュ値から元のパスワードを見つければよい。
SE娘の剣)ソルトその2
そこで、ソルトの登場だ。パスワードをハッシュするときに、ランダムな値(ソルト)を付加する。これにより、同じパスワードでも、ソルトが違うので、ハッシュ値も違う。攻撃者はレインボーテーブルを用意できなくなるのだ。
SE娘の剣)ソルトその3
解答
・同じパスワードでもソルトが異なるとハッシュ値が変わるから
・攻撃者がソルトの値ごとにテーブルを用意する必要があるから

ちなみに、ソルト(salt)とは、塩コショーの「塩」で、ハッシュのセキュリティを強化するために、塩を振りかけるという意味である。