在生成对称密钥来加密消息时,您会在进程的内存中创建一个字节数组。
接下来,您实例化一个SymmetricAlgorithm,例如AesCryptoServiceProvider。然后通常将 key 属性设置为内存中的密钥。
然后,您通常通过调用SymmetricAlgorithm.CreateEncryptor()或CreateDecryptor()创建一个ICryptoTransform。您也可以跳过设置上面的 Key 属性并将密钥和 IV 直接传递给CreateEncryptor(byte[], byte[])或CreateDecryptor(byte[], byte[])。
一旦创建 ICryptoTransform 以防止流氓软件读取字节数组,是否更安全?在使用字节数组生成加密随机数据并初始化转换时,固定是否提供任何安全性?
如果您设置 SymmetricAlgorithm.Key 属性,是否在某处有额外的副本,或者只是指向您的秘密字节数组的指针?创建转换后立即处理 SymmetricAlgorithm 是否更安全?
创建 ICryptoTransform 时,我假设现在 RAM 中有一个额外的副本。那么在 ICryptoTransform 对象的生命周期内,流氓软件是否可以读取密钥?处理后如何?
换句话说,如果我有一个流,我的软件会间歇性地向其中写入加密数据,那么最好用一个单独的密钥加密每一点,并销毁/处置我所能做的一切,以尽量减少密钥被盗的时间?
有人可能会说,一旦电脑上出现了流氓软件,就没有什么是安全的,因此担心它是没有用的。我仍然宁愿采取措施,尽量减少因攻击者获得个人数据加密密钥而造成的潜在损害。