ユーザーのパスワードの保持の仕方。もっというとsaltの保持の仕方。

| | コメント(0) | トラックバック(0)
今悩んでいるのが、ユーザーのパスワードの保持の仕方。
パスワードにはsaltをかけてハッシュ化する、というところまではいいんだけど、saltをどこに保持するのか?というところで悩ましい。

saltの保持の仕方候補は3つ
1.DBテーブル
2.外部ファイル
3.ソースベタ書き







 1.DBテーブル
Railsのプラグインであるところのrestful_authenticationなどはDBテーブルにsaltを格納している。ただ、これだと(ブラインド)SQLインジェクションとかに会うと、パスワードと同時にsalt値もわかっちゃう。

2.外部ファイル
どっかのサイトでsaltは外部ファイルとかに持ちましょうとか行ってたんだけど、ユーザーごとに個別のsaltを持つなら外部ファイルはパフォーマンス的にどうなんだろう、と思ってしまう。サイトで1つしか持たないのなら3のソースベタ書きでいいように思う。

3.ソースベタ書き
そもそもこれだとユーザー個別のsaltは保持できず、サイト全体で1つのsaltしか持てない。また、ユーザー登録のタイミングでsalt値を決めるのではなく、あらかじめsalt値を決めることとなるので、salt値を知る者が存在することになる。

と、こんな風にそれぞれの特徴を考えてはみたものの、正直、生ハッシュにしないで、ちゃんとsaltさえかければセキュリティは格段にあがると思うし、saltをかける意味というのはレインボーテーブルを防ぐことと、同一のパスワードが同一の文字列としてDBに格納されないところにある。だから、saltをどこに格納するかとか、salt値がわかっちゃったらどうだとかは、あんまり考えなくてもいいかな、という気がする。

さらに、万が一パスワード(ハッシュ後)もsaltもわかってしまった、という場合を考えてみる。
1のDBであれば、パスワード変更時にsalt値も変更されるので、ユーザーにパスワードの変更をお願いすれば対処は完了する(別途アプリの穴をふさぐとか、お願い自体ハードルたけーだろ、というのはあるけど)。しかし、サイト全体で1つのsalt値だとそうはいかない。

そうか。だからrestful_authenticationとかはDBなんだ!とかさっき納得したので、その記念にメモしてみたんだけど合ってますかね。

トラックバック(0)

このブログ記事を参照しているブログ一覧: ユーザーのパスワードの保持の仕方。もっというとsaltの保持の仕方。

このブログ記事に対するトラックバックURL: http://hirop0164.s326.xrea.com/mt/mt-tb.cgi/206

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ぴろしが2008年10月12日 20:11に書いたブログ記事です。

ひとつ前のブログ記事は「PHPのDomDocumentでXML生成 」です。

次のブログ記事は「生年月日はプルダウン式か記入式か」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。