Windows DPAPI - 如何处理熵?

时间:2009-08-25 04:18:03

标签: .net security

我正在使用Windows DPAPI为我加密一些敏感数据。密码存储在注册表中。这一切都运行良好,但我想知道是否有人可以澄清我对(可选)提供给.NET中的ProtectedData.Protect()的'entropy'字节的理解。

'entropy'字节数组看起来类似于与其他加密方案一起使用的初始化向量或盐,但我无法在MSDN中看到对熵字节的良好描述。我看到的代码示例只是熵字节中的硬编码!

是否将熵字节提供给ProtectedData.Protect()& ProtectedData.Unprotect类似于IV还是salt?因此,熵字节可以安全地存储在密码旁边,还是会危及安全性?

2 个答案:

答案 0 :(得分:14)

Entropy是特定于保护数据的应用程序的辅助密钥。如果我没记错的话,一般的想法是允许多个应用程序在单个用户帐户下加密数据,但仍然保持彼此之间的安全性。例如,您的应用程序可能会加密UserA下的数据。如果我的应用程序希望在UserA下解密该数据,那么实际上没有任何东西可以阻止我这样做,因为DPAPI使用用户密钥。但是,如果您考虑应用程序特定的“熵”,那么我需要知道您的熵来解密任何数据以保护UserA。

熵可以被认为类似于盐,因为它是用于进一步抽象加密内容的附加密钥或秘密。与salt不同,对于给定凭证下的每个加密操作,您的应用程序的熵都需要保持不变。使用盐,通常最好尽可能多地改变它。

熵本质上是一个额外的密钥,它应该被视为任何其他加密密钥。保持私密性和安全性。

顺便说一句,我认为'熵'是一个用于此目的的残暴词。像“差异化”这样的东西,或者甚至可能创造出像'distintifier'这样的词,会更好。 :P非常混乱的术语使用。

答案 1 :(得分:1)

如果您想要密码保护应用程序本身,这很有用。密码(或使用密码生成和加密的其他密钥,以便在更改密码时不需要重新设置应用程序数据)可以在存储应用程序数据时用作熵。