加密.NET库用于加密的熵从何而来?我知道您可以在Linux上使用/dev/random,但是Windows中是否存在类似的池?

评论

也许是从文件复制对话框?抱歉,无法抗拒...

直接来自Niels Ferguson /微软的这份白皮书可以很好地解释所有内容。

#1 楼

更新:自从我写这篇文章以来,CryptGenRandom已被弃用。显然,现在建议使用“下一代加密” API中的BCryptGenRandom

(令人困惑的是,它与bcrypt无关。)


是的,Windows有类似的东西。可以通过CryptGenRandom访问它。


对于Microsoft CSP,CryptGenRandom使用与其他安全组件相同的随机数生成器。这允许许多过程有助于整个系统的种子。 CryptoAPI与每个用户一起存储中间随机种子。为了形成随机数生成器的种子,调用应用程序提供它可能具有的位(例如,鼠标或键盘定时输入),然后将这些位与存储的种子以及各种系统数据和用户数据(例如进程ID和线程ID,系统时钟,系统时间,系统计数器,内存状态,可用磁盘集群,散列的用户环境块。该结果用于播种伪随机数生成器(PRNG)。在带有Service Pack 1(SP1)和更高版本的Windows Vista中,使用在NIST特殊出版物800-90中指定的基于AES计数器模式的PRNG的实现。到/dev/urandom而不是/dev/random,但是实际上,您获得的是密码随机数而不是“纯熵”这一事实并不重要。

评论


$ \ begingroup $
离题评论:您在哪里阅读这些高级文章?
$ \ endgroup $
–斯潘丹
16年9月2日在13:07

$ \ begingroup $
@Spandan,我给出了链接,或者您是什么意思?
$ \ endgroup $
–otus
16年9月2日在13:20

$ \ begingroup $
本PDF文件的第11页提供了更多信息:csrc.nist.gov/CSRC/media/projects/…
$ \ endgroup $
– Marc
19-10-21在14:19