個人情報の漏えい事件やアカウントの乗っ取りなどの被害が後をたちません。

何らかの不正手段によってWebサイトがハッキングされて個人情報が漏えいした場合、パスワードデータが平文(非暗号)で保存される仕様になっていると、他のサービスで不正利用されるなど二次被害も予想されます。ユーザIDをメールアドレスとしているサイトが多数ありますので、使いまわしているパスワードとの組合せがあれば他のサイトでもそのまま使用できてしまいます。

日々さまざまなハッキング手法が生み出されるWebの世界では、常に完璧にセキュリティ対策を執り続けるのは不可能に近いので、「最悪盗まれても致命的なダメージとならない」という安全策も必要だと思います。

以下に既存サイトのパスワード保存形式を暗号化する改修ステップを整理してみました。

  1. 暗号化したパスワードが保管できるようにテーブルのフィールド長を拡張する
    MD5を使用する場合は最低32桁必要※
  2. ログインプログラムを改修
    パスワードを照合する際に入力値を一旦MD5ハッシュ値に変換して比較する
  3. 会員登録プログラムを改修
    入力したパスワードをMD5ハッシュ値に変換して保存する
  4. 会員情報変更プログラムを改修
    パスワードの変更があった場合に入力したパスワードをMD5ハッシュ値に変換して保存する
  5. バッチプログラムで平文パスワードを元にMD5ハッシュ変換した値に一括更新
  6. パスワードリマインダなどの機能は再発行のプロセスを仕様変更する必要あり

サービスレベルではパスワードの通知機能が使えなくなるなどのデメリットがありますが、セキュリティとのトレードオフで諦めるしかありません。

※ただしMD5やSHA1では、脆弱性が指摘されているので注意してほしい。現時点で最も手軽に使えて安全性の高いハッシュ・アルゴリズムはSHA256である。

(2014.8.19追記)
これらの暗号化方式では外部で不正流出した大量の情報によって暗号化データが解読されて出回っていることも考えられ安全とは言えないので、さらに独自の秘密キー設定も必要ですね。