2

暗号化されたファイルをディスクに保存するWindowsフォームアプリケーションがあります。実行時に、それらのファイルを復号化し、結果のメモリストリームをデータセットに渡します。AESManagedで対称暗号化を使用しています。

文字列からキーおよびIVバイト配列を生成するカスタム関数があります。ただし、現在、キーとIvを生成するために使用する安全な文字列をハードコーディングしています。これは、暗号化の目的に反すると思います。ユーザーにパスワードの入力を求め、その文字列を使用するのが最善の方法であることを理解しています。ユーザーにパスワードの入力を求める必要がない、これを回避する他の方法はありますか?また、暗号化されたデータファイルはユーザーとコンピューター間で共有されることが予想されるため、DPAPIを使用できません。

4

2 に答える 2

2

ケーキを持って食べることもできません:)復号化キーを保存して使用することはできません。また、誰かがそれを回復できるようにすることもできません。あなたができる唯一のことは、コードを難読化し、キーを事前に暗号化し、動的に復号化することによって、それがどこにあるかを明確にしないことです。他のプログラミング分野とは異なり、これは厄介なコードが良いことです。

于 2012-08-15T21:38:28.320 に答える
1

まだDPAPIを検討する必要があると思います。データファイルを暗号化するためではなく、秘密の文字列を暗号化するためです。

ユーザーに秘密の文字列を1回だけ入力するように依頼することは可能でしょうか?*可能であれば、次のようにします。

  • DPAPIを使用して暗号化する
  • 次に、暗号化された値をどこかに保存します(構成ファイル、設定ファイル、レジストリ、好きな場所。できれば、一般の人ではなく、ユーザーに保護されたもの)。
  • 次に、必要に応じて、DPAPIを使用してシークレット文字列を取得します
  • すでに持っているので、残りのコードを使用してください。

データファイルは引き続き同じシークレット文字列を使用してAESによって暗号化されるため、互換性があります。(同じ秘密の文字列を持つ人々の間で...これで、アプリが複数の安全なグループを持つことができ、各グループが独自の秘密を設定できるようになりました...しかし、それは正接です。)

利点は、誰かがあなたのコードを入手したとしても、そこにないため、リバースエンジニアリングによって秘密の文字列が返されることはないということです。

これは、難読化だけの場合よりも優れていることに注意してください。難読化すると、攻撃者がコードを取得して独自の環境で実行できる場合、攻撃者はデバッガーを接続して、文字列をAESコードに渡した時点で停止することができます。彼らはあなたがそれをスクランブルするためにいくつのトリックを使うかを気にする必要はありません。彼らはあなたがそれを解読した後にそれを見るだけです。DPAPIを使用すると、ユーザーのコンテキストでコードを実行していない限り、これは機能しません...その場合、とにかくゲームオーバーです。

DPAPIが完璧だと言っているわけではありませんが、この場合、難読化だけに頼る前に、DPAPIを実際に検討します。(難読化ツールを使用してコードを実行することもできます。これも良いことですが、十分ではありません。)

*そうでない場合は、インストール/初期構成時に提供できますか?ファイル内のプレーンテキストの秘密鍵を使用してインストールし、プログラムが最初の使用時に暗号化する場所をいくつか見ました。

于 2012-08-17T02:55:26.967 に答える