gawker mediaのにのまえにならないようにパスワードを保存する方法

gawker mediaがハックされて惨憺たることになっている。ユーザのパスワードが数万(?)と漏れて、同じパスワードを使い回しているユーザの別サービス(ツイッターやメール)まで覗かれるハメに。どうしてこうなったかには色々あるんだろうど、一番マズかったのは弱いパスワードの暗号化の仕方だ。
そこで、Codaさんからアプリケーション開発者へのアドバイス

bcryptを使え、bcryptを使え、bcryptを使え、bcryptを使え、、、

http://codahale.com/how-to-safely-store-a-password/

MD5, SHA1, SHA256, SHA512, SHA-3などは使わないこれらはデータの整合性チェック用の高速ハッシュアルゴリズム。高速はデータチェックにはいいが、パスワードを隠すにはよくない。

今時のpcは毎秒330メガのmd5を計算できる。6文字の[a-z0-9]のパスワードのハッシュは40秒で全て試せる。

20万円とちょっとの時間をかければcudaでマイスーパーコンピュータが組める。これなら毎秒7億のパスワードのハッシュを計算できる。

Saltを使っても無駄。手で収穫したオーガニックヒマラヤピンク塩を使っても駄目。速いハッシュアルゴリズムを使っていることに変わりはないから。

bcryptはwork factorという計算の負荷(遅さ)を調整するパラメタを持つ。したがって、ムーアの法則についていくことができる。

work factor=12だと「yaaa」をハッシュするのに0.3秒。同じ環境でmd5だと1マイクロセカンド。10の5乗の違いだ。これだと、40秒毎にパスワードをクラックするのが12年になる。

結論: パスワードにはbcryptを使う。肝に銘じておこう。