主にオフライン状態で使用することを目的としたプログレッシブWebアプリを構築しています。ユーザーは切断中に「ログイン」することができます。これにより、ローカルに保存されたハッシュやその他の要素に対してパスワードが検証されます。
オフラインログインに2FAを追加して「より安全」にするというアイデアが提案されています。ただし、MFAに関する私の(限られた)理解は、2FA秘密鍵をローカルに保存する必要があることを示しています。このコードを取得して、おそらく認証コードのリバースエンジニアリングに使用して、すべてを疑わしいものにすることができます。
(議論のために、これがJavaScriptでなく、悪意のある俳優がログインプロセスを「スキップ」して、ログインせずにオフラインでアプリにアクセスすることはできないとしましょう。)
これは行き止まりであるという私の仮定では正しいですか?または、安全に2FAを完全にオフラインにする方法はありますか?これに取り組むより良い方法はありますか?
ローカルJSアプリケーションに対する認証が機能しません。以前、このトピックについて 詳細な回答 を書きました。議論の核心は、攻撃者が認証を実行するメカニズムを完全に制御しているため、常に自分自身を正常に認証できることです。
多要素認証についてはどうですか?
それはこれ以上うまくいきません。ユーザーが正しいパスワードを入力すると、アプリケーションがSMSトークンをユーザーに送信するという単純なシナリオを想像してください。攻撃者は、予想される値を読み取ってその値を入力するだけです。
しかし、攻撃者が私のログインをスキップできない場合はどうなりますか?
それが問題です。リモートで現実的なシナリオであっても、攻撃者がアプリケーションを攻撃する方法を攻撃者に伝えることはできません。
オフラインのJavaScriptアプリケーションは、攻撃者が認証プロセスを完全に担当しているため、ユーザーを安全に認証できません。