FacebookがモバイルWebサイトで提供するものと同様に、WebアプリケーションにPINベースの認証を実装することに興味があります。
ユーザーフローは次のとおりです。
WebブラウザーでFacebookをデバッグすると、ユーザーがPINを設定した後、およびPINベースのログインが成功するたびに、サーバーが新しい「ノンス」を返すことがわかります。このナンスはブラウザに保存されます。ユーザーがPINベースのログインを試行すると、保存されたナンスとPINが検証のためにサーバーに送信されます。
私が知らないのは、サーバーで何が起こっているのかです。
あなたの質問は、Facebookが何をするか、何ができるかについての両方のようです。 FBが何をしているのかはわかりませんが、安全なシステムを作るために何ができるかを推測することができます。お役に立てば幸いです。
Facebookがやっていることを言い換えてみましょう。通常、サイトは 単一の認証要素 、知っているもの(つまり、パスワード)をサポートします。 「記憶」機能をサポートするサイトでは、持っているものを使用します(「何か」はブラウザのCookieです)。ブラウザにアクセスできる誰でも、リモートの攻撃者でさえ、あなたとしてログインできるようになるため、これは弱くなる可能性があります。しかし、サイトにアクセスするたびにパスワードを入力する必要がなく、特に強力なパスワードを持っている場合は面倒です。 Facebookは中立的な立場を選んでおり、基本的にはナンス(何か)と、 PIN(知っていること)。
- サーバーは何を格納していますか? nonce + PINのハッシュ?
Facebookがnonce + PINのハッシュを保存している可能性が非常に高いです。これは、より複雑なbcryptパスワードストレージ関数のようなものではなく、単純で安全なハッシュである可能性があることに注意してください。 SHA512などのハッシュは、暗号的にランダムな大きなデータ文字列を操作すると元に戻せません。 nonceは(おそらく)そのような乱数です。
- サーバーはどのようにしてPINログイン試行を検証していますか?
サーバーは単にハッシュをやり直し、それをデータベースの適切なフィールドと比較します。
- 私が見ることができるこのようなシステムのリファレンス実装はありますか?
私が知っていることではありませんが、他の人が助けてくれるかもしれません。
- ブラウザに保存されているコンテンツが攻撃者によって取得されていない場合、このシステムを少なくとも従来のユーザー名/パスワード認証と同じくらい安全にすることは可能ですか?そうでない場合、どのような攻撃に対してより脆弱になりますか?
これを本当に大きく根拠のない仮定にすると、このシステムは通常のuname/pwdよりも安全です。これは、パスワードを連結する効果があるためです。暗号で保護された乱数、nonce、およびPIN。暗号的に安全な乱数パスワードは非常に強力です。
しかし、現実の世界では、ブラウザのデータが安全であるとは決して想定できないため、このメカニズムのセキュリティは、PIN and nonceのセキュリティに要約されます。具体的に説明するのは困難です。これはは、単純な「記憶」機能よりも間違いなく安全です。ブラウザのデータが適度に安全であれば、これは標準パスワードよりも安全です。それ以外の場合、標準パスワードはより安全です。ほとんどすべての状況で、これは脆弱なパスワードに勝るものです。 あなたが持っているもの要因。
注意点: