5

私は認証をクライアント/サーバー アプリケーションに組み込んでいますが、受け取ったフィードバックの一部は、ハッシュ計算をサーバーに任せるべきだというものです (最初は、クライアントがハッシュを受信し、クライアントからハッシュを計算するように実装されていました)。入力したパスワードを比較してください)。それは理にかなっているように思えますが、問題が残っています.オフラインのユーザーを認証するにはどうすればよいですか?

たとえば、インターネットにアクセスできないモバイル デバイスに展開した場合、認証を処理する最も安全な方法は何ですか?

私の見方では、クライアントがハッシュ + ソルト情報を受信できるようにするか別のピン/パスワードを使用してクライアントがそのパスワードのハッシュ + ソルトを受信できるようにする必要があります。

攻撃ベクトルを制限するように思われるため、私は後者を好みます。モバイル デバイスが危険にさらされた場合、システム全体 (たとえば、ネットワーク認証されたすべての部分) のセキュリティは損なわれません。

最良のオプションと考慮事項は何ですか?

4

3 に答える 3

2

アプリケーションをより詳細に説明すると、私はここでベースから外れていることに気付くかもしれませんが、今のところ、ユースケースと脅威モデルについていくつかの仮定をします。

私の理解では、断続的な接続を備えたモバイルデバイスといくつかのリモートサービスの間で同期したい機密情報がいくつかあります。このサービスには認証されたユーザーのみがアクセスでき、ユーザーは、オフラインの場合でも、情報のコピーにアクセスするためにモバイルデバイスに対して自分自身を認証する必要があります。

強力なセキュリティが必要な場合は、パスワードベースの暗号化を使用してモバイルデバイスのコピーを暗号化します。

サービスへの認証に使用したものと同じパスワードを使用できますが、一般的に、同じキーを別の目的で再利用することは避けます。より良いアプローチは、モバイルデバイスのマスター暗号化パスワードを用意することです。これにより、モバイルデータベースと、同期サービスに対してユーザーを認証するために使用される「パスワード」が暗号化されます。サービス認証パスワードは、実際にはSSLクライアント証明書認証用の秘密鍵または文字ベースのパスワードである可能性があることに注意してください。

パスワードが1つしかない場合のリスクを評価する必要がありますが、多くの場合、これがユーザーに提供する便利さと、2つの弱いが覚えやすいパスワードではなく、1つの強力なマスターパスワードによって提供される安全性を組み合わせたものだと思います。バランスが良いです。

このアプローチでは、サービスアクセスが取り消されたユーザーは、新しい更新なしでローカルコピーに引き続きアクセスできることに注意してください。モバイルソフトウェアによって強制される時間制限の概念を含めることができますが、断固とした攻撃者はこれを回避する可能性があります。

おもちゃのセキュリティだけが必要な場合は、モバイルデバイスに正しいハッシュを保存するという提案が適切であり、実際のパスワードをハッシュするか代替パスワードをハッシュするかは問題ではありません。正しいハッシュを使用する場合は、それらを使用する必要があるためです。リモートサービスへのアクセスを可能にするパスワードの衝突を見つけるのに数十億年かかりました。

ただし、攻撃者がパスワードハッシュを見ることができると仮定すると、同期されたデータも攻撃者が見ることができないのはなぜですか?なぜ彼らはパスワードを回復する必要があるのでしょうか?モバイルデータベースを暗号化すると、これを防ぐことができます。

于 2008-10-21T18:06:35.600 に答える
1

問題のドメインに依存する可能性があると思いますが、安全なアプリケーションの場合、信頼が不足しているため、クライアント側で承認を行うことができません。ハッシュの計算と比較がクライアント側で行われると述べた単純なケースでは、アクセスを取得するために誰かがしなければならないことは、デバッガーを接続し、コードをステップ実行して比較が行われる場所を見つけ、値を置き換えることだけです戻りの直前のスタック (たとえば)。おめでとう、あなたはハッキングされました。

特定のアプリが「オフライン」モードのときに有効にしたい操作と、部分的な機能をオフラインで有効にする前に、デバイスが再接続された後の調整の計画について詳しく知りたい.

于 2008-10-20T22:49:54.580 に答える
0

ほんの数分前に同様の質問を投稿しましたが、もう少し考えた後、公開鍵/秘密鍵を使用するという受け入れ可能なアプローチを見つけたかもしれません。私のアプリで概説した手順は次のとおりです。

  1. ユーザーがオフラインになると、パスワードを使用してオフライン中にアプリへのアクセスを保護することを選択できます (盗難から保護するためのオプションの暗号化を使用)。

  2. オンラインになると、クライアントは現在のユーザーの ID を送信します (ハッシュのようなものか、そのユーザーを一意に識別するものである可能性があります)。

  3. サーバーは、そのユーザーの公開鍵で暗号化された認証トークンを送信します。

  4. クライアントは、自分の秘密鍵で復号化されたトークンを送り返します。

  5. サーバーは最後にセッション トークンを送信してさらに通信を続けます (この最後の手順は不要かもしれません。既に確立されている認証トークンを使用できるのでしょうか?)。

私は暗号化やセキュリティの専門家ではありませんが、サーバーにハッキングする唯一の方法は、攻撃者がユーザーの秘密鍵とそのパスを入手することしか考えられないため、このアプローチは非常に安全であるように思えます。段階。

機密データの場合、前述のように暗号化によって保護できます。ユーザーを認証するためだけにパスワードを使用するか、データ自体を暗号化して、デバイスを紛失した場合でも侵害されないようにすることができます。

于 2008-10-24T22:02:07.420 に答える