5

ユーザーが単一のデバイスで4+の数字のPINスタイルのパスワードを使用できるようにする必要があります。明らかに、これはサーバー側のアカウントを保護するために直接使用するのに不適切なパスワードです。そのため、このPINを特定のデバイスに「ロック」して、誰かがログインするためにPINとデバイスの両方を持っている必要があります。デバイスはPINへのアクセスを許可しません。また、彼らはすでにより一般的なユーザー名/ pwログインを持っており、デバイスにサインアップすることで、この既存のアカウントに新しいログイン資格情報のセットを追加しています。これが私の現在の計画です。

  1. ローカルデバイスのサインアッププロセス中に、強力なパスワードをローカルで生成します。
  2. この生成された強力なパスワードを、サーバー側のデバイス固有のアカウントパスワードとしてサーバーに送信します。
  3. 提供されている4桁以上のパスワードを使用して、強力に生成されたパスワードをローカルで対称的に暗号化します。
  4. この暗号化された強力なパスワードをローカルデバイスに保存します。
  5. そのデバイスへの後続のログイン中に、ユーザーは同じ4桁以上のパスワードを入力し、以前に保存された強力なパスワードを復号化するために使用され、強力なパスワードはログインのためにサーバーに送信されます。

したがって、これによりサーバー側の強力なパスワード要件が達成されると思います。ただし、サインアッププロセス後に侵害されたクライアントデバイスからできる限り保護する必要もあります(サインアッププロセスの前/最中に侵害されたデバイスは失われた原因です)。明らかに4桁の暗号化キーでは、可能な組み合わせは10,000しかないため、攻撃者はローカルで暗号化された強力なパスワードのすべての組み合わせを非常に迅速に試すことができます。私が知りたいのは、特定の対称暗号化スキームや生成されたパスワード形式を選択して、攻撃者がローカルデータだけから10kの復号化の試みのどれが正しいかを判断できないようにする必要があるかどうかです。つまり、サーバー側のログインで10kのパスワードをそれぞれ試行する必要があります。

また、このアプローチ、またはこれらの要件を達成するためのより標準的なアプローチに明らかに間違っているものはありますか?標準的なアプローチがある場合、このアプローチ用の標準的な.NETライブラリはありますか?

4

2 に答える 2

4

ローカルデバイスにソルトを保存し、PBKDF2を使用してkey1を計算できます。次に、そのキーサーバー側を使用して、個別に保存されたソルトを使用してkey2を計算します。key1は保存されないため、攻撃者は必要な情報を持っていません。

于 2012-11-27T23:15:52.443 に答える
2

使用する暗号化が攻撃者が検索しなければならないキースペースがどれほど「強力」であっても、ソリューションは「悪い」ものです。8桁の数字のパスワードを使用しても、可能なキーは10^8または1億個しかありません。

私のアプローチは違うでしょう。まず、「デバイスにクレデンシャルを保存する理由」を尋ねます。その質問に対する良い答えがあるとは思いません。

代わりに、このソリューションを検討してください。

ユーザーがPINをアクティブ化したいと考えています。まず、彼はPINを選択します。彼の選択をNと呼びましょう。彼はあなたのWebサービスに連絡し、ユーザー名とパスワードで自分自身を識別し、Nを送信します。

サーバー側では、ランダムな文字列を生成し、それをXと呼びましょう。XとNを連結し、SHA-256などを使用してハッシュします。結果をHと呼びましょう。サーバーは(X、H)を格納します。サーバーがPINを保存していないことに注意してください。

その後、ユーザーがモバイルデバイスを開いてPINを入力すると、デバイスはWebサービスに接続し、「ユーザー「NikBougalis」のPIN認証を実行しようとしています。チャレンジしてください」と言います。

サーバーは、この認証の状態を作成します。サーバーは、アカウントレコードを見つけ、X値を見つけて、ユーザー "X、R"に送信します。Rは、この状態に対して生成される乱数です。

ユーザーはPINを入力し、Pと呼びます。モバイルデバイスはXとPを連結し、サーバーが使用するのと同じアルゴリズムを使用して結果をハッシュし、Hを生成します。HとRを組み合わせて、結果をハッシュします。これにより新しいハッシュが生成されます。これをVと呼びましょう。

モバイルデバイスはVをサーバーに送信します。サーバーは、データベースからのH値と状態に関連付けられたRを組み合わせ、組み合わせをハッシュしてVと比較します。それらが一致する場合、モバイルデバイスに入力されたPINは正しく、ユーザーにアクセスを許可します。それらが一致しない場合、入力されたPINは正しくありません。

この方法には、サーバーが認証の試行をレート制限し、ブルートフォース攻撃を遅らせることができるという利点があります。何度も試行に失敗した後でもアカウントをロックダウンし、ロックを解除するにはパスワードが必要になることもあります。

この交換全体をSSLで行う場合は、ランダム値Rの送信をスキップできますが、計算コストが非常に小さいため、とにかくそれを含めるだけです。

潜在的な欠点は、デバイスがサーバーと通信できない場合、ユーザーがPINを使用して「ログイン」できないことです。オフラインログインを許可する必要があるかどうかはわかりませんが、特定のアプリや市場によっては、これは大したことではない場合があります。一部の人はそれを利点と呼ぶことさえあります。

明確にするために、これは「超防弾ソリューション」ではありません。誰かが侵入してH値を保持しているテーブルにアクセスした場合、PINを知らなくてもユーザーになりすますことができます。それが懸念される場合は、いくつかの回避策があります。

非常に高いセキュリティに本当に関心がある場合(4桁のPINを検討しているので、そうは思わない)、ゼロ知識証明を実行するために使用できるより高度なアルゴリズムがあります。

于 2012-11-27T23:55:55.693 に答える