DPAPI +熵

时间:2010-03-10 17:12:34

标签: .net entropy dpapi

我们有一个WPF应用程序,允许我们的用户下载加密内容,我们希望能够离线解密这些内容。我的想法是下载密钥并使用DPAPI存储它们,但我遇到了熵参数问题。

有没有办法生成一个熵来持续使用DPAPI函数而不用硬编码/存储它们?

由于 贝

2 个答案:

答案 0 :(得分:2)

来自Securely Storing Optional Entropy While Using DPAPI

您在本地存储的任何内容都可能会受到影响。但是你可以采取一些措施来使它变得更加困难。您可以考虑查看Handling Passwords上的文档。您认为您的熵密钥是特定于您的应用程序的密码。

我将把您的熵称为 Key ,因为它在功能上是一个额外的密钥。

您不想做的是以未加密的格式在本地存储您的密钥。相反,您希望加密密钥,或者从另一个明显的源中获取密钥。当然,如果您加密密钥,那么您需要存储用于加密密钥的密钥 - 但通常这个单一的间接层足以阻止大多数挑战者。

这将是获得密钥的优势。您可以将其导出为其他一些常量数据的哈希值(需要随应用程序的修订版而变化)。派生哈希的一个技巧是将哈希与其他一些常量值(如GUID或大型随机数)组合在一起,以便其他人不能只结合已知的哈希算法并获取密钥。这是创建自己的哈希算法的一个更好的选择(除非你有数学博士学位,否则你不应该这样做。)

在某些时候,您的应用程序中需要某种密钥硬编码。此密钥要么与哈希中的其他数据组合以创建熵密钥,要么用于解密熵密钥。实际上,只要保留旧密钥以解密现有密钥,您就可以使用新版本的应用程序进行密钥更改。然后,您可以使用新密钥或方法对其进行重新加密。

如果您想获得最佳安全性,则可以将熵密钥存储在计算机上。这将需要互联网连接和SSL证书,但是它们的密钥永远不会在本地任何地方被发现。为此,您可以设置更强大的质询响应系统,以便每次请求身份验证都不同,密钥通过SSL加密传递,因此无法拦截。一旦使用密钥,它就被丢弃。当然,这种方法会破坏您使用DPAPI进行本地安全存储的许多场景的目的。

无论您做什么,请记住它会受到损害 - 当有人完全访问本地计算机及其上存储的数据时,总会发生这种情况。解决方案是继续发布更改方法,以便旧方法不再有效。这将使裂缝的分布变得不那么有价值,因为很难找到正确版本的裂缝。

答案 1 :(得分:0)

有时您的使用会提供方便的熵值。例如,如果您想加密网站的密码(如浏览器那样),您的熵值可能是网站的网址。