FIPS 140-3与140-2的差异-4

在前面的FIPS 140-3过渡系列文章中,我们展示了计划中的FIPS 140-3过渡的预期时间表(FIPS 140-3关键日期),以及您需要知道的关键术语和定义,学习了第二部分:I Feel so Degraded! 和第三部分:物理相关。在今天的文章中,我们将介绍ISO/IEC 19790/ISO/IEC 24759(这里将其称为FIPS 140-3)的第7.8 - 7.11节。目标是深入研究非侵入安全、敏感安全参数(SSP)管理、自检和生命周期保证部分,并讨论与FIPS 140-2的异同点。

非侵入安全

乍一看,Section 7.8似乎是基于ISO的FIPS 140-3中的新内容。而FIPS 140-2标准没有像FIPS 140-2 IG 11.1一样直接给出非侵入安全要求。这个IG讨论了AS.11.01中的文档和测试要求。在级别1和级别2中,要求基本相同。在级别3及以上时,需要进行特定的验证测试。在本系列文章的第1部分中,我们提到了非入侵安全的测试标准将在SP 800-140F(也称为FIPS 140-3附录F)中给出。附录F很可能会链接到ISO/IEC 17825以获得经批准的“非侵入消减手段测试标准”。当FIPS 140-3开始应用时,有哪些测试可用或测试标准是什么还有待确定。两份ISO草案(ISO/IEC PRF 20085-1和20085-2)可能会详细说明测试工具的要求和测试工具的校准方法。

敏感安全参数SSP管理

在本系列的第1部分中谈到在FIPS 140-3中较大变化之一是敏感安全参数管理部分。这一节定义了关键安全参数(CSP)和公共安全参数(PSP)。你可以这样想:SSP有机密性和完整性相关的要求,而PSP只有完整性相关的要求。
FIPS 140-3 (ISO/IEC 24759)的DTR明确规定“密码的哈希值、RBG状态信息和中间密钥生成值应被视为CSP”。RBG CSP的细节在IG 14.5中已经提到。这是FIPS 140-3纳入现有FIPS 140-2 IG内容的另一个例子。
FIPS 140-3使用了与其他NIST文档更为一致的术语,在9.2节的要求中用“随机比特生成器Random Bit Generators(RBG)”取代了FIPS 140-2术语“随机数生成器Random Number Generators(RNG)”。为了简单起见,也没有了对”非确定性RNG”或”NDRNG”的引用,现在只称为熵(entropy)。

对于SL 1级和2级,SSP的输入和输出要求与FIPS 140-2和IG 7.7中的要求基本相同。SSP的建立、电子输入(electronic entry)、直接传入SSP(direct entry SSP transport )和SSP协议等许多术语在FIPS 140-2 IG 7.7和IG D.2分别进行了讨论。
在FIPS 140-3的安全级别3中,CSP必须加密输入或通过可信通道(在概念上与“可信路径”等同)输入。这在IG 2.1中定义并在IG 7.7中引用。使用分割知识程序(split knowledge procedures,译注1 )从模块输入输出的明文秘密/私钥也必须使用可信通道。我们在本系列的第2部分中详细讨论了可信通道。FIPS 140-3的SL 4级要求在输入或输出每个密钥部件时要针对操作员身份分别进行多因素认证。
FIPS 140-3还针对所有级别提出了通过无线连接电子输入或输出所有CSP、密钥部件和认证数据时需要加密的新要求。
译注1:split knowledge procedures,把密钥等敏感信息分割成几块分开分发和保存,使用时再合并还原原始敏感信息的过程。通过这样的处理,可以加大攻击者获取到完整敏感信息的难度。

说到清零,最大的变化是单词拼写。在FIPS 140-2中,它被称为“zeroization”。我们需要花一些时间来重新塑造使用“s”代替“z”的根深蒂固的肌肉记忆。在SL 1级,FIPS 140-3显式地声明SSP的清零(zeroisation)可以由模块操作员程序化地执行。这实际上引入了FIPS 140-2 IG 7.9的大部分内容。
当模块需要按照SL 2级(或更高级别)的要求清零时,FIPS 140-3声明未受保护的SSP应该用“全0、全1或随机数据”进行覆盖。并且“清零应不包括用另一个未保护的SSP来覆盖一个未保护的SSP[09.31]”。当临时的SSP不再需要时应将其清零[09.32]。当清零完成时,模块应输出状态指示[09.33]。
当模块达到SL 4的要求时,清零必须是立即且不可被中断(non interruptible)(通过这种方式他们表达了他们的意思)。清零过程将模块恢复到出厂状态。

