我正在研究使用Windows的数据保护API(DPAPI)来加密某些数据。我的一个要求是在加密值时使用动态盐。
通过测试,我注意到如果多次加密相同的字符串,则会得到不同的结果。这是使用相同的字符串,空Entropy值和相同的作用域。
这让我感觉好像已经有动态盐一样。我没有看到任何说明文件。
DPAPI是否已经处理动态盐析?如果不是,是什么原因导致加密值每次更改?
答案 0 :(得分:3)
但是,MasterKey并未明确用于保护数据。 而是根据MasterKey生成对称的会话密钥, 一些随机数据,以及任何其他熵(如果有应用程序) 选择提供它。此会话密钥用于保护 数据。
[...]
从不存储会话密钥。而是,DPAPI存储随机数据 它用于在不透明数据BLOB中生成密钥。当数据 BLOB传递回DPAPI,随机数据用于重新派生 并取消保护数据。
https://msdn.microsoft.com/en-us/library/ms995355.aspx
包含在加密数据中的此随机数据充当盐。
optionalEntropy
参数的目的是允许单个应用程序保护自己免受运行在同一用户帐户下的其他应用程序的侵害,并且不需要提高已执行的加盐效果。