- 旧: 現在のパスワードをメールで送信する(パスワードリマインダ)
- 新: パスワード再設定の画面のURLをメールで送信する(パスワードリセット)
パスワードリマインダのリスク
良く指摘されるように、パスワードリマインダの場合、2つの問題があります。- 現在のパスワードをメール送信できるということは、パスワードをハッシュ値で保存していない証拠である
- メールは平文通信なので、パスワードを書いたメールが盗聴されると被害が甚大になる
パスワードが盗聴されると長期の悪用に気づかない
仮にパスワードリマインダのメールが盗聴されると、第三者にパスワードを知られ、そのパスワードにより不正アクセスされることになります(リスクベース認証や2段階認証がない場合)。これ自体とてもよろしくないわけですが、加えて以下が問題だと言えます。- パスワードが悪用されていることに利用者が気づくことが難しい
- 悪用が長期間に及ぶ
パスワードリセット方式の優位点
一方、パスワードリセット方式の場合、パスワードをメール送信する方式と比べて以下のコントロールを実現できます。- パスワード再設定できる回数を1回限りとする
- パスワード再設定の結果をメール通知する
- 本来の利用者と第三者のうち、どちらがパスワードを再設定できるかは「早い者勝ち」になるが、運が良ければ第三者による再設定を防げる
- 運悪く、先に第三者によりパスワードを再設定された場合、メール通知により、利用者がその事実に気づくことができる
冒頭で紹介した某サイトのパスワードリセット機能には、パスワードが再設定されたことのメール通知がありませんでした。このため、せっかくパスワードリセット方式に変更したものの、そのメリットは十分に実現されていない状況です。
まとめ
パスワードリマインダとパスワードリセットの安全性を比較しました。どちらの場合でも、メールが盗聴されるという状況では第三者にパスワードを知られる(パスワードリセットの場合はパスワード再設定されることにより)可能性はありますが、パスワードリセット方式の場合、第三者にパスワードを知られたという事実を利用者が察知できるという点が異なります。このため、パスワードをメール送信する方式のパスワードリマインダは避け、パスワードリセット機能を採用するのがよいでしょう。この場合は、以下(再掲)を忘れずに実装しましょう。- パスワード再設定できる回数を1回限りとする
- パスワード再設定の結果をメール通知する
追記(13:10)
パスワードリセットのパスワード再設定画面には、有効期間(1時間~1日程度)を設ける場合が一般的です。この機能が役立つ局面はあまり思いつきませんが、パスワードリセットを途中まで実行して、なんらかの理由でパスワードリセットしなかった(パスワードを思い出した等)後に、たまたま第三者がパスワードリセットのURLを見つけて悪用する、などのシナリオを緩和できます。
また、利用者の立場で、パスワードリマインダ機能を使ってパスワードを受信した場合は、ただちにパスワードを変更すれば、その後の悪用は防止することができます。
あわせて読みたい
毎日のように見るメールならパスワードリセットされたのにも気付きますが、何ヶ月も見ない人もざらです。(下手したら永遠に見ない)
返信削除リテラシーが高い(?)ような人でも捨て垢のメールアドレスなど忘れ去って、しかも、そのアカウントを登録用に使ってるとか多いのでは。
メールが盗聴されるような環境ではどっちもどっちで、有意にセキュリティが高まるような話ではないような。
ハッシュ化されていないのは全然別ですが、新しいパスワード発行ならこの問題はクリアできますし。
最近のパスワードリセットしたものを見てみたら超大手でも、リセットURLがSSLじゃないのもありました。
コメントありがとうございます。
返信削除ご指摘のような状況は十分あり得ると思いますが「利用者側でコントロールしようと思えばできる」という点が違うという趣旨です。ユーザが意識してコントロールしていない状況であれば、ご指摘のように似たようなものだと思います。