我正在研究使用windows的数据保护api(dpapi)来加密一些数据。我的一个要求是在加密值时使用动态salt。
我通过测试发现,如果我多次加密同一个字符串,就会得到不同的结果。这与使用相同的字符串、空的熵值和相同的范围有关。
这让我觉得好像已经有一个动态盐涉及。我没有看到任何文件说明这一点。
以下是我调用的方法https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.protecteddata.protect?view=netframework-4.7.2
.
dpapi是否已经处理了动态盐析?如果不是,是什么导致加密值每次都更改?

最佳答案

但是,主密钥并没有显式地用于保护数据。
相反,基于主密钥生成对称会话密钥,
一些随机数据和任何附加熵,如果应用程序
选择提供它。此会话密钥用于保护
数据。
[…]
会话密钥从不存储。相反,dpapi存储随机数据
它用于在不透明数据块中生成密钥。当数据
blob被传递回dpapi,随机数据被用来重新派生
密钥和取消数据保护。
https://msdn.microsoft.com/en-us/library/ms995355.aspx
加密数据中包含的这些随机数据起着盐的作用。
optionalEntropy参数的目的是允许单个应用程序保护自己不受在同一用户帐户下运行的其他应用程序的影响,并且不需要增加已经执行的跳转的有效性。

07-26 04:28