GMT0028-2014《密码模块安全技术要求》详细解读

上传人:博****1 文档编号:568003308 上传时间:2024-07-23 格式:PPT 页数:98 大小:1.19MB
返回 下载 相关 举报
GMT0028-2014《密码模块安全技术要求》详细解读_第1页
第1页 / 共98页
GMT0028-2014《密码模块安全技术要求》详细解读_第2页
第2页 / 共98页
GMT0028-2014《密码模块安全技术要求》详细解读_第3页
第3页 / 共98页
GMT0028-2014《密码模块安全技术要求》详细解读_第4页
第4页 / 共98页
GMT0028-2014《密码模块安全技术要求》详细解读_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《GMT0028-2014《密码模块安全技术要求》详细解读》由会员分享,可在线阅读,更多相关《GMT0028-2014《密码模块安全技术要求》详细解读(98页珍藏版)》请在金锄头文库上搜索。

1、GM/T 00282014密码模块安全技术要求详细解读李 勃2018年11月20日引言密码的安全性与可靠性直接取决于实现它们的密码模块。本标准规定了四个递增的、定性的安全要求等级。本标准规定的安全要求涵盖了有关密码模块的安全设计、实现、运行与废弃的安全元素(域)。本标准对密码模块提出了安全要求,但不对密码模块的正确应用和安全部署进行规范。1 范围本标准针对用于保护计算机与电信系统内敏感信息的安全系统所使用的密码模块,规定了安全要求。本标准为密码模块定义了4个安全等级,以满足敏感数据以及众多应用领域的、不同程度的安全需求。针对密码模块的11个安全域,本标准分别给出了四个安全等级的对应要求,高安全

2、等级在低安全等级的基础上进一步提高了安全性。5.1 密码安全等级 概述密码模块是指实现密码运算、密钥管理等功能的硬件、软件、固件或者其组合。为了保护密码模块和密码模块中包含和控制的敏感安全参数,本标准规定了4个要求递增的安全等级。5.2 安全一级安全一级提供了最低等级的安全要求。例如:模块应当使用至少一个核准的安全功能或核准的敏感安全参数建立方法。软件或固件模块可以运行在不可修改的、受限的或可修改的运行环境中。安全一级硬件密码模块除了需要达到产品级部件的基本要求之外,没有其他特殊的物理安全机制要求。安全一级密码模块的例子有:个人计算机中的硬件加密板卡运行在手持设备或通用计算机上的密码工具包当模

3、块外部的应用系统已经配置了物理安全、网络安全以及管理过程等控制措施时,安全一级的模块就非常适用(经济性)。5.3 安全二级 1/2安全二级在安全一级的基础上增加了拆卸证据的要求,例如使用拆卸存迹的涂层或封条,或者在封盖或门上加防撬锁等手段以提供拆卸证据。拆卸存迹的封条或防撬锁应安装在封盖或门上,以防止非授权的物理访问。当物理访问模块内的安全参数时,模块上拆卸存迹的涂层或封条就必须破碎。5.3 安全二级 2/2安全二级要求基于角色的鉴别。密码模块需要鉴别并验证操作员的角色,以确定其是否有权执行对应的服务。安全二级的软件密码模块可以运行在可修改的环境中,该环境应实现基于角色的访问控制或自主访问控制

4、,但自主访问控制应当能够定义新的组,通过访问控制列表(ACL)分配权限,以及将一个用户分配给多个组。访问控制措施应防止非授权地执行、修改以及读取实现密码功能的软件。5.4 安全三级 1/3除了安全二级中要求的拆卸存迹物理安全机制外,安全三级还要求更强的物理安全机制,以进一步防止对密码模块内敏感安全参数的非授权访问。这些物理安全机制应该能够以很高的概率检测到以下行为并作出响应,这些行为包括:直接物理访问密码模块的使用或修改以及通过通风孔或缝隙对模块的探测上述物理安全机制可以包括坚固的外壳、拆卸检测装置以及响应电路。当密码模块的封盖/门被打开时,响应电路应当将所有的关键安全参数置零。5.4 安全三

5、级 2/3安全三级要求基于身份的鉴别机制,以提高安全二级中基于角色的鉴别机制的安全性。密码模块需要鉴别操作员的身份,并验证经鉴别的操作员是否被授权担任特定的角色以及是否能够执行相应的服务。安全三级要求手动建立的明文关键安全参数是经过加密的、使用可信信道或使用知识拆分来输入或输出。安全三级的密码模块应有效防止电压、温度超出模块正常运行范围对密码模块安全性的破坏。攻击者可以故意让密码模块的环境参数偏离正常运行范围,从而绕过密码模块的防护措施。密码模块应当设计有环境保护特性,用以检测环境异常并置零关键安全参数,或者能够通过环境失效测试从而提供一个合理的保障,确保不会因环境异常破坏模块的安全性。5.4

6、 安全三级 3/3安全三级的密码模块应提供非入侵式攻击缓解技术的有效性证据和测试方法。对于软件密码模块,并没有在本标准的所有条款中给出安全三级的要求。因此,软件密码模块能够达到的最大整体安全等级限定为安全二级。安全三级的密码模块增加了生命周期保障的要求,比如自动配置管理、详细设计、底层测试以及基于厂商所提供的鉴别信息的操作员鉴别。5.5 安全四级 1/3安全四级是本标准中的最高安全等级。该等级包括较低等级中所有的安全特性,以及一些扩展特性。安全四级的物理安全机制应当在密码模块周围提供完整的封套保护,其目的是无论外部电源是否供电,当模块包含敏感安全参数时,检测并响应所有非授权的物理访问。从任何方

7、向穿透密码模块的外壳都会以很高的概率被检测到,并将导致所有未受保护的敏感安全参数立刻被置零。由于安全四级的密码模块自身具有较高的安全机制,所以它特别适用于无物理保护的环境。5.5 安全四级 2/3安全四级要求对操作员进行多因素鉴别。最低限度下,要求使用下列因素中的两个:已知某物,如秘密口令;拥有某物,如物理钥匙或令牌;物理属性,如生物特征。5.5 安全四级 3/3安全四级的密码模块应有效防止电压、温度超出模块正常运行范围对密码模块安全性的破坏。密码模块应当设计有环境保护特性,专门用以检测环境异常并置零关键安全参数,从而提供一个合理的保障,确保不会因环境异常破坏模块的安全性。按照国家相关部门规定

8、的、安全四级的非入侵式攻击缓解测试指标,测试密码模块中实现的、7.8中规定的针对非入侵式攻击的缓解方法。安全四级要求模块的设计应通过一致性验证,即验证前置和后置条件与功能规格之间的一致性。6 功能性安全目标使用并正确实现核准的安全功能,以保护敏感信息;防止非授权地操作或使用密码模块;防止非授权地泄露密码模块的内容,其中包括关键安全参数;防止对密码模块和密码算法进行非授权或检测不到的修改,包括非授权地修改、替换、插入和删除敏感安全参数;提供密码模块运行状态的指示;保证密码模块在核准的工作模式下能够正确运行;检测出密码模块运行中的错误,防止这些错误非授权地公开、修改、替换或使用关键安全参数,或者非

9、授权地修改或替换公开安全参数;保证正确地设计、分配和实现密码模块。7.1 安全要求:通用要求本条规定了符合本标准的密码模块应当满足的安全要求。这些安全要求涵盖了密码模块的设计、实现、操作以及废弃相关的域。密码模块应当针对各个域的要求进行测试。密码模块应当在每个域中独立地进行评级。密码模块在这些域中获得的评级反映了模块在该域中所能达到的最高安全等级,即密码模块必须满足该域针对该等级的所有安全要求。除了在每个安全域中获得独立的评级之外,密码模块还将获得一个整体评级。整体评级设定为11个域所获得的最低评级。7.2 密码模块规格密码模块应当是硬件、软件、固件,或它们之间组合的集合,该集合至少使用一个核

