1

RC4、DESなどの暗号化アルゴリズムを含むC#クラスライブラリを作成する予定です。これらは単一キー暗号化アルゴリズムです。
今、私は自分の鍵を保護するための最も安全な決定を望んでいます。キーをDLL内にハードコーディングする必要がありますか、それともDLLを使用する外部アプリケーションからキーを設定する必要がありますか?デコンプリングツールを検討するとき、どちらがより安全だと思いますか?
大声で考える:

  • キーがセキュリティライブラリにハードコーディングされていて、誰かがDLLを見つけてC#アプリケーションにインポートした場合、彼は私のチッパーデータを簡単にデコードできますか?
  • キーがセキュリティライブラリにハードコーディングされていないが、外部アプリケーションから設定されている場合、誰かが私のキーを見つけるために外部アプリケーションも逆コンパイルする必要がありますか?

セキュリティDLLを使用する外部アプリケーションからキー値を設定する方が安全だと思います。どう思いますか?
ありがとう。

4

1 に答える 1

0

ハードコードされたキー

共有/秘密鍵をDLLに含めると、DLLのコピーを持っている人は誰でも鍵のコピーを手に入れることができます。モデルがアプリケーションを複数のユーザーと共有する場合、すべてのユーザーが同じ暗号化キーを持ち、別のユーザーによって暗号化されたものをすべて復号化できます。アプリケーションが簡単に利用できる場合は、攻撃者がアプリケーション(したがってキー)も持っていると想定する必要があります。

また、ソースコードを持っているため、すべての開発者が本番暗号化キーにアクセスできることも意味します。QEもおそらくバイナリにアクセスできるため、アクセスできます。これらの2つのインサイダーグループのいずれかが、アプリケーションが顧客のために保護しているあらゆるものを復号化できます。

これは、あなたの望むことですか?これは一般的に悪い習慣ですが、環境によっては他の環境よりも悪い結果になります。たとえば、暗号の書き方だけを学ぶためにコードを書いている場合、それはおそらく問題ではありません-他の誰もそれを使用できないことを確認してください:)サービスを書いている場合、それは悪い習慣であり、リスクはありますが、それはあなたができる最悪のことではありません。複数の顧客に共有されるものを作成している場合は、バイナリにキーを含めることで暗号化の目的を無効にします。

また、(暗号的に強力な乱数ジェネレーターを使用して)ランダムデータを生成し、それをファイルに保存して、そのファイルを暗号化キーとして使用することはそれほど難しくありません。別のキーを使用することをお勧めします。

セパレートキー

キーを別のファイルで出荷する場合、バイナリでキーを出荷することによって生じるすべてのリスクを排除しますが、他のリスクを導入します。または、別の言い方をすれば、暗号がある程度の効果を発揮できるようになったので、正しく実行することを確認する必要があります。そうしないと、それでも役に立たなくなります。

キーは、暗号的に強力な乱数ジェネレーターを使用して生成する必要があるため、予測できません。キーは安全に保存する必要があります。キーファイルへのパス全体を保護する必要があります。また、パスワードで保護されたストア(キーストアなど)を使用して、正しいパスワードを持つユーザーのみがキーにアクセスできるようにすることを検討する必要があります。もちろん、最後の1つは展開モデルによって異なり、無人で再起動する必要があるかどうかによって異なります。また、キーは安全に使用する必要があります。一定の順序の操作、暗号化または復号化のオラクルを実行しない、データを意味的に解析する前にデータの整合性を検証するなどです。

于 2012-04-12T13:16:55.090 に答える