web-dev-qa-db-ja.com

ワンタイムパスワードリセットリンクがワンタイムパスワードより安全なのはなぜですか?

最近、創作会社に応募しました

軍事、航空宇宙などのセキュリティクリティカルなソリューション.

彼らのウェブページで登録した後、ユーザー名とプレーンテキストのワンタイムパスワードをメールで受け取りました。私の最初の反応は、特にセキュリティがコア能力であるはずであるということを考えると、彼らの能力不足で恐怖に飛び込むことでしたが、もう一度考えた後、私は新しいユーザーであることに気付きましたそして、まだ何も問題になっていない。しかしその後、パスワードリセット機能が実際に平文ワンタイムパスワードを送信することがわかります。

ワンタイムパスワードをプレーンテキストで送信するのは本当に悪いのでしょうか?特に、セキュリティから生計を立てていると主張する人がそうする場合はどうでしょうか?

私はこれを読んでいました 非常に賛成の回答 電子メールでパスワードを送信してはいけないと言っています。代わりに、ユーザーがパスワードを忘れた場合は、ワンタイムパスワードリセットリンクを送信する必要があります。

しかし、ワンタイムパスワードとワンタイムリンクの根本的な違いは何ですか?

これまでのところ、見つかりませんでした。私が得た最も近い2つの手がかりは:

  1. 非常に賛成された回答は次のように述べています:

    これらすべてをSSLで実行します。

    つまり、SSL経由でワンタイムリンクを送信します。この点は全然わかりません。 SSLを介して誰かに1回限りのリセットリンクを(おそらく電子メールで)送信するにはどうすればよいですか?

  2. この質問 の下に Andersによるコメント があり、リンクの有効期限は切れますが、ワンタイムパスワードは切れません。しかし、再び、私はこれを購入しません。パスワードdoは、必要に応じて期限切れになります。

さらに、ユーザーが自分の電子メールアドレスとは異なるユーザー名を持っている場合、ワンタイムパスワードはパスワードリセットリンクよりも実際により安全になります。誰でもリンクを傍受してログインし、データを盗むことができますが、ユーザー名を知っているのがユーザーだけである場合、ワンタイムパスワードを使用できるのは彼だけです。

同じ文章でpasswordplaintextという言葉を聞いたときに、情報セキュリティを扱う人々がどのように反応するか知っていますか?ワンタイムパスワードリセットリンクがワンタイムのユーザー名とパスワードにすぎない場合、この慣行はさらに下に見下されるべきです、私は正しいですか?

全体として:平文でワンタイムパスワードをメールで送信することは、完全な無能を意味しますか?

13
Martin Drozdik

@Polynomialが彼の提案を提案した理由を正確には知りませんが、ここにあなたの混乱について私が考えていることがあります。

ワンタイムパスワードをプレーンテキストで送信するのは本当に悪いことですか?

私はそうは思いません。悪意のあるユーザーがこれを悪用するには、メールボックスまたはユーザー名にアクセスできる必要があります。ただし、ユーザー名は常に適用できるとは限りません。パスワードリセットリンクが送信された場合、その場合でも、攻撃者はメールにアクセスする必要があります。
パスワードリセットリンクがワンタイムパスワードよりも優れていると私が考える分野は、ワンタイムパスワードを実装する場合、次のことを行う必要があることです。

  • ユーザーがログインしたらすぐにパスワードを変更してください。パスワードがリセットされる前に、ユーザーと悪意のあるユーザーの両方が同時にWebサイトにアクセスした場合はどうなりますか?
  • ワンタイムパスワードを使用してパスワードをリセットするときに行うことができる無効なリクエストの数を制限/抑制します。攻撃者がパスワードリセット機能に対してブルートフォース/辞書攻撃を試みた場合はどうなりますか?ワンタイムパスワードリセットリンクがあれば、心配する必要はありません。

平文で電子メールでパスワードを送信することは、完全な無能を意味しますか?

