Какие источники энтропии доступны в Windows? - PullRequest
4 голосов
/ 10 февраля 2011

Я хочу создать случайный криптографический ключ в Windows.Где я могу получить энтропию?

Я бы хотел, чтобы моя функция энтропии работала без сетевого подключения и была надежной в Windows 2000 и выше.Даже источники, которые могут или не могут обеспечить небольшое количество энтропии, могут быть полезны, поскольку все источники будут объединены.

Это мой первоначальный список функций:

GetCurrentProcessID , GetCurrentThreadID , GetTickCount , GetLocalTime , QueryPerformanceCounter , GlobalMemoryStatus , GetDiskFreeSpace GetComputerName , GetUserName , GetCursorPos , GetMessageTime , GetSystemInfo , CryptGenRandom , GetProcessHandleCount , GetProcessMemoryInfo .

Ответы [ 3 ]

7 голосов
/ 10 февраля 2011

Хотя ранние версии функции CryptGenRandom могут содержать недостатки более поздние версии следуют безопасным стандартам (см. Замечания на странице CrypGenRandom.)

Это слабо для , просто используйте время как ваше семя . Существует ответ под Какое самое безопасное начальное число для генерации случайного числа? , которое объясняет, что непредсказуемому случайному начальному числу может потребоваться только 128 битов для создания безопасного PRNG. Поэтому, вероятно, нет необходимости находить больше источников, чем указано в вопросе, и обычно функция CryptGenRandom уже содержит и генерирует достаточно энтропии для себя, что вызывающей стороне не нужно ничего делать из этого.

CryptGenRandom и функция CryptAcquireContext , которая должна предшествовать ей, может быть вызвана из Delphi следующим образом.

2 голосов
/ 10 февраля 2011

Единственный внешний источник, который есть у большинства машин - это Mic In / Line In, вызывайте waveInOpen + waveInPrepareHeader + waveInAddBuffer + waveInStart. Насколько это случайно, вероятно, зависит от аппаратного обеспечения ...

2 голосов
/ 10 февраля 2011

Если это опция, вы можете попросить пользователя переместить указатель мыши на некоторое время.

...