こんにちはECナビ山口(tadasy)です。
忙しぶるのはどちらかというと得意です。

最近PeXという部署からECナビ事業本部というところに異動したのでrubyは触ってません。
えぇまったく。

前回の更新からだいぶ期間があきました。
まぁアレです。忙しかったのです。
つれー、つれーわー、実質(ry

前回はログファイルのセキュリティについて触れました。
Rails(Web)アプリケーションのセキュリティ(ログファイル編)

今回はRails2系でよく使われるプラグインのrestful_authenticationでの
パスワードハッシュ化について書きます。
※3系のことはよくわからんです。

restful_authenticationとは?

詳しくは
restful-authentication
を見てもらえればと思いますが
ざっくり説明すると
Webサービスなんかでよくあるユーザ管理(ユーザの登録、ログイン、ログアウト)なんかの機能をまとめた便利プラグインです。

パスワードハッシュ化&stretching

パスワードのハッシュ化とstretchingについては下の春山さんの資料が大変参考になります。

パスワードの話

restful_authenticationでのstretching

ではrestful_authenticationがstretchingしているところを見てみます。
RAILS_ROOT/vendor/plugins/restful-authentication/lib/authentication/by_password.rb

だいぶソースを端折っていますが、REST_AUTH_DIGEST_STRETCHESという定数で繰り返し回数を指定して
stretchingしているようです。
この定数は以下のファイルで設定されているようです。
RAILS_ROOT/config/initializers/site_keys.rb

このファイルは下のコマンドでモデルを作ったときに自動生成されます。
ruby script/generate authenticated user sessions

何回stretchする?

デフォルトの設定では10回のstretchをしているようです。
資料にも書いてありますが、回数が多ければ強度を増すことができます。
ただ、回数が多ければ多いほどハッシュ化に時間がかかりますし、ログイン認証処理にも同様に時間がかかる様になります。
なので、サービス要件を考慮した回数でstretchしたらいいと思います。

ちなみに僕が作るときは1000回以上はstretchするようにしています。
というのも、以前1000回のstretchingでサービスを構築した時の実績として、性能面ではサービスの要件を十分に満たせるレベルでしたし(むしろ速かった)、強度的にもある程度担保できていたと考えるからです。

ただ次回以降は、もう少しstretchして、5,000回くらいで試してみてもいいかもしれないとも思っています。