10、准的密码算法、安全功能或过程实现一项密码服务,并且包含在定义的密码边界内。7.2.2 密码模块类型 1/2硬件模块密码边界规定为硬件边线。固件和/或软件,其中还可以包括操作系统,可以被包含在硬件密码边界内。软件模块密码边界为执行在可修改的运行环境中的纯软件部件(可以是一个或多个软件部件)划定界线。软件密码模块的运行环境所包含的计算平台和操作系统,在定义的密码边界之外。固件模块密码边界为执行在受限的或不可修改的运行环境中的纯固件部件划定界线。固件密码模块的运行环境所包含的计算平台和操作系统,在定义的密码边界之外,但是与固件模块明确绑定。混合软件模块密码边界为软件部件和分离的硬件部件(即软件部件不

11、在硬件模块边界中)的集合划定界线。软件运行的环境所包含的计算平台和操作系统,在定义的混合软件模块边界之外。混合固件模块密码边界为固件部件和分离的硬件部件(即固件部件不在硬件模块边界中)的合成划定界线。固件运行的环境所包含的计算平台和操作系统,在定义的混合固件模块边界之外,但是与混合固件模块明确绑定。7.2.2 密码模块类型 2/2对于运行于可修改环境中的软件模块,7.7中规定的物理安全和7.8中规定的非入侵式安全要求是可选的。对于硬件和固件模块,7.7中规定的物理安全和7.8中规定的非入侵式安全要求应当适用。对于混合模块,软件和固件部件应当满足7.5中规定的软件/固件安全和7.6中规定的运行环

12、境中的所有适用要求。硬件部件应当满足7.7中规定的物理安全和7.8中规定的非入侵式安全中的所有适用要求。7.2.3.1 密码边界 通用要求密码边界应当由定义明确的边线(例如,硬件、软件或固件部件的集合)组成,该边线建立了密码模块所有部件的边界。密码边界应当至少包含密码模块内所有安全相关的算法、安全功能、过程和部件。非安全相关的算法、安全功能、过程和部件也可以包含在密码边界内。密码模块的名称应当代表密码边界内的部件构成,不应代表大于实际范围的构成或产品。密码模块应当至少具有代表每个互不相同的硬件、软件和/或固件部件的特定版本信息。密码边界内的某些硬件、软件和/或固件部件可以从本标准的要求中排除。

13、被排除的硬件、软件或固件部件的实现应当不干扰或破坏密码模块核准的安全运行。应当阐明被排除的硬件、软件或固件(附录A)。7.2.3.2 密码边界的定义a)硬件密码模块的密码边界:硬件部件集合,可包括:在部件之间提供互联的物理配线的物理结构,包括电路板、基板或其他表面贴装;有效电器元件,如半集成、定制集成或通用集成的电路、处理器、内存、电源、转换器等;封套、灌封或封装材料、连接器和接口之类的物理结构;固件,可以包含操作系统;上面未列出的其他部件类型。b)软件密码模块的密码边界:构成密码模块的可执行文件或文件集;保存在内存中并由一个或多个处理器执行的密码模块的实例。c)固件密码模块的密码边界:构成密

14、码模块的可执行文件或文件集;保存在内存中并由一个或多个处理器执行的密码模块的实例。d)混合密码模块的密码边界:由模块硬件部件的边界以及分离的软件或固件部件的边界构成;包含每个部件所有端口和接口的集合。混合密码模块除了分离的软件或固件部件,模块的硬件部件还可以包含嵌入式的软件或固件。7.2.4 工作模式密码模块可以有核准的工作模式和非核准的工作模式。核准的工作模式是指密码模块在该工作模式下只能使用核准的安全功能提供安全相关服务。非核准的密码算法、安全功能和过程或其它未规定于7.4.3中的服务不应当被操作员用于核准的工作模式中,除非非核准的密码算法或安全功能是核准的过程的一部分,而且与核准的过程的

15、安全无关。例如,使用非核准的密码算法或非核准的方式生成的密钥,混淆数据或关键安全参数,结果也被视为未受保护的明文,且不能提供安全相关功能。当服务正在以核准的方式使用核准的密码算法、安全功能或过程,以及其它规定于7.4.3中的服务或过程的时候,该服务应当给出相应的状态指示。7.3 密码模块接口所有进出密码模块的逻辑信息流,都应当只能通过已定义的物理端口和逻辑接口,这些端口和接口是出入模块密码边界的入口和出口。密码模块逻辑接口应当是相互分离的,这些逻辑接口可以共享一个物理端口,也可以分布在一个或多个物理端口上。密码模块软件部件的应用程序接口(API)可以定义为一个或多个逻辑接口。7.3.2 接口类

16、型硬件模块接口(HMI)定义为用于请求硬件模块服务的命令全集,请求服务的命令中包括输入到密码模块或者由密码模块输出的参数。软件或固件模块接口(SFMI)定义为用于请求软件或固件模块服务的命令全集,请求服务的命令中包括输入到密码模块或者由密码模块输出的参数。混合软件或混合固件模块接口(HSMI或HFMI)定义为用于请求混合固件模块服务的命令全集,请求服务的命令中包括输入到密码模块或者由密码模块输出的参数。7.3.3 接口定义密码模块应当具备下列五种接口(输入/输出是相对于模块而言的):数据输入接口数据输出接口控制输入接口控制输出接口状态输出接口除软件密码模块以外,所有模块还应当具备电源接口(通过

17、内部电池供电的,电源接口可以不存在)。密码模块应当区分数据、控制信息和电源输入,以及数据、控制信息和状态信息输出。密码模块规格应当明确规定输入数据以及控制信息的格式,包括对所有可变长度输入的长度限制。7.3.4 可信信道 1/2可信信道是在密码模块和发送者或接收者之间建立的链路,用于安全传输未受保护的明文关键安全参数、密钥分量以及鉴别数据。可信信道在模块定义的输入或输出端口以及预期的发送者或接收者终端的通信链路上,可以防止窃听以及来自恶意的操作员/实体、进程或其他设备的物理或逻辑篡改。对于安全一级和二级,没有可信信道要求。7.3.4 可信信道 2/2对于安全三级:密码模块应当实现可信信道;可信

18、信道应当防止在通信链路上的非授权修改、替换和泄露;可信信道使用的物理端口应当与其他物理端口实现物理隔离;可信信道使用的逻辑接口应当与其他逻辑接口实现逻辑隔离;基于身份的鉴别应当用于所有使用可信信道的服务;当可信信道在使用时,应当提供状态指示器。对于安全四级,除了安全三级的要求以外,基于身份的多因素鉴别应当用于所有使用可信信道的服务。7.4 角色、服务和鉴别密码模块应当支持操作员的授权角色以及与每个角色相对应的服务。一个操作员可以担任多种角色。如果密码模块支持多个操作员同时操作,那么模块内部应当确保各个操作员担任的角色相隔离及相应的服务相隔离。当服务执行不会修改、泄露或替换关键安全参数和公开安全

19、参数时,例如显示状态、自测试或者其他不影响模块安全的服务,操作员无需担任一个授权角色。密码模块可能需要鉴别机制,以鉴别操作员对模块的访问,以及验证操作员是否被授权担任请求的角色和执行该角色下的服务。7.4.2 角色密码模块应当至少支持密码主管角色。密码主管角色应当负责执行密码初始化或管理功能,以及常用的安全服务,例如,模块初始化、关键安全参数和公开安全参数的管理以及审计功能。密码模块可以支持用户角色。如果密码模块支持用户角色,那么用户角色应当负责执行一般的安全服务,包括密码操作和其他核准的安全功能。密码模块可以支持维护员角色。维护员角色是指在物理维护服务(例如,打开模块封盖)和/或逻辑维护服务

20、(例如,运行某种诊断如内置的自测试(BIST)时担任的角色。当进入或退出维护员角色时,所有不受保护的敏感安全参数应当被置零。除了上述角色以外,密码模块还可以支持其他角色。7.4.3 服务服务指密码模块所能执行的所有服务、操作或功能。服务输入应当包括密码模块在启动或获取特定服务、操作或功能时,所使用的所有数据或控制输入。服务输出应当包括由服务输入启动或获取的服务、操作或功能,所产生的所有数据和状态输出。每个服务输入应当产生一个服务输出。密码模块应当为操作员提供下列服务:a)显示模块版本号。密码模块应当输出名称或模块标识符以及版本信息,这些信息可以与模块的审验记录相关联。b)显示状态。密码模块应当

