我正在研究使用 Windows 的数据保护 API (DPAPI) 来加密一些数据。我的一个要求是在加密值时使用动态盐。
我通过测试注意到,如果我多次加密同一个字符串,我会得到不同的结果。这是使用相同的字符串、空熵值和相同的范围。
这让我觉得好像已经涉及到一种动态盐。我没有看到任何说明这一点的文件。
DPAPI 是否已经处理动态加盐?如果不是,是什么导致加密值每次都发生变化?
我正在研究使用 Windows 的数据保护 API (DPAPI) 来加密一些数据。我的一个要求是在加密值时使用动态盐。
我通过测试注意到,如果我多次加密同一个字符串,我会得到不同的结果。这是使用相同的字符串、空熵值和相同的范围。
这让我觉得好像已经涉及到一种动态盐。我没有看到任何说明这一点的文件。
DPAPI 是否已经处理动态加盐?如果不是,是什么导致加密值每次都发生变化?
但是,MasterKey 并未明确用于保护数据。相反,如果应用程序选择提供对称会话密钥,则会根据 MasterKey、 一些随机数据和任何附加熵生成对称会话密钥。正是这个会话密钥用于保护数据。
[...]
会话密钥永远不会被存储。相反,DPAPI 将用于生成密钥的随机数据存储在不透明数据 BLOB 中。当数据 BLOB 被传回 DPAPI 时,随机数据用于重新导出密钥并取消保护数据。
https://msdn.microsoft.com/en-us/library/ms995355.aspx
包含在加密数据中的随机数据充当盐。
该optionalEntropy
参数的目的是允许各个应用程序保护自己免受在同一用户帐户下运行的其他应用程序的影响,并且不需要增加已经执行的盐渍的有效性。