• 検索結果がありません。

2. ウェブサイトの安全性向上のための取り組み

2.5 パスワードに関する対策

2.5 パスワードに関する対策

ウェブサイトにおける利用者の認証は、ユーザ ID とパスワードを用いる方法が一般的です。しかし、

パスワードの運用やウェブページ上のパスワードの取り扱い方法に問題がある場合、利用者の認証情 報が悪意ある人に不正取得される危険性が高まります。

認証情報の不正取得の手段の一つに、ユーザ ID やパスワードの「推測」があります。これは、推測さ れやすい単純なパスワードで運用している場合に悪用される手段ですが、ウェブページの表示方法によ っては、さらに推測のヒントを与えてしまう場合があります。利用者の認証を行うウェブサイトでは、次の 内容に注意してください。

初期パスワードは、暗号論的擬似乱数生成器を利用して規則性をなくし、可能であれば英数字や記 号を含めた長い文字列で発行してください。パスワード発行に規則性がある場合、調査のためのテス トユーザを複数登録され、その際に発行されたパスワードから規則性を導き出されてしまうかもしれま せん。利用者によっては、初期パスワードを変更せずに継続して利用することも考えられるため、初期 パスワードが推測しやすい仕様は避けるべきです。

パスワードの変更には、必ず現行パスワードの入力を求めるようにしてください。

認証画面で利用者が入力を誤った際、遷移後の画面で「パスワードが間違っています」というエラー メッセージを表示するものは、「ユーザ ID は正しく、パスワードが間違っている」ということを示している ことになります。このような表示内容は、登録されているユーザ ID の割り出しを容易にしてしまうため、

推測や盗み見により、利用者IDやパスワードが不正に取得される可能性がありま す。

認証情報の不正取得

誕生日?

住所?

名前?

利用者ID と同じ?

辞書に載っている?

悪意のある人

☞ 初期パスワードは、推測が困難な文字列で発行する

☞ パスワードの変更には、現行パスワードの入力を求める

☞ 入力後の応答メッセージが認証情報の推測のヒントとならない工夫をする 3)

1)

2)

2.5 パスワードに関する対策

お勧めできません。入力後の応答メッセージには、「ユーザ ID もしくはパスワードが違います」というよ うな表示を用い、認証情報の推測のヒントを与えない工夫をしてください。

利用者にパスワードを入力させるときは、ブラウザに備わっているパスワード専用の入力フィールド を用いるようにしてください。これにより、入力したパスワード文字列は伏せ字(アスタリスク "*")で表 示されます36

ウェブサイト内で保管したパスワードが SQL インジェクション攻撃などにより外部に漏洩した場合、

パスワードリスト攻撃等の不正ログインに悪用される可能性が高くなります。このため、万一パスワー ド情報が漏洩した場合でも直ちに悪用されることのないように、パスワードを保護した形で保管します。

この目的のためには、パスワードのハッシュ値(暗号論的ハッシュ関数により計算)の形で保管するこ とが一般的に行われています。

ハッシュ値から平文文字列を復元することは一般的には困難ですが、弱いパスワードの場合は辞 書攻撃により元のパスワードを復元できてしまいますし、複数の同じハッシュ値を探すことで、同一の 弱いパスワードをつけているアカウントを簡単に見つけることができてしまいます。また、辞書攻撃で 復元できないパスワードであっても、十分に長いパスワードでないと、総当り攻撃により、十分な時間 をかければ元のパスワードを復元できてしまう問題があります。そして、それを高速に実現するレイン ボーテーブルという技法が開発されています。

これらに対し、保管するハッシュ値を、パスワードにソルトと呼ばれるユーザ毎に異なる文字列をつ けてからハッシュ値を求めたものとすることにより、見かけのパスワードを長くして、レインボーテーブ ル攻撃を回避できますし、前記の同一のパスワードの発見も回避できます。したがって、このようなソ ルト付きハッシュ値の形でパスワードを保管することをお勧めします。

さらに、それでもなお、弱いパスワードや十分に長くないパスワードは、十分な時間をかければ復元 されてしまうので、復元にかかる計算時間を長くするために、あえて計算の遅いハッシュ関数を使う技 法があります。そのような遅いハッシュ関数を実現する一つの方法として、ハッシュ値をさらにハッシュ 関数にかける計算を繰り返し行う方法があり、この方法はストレッチングと呼ばれています。

36 これにより、入力した文字の目視確認ができなくなるので、長いパスワードを入力するには不便ですが、最近の一部 OS では、利用者の意思により一時的に入力した文字を画面に表示する機能を持つものがあります。

P@ssw0rd P@ssw0rd ユーザーX

ユーザーY

yKQkZc6qsPH8 qKwHPPYjHgwG

f705c11d4865eb4f60f9……

d22d220492cb09f06fd8……

パスワード ソルト パスワードとソルトを連結した

文字列のハッシュ値を計算 ソルト付きハッシュ値

同じパスワードの利用者がいても ハッシュ値は別の文字列となる ソルトは乱数等により

利用者毎に異なる文字列を生成

☞ 入力フィールドでは、パスワードは伏せ字で表示されるようにする

☞ パスワードをサーバ内で保管する際は、平文ではなくソルト付きハッシュ値の形で保管 する

4)

5)

2.5 パスワードに関する対策

■ 参考 URL

IPA: パスワードリスト攻撃による不正ログイン防止に向けた呼びかけ(サービス利用者向けの解説)

https://www.ipa.go.jp/about/press/20140917.html PHP.net: パスワードのハッシュ - Manual http://php.net/manual/ja/faq.passwords.php