21、输出当前的状态。其中可以包括响应服务请求的状态指示器的输出。c)执行自测试。密码模块应当执行初始化和规定于7.10.2中的运行前自测试。d)执行核准的安全功能。密码模块应当至少执行一个在7.2.4中规定的核准的工作模式中使用的核准的安全功能。e)执行置零。密码应当按照7.9.7中的规定执行参数置零。除了上述规定的服务以外,密码模块还可以提供其他的服务、操作或功能,包括核准的和非核准的。一些特定的服务可能不止一个角色使用它,例如,用户角色和密码主管角色都可以使用密钥输入服务。7.4.3.2 旁路能力旁路能力是指某种服务所具备的部分或全部绕过密码功能的能力。如果密码模块输出的数据是受到密码技术保护

22、的(例如,经过加密),但是通过更改密码模块的配置或者由于操作员的干预,密码模块能够将数据直接输出(例如,不再经过加密),此时,应当定义该模块具有旁路能力。如果密码模块实现了旁路能力,那么:在开启密码模块的旁路功能之前,操作员应当担任相应的授权角色。应当使用两个独立的内部操作来激活旁路能力,以防止单个错误造成不经意地输出明文数据。这两个独立的内部操作应当能够改变用于控制旁路能力的软件和/或硬件配置(例如,设置两个不同的软件或硬件标志位,其中一个可以由用户发起)。对于安全四级模块,上述两个独立的内部操作应当由两个不同的操作员完成。模块应当显示其状态以指示旁路能力是否:p未被激活,表明模块此时只提供

23、使用密码功能的服务(例如,明文数据经过加密之后输出模块);p被激活,表明模块此时只提供没有使用密码功能的服务(例如,明文数据未经过加密就输出模块);p同时存在激活和去活,表明模块此时提供的某些服务使用了密码功能,而某些服务没有使用密码功能(例如,对于拥有多个通信信道的模块,明文数据是否被加密取决于每个信道的配置)。7.4.3.3 自启动密码服务能力自启动密码服务能力是指无需外界操作员请求,模块就能够执行密码操作和其他核准的安全功能或敏感安全参数管理技术。自启动密码服务能力应当由密码主管配置,而且该配置可以在模块经过重置、重启或开关电源之后保留下来。如果密码模块实现了自启动密码服务能力,那么:应

24、当需要两个独立的内部操作来激活该能力,以防止单个错误造成不经意的输出。对于安全四级模块,上述两个独立的内部操作应当由两个不同的操作员完成。模块应当显示其状态以指示自启动密码服务能力是否被激活。7.4.3.4 软件/固件加载如果密码模块具有加载外部软件或固件的能力,那么应当满足下列要求:加载的软件或固件应当在加载之前经过审验机构的审验,以维持审验效力。应当禁止通过数据输出接口输出数据,直到软件/固件加载完成以及加载测试成功通过。在运行加载的代码之前应当执行7.10.3.4中规定的软件/固件加载条件自测试。密码模块应当拒绝运行任何已经加载的或已被修改的核准安全功能,直到成功执行7.10.2中规定的

25、运行前自测试。应当修改模块的版本信息,以表示增加和/或更新了最新加载的7.4.3中的软件或固件。如果新软件或固件的加载是镜像的完全替换,它应当构成一个全新的模块,需要由审验机构重新审验,以维持审验效力。新加载的软件或固件镜像应当在模块上电重置之后才能运行。所有敏感安全参数应当在运行新镜像之前被置零。7.4.4 鉴别 1/4密码模块可能需要鉴别机制以鉴别访问模块的操作员,并验证该操作员能否担任其请求的角色,以及能否执行相应的服务。基于角色的鉴别密码模块应当要求操作员隐式地或显式地选择一个或多个角色,并且应当鉴别其能否担任所选定的角色(或角色的集合)。不要求密码模块鉴别操作员的个人身份。基于身份的

26、鉴别密码模块应当要求单独且唯一标识操作员,应当要求操作员隐式地或显式地选择一个或多个角色,并且应当鉴别操作员的身份,以及操作员是否被授权担任所选定的角色(或角色的集合)。7.4.4 鉴别 2/4密码模块可以允许通过鉴别的操作员执行其授权角色所允许的所有服务,或者也可以针对每个服务或一组服务分别进行鉴别。当密码模块被重置、重启、关闭且随后又被打开时,模块应当要求重新鉴别操作员。密码模块可能需要多种类型的鉴别数据以实现模块支持的鉴别机制,包括(但不限于)知道或拥有口令、PIN、密钥等;拥有物理钥匙、令牌等;或具备个人特征(例如,生物特征)。应当保护密码模块内的鉴别数据以防止非授权的泄露、修改和替换

27、。核准的安全功能可被用于鉴别机制。鉴别机制的初始化允许特殊处理。如果第一次访问密码模块时,模块不包含鉴别操作员所需的鉴别数据,那么应当使用其他被授权的方法(例如,过程控制,使用出厂设置或默认的鉴别数据)对模块进行访问控制和初始化鉴别。如果使用了默认的鉴别数据来控制对模块的访问,那么默认的鉴别数据应当在第一次鉴别后被更换。该默认的鉴别数据不需要满足7.9.7中置零要求。7.4.4 鉴别 3/4模块应当实现附录E中规定的一种核准的鉴别机制。对称加密、数字签名、密码校验、零知识技术在模块的安全策略文档(见附录B)中应当描述鉴别机制的强度。对于每次核准鉴别机制的尝试使用,模块应当满足鉴别强度要求。对于

28、在一分钟之内对核准鉴别机制的多次尝试使用,模块应当满足鉴别强度要求。核准的鉴别机制应当依赖于模块的具体实现,而不依赖于在文档中的过程控制或安全规则(例如,口令长度限制)。对于安全二级的软件密码模块,操作系统可以实现鉴别机制。如果操作系统实现了鉴别机制,那么鉴别机制应当满足本条款的要求。在鉴别过程中,应当隐藏鉴别数据给操作员的反馈信息(例如,在输入口令时没有可视的字符显示)。无意义的字符可以代替实际的鉴别数据显示。在尝试鉴别的过程中,提供给操作员的反馈信息应当防止削弱鉴别机制强度。7.4.4 鉴别 4/4对于安全一级,不要求密码模块采用鉴别机制以控制对模块的访问。如果模块不支持鉴别机制,模块应当

29、要求操作员隐式或显式地选择一个或多个角色。对于安全二级,密码模块应当至少采用基于角色的鉴别以控制对模块的访问。对于安全三级,密码模块应当采用基于身份的鉴别机制以控制对模块的访问。对于安全四级,密码模块应当采用基于身份的多因素鉴别机制以控制对模块的访问。7.5 软件/固件安全 1/3密码模块定义为7.2.2中规定的硬件、软件、固件或混合模块。本条的要求“应当05.01适用于密码模块的软件和固件部件。完全由硬件实现的密码模块无需满足本标准的软件/固件安全要求。模块代码中,含有的公开验证密钥或带密钥消息鉴别的密钥,它们不被视为敏感安全参数。7.5 软件/固件安全 2/3对于安全一级,下列安全要求应当

30、适用于密码模块内的软件和固件部件:所有的软件和固件应当符合7.11.7中的规定,确保安装前未被修改。密码边界内的所有软件和固件部件应当使用核准的完整性技术进行保护,这些完整性技术可以由该密码模块提供,也可以由另一个经审验的密码模块提供。如果完整性测试失败,模块应当进入错误状态。核准的完整性技术可以包含单个鉴别码或签名,或者多个分离的消息鉴别码或签名。在多个分离的消息鉴别码或签名中,任何一个消息鉴别码或签名验证失败都应当导致模块进入错误状态。一旦完成了完整性测试,模块软件或固件的完整性测试的过程中生成的临时值应当被置零。操作员应当能够通过7.3.2中规定的SFMI、HSMI或HFMI服务按需执行

