1

我已经尽我所能跟踪了mod_sslOpenSSL FIPS 代码,并且我相信当在 mod_ssl 中启用 FIPS 模式时,文件中SSLRandomSeed给出的配置参数mod_ssl.conf根本不会做任何有用的事情。

跟踪代码ssl_init_Module()似乎表明ssl_rand_seed()在设置 FIPS 模式之前调用了该函数。 ssl_rand_seed()将从给定的 SSLRandomSeed 定义的源执行播种,但是一旦您切换到 FIPS 模式,DRBG 将从头开始重新创建,而不保留任何信息。

事实上,根据 OpenSSL 基本代码 e_os.h 中定义的 DEVRANDOM 宏,OpenSSL 的 FIPS 模式似乎不遗余力地从 /dev/urandom、/dev/random 和 /dev/srandom(按此顺序)获取源为标准 Linux 目标编译。

有没有人有这种组合的经验?

他们能否评论如何提供运行时选定的熵源,例如已处理的文件?每次我想更改随机源时,是否必须重新编译 OpenSSL 并提供新的 DEVRANDOM 定义?

4

1 回答 1

0

他们能否评论如何提供运行时选定的熵源,例如已处理的文件?每次我想更改随机源时,是否必须重新编译 OpenSSL 并提供新的 DEVRANDOM 定义?

我认为这里有三个问题。首先,在 FIPS 模式下运行时 PRNG 使用什么;第二,如何为生成器播种;第三,Apache/mod_ssl 如何与前两者集成。

首先,当FIPS_mode_enable成功时,则关闭默认的 OpenSSL 生成器md_rand。使用的 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 来做到这一点。

于 2014-12-08T01:34:09.983 回答