10

秘密鍵を安全に保管したいモバイル アプリケーションがあります。セキュリティ要件は、たとえ攻撃者がモバイル デバイスに無制限にアクセスできたとしても、秘密鍵を取得することは非常に困難であるべきであることを意味します。このレベルのセキュリティを実現するために、アプリケーションは、ユーザーが指定したパスフレーズとデバイス固有のソルトから派生したキーを使用した対称暗号化を採用しています。

理想的には、これは総当たり攻撃に対して十分に安全であるべきです。ただし、2 つの制限要因があります。

  1. 秘密鍵は特定の形式に準拠する必要があるため、復号化プロセスはプロセスの結果をテストして、有効かどうかを確認できます。たとえば、秘密鍵が RSA 秘密鍵である場合、攻撃者はパスフレーズのさまざまな組み合わせを試し、結果の平文を有効な RSA 秘密鍵として使用できるかどうかをテストします。RSA 秘密鍵は特定の情報を特定の方法でエンコードする必要があるため、復号化に失敗すると、RSA エンジンは鍵が無効であることを通知します。これにより、攻撃者は完全にオフラインで攻撃を検証できます。できれば、攻撃者は、サーバーと通信せずに、復号化の試みが成功したかどうかを判断できないようにする必要があります。

  2. アプリケーションはモバイル デバイス上で実行されるため、モバイル デバイスに完全にアクセスできるオフライン攻撃は、より豊富なリソースを備えたより機能的なデバイスで実行される可能性が高いため、鍵派生関数の複雑さが増しても鍵の強化には役立ちません。すぐに、キー派生関数の計算ラウンド数が増加すると、ユーザー エクスペリエンスが遅くなります (これは一定の制限内で許容されます) が、デスクトップ コンピューターで攻撃が実行された場合はすぐに阻止されます。

これらの問題の解決策を誰かに教えてもらえますか? 具体的には、秘密鍵が任意のランダムなバイト シーケンス (固定長のシーケンスである可能性がありますが、問題ではありません) であり、アルゴリズムが暗号文を生成できる非対称暗号化アルゴリズムを知っている人はいますか?

4

3 に答える 3

5

セキュリティ要件は、たとえ攻撃者がモバイル デバイスに無制限にアクセスできたとしても、秘密鍵を取得することは非常に困難であるべきであることを意味します。

それは不可能です。

攻撃者ができることは次のとおりです。

  1. 秘密鍵をメモリにロードする必要がある状態でアプリケーションを取得します。アプリケーションを定期的に使用すると、これが発生します。
  2. メモリの内容をダンプします。
  3. メモリ ビットをスライドさせて、既知のキー長のすべての範囲を試します。

キーはメモリ内にあるため、パスフレーズとソルトからキーを生成するために思いついた巧妙なスキームは問題ではありません。アプリケーションは、攻撃者のためにすべての作業を行います。あいまいさによるセキュリティの失敗の典型的なケース。

これが、Blu-Ray が最初にクラックされた方法です。ユーザーがアプリケーションの使用中にメモリ ダンプに完全にアクセスできる場合、この方法でキーを取得することを防ぐ方法はありません。

DRM の世界へようこそ。

于 2009-12-11T16:04:40.567 に答える
2

最新の対称暗号は、既知の平文攻撃に対して非常に耐性があります。攻撃が発見された場合、多くの平文が必要になる可能性があり、場合によっては平文を適応的に選択する必要があります。

ここで、攻撃者は単一の部分的な平文を持っています。ワークロードは本質的にキースペースのブルートフォース検索であると思います。対称鍵が鍵空間全体からランダムに選択された場合、攻撃者が暗号文から秘密鍵を復元することはできません。

間接攻撃の可能性がはるかに高くなります。

たとえば、キー ロギング スパイウェアのような単純なものでも、最高の暗号化技術を破るには十分です。コールド ブート メモリ攻撃やコア ダンプ分析も使用できます。これらのリスクは、シークレットを使用直後にメモリからゼロ化することで最小限に抑えることができますが、完全に排除することはできません。

この場合のキーはユーザーが選択したパスワードから派生するため、有効なキー スペースは完全なキー スペースよりもはるかに小さくなる可能性があります。すべてのクラスの文字を含む長いパスワードを要求することで、これを軽減します。また、キー強化を軽視しないでください。通常の推奨事項は、鍵導出関数の反復を数千回行うことですが、数百回しか実行できない場合でも、攻撃者に多大な計算コストを課します。

于 2009-12-11T17:58:17.793 に答える
1

RSA の秘密鍵、固定長のランダム バイト シーケンスです。あなたはたまたまそれの ASCII エンコーディングを見ていました。キーを非ASCII形式で保存するだけで問題ありません。

于 2009-12-11T15:59:18.743 に答える