31、核准的完整性技术。7.3.3中规定的密码模块的所有数据和控制输入,数据、控制和状态输出,以及7.4.3中规定的服务,应当通过定义的HMI、SFMI、HFMI或HSMI完成。对于软件或固件模块,如果加载的软件或固件镜像完全替换或覆盖了已审验的模块镜像,则软件/固件加载测试是不适用的,因为替换或覆盖将形成一个新的模块。如果新加载的软件或固件是密码模块运行所必须的,但不是完全替换或覆盖经审验的模块,那么软件/固件加载测试是适用的,并且应当由经过审验的模块执行该测试。7.5 软件/固件安全 3/3对于安全二级,除了安全一级的要求:模块的软件和固件部件应当只包含可运行形式的代码,例如,不包括源代码、目标

32、代码或实时编译的代码。应当确保操作员无法通过HMI、SFMI、HFMI或HSMI接口的服务或控制设置,启动或执行调试技术。密码边界内的所有软件和固件应当使用核准的数字签名或带密钥的消息鉴别码进行保护。如果计算的结果不等于之前生成的结果,则测试失败,并且模块应当进入错误状态。对于安全三级和四级,除了安全一级和二级的要求:密码边界内的所有软件和固件应当使用核准的数字签名进行保护。如果计算的结果不等于之前生成的结果,则测试失败,并且模块应当进入错误状态。数字签名技术可以包含单个签名,或者多个分离的签名,分离的签名中任何一个签名的验证失败都应当导致模块进入错误状态。签名私钥应当保存在模块外。7.6 运

33、行环境密码模块运行环境涉及对模块运行所需的软件、固件、和/或硬件的管理。软件、固件或混合模块的运行环境至少包括模块部件、计算平台、以及控制或支持软件或固件在计算平台上运行的操作系统。硬件模块内部可以包含一个运行环境,该环境可以包含支持模块内部软件或固件运行的操作系统。如果适用的话,虚拟机(系统和/或进程)和运行时环境(例如Java运行时环境JRE)也可以视为操作系统的一部分。通用运行环境是指使用商用的通用操作系统(即资源管理器)来管理软件和固件部件,以及管理系统和操作员进程(线程),其中包括了通用的应用程序软件,如文字处理器等。7.6.1 运行环境通用要求 1/27.6.1 运行环境通用要求

34、2/2对于不可修改或受限制的运行环境,用于保证该环境不可修改或受限制的控制部件可以包括计算平台的、操作系统的或密码模块本身的属性,或者包括上述全部的属性。在不可修改或受限制的环境下执行的代码在本标准中被视为固件。在可修改的环境下执行的代码在本标准中被视为软件。如果运行环境是不可修改或受限制的,7.6.2中规定的操作系统要求应当适用。如果运行环境是可修改的,7.6.3中规定的操作系统要求应当适用。7.6.2 受限或不可修改运行环境的操作系统要求对于安全一级:如果模块在7.7中达到安全一级,则7.6.3中规定的安全一级的要求应当适用。对于安全二级、三级、四级:没有额外的要求。7.6.3 可修改运行

35、环境的操作系统要求(安全一级)每一个密码模块的实例应当能够控制和支配自己的敏感安全参数。运行环境应当提供应用进程间相互隔离的能力,以阻止进程间对关键安全参数不受控的访问以及对敏感安全参数不受控的修改,无论关键安全参数和敏感安全参数是在进程内存中还是存储在运行环境内的永久性存储体中。这保证了只有密码模块和运行环境的可信部分可以直接访问敏感安全参数。对运行环境配置的规定应当记录在密码模块的安全策略中。密码模块产生的进程应当由模块自己所有,不由外部进程/操作员所有。不能通过管理文档和流程来实施这些要求,而是必须由密码模块本身来实施。7.6.3 可修改运行环境的操作系统要求 (安全二级) 1/3所有密

36、码软件、敏感安全参数、控制和状态信息应当在操作系统的控制之下。操作系统实现了基于角色的访问控制,或者实现了自主访问控制,该自主访问控制可通过访问控制列表(ACL)来定义新的组和分配权限,并且能够给每个用户分配多个组。操作系统应当正确配置,以防止非授权地执行、修改和读取敏感安全参数、控制和状态数据。为了保护明文数据、密码软件、敏感安全参数和鉴别数据,操作系统的访问控制机制:应当定义和实现了有权运行模块中密码软件的角色或组以及与它们相关的权限。应当定义和实现了有权修改(写、替换和删除)存储在密码边界内软件的角色或组以及与它们相关的权限,这些软件包括执行密码功能的程序、密码操作相关数据(例如,密码操

37、作的审计数据)、敏感安全参数和明文数据。应当定义和实现了有权读取密码操作相关数据(例如,密码操作的审计数据)、关键安全参数和明文数据的角色或组以及与它们相关的权限。应当定义和实现了有权输入敏感安全参数的角色或组以及与它们相关的权限。7.6.3 可修改运行环境的操作系统要求 (安全二级) 2/3下列规定应当与密码模块安全策略文档中已定义的角色和服务相一致。当密码模块不支持维护员角色时,操作系统应当防止所有操作员和运行的进程修改正在运行的密码进程(例如,已加载的和正执行的密码程序镜像)。在这种情况下,运行的进程是指所有不由操作系统所拥有或启动的进程(例如,由操作员启动的进程),无论该进程是密码相关

38、的还是非密码相关的。操作系统应当防止用户进程对其他进程的敏感安全参数以及系统敏感安全参数进行读或写操作。满足以上要求的操作系统配置应当在管理员指南中阐明。管理员指南应当声明:操作系统必须按照需要保护的模块内容所指定的要求进行配置。操作系统的身份标识和鉴别机制应当满足7.4.4中规定的要求,并在模块安全策略文档中具体阐明。7.6.3 可修改运行环境的操作系统要求 (安全二级) 3/3所有密码软件、敏感安全参数、控制和状态信息应当在操作系统的控制之下,操作系统应当至少拥有以下属性:操作系统应当提供具有审计事件日期和时间的审计机制。密码模块应当不把敏感安全参数写入任何审计记录中。下列事件应当被操作系

39、统的审计机制记录下来(略)操作系统的审计机制应当能够审计下列操作系统相关事件(略)操作系统应当正确配置以防止操作员,除安全策略中给出的、拥有特权的操作员以外,修改存储在密码模块运行环境中的密码模块软件和审计数据。无论密码模块是否在核准的工作模式下运行,应当只有配置成满足以上安全要求的操作系统才符合该安全等级。应当通过使用核准的安全功能对审计记录进行保护,以防止非授权的修改。7.6.3 可修改运行环境的操作系统要求 (安全三级、四级)标准对可修改运行环境的操作系统不提供安全三级和四级的要求。因此,可修改运行环境的操作系统无法达到安全三级和四级。7.7 物理安全密码模块应当采用物理安全机制以限制对

40、模块内容的非授权物理访问,并阻止对已安装模块的非授权使用或修改(包括整个模块的替换)。密码边界内的所有硬件、软件、固件、数据分量以及敏感安全参数应当受到保护。若密码模块完全由软件实现,使得物理安全仅由计算平台提供,那么该模块将不受本标准物理安全要求的限制。本条中的要求应当适用于硬件和固件模块,以及混合模块中的硬件和固件部件。本条的要求应当适用于已定义的模块物理边界。物理安全要求是针对下列三类密码模块物理实体做出规定的:单芯片密码模块是指由单个集成电路(IC)芯片构成的模块,该芯片可以作为独立模块使用,或者可以嵌入到一个可能没有物理保护的外壳或产品内。单芯片密码模块的例子有单IC芯片和单IC芯片

