Windows上有哪些熵源?

时间:2011-02-10 09:51:36

标签: windows winapi random cryptography entropy

我想在Windows上生成随机加密密钥。我在哪里可以获得熵?

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

这是我最初的功能列表:

GetCurrentProcessIDGetCurrentThreadIDGetTickCountGetLocalTimeQueryPerformanceCounterGlobalMemoryStatusGetDiskFreeSpaceGetComputerNameGetUserNameGetCursorPosGetMessageTimeGetSystemInfoCryptGenRandomGetProcessHandleCountGetProcessMemoryInfo

3 个答案:

答案 0 :(得分:7)

尽管早期版本的CryptGenRandom函数may contain weaknesses更高版本遵循安全标准(请参阅CrypGenRandom页面上的备注。)

just use time as your seed很弱。在What is the most secure seed for random number generation?下有一个答案,它解释了不可预测的随机种子可能只需要128位来产生安全的PRNG。因此,可能没有必要找到比问题中列出的更多的源,并且通常CryptGenRandom函数已经包含并为其自身生成足够的熵,调用者不需要执行任何此操作。

CryptGenRandom和必须在其前面的函数CryptAcquireContext可以是called from Delphi like this.

答案 1 :(得分:2)

如果是一个选项,您可以要求用户移动鼠标指针一段时间。

答案 2 :(得分:2)

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