Windows系统上有哪些熵源可用?

3

我希望在Windows上生成一个随机的加密密钥。我应该从哪里获取熵值?

我希望我的熵函数可以在没有网络连接的情况下工作,并且可靠地在Windows 2000及以上版本中使用。即使是可能或不可能提供少量熵的来源也可能有用,因为所有来源都将被汇集。

这是我的初始功能列表:

GetCurrentProcessIDGetCurrentThreadIDGetTickCountGetLocalTimeQueryPerformanceCounterGlobalMemoryStatusGetDiskFreeSpaceGetComputerNameGetUserNameGetCursorPosGetMessageTimeGetSystemInfoCryptGenRandomGetProcessHandleCountGetProcessMemoryInfo


7
为什么您要列出CryptGenRandom,它可以做到您想要的功能,是吗? - R. Martinho Fernandes
我不确定它在所有计算机和Windows版本上运行得很好。你是说我应该绝对使用那个函数吗?我需要按照建议提供额外的信息熵吗? - soid
在所有版本的Windows上都可以正常工作。请查看您自己链接的文档。最低支持的版本是Windows 2000,正好符合您所述的要求。 - Cody Gray
@Martinho 和 @Cody:我刚刚在阅读有关 CryptGenRandom 的 维基百科页面 ,它说在 Windows 2000 上,从安全性角度来看,它的效果并不好。我将把它作为我的密钥的主要但不是唯一的随机源。 - soid
3个回答

7

虽然早期版本的CryptGenRandom函数可能存在弱点,但后续版本遵循安全标准(请参见CrypGenRandom页面上的注释)。

仅使用时间作为种子是不安全的。在随机数生成的最安全种子是什么?下有一个答案解释说,不可预测的随机种子可能只需要128位就能产生安全的PRNG。因此,可能没有必要寻找比问题中列出的更多来源,通常情况下,CryptGenRandom函数将已经包含并生成足够的熵,使调用者无需执行任何操作。

CryptGenRandom和必须在其之前调用的函数CryptAcquireContext可以在Delphi中像这样被调用。

2

如果可以的话,您可以要求用户移动鼠标指针一段时间。


2

大多数机器唯一的外部音频输入源是Mic In/Line In,调用waveInOpen+waveInPrepareHeader+waveInAddBuffer+waveInStart。这可能取决于硬件的随机性...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接