41、智能卡。多芯片嵌入式密码模块是指由两个或多个互相连接的IC芯片构成的模块,这些芯片嵌入到一个可能没有物理保护的外壳或产品内。多芯片嵌入式密码模块的例子有适配器和扩展板。多芯片独立式密码模块是指由多个互相连接的IC芯片构成的模块,该模块的整个外壳受到物理保护。多芯片独立密码模块的例子有加密路由器、安全无线电话和USB令牌。7.7.1 物理安全实体 1/27.7.1 物理安全实体 2/2安全一级提出了最基本的安全要求。安全二级增加了拆卸存迹机制的要求,以及确保无法对模块关键区域的内部操作收集信息的要求。安全三级增加了使用坚固或硬质的保形或非保形外壳的要求,要求外壳的封盖和门具有拆卸检测和响应机制,

42、并且要求抵抗通过开口或入口的直接探测。安全三级还要求具备环境失效保护(EFP)或环境失效测试(EFT)。安全四级进一步增加了使用坚固或硬质的保形或非保形外壳的要求,要求整个外壳具有拆卸检测和响应机制。安全四级还要求具备环境失效保护(EFP),以及防止错误注入攻击。7.7.2 通用物理安全要求模块文档应当阐述密码模块的物理实体以及所实现的物理安全机制达到的安全等级。每当为物理安全进行置零操作时,应当在极短的时间内执行置零,以防止敏感数据在检测到拆卸行为与模块置零之间泄露出去。如果模块包含的维护角色需要对模块内容进行物理访问,或者模块被设计成允许物理访问(例如,被模块厂商或其他授权个体访问),那么

43、:应当定义维护访问接口。维护访问接口应当包括所有通向密码模块内容的物理访问路径,包括任何封盖或门。维护访问接口内包含的任何封盖或门应当使用适当的物理安全机制来进行安全保护。7.7.2 通用物理安全要求(一级)下列要求应当适用于安全一级的所有密码模块:密码模块应当由产品级部件组成,这些产品级部件采用了标准钝化技术,例如,对整个模块电路使用保形涂料或封闭底漆,以防止环境损害或其他物理损害。当维护密码模块时,应当由操作员按照规定的程序执行置零,或由密码模块自动执行。7.7.2 通用物理安全要求(二级)除了安全一级的通用要求,安全二级的所有密码模块还应当满足下列要求:在尝试物理访问模块时,密码模块应当

44、提供显式的拆卸证据(例如,在封盖、外壳或封条上);拆卸存迹的材料、涂层或外壳应当在可见光谱内(即波长范围为400nm750nm)是不透明或者半透明的,从而防止对模块关键区域的内部操作进行信息收集。如果密码模块包含通风孔或缝,那么孔或缝应当具有特殊的构造,从而防止通过直接观察模块内部的构造或部件进行信息收集。上述直接观察利用了模块内部结构或部件发出的可见光。7.7.2 通用物理安全要求(三级)除了对安全一级和二级的通用要求,安全三级的所有密码模块还应当满足下列要求:如果模块含有任何门或封盖,或者定义了维护访问接口,那么模块应当包含拆卸响应与置零电路。在打开门、封盖或维护访问接口时,拆卸响应与置零

45、电路应当立即置零所有未受保护的敏感安全参数。当密码模块内包含未受保护的敏感安全参数时,拆卸响应与置零电路应当保持运行状态。如果密码模块含有通风孔或缝,那么孔或缝应当具有特殊的构造,从而防止未被检测到的对模块内部的物理探测(例如,防止使用单铰链探头探测)。当模块温度超出运行、存放和分发的预期温度范围时,坚固或硬质的保形或非保形的外壳、涂层或灌封材料应当维持强度和硬度特征。如果使用了拆卸封条,那么应当使用被唯一编号或者能够独立识别的封条(例如,唯一编号的存迹胶带或可唯一识别的手写封条)。模块应当具有EFP特性或经过EFT。(环境故障保护)7.7.2 通用物理安全要求(四级)除了安全一级、二级和三级

46、的通用要求,安全四级的所有模块还应当满足下列要求:密码模块应当使用抗移除的硬质不透明涂层或具有拆卸响应和置零能力的拆卸检测封套保护起来。密码模块应当具有EFP特性。密码模块应当提供保护措施,以防止错误注入攻击。错误注入攻击的缓解技术以及采用的缓解指标应当在文档中按照附录B规定的要求进行记录。7.7.3.1 单芯片密码模块对于安全一级的单芯片密码模块没有其他额外要求。对于安全二级的单芯片密码模块还应当满足下列要求:应当使用拆卸存迹涂层把密码模块覆盖起来,或者将模块装在一个拆卸存迹的外壳中,以阻止直接观察、探测或操控模块,并在企图拆卸或移动模块后留下证据。对于安全三级的单芯片密码模块还应当满足下列

47、要求:应当使用拆卸存迹的硬质不透明涂层把模块覆盖起来。或应当实现模块的外壳,以致企图或穿透外壳的行为应当极有可能对密码模块造成严重损害,即模块将不能工作。对于安全四级的单芯片密码模块还应当满足下列要求:应当使用抗移除的硬质不透明涂层将密码模块覆盖起来,该涂层具有硬度与黏力特性,以致企图剥落或撬开涂层的行为将极有可能对模块造成严重损害,即模块将不能工作。抗移除的涂层应当具有溶解特性,以致企图溶解涂层的行为将极有可能溶解或严重损害模块,即模块将不能工作。7.7.3.2多芯片嵌入式密码模块对于安全一级,如果密码模块被装在一个外壳或封盖中,那么应当使用产品级的外壳或封盖。对于安全二级,还应当满足下列要

48、求:应当使用拆卸存迹的涂层或灌封材料把模块部件覆盖起来,以阻止直接观察,并提供企图拆卸或移动模块部件的证据。或模块应当被整个地包在金属或硬质塑料的产品级外壳中,该外壳可以有门或封盖。如果外壳包含任何门或封盖,则门或封盖应当使用带有物理或逻辑钥匙的防撬锁,或者应当被拆卸存迹的封条保护起来。对于安全三级,还应当满足下列要求:应当使用硬质涂料或灌封材料把密码模块内的多芯片实体电路覆盖起来,或模块应当被封装在坚固的外壳内。以致企图移除或穿透外壳的行为将极有可能对模块造成严重损害,即模块将不能工作。对于安全四级,还应当满足下列要求:密码模块部件应当封装在坚固或硬质的保形或非保形的外壳中。外壳应当用拆卸检

49、测封套封装起来,该封套应当能够检测到企图访问敏感安全参数的拆卸行为,包括切、钻、磨、碾、烧、熔、溶解灌封材料或外壳等。密码模块应当包含拆卸响应和置零电路。拆卸响应和置零电路应当能够持续地监控拆卸检测封套,并且一旦检测到拆卸行为就应当立即置零所有未受保护的敏感安全参数。当密码模块内包含未受保护的敏感安全参数时,拆卸响应电路应当保持运行状态。7.7.3.3 多芯片独立式密码模块对于安全一级,密码模块应当整个被封装在金属或硬质塑料的产品级外壳内,外壳可以有门或封盖。对于安全二级,还应当满足下列要求:如果密码模块的外壳含有任何门或封盖,那么门或封盖应当安装带有物理或逻辑钥匙的防撬机械锁,或者应当使用拆

50、卸存迹的封条(例如,存迹胶带或全息封条)进行保护。对于安全三级,还应当满足下列要求:模块应当被封装在坚固的外壳内,以致企图移除或穿透外壳的行为将极有可能对模块造成严重损害,即模块将不能工作。对于安全四级,还应当满足下列要求:密码模块的外壳应当封装在使用下列一种或多种拆卸检测机制的拆卸检测封套内,拆卸检测机制包括:封盖开关(如微型开关、磁霍尔效应开关、永磁驱动器等)、动作探测器(如超声波、红外线、微波探测器)或者7.7.3.2中规定的安全四级描述的其他拆卸检测机制。拆卸检测机制应当能够对企图访问敏感安全参数的攻击做出响应,诸如切、钻、铣、磨、烧、熔、溶解等。密码模块应当包含拆卸响应和置零电路。拆

