我正在测试使用.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);
Run Code Online (Sandbox Code Playgroud)
我已经完成了大量的测试,以确保我在执行此操作时获得预期的行为,并且它似乎完美地工作,因为同一台计算机上的任何用户都可以使用上面列出的方法调用来加密/解密文件.
我的问题是,如果有人制作磁盘映像或克隆(使用Acronis,Ghost等等)包含使用此机制加密的文件的系统,然后将该映像还原到其他计算机,会发生什么?(一个例子是IT部门预先加载单个系统,然后成为具有相同硬件配置的大量机器的基本映像).在不同的硬件上恢复的操作系统是否能够解密在"原始"系统上加密的文件?我的希望是,由于硬件不同,解密将失败,但如果在注册表或文件系统中存在加密所需的所有必要信息,则可能会有效.
显然,我可以为自己测试一下,但我现在并没有真正有资源这么做,并且一直在不停地搜索,看看那里的其他人是否已经知道答案.任何建议都非常感谢!
我的答案仅适用于,DataProtectionScope.LocalMachine因为显然DataProtectionScope.CurrentUser使用存储在 Active Directory 或其他漫游源中的密钥,并且是明确设计的,不与单个物理密钥绑定。
就目前而言LocalMachine,计算机的克隆将能够打开相同的文件,因为机器密钥存储在计算机的 HDD 上,并且是使用安装 Windows 的“sysprep”阶段生成的(这就是企业 Windows 推出的原因)可以使用相同的系统映像,但只要它们运行 sysprep,每个系统都会有自己的密钥)。
计算机可以重新创建其机器密钥(并且还可以保留旧密钥,以便旧数据仍然可解密)。但是,我不知道如何让它重新创建密钥,然后删除旧密钥。
| 归档时间: |
|
| 查看次数: |
1484 次 |
| 最近记录: |