2011-02-10 32 views
3

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

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

这是我的功能初步名单:

GetCurrentProcessIDGetCurrentThreadIDGetTickCountGetLocalTimeQueryPerformanceCounterGlobalMemoryStatusGetDiskFreeSpaceGetComputerNameGetUserNameGetCursorPosGetMessageTimeGetSystemInfoCryptGenRandom, GetProcessHandleCount, GetProcessMemoryInfo

+7

为什么你列出CryptGenRandom,当它,呵呵,做你想要的? – 2011-02-10 09:58:58

+0

我不确定它在所有计算机和Windows版本上都能正常工作。你是说我绝对应该使用这个功能吗?我是否应该像熵那样提供它? – soid 2011-02-10 10:25:01

回答

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.

2

如果它的一个选项,你可以让用户移动鼠标指针一段时间。

2

的唯一外部源,大多数机器具有是话筒输入/线路,呼叫waveInOpen + waveInPrepareHeader + waveInAddBuffer + waveInStart。如何随机,这可能取决于硬件...