パスワードのハッシュ化
東証1部の音楽、芸能プロダクションアミューズのECサイトから顧客情報が流失した模様だ。
以上のニュース:http://www.nikkei.co.jp/news/main/20090808AT2C0701C07082009.html
http://atmarkit.blog.corp.itmedia.co.jp/archives/50887927.html によると顧客の個人情報は元よりパスワードも流失下とのこと。しかもパスワードをそのままDBに保存していたという。
通常は、万が一パスワードが流失しても大丈夫なようにパスワードはハッシュ化し保存する。
ハッシュ化には様々な方法があるが、PHPの場合 md5() 関数を使用することにより一定の文字列をハッシュ化することができる。
例えば hogehoge という文字列を md5() でハッシュ化すると a756b4981adf83bcf の様な文字列を得ることが出来る。ハッシュ化された文字列は復号できないため a756b4981adf83bcf から元の文字列 hogehoge を知ることは出来ない。しかし元の文字列が変わらない限りハッシュも変化しないため、DBに保存してある a756b4981adf83bcf と md5(”hoeghoge”) が同じであれば入力されたパスワードが正しいという仕組みだ。
しかしmd5にも問題があり、辞書攻撃などmd5やsha1によるハッシュ化に対する攻撃対策も必要である。対策の一つとして多用されているのがSaltを一緒にハッシュ化するケースである。
Saltとはハッシュ化したい文字列とは別にランダムな文字列の事。このSaltをハッシュ化したい文字列と一緒にハッシュ化することによって、復号がさらに困難になるという物。
PHPの場合:
$salt = “wi84mJEn4″;
$pass = “hogehoge”;
md5($salt.$pass);
又、Saltも一定の文字列ではなくユーザー毎に個別のSaltを割り当てると更にセキュリティが向上するとのこと。
ハッシュ化もしないで保存すると、クラッキングでパスワードが流失する以前にDBメンテナンス時についうっかりパスワードを見てしまうなんて事も避けることは出来ない。こうなると本当に内部統制を執行していたのか疑問になる。