LoginSignup
1
0

More than 5 years have passed since last update.

パスワードの保存方法について

Posted at

目的

こんどモブプログラミング会で認証部分を作るので、知っていることを棚卸してみます。

パスワードの保存

IPAの安全なパスワードの作り方でも紹介されてます。salt付ハッシュ値の形でパスワードは保管しておきます。

なぜsalt付ハッシュ値?

大前提として、データは盗まれる可能性があります。プログラムをちゃんと作っていても、標的型攻撃や、内部犯には対抗できません。それに、完璧なプログラムなんてないと思います。
そうすると「盗まれても大丈夫」な方法でパスワードを保存しておく必要があります。(大丈夫、は言い過ぎかな。。)

暗号化すればいいじゃん

確かに、暗号化すれば読み取れません。しかし、復号方法がばれてしまえばパスワードがすべて読み取られてしまいます。別途復号方法を盗まれるなりすれば一大事です。生パスワードを保存しているよりははるかにいいですが。

ではハッシュ化すれば十分か

一方向ハッシュ化すれば復号できません(一応できるけどとても時間がかかる)。しかし、復号できなければOKかといったらそうではありません。あらかじめ同じハッシュ関数をつかってありそうなパスワードからハッシュ値の辞書を作っておくこともできます(レインボーテーブルと呼ぶそうです)。その辞書から逆引きすれば、パスワードがばれてしまいます(すべてのユーザが複雑なパスワードを設定しているとは限りませんので)。

だからsalt付ハッシュ値

saltと呼ばれるユーザ毎に異なる文字列をくっつけてハッシュ化します。辞書を作ってパスワードを割り出そうにも、作らなければならないパターンが膨大になり、解読は現実的でなくなります。とはいっても時間をかければ解読できないくもないので、
パスワードデータが漏洩したことが発覚したら、ユーザーに対してパスワード変更の依頼を迅速に出すことも大事そうです。不正なアクセスがないかどうか、監視の目は光らせる必要がありそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0