メッセージを暗号化するための対称キーを生成するときは、プロセスのメモリにバイト配列を作成します。
次に、 AesCryptoServiceProviderなどのSymmetricAlgorithmをインスタンス化します。次に、通常、キー プロパティをメモリ内キーに設定します。
次に、通常はSymmetricAlgorithm.CreateEncryptor()またはCreateDecryptor()を呼び出してICryptoTransformを作成します。上記の Key プロパティの設定をスキップして、キーと IV をCreateEncryptor(byte[], byte[])またはCreateDecryptor(byte[], byte[])に直接渡すこともできます。
ICryptoTransform が作成されたらすぐにバイト配列をゼロにして、悪意のあるソフトウェアが読み取らないようにする方が安全ですか? バイト配列を使用して暗号化ランダム データを生成し、変換を初期化していますが、ピニングはセキュリティを提供しますか?
SymmetricAlgorithm.Key プロパティを設定した場合、どこかに追加のコピーがありますか、それとも秘密のバイト配列へのポインターだけですか? 変換を作成した直後に SymmetricAlgorithm を破棄する方が安全ですか?
ICryptoTransform が作成された時点で、RAM に追加のコピーがあると想定しています。では、ICryptoTransform オブジェクトの存続期間中、キーは不正なソフトウェアによって読み取られるのでしょうか? 処分後はどうですか?
言い換えれば、ソフトウェアが暗号化されたデータを断続的に書き込むストリームがある場合、キーが盗まれる可能性のある時間を最小限に抑えるために、それぞれの小さなビットを個別のキーで暗号化し、その間にできるすべてのものを破棄/破棄する方がよいでしょうか?
悪意のあるソフトウェアがコンピュータに存在すると、何も安全ではないので、心配する必要はないと言う人がいるかもしれません。攻撃者が個人データの暗号化キーにアクセスすることによって引き起こされる潜在的な被害を最小限に抑えるための措置を講じたいと思います。