2011-02-10 61 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。如何隨機,這可能取決於硬件...