51、卸响应和置零电路应当能够持续地监控拆卸检测封套,并且一旦检测到拆卸行为就应当立即置零所有未受保护的敏感安全参数。当密码模块内包含未受保护的敏感安全参数时,拆卸响应和置零电路应当保持运行状态。7.7.4.1 环境失效保护通用要求电子设备和电路都被设计成在特定的环境条件范围内运行。故意或意外超出模块正常运行电压和温度范围,会导致电子设备或电路运行不稳定,也可能会导致电子设备或电路失效,从而危及密码模块的安全。密码模块具有环境失效保护(EFP)特性或者经过环境失效测试(EFT),都能够合理地保证密码模块的安全性不被极端的环境条件所破坏。对于安全一级、二级,密码模块不要求具有EFP特性或经过EFT。安

52、全三级的模块应当具有EFP特性或经过EFT。安全四级的模块应当具有EFP特性。7.7.4.2 环境失效保护特性EFP特性应当保护密码模块,防止由于故意或意外超出模块正常运行范围,对模块的安全性造成破坏。密码模块应当对超出阐明的正常运行的温度和电压范围进行监控并做出正确响应。如果温度或电压超出密码模块的正常运行范围,则保护电路应当:关闭模块,防止继续运行,或立即置零所有未受保护的敏感安全参数。7.8 非入侵式安全非入侵式攻击是指没有通过物理方式修改或入侵模块就可以获取模块关键安全参数相关信息,从而破坏模块安全性的一种攻击手段。模块可以实现各种技术来缓解这些类型的攻击。对于本标准提出的每一个安全功

53、能,其对应的非入侵式攻击的缓解测试指标应符合国家相关部门的有关要求。如果由密码模块实现、用于保护模块关键安全参数的非入侵式攻击的缓解技术不在附录F中,则这些技术应当满足7.12中规定的要求。(能量分析、计时分析、电磁泄露)如果由密码模块实现、用于保护模块关键安全参数的非入侵式攻击的缓解技术在附录F中,则这些技术应当满足下列要求。对于安全一级和二级,文档应当阐明用于保护模块关键安全参数免受附录F中的所有非入侵式攻击的缓解技术。如果有相应措施,文档应当包括可以证明每个缓解技术有效性的证据。对于安全三级,除了安全一级和二级的要求,密码模块应当实现用于保护模块关键安全参数免受附录F中的所有非入侵式攻击

54、的缓解技术,文档应当包括可以证明每个缓解技术有效性的证据,并提供测试方法。对于安全四级,除了安全一级、二级和三级的要求,密码模块应当接受测试以满足国家相关部门规定的非入侵式攻击缓解测试指标的要求。7.9 敏感安全参数管理敏感安全参数包括关键安全参数和公开安全参数。敏感安全参数管理的安全要求涵盖了模块中敏感安全参数的整个生命周期。敏感安全参数管理包括随机比特生成器、敏感安全参数生成、敏感安全参数建立、敏感安全参数输入和输出、敏感安全参数存储以及未受保护的敏感安全参数置零。加密的关键安全参数是指使用核准的安全功能加密的关键安全参数。在本标准范围内,采用非核准的安全功能加密的关键安全参数在本标准中被

55、视为未受保护的明文。关键安全参数应当在模块内受保护以防止非授权的访问、使用、泄露、修改和替换。公开安全参数应当在模块内受保护以防止非授权的修改和替换。模块应当将生成的、输入或输出模块的敏感安全参数,与该敏感安全参数相应的实体(即人、组、角色、或进程)关联起来。口令的杂凑值、随机比特生成器状态信息和密钥生成的中间值应当被视为受保护的关键安全参数。7.9.2 随机比特生成器密码模块可以包含随机比特生成器、随机比特生成器链,或者其自身就是一个随机比特生成器。附录C中列出了国家密码管理主管部门对核准的随机比特生成器的要求。如果核准的安全功能、敏感安全参数生成或敏感安全参数建立方法需要随机值,则核准的随

56、机比特生成器应当用于提供这些值。如果熵是从模块密码边界外部收集的,那么使用该熵作为输入所生成的数据流应当被视为关键安全参数。无论熵从密码边界内部还是外部收集,对任何一个关键安全参数,其最小熵值应当不小于256比特。如果熵从内部收集,还应当描述随机比特的产生原理。7.9.3 敏感安全参数的生成敏感安全参数可以由模块内部生成,也可以由输入到密码模块的敏感安全参数衍生。如果敏感安全参数的生成使用了核准随机比特生成器的输出,破坏该方法的安全性(例如,猜测用于初始化确定性随机比特生成器的种子值)应当至少与猜测已生成的敏感安全参数值的代价相当。密码模块应当使用附录D中的核准生成方法来生成敏感安全参数,即该

57、敏感安全参数使用核准的随机比特生成器输出生成或由输入模块的敏感安全参数衍生,且该敏感安全参数可以用于核准的安全功能或作为敏感安全参数建立方法的输入。7.9.4 敏感安全参数的建立敏感安全参数建立可以包括:自动的敏感安全参数传输或敏感安全参数协商方法;通过直接或电子方法进行手动的敏感安全参数输入或输出。自动的敏感安全参数建立应当使用附录D中的核准方法。(SM2椭圆曲线公钥密码算法 第3部分:密钥交换协议)手动的敏感安全参数建立应当满足7.9.5中规定的要求。7.9.5 敏感安全参数的输入和输出 1/2敏感安全参数可以手动输入到模块或从模块输出,手动输入输出可以是直接的(通过键盘输入或通过显示器输

58、出),也可以是电子的(通过智能卡/令牌、PC卡)。如果敏感安全参数是手动输入到模块或从模块输出,输入或输出应当通过7.3.2中规定的已定义的HMI、SFMI、HFMI或HSMI接口。所有受密码技术保护的敏感安全参数,无论是输入模块的或从模块输出的,都应当使用核准的安全功能进行加密。对于直接输入的敏感安全参数,输入值可以在短暂的时间内显示出来,以允许视觉验证以及提高准确度。如果加密的敏感安全参数直接输入到模块,则敏感安全参数的明文值不应当显示出来。直接输入(明文或加密)的敏感安全参数应当在输入模块的过程中,使用7.10.3.5中规定的手动输入条件自测试进行验证,以保证准确度。为了防止不经意地输出

59、敏感信息,应当需要两个独立的内部操作来执行任意明文关键安全参数的输出。这两个独立的内部操作应当专门用于共同控制关键安全参数的输出。对于通过无线连接的电子输入或输出,关键安全参数、密钥分量和鉴别数据应当经过加密。手动输入公开安全参数无需采用密码技术进行鉴别。7.9.5 敏感安全参数的输入和输出 2/2对于安全一级和二级:明文关键安全参数、密钥分量和鉴别数据可以通过物理端口和逻辑接口输入和输出,这些端口和接口可以是与密码模块的其他端口和接口共享的。对于软件模块或混合软件模块的软件部件,关键安全参数、密钥分量和鉴别数据可以以加密或明文的形式输入或输出,前提是关键安全参数、密钥分量和鉴别数据应当只保留

60、在该运行环境中,并满足7.6.3中规定的要求。对于安全三级:除了安全一级和二级的要求,关键安全参数、密钥分量和鉴别数据应当以加密的形式或通过可信信道输入或输出模块。作为关键安全参数,明文形式的对称密钥和私钥应当使用知识拆分过程,并使用可信信道输入或输出模块。如果模块使用了知识拆分过程,模块应当使用基于身份的操作员鉴别,分别鉴别每个密钥分量的输入或输出,而且应当至少需要两个密钥分量来重建原来的密钥。对于安全四级:除了安全三级的要求,模块应当使用基于身份的多因素操作员鉴别,分别鉴别每个密钥分量的输入或输出。7.9.6 敏感安全参数的存储模块中敏感安全参数可以以明文形式或加密形式存储。模块应当将敏感

