原文链接:https://blog.acumensecurity.net/2019/08/27/fips-140-2-and-fips-140-3-whats-the-diff-part-2-i-feel-so-degraded/
到目前为止,我们已经列出了计划中FIPS 140-3转换的预期时间表(关键的FIPS 140-3日期),以及您需要知道的关键术语和定义(第1部分:关键术语和定义)。今天,我们的博客系列继续介绍FIPS 140-2和FIPS 140-3之间的差异。这篇文章介绍了ISO/IEC 19790/ISO/IEC 24759(我们将称其为FIPS 140-3)的各个章节,并说明了它们与FIPS 140-2标准和当前IG(实现指南)的各个章节之间的映射和区别。这篇帖子将侧重于FIPS 140-2的前三节和相关IG,以及ISO/IEC 19790 7.2-7.4章节,即密码模块规范、密码模块接口和角色、服务和身份认证(Authentication)章节。
1 密码模块规范
1.1 密码模块类型和密码边界
FIPS 140-2标准(2001年发布)最初基于所有模块均为硬件模块的思想编写。直到后来,不同类型的模块(混合、软件和固件)被定义和添加到IG中(IG 1.9、1.16和1.17)。此外,FIPS 140-2 IG 1.9将混合模块限制在FIPS 140-2认证一级。
FIPS 140-3将包括硬件模块、固件模块、软件模块、混合软件模块和混合固件模块。它在标准的7.2.2节中明确定义了模块的每种类型。对于混合模块在新标准中可能达成的认证级别也没有限制。对于那些寻求通过一级以上认证的混合模块供应商来说,这是一个好消息!
2 运行模式
两个新的术语:“正常运行(Normal Operation)”和“降级运行(Degraded Operation)”已经被引入到FIPS 140-3 19790中,并在前面的博客中提到。
正常运行是指密码模块的完整功能可用和/或可配置,即所有算法、安全功能和服务。
降级运行是由于在错误状态进行重新配置后,使功能的一部分子集可用和/或可配置的情况。
如果模块支持降级运行,那么降级运行模式只能在模块退出错误状态后才能进入。这是什么意思?某个机制或功能失败,模块进入错误状态并输出错误指示。一旦处于错误状态,支持降级运行的模块就可以转换为降级运行模式,并继续使用降级的功能运行。在针对新标准开发模块时,您需要记住以下几个附加要求。当模块进入降级运行模式时,模块需要提供状态信息,并且隔离失效的功能。各种条件下的自检必须被执行。最后但同样重要的是,在使用任何处于降级模式的密码功能时,如果曾经有(程序)企图尝试使用非操作性的算法、安全功能或者进程,服务需要指示出曾经出现过这样的尝试。
FIPS 140-3文中谈到一个关于降级运行的附加注释。7.2.4.3节最后一句话写道:“如果模块未通过预运行自检,则模块不得进入降级运行”。你可能会提出疑问“我以为降级运行是在自测失败时使用的,但这里你说不能进入该状态?” 请记住,您只能从错误状态进入降级运行模式。因此,模块必须首先进入错误状态,同时还要满足上面讨论的其他要求,然后才能进入降级运行模式。
3 附加的概念
请密切关注CMVP将在未来几个月发布的SP 800-140文档,看看来自FIPS 140-2的IG既然在ISO 19790:2012/ISO 24759:2014标准中没有提到,那么是否在某个特别出版物中提到。第一部分中的几个IG可能会被吸收到web网页形式的CMVP管理手册中,而其他的可能会继续作为IG处理。
3.1 密码模块接口
之前的博客提到了ISO文档中介绍的接口类型:
- HMI:硬件模块接口(Hardware Module Interface)
- SFMI:软件或固件模块接口(Software or Firmware Module Interface)
- HSMI:混合软件模块接口(Hybrid Software Module Interface)
- HFM:混合固件模块接口(Hybrid Firmware Module Interface)
所以我们现在不打算讨论这些。我们将转而讨论输入和输出接口。
3.2 传统接口和新接口
FIPS 140-2和FIPS 140-3都包含四个逻辑接口:数据输入、数据输出、控制输入和状态输出。FIPS 140-3引入了第5种接口,被称为控制输出接口。控制输出接口用于命令的输出。信号和控制数据用于控制或指示运行状态。此控制输出可能是发送给另一个密码模块的信息。电源接口也是除了软件模块之外所有模块都需要的接口。
3.3 可信通道(trusted channel)
FIPS 140-3中引入的另一个概念是“可信通道”,它类似于FIPS 140-2中“可信路径(trusted path)”的概念(第4.7.4节和IG 2.1节)。它是密码模块与向模块发送数据和从模块接收数据的终端设备之间的安全通信链路,目的是保护未受保护的CSP。
与FIPS 140-2 IG 2.1类似,在FIPS 140-3中对于安全级别1和2,并没有要求使用可信通道。FIPS 140-3对安全级别3和4有几个要求,例如:不受保护的明文csp、密钥组件和身份认证数据,这些数据在模块和发送方/接收方之间传输时需要使用可信通道。可信通道需要防止未经授权的修改、替换和泄露。使用可信通道的服务需要使用基于ID的身份认证,并且在使用可信通道时模块必须提供状态指示器。
FIPS 140-3对使用可信通道的安全4级模块提出了一个额外的要求——使用可信通道的4级安全密码模块必须对使用可信通道的所有服务使用多因素认证。这是我们在之前的FIPS 140-2或IG 2.1中没有看到的。
4 角色,服务与认证
4.1 角色
FIPS 140-2标准(第4.3.1节)要求密码模块既要支持密码官(crypto officer)角色,也要支持用户角色。对维护员角色的支持则是可选的。FIPS 140-3仍有这三个角色,但只有密码官为必须(第7.4.2节),用户和维护员均为可选。
4.2 服务
4.2.1 要求的服务
FIPS 140-2标准中有三种要求提供的服务:显示状态、执行自检和执行批准的安全功能(第4.3.2节)。FIPS 140-3中同样要求提供这三个服务,此外还要求提供两个额外的服务:显示模块版本信息和清零(zeroization)操作(第7.4.3.1节)。“显示模块的版本信息”要求加密模块输出模块名称/标识和版本信息,这些信息可根据验证证书验证合法性。清零服务的规范在第7.9.7节中定义,这将在后续的博客中讨论。
4.2.2 旁路服务(Bypass Service)
FIPS 140-2和FIPS 140-3都包含可选的旁路服务。FIPS 140-3特别要求能配置模块中旁路功能的操作员必须假定是已被授权的角色。虽然FIPS 140 -2标准并没有明确规定,但大多数情况假设认证授权角色是必要的,因为服务可以用于公开CSP和/或影响模块保护信息的安全性(IG 3.1一节)。
4.2.3 自启动的密码输出(Self-Initiated Cryptographic Output)
FIPS 140-3提出了一个新的能力:自启动的密码输出能力。在这种能力中,模块可以执行加密操作或其他经批准的安全功能,而不需要操作员的干预。密码官可以配置此功能,而此配置可在重启后持久化。激活这个服务需要两个内部操作,并且模块必须指示该服务已激活。
4.2.4 软件/固件加载
在FIPS 140-2标准和IG 9.7中提到的软件/固件加载,是在加载软件/固件时需要进行自检的情况下进行的。FIPS 140-2没有像我们在FIPS 140-3(第7.4.3.4节)中看到的那样将其作为服务来处理。文中陈述的一些要求包括,为了模块保持经过验证的状态,所加载的任何软件/固件都必须经过验证机构的验证。在此情况下,在软件/固件成功完成验证之前,需要禁止所有数据输出;在执行代码之前必须先进行软件/固件加载测试;模块在运作前自检成功之前不得执行加载的代码。最后,同样重要的是,必须更新模块版本信息以反映软件/固件的增加/更新。
4.2.5 其他评论
FIPS 140-3中没有明确规定未经身份验证的服务,因此我们需要看看这个在当前IG 3.1中已解决的问题是否会延续到SP800-140文档中。更多关于这方面的内容将在以后的博客中讨论。
4.3 身份认证
FIPS 140-3与FIPS 140-2对于安全级别1-3中的身份认证要求类似:(ISO 19790:
- 级别1-无认证要求;
- 级别2 -基于角色的最小化身份认证;
- 级别3 -基于身份的认证。
最大的不同在于第2级增加了“最小化(minimum)”一词,这与IG 3.4中的澄清相对应。在基于ISO的FIPS 140-3标准中,第4级身份认证将身份认证提升了一个级别,因为它不仅需要基于身份的身份认证。对于级别4的身份认证,它必须是基于多因素的身份认证。
在本节中需要注意的另外两项是FIPS 140-2指定了模块所需的身份验证强度。强度没有在FIPS 140-3中定义,但是必须在模块安全策略中指定。最有可能的情况是,每个验证机构将在它们的附加文档中包含认证强度说明。
经批准的认证机制不能通过文档化的程序或安全规则来实现(比如:策略)。这意味着口令的长度限制必须由模块配置和执行。这可能会影响当前模块的操作方式。因此,当您准备让模块满足ISO要求时,请注意这一点。