我有一个基于 Windows.Forms 的 .NET 桌面应用程序,它将特权信息存储在磁盘上的文件中(不使用 .NET 配置文件),使用对称加密算法(例如使用 MS 的 CryptoAPI 的 TripleDES)进行加密。该文件必须在多个程序运行/机器电源循环中读取/写入,也就是每次都使用相同的密钥/IV。这里明显的问题是如何保护密钥(可能还有 IV),这里的几个问题只是简单地说“使用 DPAPI”并给出一个往返加密/解密的简单示例。
我已经知道如何使用 DPAPI,但使用它来保护要馈送到另一个加密方案的密钥/IV 似乎存在一个明显的问题。考虑以下代码:
TripleDESCryptoServiceProvider^ cryptoprov = gcnew TripleDESCryptoServiceProvider;
cryptoprov->Key = ProtectedData::Unprotect(encryptedKey, salt, DataProtectionScope::CurrentUser);
cryptoprov->IV = ProtectedData::Unprotect(encryptedIV, salt, DataProtectionScope::CurrentUser);
由于您必须分配一个 SymmetricAlgorithm 派生类的 Key 和 IV,攻击者不能在这一点上设置一个断点,并轻松找出 Key/IV 是什么吗?
我的问题如下:
- 我是否错过了使用 DPAPI 保护密钥的要点?你会怎么做?
- 我应该只使用 DPAPI 来加密我的文件吗?因此,不需要密钥/IV 存储。
- 我注意到存在用于非对称加密的 CspParameters。这本质上是比对称更好的选择吗?(在我的场景中,完全不对称与不对称)
谢谢!