3

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

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

这是我最初的功能列表:

GetCurrentProcessIDGetCurrentThreadIDGetTickCountGetLocalTimeQueryPerformanceCounterGlobalMemoryStatusGetDiskFreeSpaceGetComputerNameGetUserNameGetCursorPosGetMessageTimeGetSystemInfoCryptGenRandomGetProcessHandleCountGetProcessMemoryInfo

4

3 回答 3

7

尽管CryptGenRandom函数的早期版本可能包含弱点,但后来的版本遵循安全标准(请参阅 CrypGenRandom 页面上的备注。)

仅将时间用作种子是很弱的。什么是最安全的随机数生成种子?这解释了不可预测的随机种子可能只需要 128 位即可产生安全的 PRNG。因此,可能没有必要找到比问题中列出的更多的源,并且通常 CryptGenRandom 函数已经包含并为自己生成足够的熵,调用者不需要执行任何这些操作。

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

于 2011-02-10T14:46:28.563 回答
2

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

于 2011-02-10T10:45:30.473 回答
2

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

于 2011-02-10T16:12:21.027 回答