いいえ。それは単なる異なる哲学です。

2
Limit

これは問題ない可能性があります。すべてのパスワードリセットメールに「ワンタイムパスワード」が含まれていますが、これは実際には秘密鍵であり、ブルートフォースでは実行不可能な長い擬似ランダムシーケンスに基づいています。

また、これは正当なユーザーに対するサービス拒否攻撃があることも意味します。

  1. 攻撃者はWebサイトにアクセスし、Bob @ example.comがユーザーであることを知っています(たとえば、ユーザー名列挙の脆弱性により)。
  2. 攻撃者はボブのパスワードをリセットするために押します。
  3. [email protected]に送信される新しい一時的で安全なパスワード
  4. ボブは、自分の電子メールに現在アクセスできないと、システムにログインできません。

パスワードリセットリンクにはこの欠陥はありませんが、問題のシステムにとってはマイナーなものです。

一時的なパスワードが発行された場合、少なくとも80ビットのエントロピー(現在のNISTの推奨事項)を使用してパスワードを生成し、ユーザーがログイン時に他のURLに「強制的に参照」しても、すぐにパスワードを変更するように強制するのが賢明です。 Webサイトの認証済みセクション。つまり、パスワードが変更されるまでパスワード変更画面にリダイレクトし、別のパスワードを選択していることを確認する必要があります。

もう1つの問題は、ユーザーが一時パスワードをすぐに使用しない場合です。ユーザーのメールボックスにクリアテキストで保存されたパスワードがあり、これはパスワードの保存に最適な場所ではありません。このパスワードを何らかの方法で期限切れにしなければならない場合があり、アプリケーションがさらに複雑になります。個別のパスワードリセットリンクを使用すると、プライマリパスワードではなく、リンク自体のインスタンスが期限切れになるだけなので、処理が簡単になります。

つまり、アカウントに関連付けられたメールボックスに実際にアクセスできることをユーザーが確認するまで、ユーザーのパスワードを変更しない別のパスワードリセットメカニズムを使用する方がはるかに簡単で安全です。

9
SilverlightFox

ワンタイムパスワードとリセットリンクは、機能的に同等の方法で実装できます。しかし実際には、ワンタイムパスワードはおそらく少しmore安全です。

次のリセットリンクを検討してください。

https://www.example.com/reset/a93f51cd-ae20-46f8-9575-3d9bfa088e5e

次のワンタイムパスワードと比較:

a93f51cd-ae20-46f8-9575-3d9bfa088e5e

リセットリンクの一般的なワークフローは次のとおりです。

  1. リンクをクリックしてください。
  2. パスワードを変更する画面が表示されます。
  3. 新しいパスワードを入力して確認し、保存します。

ワンタイムパスワードの一般的なワークフローは次のとおりです。

  1. ログインページに移動します。
  2. ユーザー名とワンタイムパスワードを入力します。
  3. (バックグラウンドでワンタイムパスワードが無効になりました。)パスワードを変更する画面が表示されます。
  4. 新しいパスワードを入力して確認し、保存します。

ワンタイムパスワードの方が安全性が高い理由は、ご指摘のとおり、ワンタイムパスワードではユーザー名を知る必要があるためです。通常、リセットリンクではユーザー名を入力する必要はありません。また、ワンタイムパスワードを入力するとすぐに無効になり、再利用できなくなる可能性がありますが、リセットリンクは通常、新しいパスワードを送信しない限り複数回クリックできます。変化する。

それらを機能的に同等にするためには、リセットリンクをクリックした後、リンクをすぐに期限切れにし、ユーザーに新しいパスワードとともにユーザー名を入力するよう依頼する必要があります。最初のクリック後にリセットリンクがすぐに期限切れになる潜在的な欠点の1つは、一部のメールプログラムやウイルス対策プログラムがリンクをたどって悪意のあるコンテンツをチェックすることです。これにより、リンクをクリックする前にリンクが期限切れになる可能性があります。

5
TTT