2

この質問に基づいて、Bouncy Castle のシークレットを扱う際に次の問題が懸念されます。

  • 暗号化 (メモリ ダンプまたはページ キャッシュの場合)
  • メモリにピン留めする
  • 読み取り専用としてマークする機能 (それ以上の変更を防ぐため)
  • 定数文字列を渡すことを許可しないことによる安全な構築
  • コンパイラの最適化 (リンクされた記事re: ZeroMemory マクロの注を参照)、ただし、.NET および GIT からのビルドに適用されるため

質問

  • Bouncy Castle は、.NET で必要な構造を使用して安全に構築できるようにしていますか? (SecureString または同等の直接操作)
  • ライブラリ内の必要な場所全体で、SecureString (または同等の) のカバレッジが持続しますか?
  • コンパイラの最適化が有効にならないようにするには、Bouncy Castle を特定の方法でコンパイルする必要がありますか?
4

1 に答える 1

1

決して決定的な答えではありませんが、攻撃者が制限なしでヒープを読み取ることができるようになると、アプリケーションがある時点でヒープを読み取る必要があると仮定して、完全なセキュリティを確保するためにプログラムでできることは実際には何もないことを指摘したいだけです。秘密のデータにアクセスします。できることは、アタッチが可能な期間を短縮するために最善を尽くし、この間に永続的なメディアにコミットされないように最善を尽くすことです (たとえば、メモリをピン留めすることによって)。

セキュリティで保護された文字列は、メモリに暗号化されて保存されますが、アクセスするためのキーもメモリに保存されるため、C# では役に立ちません。完全なメモリ ダンプがある限り、攻撃者は引き続きアクセスできます。また、いつでもデータを C# の文字列に入れる必要がある場合、文字列は不変で上書きできないため、問題が発生します。

Bouncy Castle に関する特定の質問に対処するには、そのインターフェイスを見るだけで、攻撃者がそれを実行しているマシンのメモリをダンプできないと想定する可能性が最も高いと考えられます。安全。ただし、少なくともバイト配列の内容を上書きして、他の何かによって上書きされるのを待つのではなく、クリアテキストがメモリ内で利用可能になる時間を短縮することができます。

于 2014-12-24T08:07:28.300 に答える