OpenSSL может загружать и запускать различные механизмы случайных чисел, и не ограничивается одной реализацией. RAND_bytes
реализован в crypto/rand/rand_lib.c
, и он получает указатель функции на конкретную реализацию ГСЧ, вызывая функцию RAND_get_rand_method()
в том же файле.
Таким образом, предполагая, что вы не загрузили новый движок ГСЧ, OpenSSL выберет одно из следующего:
По умолчанию выбирается RAND_SSLeay()
, реализованный в crypto/rand/md_rand.c
, что в конечном итоге вызывает ssleay_rand_bytes()
. Я не думаю, что у него действительно есть имя, и случайность в конечном итоге исходит из дайджеста сообщений (MD_Update).
Если вы запускаете модуль 1.0 FIPS в режиме FIPS, вы получаете ГСЧ ANSI X9.31, который использует либо 3DES, либо AES в своей основе. (Обратите внимание, что ANSI X9.31 больше не разрешен в FIPS 140-2).
Если вы используете модуль 2.0 FIPS в режиме FIPS, вы получаете детерминированный генератор случайных битов SP (DRBG) SP 800-90A.