次のコードは、例示としてWindowsデータ保護APIを使用して、メモリ内のデータを暗号化することが可能である:暗号化されていないデータの長さを明らかにすることなくDPAPIで暗号化しますか?
byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes("ThisIsSomeData16");
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting...");
// Encrypt the data in memory.
EncryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Encrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Decrypting...");
// Decrypt the data in memory.
DecryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Decrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
は、ここでは、Microsoftのリファレンスを参照してください:https://msdn.microsoft.com/en-us/library/ms995355.aspx
をしかし、この例ではencyptedデータを元のデータと同じサイズです。元のファイルのファイルサイズを明らかにせずにDPAPIを使用してデータを暗号化する方法はありますか?例えば、生成された暗号文をキー内の「ランダムな」場所に隠すことは、1回のパッドで可能ですか?
入力データをlength + data + paddingとして単純に構成しないのはなぜですか? –
確かに可能ですが、これは解読後にデータを解析する必要がありますが、これは既に一般的な問題であると思われます。 –
DPAPI暗号化の品質に依存し、既知の平文攻撃のもう一つの可能性は、鍵を生成し、適切なブロック暗号化( 'AesCryptoServiceProvider'など)に使用し、DPAPIで鍵を保護することです。したがって、既知の長さは問題になりません。 –