как известно, от качества генератора случайных чисел напрямую зависит криптостойкость ключей шифрования. Я решил покопаться на эту тему в тулзах OpenSSL и GnuTLS, конкретно в утилитах для генерации RSA ключей. Оказывается, все они по дефолту используют в онтопике /dev/urandom
A counterpart to /dev/random is /dev/urandom («unlocked»/non-blocking random source[4]) which reuses the internal pool to produce more pseudo-random bits. This means that the call will not block, but the output may contain less entropy than the corresponding read from /dev/random. While it is still intended as a pseudorandom number generator suitable for most cryptographic purposes, it is not recommended for the generation of long-term cryptographic keys.
А RSA ключи как раз являются «long-term cryptographic keys» в большинстве случаев. Получается, что сгенерированные таким образом ключи могут быть ненадёжными, и всякие NSA теоретически могут без палева на раз-два крякать перехваты траффика (OpenVPN туннели, SSL соединения с веб-сайтами и т.д.) ничего не подозревающих хомячков и прочих бородатых террористов
В оффтопике в случае OpenSSL всё еще печальнее - по дефолту в качестве рандома используется снимок экрана с десктопа, который вполне предсказуем
А еще я откопал такой кусочек кода в OpenSSL, в crypto/bn/bn_rand.c, который в том числе участвует и в генерации ключей:
...
/* make a random number and set the top and bottom bits */
time(&tim);
RAND_add(&tim,sizeof(tim),0.0);
Во всех умных книжках пишется, «ата-та, так нельзя делать, таймер в качестве посева для ГПСЧ нельзя использовать, т.к. последовательность предсказуема»