DPAPI和ProtectedData.Protect()在.NET 4中如何处理磁盘映像/克隆?

9

我正在测试使用.NET v4的System.Security.Cryptography.ProtectedData()和UnprotectData()方法,使用DataProtectionScope.LocalMachine范围来确保文件只能在单台机器上加密/解密。 这里是我所做的事情的一般想法...

//Encrypt    
byte[] outBytes = ProtectedData.Protect(File.ReadAllBytes(fileIn), null, DataProtectionScope.LocalMachine);
File.WriteAllBytes(fileOut, outBytes);

//Decrypt    
byte[] outBytes = ProtectedData.Unprotect(File.ReadAllBytes(fileIn), null, DataProtectionScope.LocalMachine);            
File.WriteAllBytes(fileOut, outBytes);

我已经进行了大量的测试以确保在使用所列方法调用时获得预期的行为,而且似乎在同一台机器上的任何用户都可以加密/解密文件。
我的问题是:如果某人制作了一个包含使用此机制加密的文件的系统磁盘映像或克隆(使用Acronis、Ghost等),然后将该映像恢复到另一台计算机上会发生什么?(例如,IT部门预装了单个系统,然后成为具有相同硬件配置的许多计算机的基础映像)。重新安装操作系统后是否能够解密原始系统中加密的文件?我希望由于不同的硬件配置,解密将失败,但如果执行加密所需的所有必要信息都存在于注册表或文件系统中,那么它可能会起作用。
显然,我可以自己测试,但我现在确实没有资源这样做,并且一直在搜索是否有其他人已经知道答案。任何建议都将不胜感激!
2个回答

4
我的回答仅适用于,因为显然使用存储在Active Directory或其他漫游源中的密钥,并且明确地设计为不与单个物理密钥绑定。
就而言,计算机的克隆将能够打开相同的文件,因为机器密钥存储在机器的硬盘驱动器上,并且是使用安装Windows的“sysprep”阶段生成的(这就是为什么公司Windows部署可以使用相同的系统镜像,但只要他们运行sysprep,每个系统都会有自己的密钥)。
计算机可以重新创建其机器密钥(它还可以保留旧密钥,以便旧数据仍然可以解密)。但是,我不知道如何让它重新创建密钥,然后删除旧的密钥。
来源:http://www.windows-server-answers.com/microsoft/Security-Cryptography/30350079/local-machine-masterkey-in-dpapi.aspx

0

好问题 - 经过搜索,似乎主密钥每90天左右会自动重新生成。Passcape.com上有一篇非常好的分析 - DPAPI安全的核心与存储在系统注册表的SYSTEM hive下的系统SYSKEY相关联。

因为人们可以使用带有CRYPT_PROTECT_REGENERATE标志的CryptProtectData()调用来刷新克隆系统上的DPAPI主密钥,所以您对DPAPI保护的使用案例似乎代表着安全风险。

我对此的看法是,虽然DPAPI在本地机器上很适合安全性(但请参见Epyx Forensics关于密码恢复的文章),但如果您无法控制系统将如何克隆,那么您可能需要实施其他安全措施。

这个问题可能会在https://security.stackexchange.com/上得到更好的答案,所以您也可以在那里提问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接