Skip to content

パスワード保管方法

一番ダメなパスワード保管方法

DBに平文でパスワードを保管すること。

じゃあハッシュ化して保管すれば十分か

不十分。単にハッシュ化しただけだと、単純なパスワードの場合に簡単にパスワードを特定されてしまう。 流れ

  • 攻撃者がDBまで侵入し、パスワードを奪う。
  • 奪ったパスワードはハッシュ化されているが、そのうちいくつかが重複していることに気づく。
  • 複数ユーザーでパスワードが一致していることから、ハッシュ化前のパスワードは単純なパスワード(Ex."password")である可能性が高い。
  • 単純なパスワードとして知られる文字列をハッシュ化してみたら、奪ったパスワードと一致。パスワード割り出しに成功。

じゃあどうすれば良いのか

パスワードにユーザー毎に異なる文字列(salt)を連結し、それをハッシュ化してDBに保管する。 こうすることで、DBに保管されるパスワード情報(pass+saltをハッシュ化した文字列)が一致することがなくなる。 DBへの保管方法は、ハッシュ化アルゴリズム(md5など)+ソルト+ハッシュ値をユーザー毎に持たせるのが一般的。

もっと良い方法はある?

DBへの侵入を前提とすると、↑の方法だと攻撃者はsaltも入手できてしまう。 よりパスワードの機密性を高めるなら、DBとは別の機密性の高いファイルにpepperと呼ばれる文字列を保管しておき、 pass+salt+pepperをハッシュ化してDBにパスワード情報として保管しておくと良い。 ハッシュ値を奪えてもpepperを知らなければ元のパスワードを割り出すのは困難。

とは言ったけど・・・

仮にpass+salt+pepperでパスワードを保管したとしても、攻撃者にパスワードを割り出される可能性を0にはできない。 あくまでもこのような対策は、攻撃者がパスワードを割り出すことを最大限困難にすることを目的としている。 そうすれば、パスワード漏洩を検知した際に、できることが増えてくる。