プレステーション・ネットワークの情報漏洩問題で、「IDとパスワードが漏れた」と報道されているが、一応パスワードはHash化されているとのこと。
とりあえず安心しました。
今回の件をきっかけに、パスワードHash化について様々な方面で語られているので自分なりのメモ。
Q:
Hash化って何よ?
文字や数値をある一定の規則で変換すること。一方通行関数と呼ばれるハッシュ関数を使って計算する。
MD5とはSHA-1とかが有名。(有名ではあるのですが、最近では強度に問題あり と言われています)
Q:
パスワードをHash化すると何がいいの?
パスワードのHash値から、元のパスワードを求めることができないので、万が一データが漏洩しても、多少は安心。
※ パスワードを暗号化して管理する場合だと、暗号キー/暗号アルゴリズム等が分かってしまうと、パスワードを導き出せてしまう
Q:
パスワードのHash化って、どんな感じで使うの?
■パスワード登録/パスワード変更時など
入力されたパスワードの「Hash値」を求める。
求めた「パスワードHash値」をDBに管理する。
■ログイン時
入力されたパスワードの「Hash値」を求める。
求めた「パスワードHash値」と、DBに登録されている「パスワードHash値」が同じかどうかを比較する。
こんな感じ。
Q:
ソルトって何?
簡単に言うと、
塩 乱数です。
パスワードをHash化する際に
(パスワード文字列 + ソルト) を Hash化するようになります。
もしも、「ソルト」の値が犯人に分かっていない状態だと、強力な暗号キーになりえます。
※ 暗号を語る世界で、「料理における塩」のように、付け加えると結果(味)が
変わる という意味合いからソルトと呼ばれているとか。
Q:
じゃぁソルトとHash値で完璧だね♪
今回のPSNのように、DBへの進入を許している時点でWeb層にあるソースコードもばれていると考えた方がいいでしょう。
なので、ソルトの値や、Hashアルゴリズムの情報は、すべてハッカーには知られていることを前提に考えましょう。
Q:
ストレッチングって何?
Hash関数を何回もかけることです。
Q:
ストレッチングっているの?
あった方が良いでしょう。
システムにて管理している「パスワードHash値」が漏洩してしまった場合、犯人はパスワードの解読を試みます。
その際には、「同じHash化手順」をつかって「パスワードHash値」をもとめて、DBの「パスワードHash値」と同じかを比較していきます。
ストレッチングの回数が多い方が、「同じHash化手順」の処理時間がかかるので、結果、パスワードがばれにくくなります。
Q:
レインボー・クラックって何さ?
パスワード文字列から生成された「パスワード Hash値」を予め計算し、テーブル化しておきます。(レインボーテーブルと呼ぶ)
この事前に計算すみの「パスワードHash値」と同じ「パスワードHash値」をDBから探せばいいじゃんって方法。
あるターゲット(ユーザ)のパスワードを手当たり次第に調べるよりも、「このパスワードを使っているユーザを探す」という手法になるので、とっても効率がいい。
Q:
レインボー・クラックにへの対策は?
「ユーザID(あるいは、ユーザIDから一定の法則で求められる値)」「パスワード文字列」「システム内乱数(ソルト)」の3つで
Hash値を作ると、レインボー・クラックに対する対策はより強固なものになるんじゃないかなと思います。
※ ユーザID毎に「パスワードHash値」が変わってくるので、レインボーテーブルの威力が激減します。
Q:
それで完璧ですよね?
んなこたーない。
時間をかければ、パスワードの解読は出来てしまいます。
Q:
じゃぁどうすれば?
パスワードの解読に「時間がかかるようにする」くらしか対策は無いですかね・・・
具体的には、ストレッチングの回数を増やすくらいですかね。
それでも、「時間をかければパスワード解読ができてしまう」という事実は変わらない訳ですが。
Q:
その他の防衛方法は?
パスワードに利用できる文字のルールとして
・文字数の制限を入れる(8文字以上とか)
・英数混在、記号を必須にするなどのルール追加
・一般辞書にあるような、英単語、地名、略語等は禁止
・苗字、名前、ログインID、メールアドレスの一部等の利用禁止
・キーボードの並び順(qwert等)、規則性のある数値/英字の並び禁止(abcde等)
・定期的なパスワード変更必須
などをルールとして入れるくらいでしょうか。
Q:
もっと画期的な方法は?
そもそも、不正進入されないようにすることが大事です。
ですが、絶対に不正進入されないシステムを構築することも実際は不可能でしょう。。。
そういったことも考慮し、さまざまなリスク対策を施して下さい。
その他
パスワードを忘れ機能で
A:パスワードを再発行させるシステム
B:設定中のパスワードをメール等で知らせてくるシステム
の2種類があります。
設定中のパスワードを知らせてくるということは、復号可能な形でパスワードを管理しているということになります。
こういったサービスを行っているサイトがハッカーによる進入を許した場合、甚大な被害に繋がる可能性があるかなぁと思います。
(多くの人が、ID/PASSWORDの組み合わせを他のサイトでも使いまわしているでしょうから・・・)

3