ハードコードされたキー
共有/秘密鍵をDLLに含めると、DLLのコピーを持っている人は誰でも鍵のコピーを手に入れることができます。モデルがアプリケーションを複数のユーザーと共有する場合、すべてのユーザーが同じ暗号化キーを持ち、別のユーザーによって暗号化されたものをすべて復号化できます。アプリケーションが簡単に利用できる場合は、攻撃者がアプリケーション(したがってキー)も持っていると想定する必要があります。
また、ソースコードを持っているため、すべての開発者が本番暗号化キーにアクセスできることも意味します。QEもおそらくバイナリにアクセスできるため、アクセスできます。これらの2つのインサイダーグループのいずれかが、アプリケーションが顧客のために保護しているあらゆるものを復号化できます。
これは、あなたの望むことですか?これは一般的に悪い習慣ですが、環境によっては他の環境よりも悪い結果になります。たとえば、暗号の書き方だけを学ぶためにコードを書いている場合、それはおそらく問題ではありません-他の誰もそれを使用できないことを確認してください:)サービスを書いている場合、それは悪い習慣であり、リスクはありますが、それはあなたができる最悪のことではありません。複数の顧客に共有されるものを作成している場合は、バイナリにキーを含めることで暗号化の目的を無効にします。
また、(暗号的に強力な乱数ジェネレーターを使用して)ランダムデータを生成し、それをファイルに保存して、そのファイルを暗号化キーとして使用することはそれほど難しくありません。別のキーを使用することをお勧めします。
セパレートキー
キーを別のファイルで出荷する場合、バイナリでキーを出荷することによって生じるすべてのリスクを排除しますが、他のリスクを導入します。または、別の言い方をすれば、暗号がある程度の効果を発揮できるようになったので、正しく実行することを確認する必要があります。そうしないと、それでも役に立たなくなります。
キーは、暗号的に強力な乱数ジェネレーターを使用して生成する必要があるため、予測できません。キーは安全に保存する必要があります。キーファイルへのパス全体を保護する必要があります。また、パスワードで保護されたストア(キーストアなど)を使用して、正しいパスワードを持つユーザーのみがキーにアクセスできるようにすることを検討する必要があります。もちろん、最後の1つは展開モデルによって異なり、無人で再起動する必要があるかどうかによって異なります。また、キーは安全に使用する必要があります。一定の順序の操作、暗号化または復号化のオラクルを実行しない、データを意味的に解析する前にデータの整合性を検証するなどです。