自检self-test

在第1部分中,我们讨论了FIPS中这个非常受欢迎的部分。FIPS 140-3中的自检更好地对不同自检进行了区分。它还引入了一些新的自检。在FIPS 140-2中,运行前的自检被认为是“POST”或开机自检(Power-On Self-Test)。
对于每个自检必须在何时及何种方式执行,FIPS 140 - 3几乎没有留下解释的余地:“不管运行在批准或未批准模式下,所有的自检都必须在无外部控制、无外部输入文本向量、无预期输出结果或者操作员干预情况下,由模块执行并决定自检通过还是失败。
在模块通过数据输出接口提供任何数据输出前,应该执行POST自检并成功通过[10.03]。

在调用适用的安全功能或进程(即需要进行自测的安全功能)时,应执行条件自测[10.04] 。
在SL 3和SL 4级,加密模块必须维护错误日志(在FIPS 140-3中引入),且日志可被授权的模块操作员访问。错误日志必须至少提供最近的错误事件信息(即哪个自检失败了)。
如果模块实现了旁路(passby)能力(对于所有级别),则需要进行运行前自检,以确保控制旁路功能激活的逻辑正确运行。

再见 (AS09.22),谢谢你给我的鱼!(译注2

译注2:出自道格拉斯·亚当斯(Douglas Adams)1984年小说《银河系漫游指南》系列的第四本书的标题,用作幽默地表达告别。

目前,FIPS 140-2 IG 9.3声明,对于已批准的完整性技术中使用的底层密码算法,不需要进行单独的(开机时)密码算法自检。FIPS 140-3规定“用于执行已批准的完整性技术进行运行前软件/固件检测的密码算法必须首先通过(ISO/IEC 19790:2012)7.10.3.2规定的密码算法自检”。目前看来,密码算法在被用于运行前的软件/固件的经批准的完整性检测技术时,必须要自检通过。(译注3:IG 9.3与140-3的规定之间显然存在矛盾)我们不确定CMVP是否计划扩展IG 9.3,或者FIPS 140-3中的描述是否会保留。

FIPS 140-3的另一个变化是可以在首次运行算法之前执行密码算法自检,而FIPS 140-2要求加密码算法在上电时进行自检(POST)。这是对“经典”而死板的旧FIPS 140-2的重大改变。这可能会减轻一些处理压力,因为像OpenSSL、Bouncy Castle等密码库现在可以跳过算法自检,直到使用之前再做。
译注4:译者在工程实践当中确实碰到过一些需要秒级快速启动的设备,特别是嵌入式设备,在技术上很难做到启动时就完成所有用到的密码算法自检又能满足启动时间要求。FIPS140-3的这一修改降低了产品设计时的难度。

然而,其他条件测试仍然存在。FIPS 140-3引入了周期自检的概念。在SL 1级中,这种测试与“经典的”FIPS 140-2按需自检非常相似。在SL 3和SL 4级中,模块必须在既定的时间段内自动重复执行特定自检。这意味着模块需要有这个内置的逻辑(即无需操作员介入)。

你得做PCT(成对一致性测试)!…你得做PCT!…你得做PCT!

FIPS 140-3的DTR还明确要求对用来执行数字签名生成/验签、SSP协议和批准的密钥传输的公钥或私钥对进行成对一致性测试(pair-wise consistency test)。
对于已批准的密钥传输,测试必须包括将公钥应用于明文值或已编码的消息。结果的密文必须与原始明文进行比较,以验证它们是否不同。如果两个值不同(译注5),则必须将私钥应用于密文解密。如果解密结果不等于原始明文,则成对一致性测试不通过。
译注5:意思是公钥加密后的结果无法直接与明文比较验证正确性
对于SSP参数的协商(agreement),在底层的非对称算法上进行测试。例如:Diffie-Hellman密钥协议使用数字签名算法常见的有限域加密原语。
译注6:译者理解这里的意思应该是用对底层原语的测试替代协商协议的测试,因为协商协议的测试需要协商各方的配合才能完成,测试起来相对复杂和对环境有更多要求
虽然FIPS 140-3对自检的类型与何时必须执行自检给出了一些很好的解释,但我们相信当前IG 9.4的大部分内容将被保留下来。此IG算法具有FIPS 140-3中没包含的安全功能特定指南。

再见CRNGT

对于条件连续随机发生器测试(CRNGT,Conditional Continuous Random Generator Test),FIPS 140-3并未要求。根据IG 9.8, NIST SP 800-90A第11节健康检查满足已批准DRBG的这一要求。IG 9.8可能会继续存在,以进一步阐明与条件熵相关的自检(如RCT)的要求。
标准中还引入了一种条件故障测试。此测试包括在密码算法实现中集成故障检测机制的实现。当检测到故障时,密码算法故障检测自检必须失败。ISO 24759提供了一个故障检测的例子:“RBG的故障检测测试将覆盖在RBG实现内部正确处理熵源的错误”。
译注7:这里指即使内部已正确处理了熵源的错误,故障检测的结果也将覆盖前者的结果。

你的旁路(bypass)检查太…厉害了,兄弟

此外,有条件的旁路测试要求在FIPS 140-3中更加明确。如果管理模块的旁路能力规则可更改,那么模块必须在更改之前立即使用已批准的完整性技术验证控制信息的完整性。模块必须在修改后立即使用经批准的完整性技术生成一个新的完整性值。
生命周期保障
在第一篇博客中,我们在FIPS 140-2中称作“设计保障”的章节已经过时。在FIPS 140-3中,它被重新制作和修改。这里的大多数要求都是厂家在密码模块的设计、开发、运行和生命周期结束期间的最佳实践。

SL 3和SL 4 级,FIPS 140-3要求使用自动配置管理系统。

本节还包括熟悉的有限状态模型(Finite State Model )或FSM。FSM在FIPS 140-2中有自己的章节。(FIPS 140-3)FSM章节包括新的术语,如静止(Quiescent)状态。这是密码模块处于休眠的一种状态(例如低功耗、暂停或休眠)。

聚焦开发过程

FIPS 140-3要求使用配置管理系统跟踪源代码、编译器、runtime库、配置设置、构建过程和方法、构建选项、环境变量以及用于将源代码编译和链接为可执行形式的所有其他资源。密码模块还必须使用“生产级开发工具”(例如:编译器)来开发。
在SL 2和SL 3级,对用高级语言开发模块的要求得到了更新和澄清。FIPS 140-3规定软件/固件必须使用高级的、非专有的语言实现,或者提供必须使用低级语言(如汇编或微码)的理由。定制集成电路必须使用高级硬件描述语言(HDL)实现,如:VHDL或Verilog。

泽德(译注8)死了,宝贝,泽德死了

术语“形式化模型”(Formal Model)在SL 4级中随处可见。FIPS 140-2要求使用一种形式化的规范语言“这是一种基于已建立的数学(如一阶逻辑或集合理论)的严格符号”。我们乐观地认为,这意味着我们终于可以抛弃1997年版本的Z之路:用形式化方法进行实际编程!而对于绝大多数厂家来说,这个需求几乎是不可能实现的。这也许意味着FIPS 140-3将有更多的模块通过SL4级验证。
译注8:泽德Zed是游戏”英雄联盟“中暗影骑士团的领袖。这里表示终于不用再使用形式化语言来通过认证。

厂家测试

FIPS 140-3引入了厂家要对加密模块中实现的安全功能的测试要求。DTR(ISO/IEC 24759:2017)中描述的供应商测试规定,SL 1和SL 2级应包括用于检测问题的自动化安全诊断工具,例如缓冲区溢出。在SL 3和SL 4中,这应该包括“低级测试”。这被定义为“对加密模块的单个组件或组件组及其物理端口和逻辑接口的测试”。我们知道这有点含糊不清。我们希望在接下来的几个月里能得到CMVP的进一步指导。
在SL 2(及更高级别)中FIPS 140-3增加了一项新要求,即交付程序必须包括篡改检测文件。SL 4级要求授权操作员(首次使用)需要用供应商提供的数据向模块进行身份验证。

附注:我们注意到ISO 24759:2017使用“unauthorized”,而ISO 19790:2012使用“unauthorised”。欢迎你来做个强有力的技术分析!
对于密码模块的安全操作,还有一些新的要求适用于管理员指南和非管理员(即操作员)指南。

(密码模块)的生命周期结束

FIPS 140-3中新增了加密模块的安全清理(secure sanitization)(SL 1和SL 2级)和安全销毁(secure destruction)(SL 3和SL 4级)的程序要求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值