我尽可能追踪 mod_ssl 和 OpenSSL FIPS代码,我相信{{1}中给出的SSLRandomSeed
配置参数在mod_ssl中启用FIPS模式时,文件根本不起作用。
跟踪mod_ssl.conf
中的代码似乎表明在设置FIPS模式之前调用了函数ssl_init_Module()
。 ssl_rand_seed()
将从给定的SSLRandomSeed定义的源执行种子设定,但是一旦切换到FIPS模式,DRBG将从头开始重新创建,而不保留任何信息。
事实上,OpenSSL的FIPS模式似乎根据在/ dev / urandom,/ dev / random和/ dev / srandom(按此顺序)中的来源,根据在此定义的DEVRANDOM宏。编译为标准Linux目标时的OpenSSL基本代码e_os.h。
有没有人有这种组合的经验?
他们可以评论如何提供运行时选择的熵源,例如已处理的文件吗?每次我想更改我的随机源时,是否必须重新编译OpenSSL并提供新的DEVRANDOM定义?
答案 0 :(得分:0)
他们可以评论如何提供运行时选择的熵源,例如已处理的文件吗?每次我想更改我的随机源时,是否必须重新编译OpenSSL并提供新的DEVRANDOM定义?
我认为这里有三个问题。首先,在FIPS模式下操作时用于PRNG的内容;第二,你如何播种发电机;第三,Apache / mod_ssl如何与前两个集成。
首先,当FIPS_mode_enable
成功时,md_rand
的默认OpenSSL生成器将被切换出来。使用的DRBG在SP800-90中指定(没有双EC发生器)。默认情况下,这是AES / CTR生成器。你是正确的,因为之前的种子不再使用。这将在Random Numbers OpenSSL wiki页面上进行一般性讨论。
其次,发电机自动播种,以确保其良好的工作状态。您仍然可以调用RAND_seed
将熵添加到生成器,因为RAND接口与底层生成器几乎无关。这将在Random Numbers OpenSSL wiki页面上进行一般性讨论。
第三,Apache / mod_ssl和OpenSSL之间存在脱节。显然,Apache / mod_ssl不了解这些细节。您可能需要编写一些胶水代码,了解如何使用OpenSSL和特别是RAND_*
接口。也许你可以通过提供自定义mod来实现这一点。