ユーザーが単一のデバイスで4+の数字のPINスタイルのパスワードを使用できるようにする必要があります。明らかに、これはサーバー側のアカウントを保護するために直接使用するのに不適切なパスワードです。そのため、このPINを特定のデバイスに「ロック」して、誰かがログインするためにPINとデバイスの両方を持っている必要があります。デバイスはPINへのアクセスを許可しません。また、彼らはすでにより一般的なユーザー名/ pwログインを持っており、デバイスにサインアップすることで、この既存のアカウントに新しいログイン資格情報のセットを追加しています。これが私の現在の計画です。
- ローカルデバイスのサインアッププロセス中に、強力なパスワードをローカルで生成します。
- この生成された強力なパスワードを、サーバー側のデバイス固有のアカウントパスワードとしてサーバーに送信します。
- 提供されている4桁以上のパスワードを使用して、強力に生成されたパスワードをローカルで対称的に暗号化します。
- この暗号化された強力なパスワードをローカルデバイスに保存します。
- そのデバイスへの後続のログイン中に、ユーザーは同じ4桁以上のパスワードを入力し、以前に保存された強力なパスワードを復号化するために使用され、強力なパスワードはログインのためにサーバーに送信されます。
したがって、これによりサーバー側の強力なパスワード要件が達成されると思います。ただし、サインアッププロセス後に侵害されたクライアントデバイスからできる限り保護する必要もあります(サインアッププロセスの前/最中に侵害されたデバイスは失われた原因です)。明らかに4桁の暗号化キーでは、可能な組み合わせは10,000しかないため、攻撃者はローカルで暗号化された強力なパスワードのすべての組み合わせを非常に迅速に試すことができます。私が知りたいのは、特定の対称暗号化スキームや生成されたパスワード形式を選択して、攻撃者がローカルデータだけから10kの復号化の試みのどれが正しいかを判断できないようにする必要があるかどうかです。つまり、サーバー側のログインで10kのパスワードをそれぞれ試行する必要があります。
また、このアプローチ、またはこれらの要件を達成するためのより標準的なアプローチに明らかに間違っているものはありますか?標準的なアプローチがある場合、このアプローチ用の標準的な.NETライブラリはありますか?