web-dev-qa-db-ja.com

PINベースのWeb認証スキームはどのように機能しますか?

FacebookがモバイルWebサイトで提供するものと同様に、WebアプリケーションにPINベースの認証を実装することに興味があります。

ユーザーフローは次のとおりです。

  1. ユーザーは新しいブラウザで初めてサイトにアクセスし、プロンプトでユーザー名とパスワードを入力します。
  2. ユーザーは4桁のピンを作成するように求められます。
  3. 今後同じサイトにアクセスしたとき同じブラウザからのみユーザーは4桁のPINを入力するだけで認証できます。

WebブラウザーでFacebookをデバッグすると、ユーザーがPINを設定した後、およびPINベースのログインが成功するたびに、サーバーが新しい「ノンス」を返すことがわかります。このナンスはブラウザに保存されます。ユーザーがPINベースのログインを試行すると、保存されたナンスとPINが検証のためにサーバーに送信されます。

私が知らないのは、サーバーで何が起こっているのかです。

  1. サーバーは何を格納していますか? nonce + PINのハッシュ?
  2. サーバーはどのようにしてPINログイン試行を検証していますか?
  3. 私が見ることができるこのようなシステムのリファレンス実装はありますか?
  4. ブラウザに保存されているコンテンツが攻撃者によって取得されていない場合、このシステムを少なくとも従来のユーザー名/パスワード認証と同じくらい安全にすることは可能ですか?そうでない場合、どのような攻撃に対してより脆弱になりますか?
4

あなたの質問は、Facebookが何をするか、何ができるかについての両方のようです。 FBが何をしているのかはわかりませんが、安全なシステムを作るために何ができるかを推測することができます。お役に立てば幸いです。

Facebookがやっていることを言い換えてみましょう。通常、サイトは 単一の認証要素知っているもの(つまり、パスワード)をサポートします。 「記憶」機能をサポートするサイトでは、持っているものを使用します(「何か」はブラウザのCookieです)。ブラウザにアクセスできる誰でも、リモートの攻撃者でさえ、あなたとしてログインできるようになるため、これは弱くなる可能性があります。しかし、サイトにアクセスするたびにパスワードを入力する必要がなく、特に強力なパスワードを持っている場合は面倒です。 Facebookは中立的な立場を選んでおり、基本的にはナンス(何か)と、 PIN(知っていること)。

  1. サーバーは何を格納していますか? nonce + PINのハッシュ?

Facebookがnonce + PINのハッシュを保存している可能性が非常に高いです。これは、より複雑なbcryptパスワードストレージ関数のようなものではなく、単純で安全なハッシュである可能性があることに注意してください。 SHA512などのハッシュは、暗号的にランダムな大きなデータ文字列を操作すると元に戻せません。 nonceは(おそらく)そのような乱数です。

  1. サーバーはどのようにしてPINログイン試行を検証していますか?

サーバーは単にハッシュをやり直し、それをデータベースの適切なフィールドと比較します。

  1. 私が見ることができるこのようなシステムのリファレンス実装はありますか?

私が知っていることではありませんが、他の人が助けてくれるかもしれません。

  1. ブラウザに保存されているコンテンツが攻撃者によって取得されていない場合、このシステムを少なくとも従来のユーザー名/パスワード認証と同じくらい安全にすることは可能ですか?そうでない場合、どのような攻撃に対してより脆弱になりますか?

これを本当に大きく根拠のない仮定にすると、このシステムは通常のuname/pwdよりも安全です。これは、パスワードを連結する効果があるためです。暗号で保護された乱数、nonce、およびPIN。暗号的に安全な乱数パスワードは非常に強力です。

しかし、現実の世界では、ブラウザのデータが安全であるとは決して想定できないため、このメカニズムのセキュリティは、PIN and nonceのセキュリティに要約されます。具体的に説明するのは困難です。これはは、単純な「記憶」機能よりも間違いなく安全です。ブラウザのデータが適度に安全であれば、これは標準パスワードよりも安全です。それ以外の場合、標準パスワードはより安全です。ほとんどすべての状況で、これは脆弱なパスワードに勝るものです。 あなたが持っているもの要因。

注意点:

  • サーバーはハッシュを実行する必要があります。クライアントがハッシュを実行する場合、盗まれたデータベーステーブルをログイン認証情報として使用できます。ハッシュは元に戻せないため、サーバーがハッシュを実行している場合、これは起こり得ません。
  • 標準のハッシュの代わりにbcryptなどのパスワードストレージ関数を使用して、セキュリティをさらに強化できます。これは、短いnonceを使用する場合にのみ必要です。より長いナンスは、単純なSHA512(または類似の)が使用されている場合でも、ブルートフォース攻撃に対する十分な保護を提供します。
  • PINログインで失敗した試行を記録し、3回失敗した後、PINログインをデータベースから削除して、ユーザーにパスワードでログインします。PINは役に立たなくなるため、リークしたナンスに直面しても、PINの辞書検索に対して多くの保護を提供します。ユーザーが新しいPINが次のログインで使用するのと同じ数である場合、攻撃者はより多くのPINの可能性を試すために盗む必要があるという新しいナンスを取得します。
5
Neil Smithline