web入門
すばらしきwebの世界

パスワードの保存方法 – 概要説明 –

2017.01.12セキュリティ

ログイン機能を持つシステムではパスワードを平文(いわゆるそのまま)でデータベースに格納するのではなく、
パスワードからハッシュ関数により生成したハッシュを格納するのが当たり前のようです。
色々な方法があるようですが、現在(2017年1月)で推奨される方法を記載します。


パスワードの登録方法

ハッシュ関数によりパスワードからハッシュを生成し、パスワードではなく生成されたハッシュをデータベースへ保存します。


ハッシュにする理由

パスワードではなくハッシュをデータベースへ保存する理由は、ハッシュを盗まれたとしても元のパスワードを推測出来ないからです。ハッシュには非可逆性がありハッシュからは元の値を導き出せないという特性があるからです。
しかし、あらかじめ大量のハッシュを保持したテーブルを用意し、それと比べることで元の値を導き出すというレインボー攻撃によってパスワードを推測されてしまう可能性があります。


レインボー攻撃への対応

対応として、salt(ソルト)を使用します。saltはパスワードに付与する任意の文字列のことです。saltによりパスワードの推測を困難にします。
従って、パスワード + salt をハッシュ関数に与え、ハッシュを生成しデータベースへ格納するのがお決まりのようです。

次回はPHPを例とし、パスワードのハッシュ化を具体的に説明します。