FIPS模式下的linux系统是否应该为不受支持的功能抛出故障



我有一个处于FIPS模式的RHEL 8.6系统,我正在测试当主机的FIPS=1时容器及其运行时会发生什么。我的期望是,调用一个不受支持的密码或方法应该会引发某种错误。

在我的测试中,我构建了一个使用OpenSSL3.0.3编译的NodeJS映像,可以使用以下命令启动节点运行时(无论是否使用fips(:

/opt/node/bin/node --force-fips test.js

/opt/node/bin/node test.js

当代码使用--force-fips运行时,程序会抛出一个我所期望的错误,例如Error: error:0308010C:digital envelope routines::unsupported

但是,删除--force-fips后,代码成功运行,并输出一个md5散列/opt/node/bin/node md5.js b10a8db164e0754105b7a99be72e3fe5

由于主机在FIPS中,我认为这将通过并阻止那些不受支持的机制,如MD5在FIPS中太旧/不受支持,或者ChaCha20太新且不受支持/未经验证的加密。

如果运行时仍然可以使用最终失败的密码和密码学,那么主机FIPS模式有什么好处?

操作系统中的FIPS模式告诉操作系统提供的加密库(如OpenSSL(仅使用与FIPS兼容的密码,并执行其他任务,如启动时的自检。

它不会影响第三方加密库。例如,RHEL 8.6附带了OpenSSL 1.1.1,但您的Node版本可能使用静态编译的3.0.3(考虑到OpenSSL的必要安全更新历史,这似乎是个坏主意(。因此,操作系统没有提供加密库,操作系统的FIPS模式也不会影响它

类似地,如果您正在编写Rust并使用基于Rust的加密实现,或者使用Go的Go标准库,那么这些也不会受到操作系统的FIPS模式的影响。

我希望在这里发生的是,主机/OS实际上只是使用FIPS密码。但是,请理解,操作系统不会以任何方式检测到软件中实现的算法。它也不知道force-fips选项。因此,您需要显式地配置它们。

最新更新