1
/
5

パスワードの保存方法について(20180602更新)

【目的】

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


【パスワードの保存】

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


【なぜsalt付ハッシュ値?】

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


暗号化すればいいじゃん

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


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

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


だからsalt付ハッシュ値

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

株式会社pringでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!
同じタグの記事
今週のランキング