當生成對稱密鑰來加密消息時,可以在進程內存中創建一個字節數組。.NET加密處理密鑰的方式是安全的嗎?
接下來您將實例化一個SymmetricAlgorithm,如AesCryptoServiceProvider。然後,通常您將密鑰屬性設置爲您的內存中的密鑰。
然後,您創建一個ICryptoTransform,通常通過調用SymmetricAlgorithm.CreateEncryptor()或CreateDecryptor()。您也可以跳過上面的Key屬性設置,直接將密鑰和IV傳遞給CreateEncryptor(byte[], byte[])或CreateDecryptor(byte[], byte[])。
是爲創建ICryptoTransform的防止流氓軟件讀取它,它更安全,一旦零字節數組?雖然字節數組正在使用中生成加密隨機數據並初始化轉換,但是pinning是否提供了任何安全性?
如果您設置SymmetricAlgorithm.Key屬性,是否有附加的副本在某處或只是一個指向您的祕密字節數組的指針?在創建轉換後立即處理SymmetricAlgorithm更安全嗎?
當ICryptoTransform創建時,我假設現在有一個額外的副本在RAM中。因此,在ICryptoTransform對象的生命週期中,流氓軟件可以讀取密鑰嗎?處置後如何?
換句話說,如果我的軟件間歇性地寫入加密數據的流,用單獨的密鑰加密每一個小點並銷燬/處理我可以在其間的所有內容以最小化密鑰可能的時間被偷?
有人可能會說,一旦有一臺電腦上的流氓軟件,沒有什麼是安全的,因此它也沒用擔心。我寧願採取措施,儘量減少攻擊者獲得個人數據加密密鑰的潛在危害。
什麼能防止任何流氓軟件在你沒有任何電源的PC上停止操作並讀取內存?即使你創建它,使用它並一個接一個地摧毀它? – gbianchi 2012-04-11 15:16:46
http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx – SLaks 2012-04-11 15:16:58
大多數.Net crypto類都將在'Dispose中安全地擦除它們的數據()'給你。 – SLaks 2012-04-11 15:17:23