61、安全参数的存储与相应的实体(例如,操作员、角色或进程)关联起来。应当禁止非授权操作员访问明文关键安全参数。应当禁止非授权操作员修改公开安全参数。7.9.7 敏感安全参数的置零 1/2密码模块应当提供模块内所有未受保护的敏感安全参数和密钥分量的置零方法。临时存储的敏感安全参数在使用之后,若以后不再使用,应被置零。敏感安全参数被置零之后应当无法从模块中恢复和重用。受保护的公开安全参数、加密的关键安全参数、受其他经审验的嵌入式模块(满足本标准要求)在逻辑或物理上保护的关键安全参数,不要求被置零。7.9.7 敏感安全参数的置零 2/2对于安全一级:未受保护的敏感安全参数的置零可以由模块管理员按照规定的

62、程序执行,而且不依赖于模块控制(例如,硬盘格式化等)。对于安全二级和三级:密码模块应当对未受保护的敏感安全参数执行置零(例如,使用全0或全1或随机数据覆盖)。置零不应当使用一个未受保护的敏感安全参数来覆盖另一个未受保护的敏感安全参数。临时敏感安全参数在使用完毕之后应当被置零。模块应当在置零完成时提供输出状态指示。对于安全四级,除了安全二级和三级的要求之外:置零应当是及时的、不可中断的,而且应当发生在足够短的时间内,以防止在开始置零到置零实际完成之间的时间内恢复出敏感数据;所有未受保护的敏感安全参数(无论是明文形式还是密文形式)应当被置零,使得模块恢复到出厂状态。7.10 自测试密码模块的运行前

63、自测试和条件自测试用于确保模块没有故障。所有自测试都应当被执行,自测试的通过或失败应当取决于模块自身,无论模块运行于核准模式还是非核准模式,都不依赖外部控制、外部提供的输入文本向量、预期的输出结果,和操作员的干预。运行前自测试应当在模块提供任何数据输出(通过数据输出接口)之前被执行,并成功通过。条件自测试应当在相应的安全功能或过程被调用时执行。密码模块应当对其实现的附录C、附录D、附录E中定义的密码算法,执行对应的自测试。除了该标准中规定的测试,密码模块也可以执行其他运行前或关键功能条件自测试。如果密码模块自测试失败,模块应当进入错误状态,并且应当按照7.3.3中的规定,输出一个错误指示。在错

64、误状态下,密码模块不应当执行任何密码操作,或通过控制、数据输出接口输出控制和数据。模块不应当使用自测试失败的功能和算法,直至它们重新通过测试。如果模块自测试失败时模块不输出错误状态,模块操作员应当能够根据在安全策略(附录B)中的过程,判断该模块是否已经进入了错误状态。在安全三级和四级中,模块应当维护错误日志,密码模块的授权管理员可以访问该日志。该错误日志应当至少提供最近的错误事件(例如,自测试失败)。7.10.2 运行前自测试运行前自测试是指由密码模块执行的一种测试,在密码模块上电或实例化(关闭、复位、重启、冷启动、供电中断等)之后至模块转入到运行状态之前执行。运行前自测试应当被密码模块执行并

65、成功通过。密码模块应当执行下列运行前测试:运行前软件/固件完整性测试;运行前旁路测试;运行前关键功能测试。7.10.2.2 运行前软件/固件完整性测试密码边界内的所有软件和固件部件都应当使用核准的完整性技术进行验证,并满足7.5中定义的要求。如果验证失败,运行前软件/固件完整性测试应当失败。对于任何不受本标准安全要求约束的软件/固件,或任何存储在不可重配置内存中的可执行代码,不要求执行运行前软件/固件完整性测试。如果硬件模块不包含软件或固件,模块应当至少实现一个7.10.3.2中规定的密码算法条件自测试作为运行前自测试。用于运行前软件/固件测试的核准的完整性技术所使用的密码算法应当先通过7.1

66、0.3.2中规定的密码算法条件自测试。7.10.2.3 运行前旁路测试如果密码模块实现了旁路能力,那么模块应当确保管理旁路能力的逻辑是正确的。模块应当通过以下方法验证数据路径:将旁路开关设置在加密位置,验证通过旁路机制传输的数据是经过加密的。将旁路开关设置在非加密位置,验证通过旁路机制传输的数据是没有经过加密的。7.10.2.4 运行前关键功能测试其他一些关系到密码模块安全运行的重要安全功能应当在运行前进行测试。模块文档应当阐明需要在运行前进行测试的关键功能。7.10.3 条件自测试在下列测试规定的条件出现时,密码模块应当执行对应的测试:密码算法自测试配对一致性测试软件/固件加载测试手动输入测

67、试旁路测试以及关键功能测试7.10.3.2 密码算法条件自测试密码算法条件自测试应当针对模块实现的每个核准的密码算法的所有密码功能(例如,安全功能、敏感安全参数建立方法、鉴别)进行密码算法测试。在密码算法第一次运行使用之前,应当执行该条件测试。密码算法自测试可以是:已知答案测试。包括一组已知的输入向量(例如,数据、密钥生成材料,或替代随机比特的常量)的集合。这些已知的输入向量通过密码算法运算之后生成结果。将该结果与已知的、预期的输出结果进行比对。如果计算输出不等于已知答案,密码算法已知答案自测试应当失败。对比测试。将两个或多个独立的密码算法实现的输出进行对比,如果输出不相等,则密码算法对比自测

68、试应当失败。错误检测测试。利用集成在密码算法实现中的错误检测机制进行算法自测试,如果检测到错误,则密码算法错误检测测试应当失败。7.10.3.3 配对一致性条件自测试如果一个密码模块生成公私钥对,配对一致性条件测试应当对每对生成的公钥和私钥(由附录C、附录D、附录E规定的适用的密码算法生成)执行。7.10.3.4 软件/固件加载条件自测试如果密码模块可以从外部加载软件或固件,那么除了7.4.3.4中规定的要求,还应当执行下列要求:密码模块应当实现核准的鉴别技术以验证加载软件或固件是经过审验的。核准的鉴别技术所需的鉴别密钥应当在软件或固件加载之前,独立地加载到模块中。软件/固件的有效性应当成功通

69、过核准的鉴别技术的验证,否则软件/固件加载测试应当失败。如果软件/固件加载测试失败,则不应当使用加载的软件或固件。7.10.3.5 手动输入条件自测试如果敏感安全参数或密钥分量手动输入至密码模块,或者由于手动操作失误会导致某些参数错误,则应当执行以下手动密钥输入测试:敏感安全参数或密钥分量应当使用错误检测码(EDC)或者应当输入两次。如果使用了EDC,则EDC的长度应当至少为16比特。如果EDC验证不符,或者两次输入不相等,那么测试应当失败。7.10.3.6 旁路条件自测试如果密码模块实现了旁路能力,即模块可以提供不使用加密功能的服务(例如,在模块内传输明文),那么应当执行下列旁路条件测试,以

70、保证模块部件的单点失效不会导致不经意地输出明文。如果密码模块具有旁路开关,当开关在旁路服务和密码服务之间进行切换时,应当测试其提供密码处理服务的正确性。如果密码模块可以自动在旁路服务和密码服务之间切换,当管理切换程序的机制(比如源/目的IP地址表)被修改时,应当测试其提供密码处理服务的正确性。如果密码模块保存了管理旁路能力的内部信息,那么每当修改管理信息之前,该模块应当采用核准的完整性检测技术来验证管理信息的完整性,并且当修改完毕后,也应当采用核准的完整性检测技术来产生新的完整性校验值。7.10.3.8 周期自测试对于安全一级和二级:密码模块应当允许操作员在有周期测试需求的情况下,启动运行前自

71、测试和条件自测试。请求启动周期自测试的方法包括:利用已有自测试服务、复位、重启、上电循环。对于安全三级和四级,除了安全一级和二级的要求:模块应当在已定义的时间周期内,自动重复执行运行前或条件自测试,而无需外部的输入或控制。安全策略(附录B)应当阐明时间周期以及在重复执行运行前自测试或条件自测试期间可能导致模块运行中断的任何条件。例如,如果模块正在执行关键任务服务,该服务不能被中断,而启动运行前自测试的时间周期已过;自测试可能要等到又一个时间周期过去之后才执行。7.11 生命周期保障生命周期保障是指密码模块厂商在密码模块的设计、开发、操作和生命终止期间使用最佳方法,以保障模块被正确地设计、开发、

