まだDPAPIを検討する必要があると思います。データファイルを暗号化するためではなく、秘密の文字列を暗号化するためです。
ユーザーに秘密の文字列を1回だけ入力するように依頼することは可能でしょうか?*可能であれば、次のようにします。
- DPAPIを使用して暗号化する
- 次に、暗号化された値をどこかに保存します(構成ファイル、設定ファイル、レジストリ、好きな場所。できれば、一般の人ではなく、ユーザーに保護されたもの)。
- 次に、必要に応じて、DPAPIを使用してシークレット文字列を取得します
- すでに持っているので、残りのコードを使用してください。
データファイルは引き続き同じシークレット文字列を使用してAESによって暗号化されるため、互換性があります。(同じ秘密の文字列を持つ人々の間で...これで、アプリが複数の安全なグループを持つことができ、各グループが独自の秘密を設定できるようになりました...しかし、それは正接です。)
利点は、誰かがあなたのコードを入手したとしても、そこにないため、リバースエンジニアリングによって秘密の文字列が返されることはないということです。
これは、難読化だけの場合よりも優れていることに注意してください。難読化すると、攻撃者がコードを取得して独自の環境で実行できる場合、攻撃者はデバッガーを接続して、文字列をAESコードに渡した時点で停止することができます。彼らはあなたがそれをスクランブルするためにいくつのトリックを使うかを気にする必要はありません。彼らはあなたがそれを解読した後にそれを見るだけです。DPAPIを使用すると、ユーザーのコンテキストでコードを実行していない限り、これは機能しません...その場合、とにかくゲームオーバーです。
DPAPIが完璧だと言っているわけではありませんが、この場合、難読化だけに頼る前に、DPAPIを実際に検討します。(難読化ツールを使用してコードを実行することもできます。これも良いことですが、十分ではありません。)
*そうでない場合は、インストール/初期構成時に提供できますか?ファイル内のプレーンテキストの秘密鍵を使用してインストールし、プログラムが最初の使用時に暗号化する場所をいくつか見ました。