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

我正在测试使用.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部门预先加载一个单一系统,然后成为具有相同硬件配置的大量机器的基础映像)。 在另一块硬件上恢复的操作系统是否能够解密在“原始”系统上加密的文件? 我的希望是,由于硬件不同,解密将会失败,但是如果执行加密的所有必要信息都存在于注册表或文件系统中,它就可以工作。

显然,我可以为自己测试一下,但我现在没有真正的资源去做,而且一直在不停地寻找,看看有没有其他人可能已经知道答案。 任何意见非常感谢!


我的回答仅适用于DataProtectionScope.LocalMachine因为显然DataProtectionScope.CurrentUser使用存储在Active Directory或其他漫游源中的密钥,并且明确地按设计而不是绑定到单个物理密钥。

LocalMachine而言,计算机的克隆将能够打开相同的文件,因为机器密钥存储在计算机的HDD中,并使用安装Windows的“sysprep”阶段生成(这就是为什么公司的Windows部署可以使用相同的系统映像,但只要它们运行sysprep,每个系统都将拥有自己的密钥)。

计算机可以重新创建机器密钥(并且还可以保留旧密钥,以便旧数据仍可解密)。 但是,我不知道如何让它重新创建密钥,然后删除旧密钥。

资料来源:http://www.windows-server-answers.com/microsoft/Security-Cryptography/30350079/local-machine-masterkey-in-dpapi.aspx


好的问题 - 围绕它寻找似乎主密钥每约自动重新生成一次。 90天。 在Passcape.com上有一个非常好的分析 - DPAPI安全的核心与系统的SYSKEY相关联,该SYSKEY存储在SYSTEM配置单元下的注册表中。

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

我认为,尽管DPAPI对于本地机器的安全性非常好(但在Epyx Forensics上查看关于密码恢复的文章),但克隆时可能需要实施额外的安全措施,尤其是在您无法控制系统将如何被克隆。

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

链接地址: http://www.djcxy.com/p/66681.html

上一篇: How does DPAPI and ProtectedData.Protect() handle Disk Images/Clones in .net 4?

下一篇: Accessing session from a helper spec in rspec