72、测试、配置、配送、安装和废弃,并保障模块配有适当的操作员管理文档。安全要求分别针对配置管理、设计、有限状态模型、开发、测试、配送和操作以及指南文档做出规定。7.11.2 配置管理使用配置管理系统的目的是为了防止意外或非授权地修改密码模块及其相关文档,并为密码模块及其相关文档的更改提供可追溯性。配置管理系统应当通过严格的管理控制措施来控制密码模块和相关文档的优化与修改,从而保证密码模块的完整性。对于安全一级和二级:密码模块及其部件的开发过程以及相关文档都应当使用配置管理系统管理。每个配置条目(例如,密码模块、模块硬件部分、模块软件部件、模块HDL、用户指南、安全策略等)的每个版本,都应当被分配并

73、标注一个唯一的身份标识码。在经审验的密码模块的整个生命周期中,配置管理系统应当追踪并维护标识和版本的更改,或每个配置条目的修订。对于安全三级和四级:除了安全一级和二级要求,还应当使用自动的配置管理系统对配置条目进行管理。7.11.3 设计设计是密码模块功能规格的工程解决方案。设计的目的是用于保障密码模块的功能与安全策略中描述的预期功能相一致。密码模块应当设计成允许测试所提供的所有安全相关服务。7.11.4 有限状态模型(FSM)密码模块的FSM应当至少包括下列运行状态和错误状态:电源开启/关闭状态;对于软件模块而言,开启电源则是指产生密码模块的可执行映像。初始化状态;在模块转换到核准的状态之前

74、,密码模块执行初始化所处的状态。密码主管状态;执行密码主管服务的状态(例如,密码初始化、安全管理和密钥管理)。关键安全参数输入状态;将关键安全参数输入至密码模块时所处的状态。用户状态;授权用户获得安全服务、执行密码操作或执行其他核准的功能所处的状态。核准的状态;执行核准的安全功能时所处的状态。自测试状态;密码模块正在执行自测试时所处的状态。错误状态;“硬”错误,可能需要进行维护、保养或修理;可恢复的“软”错误,可能需要初始化或重启。除密码主管以外,任何其他角色应当被禁止转换成密码主管状态。密码模块还可以包含其他状态,例如下列两种状态,但不限于此:旁路状态;此时由于模块配置改变或操作员干预,导致

75、服务将原本正常情况下应当以加密形式输出的特定数据或状态项,以明文形式输出。不活动状态:密码模块静止(例如,低功耗、待机或休眠)的状态。7.11.5 开发(安全一级)如果密码模块包含软件或固件,那么源代码、编程语言、编译器、编译器版本和编译器选项、链接器和链接器选项、运行时库和运行时库设置、配置设置、生成过程和方法、生成选项、环境变量以及所有用于编译和链接源代码使其成为可运行形式的其他资源,都应当使用配置管理系统进行追踪。如果密码模块包含软件或固件,那么源代码应当用注释进行标注,注释应该描述出软件或固件与模块设计的对应关系。如果密码模块包含硬件,若适用的话,文档应当阐明电路图和/或硬件描述语言(

76、HDL)。如果密码模块包含硬件,HDL代码应当用注释进行标注,注释应当描述出硬件与模块设计的对应关系。对于软件和固件密码模块以及混合模块中的软件或固件部件:7.5和7.10中规定的完整性和验证技术机制的结果,应当在模块开发过程中,由厂商计算并集成到软件或固件模块内。密码模块文档应当阐明将源代码编译为可运行形式代码所使用的编译器、配置设置以及方法。密码模块应当使用工业等级的开发工具(例如,编译器)进行开发。7.11.5 开发(安全二级及以上)对于安全二级和三级,除了安全一级的要求还应当:密码模块内所有软件或固件应当采用高级非私有语言实现。如果低级语言对模块的性能有重要作用或在高级语言无法使用的情

77、况下,应当在使用低级语言(例如,汇编语言或微指令)时给出根据。密码模块内的定制集成电路应当采用高级硬件描述语言(HDL)实现(例如,VHDL或Verilog)。软件密码模块的设计和实现应当避免使用对模块功能和运行不必要的代码、参数或符号。对于安全四级,除了安全一级、二级和三级的要求还应当:对于每个密码模块的硬件和软件部件,文档应当具有注释,以阐明:进入模块部件、功能和程序时,为确保执行正确所需要的前置条件;模块部件、功能和程序完成时,预期值为真的后置条件。前置条件和后置条件可以使用任何足够详细的表示方法进行阐述,以完整且清晰地解释密码模块部件、功能和程序的行为。7.11.6 厂商测试本条对密码

78、模块的厂商测试提出了要求,其中包括对密码模块中实现的安全功能的测试,从而确保了密码模块的实际行为与模块安全策略以及功能规格相一致:对于安全一级和二级:文档应当阐明在密码模块上执行的功能测试。对于软件或固件密码模块以及混合模块中的软件或固件部件,厂商应当使用通用的自动安全诊断工具(例如,检查缓冲区溢出等)。对于安全三级和四级,除了安全一级和二级中的要求:文档还应当阐明在密码模块上执行的底层测试的过程与结果。7.11.7 配送与操作本条对密码模块的安全配送、安装以及启动提出了要求,确保将模块安全地配送给已授权的操作员,并以正确和安全的方式安装以及初始化。对于安全一级:文档应当阐明密码模块的安全安装

79、、初始化与启动的流程。对于安全二级和三级,除了安全一级的要求之外:文档还应当阐明在分发、安装和初始化密码模块的版本给已授权的操作员时,维持模块安全性所需的步骤。这些步骤应当详细指出在配送、安装和初始化密码模块给已授权操作员的过程中,如何检测模块是否被拆卸过。对于安全四级,除了安全二级和三级中的要求之外:还应当要求已授权的操作员使用厂商提供的鉴别数据对模块进行鉴别。7.11.8 生命终止本条规定了当操作员不再使用密码模块时的安全要求:对于安全一级和二级文档应当阐明安全清理密码模块的流程。清理是指从模块中去除敏感信息(例如,敏感安全参数、用户数据等)的过程,使得清理后的模块可以分发给其他操作员或被

80、废弃。安全三级和四级,除了安全一级和二级的要求:文档应当阐明安全销毁模块所需的流程。7.11.9 指南文档本条中的要求旨在确保所有使用密码模块的实体能够得到详细的指导和步骤,从而能够以安全的方式管理与使用模块。指南文档包括管理员指南和非管理员指南。管理员指南应当阐明:密码主管和/或其他管理角色可用的密码模块的管理功能、安全事件、安全参数(以及适当的参数值)、物理端口以及逻辑接口。独立的操作员鉴别机制能够独立起作用所需的流程。如何在核准的工作模式下管理密码模块的措施。与密码模块安全操作相关的用户行为的假定。非管理员指南应当阐明:密码模块用户可用的核准的和非核准的安全功能、物理端口以及逻辑接口。用

81、户对密码模块的核准工作模式所承担的所有必要责任。7.12 对其他攻击的缓解密码模块可能还容易受到一些在本标准内其他条款未定义的攻击,模块对攻击的敏感性取决于模块的类型、实现以及实现环境。恶意环境(例如,攻击者可以是模块的授权操作员)中的密码模块可特别关注这些攻击。这些攻击通常依赖从模块物理外部获得的一些信息进行分析,以确定关于密码模块中关键安全参数的某些信息。对于安全一级、二级和三级:如果将密码模块设计为可缓解一种或多种在本标准中未定义的特定攻击,那么模块的相关文档应当列举出模块能够缓解的攻击。当制定出要求以及相关测试后,将对用于缓解攻击的安全机制进行验证,测试其是否存在且是否起作用。对于安全四级,除了安全一级、二级和三级的安全要求,还应:如果声明了能够缓解本标准未定义的特定攻击,则文档应当详细说明缓解攻击的方法以及测试该缓解技术有效性的方法。END.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号