mod_ssl с включенным режимом FIPS и SSLRandomSeed

Я проследил код mod_ssl и OpenSSL FIPS, насколько это возможно, и я считаю, что параметр конфигурации SSLRandomSeed, указанный в файле mod_ssl.conf, просто не делает ничего полезного, когда Режим FIPS включен в mod_ssl.

Отслеживание кода в ssl_init_Module() показывает, что функция ssl_rand_seed() вызывается до установки режима FIPS. ssl_rand_seed() будет выполнять заполнение из заданных источников, определенных SSLRandomSeed, но как только вы переключитесь в режим FIPS, DRBG воссоздается с нуля без сохранения какой-либо информации.

На самом деле режим OpenSSL FIPS, по-видимому, старается изо всех сил исходить из /dev/urandom, /dev/random и /dev/srandom (именно в таком порядке) в соответствии с макросом DEVRANDOM, определенным в базовом коде OpenSSL e_os.h, когда скомпилирован для стандартной цели Linux.

У кого-нибудь есть опыт работы с этой комбинацией?

Могут ли они прокомментировать, как предоставить выбранный во время выполнения источник энтропии, такой как обработанный файл? Нужно ли мне перекомпилировать OpenSSL и предоставлять новое определение DEVRANDOM каждый раз, когда я хочу изменить источник случайности?


person logicalscope    schedule 10.10.2014    source источник


Ответы (1)


Могут ли они прокомментировать, как предоставить выбранный во время выполнения источник энтропии, такой как обработанный файл? Нужно ли мне перекомпилировать OpenSSL и предоставлять новое определение DEVRANDOM каждый раз, когда я хочу изменить источник случайности?

Я думаю, здесь есть три проблемы. Во-первых, что используется для PRNG при работе в режиме FIPS; во-вторых, как заправить генератор; и в-третьих, как Apache/mod_ssl интегрируется с первыми двумя.

Во-первых, когда FIPS_mode_enable завершается успешно, генератор OpenSSL по умолчанию для md_rand отключается. Используемый DRBG указан в SP800-90 (без генератор Dual-EC). По умолчанию это генератор AES/CTR. Вы правы в том, что предыдущее семя больше не используется. В целом это обсуждается на вики-странице Random Numbers OpenSSL.

Во-вторых, генератор автоматически устанавливает себя, чтобы убедиться, что он в хорошем рабочем состоянии. Вы все еще можете вызвать RAND_seed, чтобы добавить энтропию к генератору, потому что интерфейс RAND практически не зависит от базового генератора. В целом это обсуждается на вики-странице Random Numbers OpenSSL.

В-третьих, существует разрыв между Apache/mod_ssl и OpenSSL. Судя по всему, Apache/mod_ssl не знает об этих деталях. Вам, вероятно, потребуется написать некоторый связующий код, который понимает, как работать с OpenSSL и, в частности, с интерфейсом RAND_*. Возможно, вы можете сделать это, предоставив пользовательский мод.

person jww    schedule 08.12.2014