Skip to content

Instantly share code, notes, and snippets.

@orxvan
Created November 23, 2015 06:27
Show Gist options
  • Save orxvan/18b617ae52d0cfca5a5e to your computer and use it in GitHub Desktop.
Save orxvan/18b617ae52d0cfca5a5e to your computer and use it in GitHub Desktop.

from http://www.sanlen.com/news/e7/2014-02-24/sl_news_41573.htm 1 范围

本标准提出了用于保护计算机与通信系统内部敏感信息的安全系统内使用的密码模块的安全要求。本标准为密码模块定义了四个安全等级,以满足不同安全等级要求的敏感数据及多样化的应用环境的安全需求。本标准划分了10个安全领域,在每种安全领域中定义了四个安全等级,每一种安全等级都比较低的安全等级提供了更高的安全性。 
本标准适用于密码模块的安全性检测,亦可用于指导密码模块的设计、开发和测试工作。 

2 规范性引用文件 

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。 
GM/T 0005 随机性检测规范 
ISO/IEC 19790信息技术 安全技术 密码模块安全要求 

3 术语和定义 

以下术语适用于本标准。 

3.1 

认可的 approved 
由附录C中列举的标准中规范的安全功能 

3.2 

认可的操作模式 approved mode of operation 
仅使用认可安全功能的密码模块的工作模式。请勿与认可安全函数的具体模式混淆,如分组链接模式(CBC) 

3.3 

认可的操作系统 approved operating system 
符合附录C中安全要求的操作系统 

3.4 

非对称密码技术 asymmetric cryptographic technique 
使用两个相关变换的密码技术——一个公开变换(由公钥定义)和一个秘密变换(由私钥定义)。非对称密码技术的特点是,给定公钥变换结果,在给定的有限时间、有限计算资源条件下,计算得出私钥变换结果是不可行的 

3.5 

鉴别码 authentication code 
基于认可的安全功能计算的密码校验码,也被称为消息验证码(MAC) 

3.6 

证书 certificate 
也称公钥证书,由CA签名的包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及扩展信息的一种数据结构。按类别可分为个人证书、机构证书和设备证书,按用途可分为签名证书和加密证书 

3.7 

威胁 compromise 
未经授权对CSPs的泄露、修改、替换或使用,或是未经授权对PSPs的修改或替换 

3.8 

机密性 confidentiality 
又称保密性,保证信息不被泄露给非授权的个人、进程等实体的性质 

3.9 

控制信息 control information 
为控制模块操作而输入密码模块的信息 

3.10 

关键安全参数 critical security parameter,CSP 
秘密的或私人的安全相关信息,其泄露或篡改会威胁密码模块安全性。例:秘密密钥,私钥,口令、PIN码等认证数据 

3.11 

密码边界 cryptographic boundary 
明确定义的连续边界,界定了密码模块的物理与/或逻辑边界,涵盖了密码模块内部的所有硬件、软件及/或固件组成部分 

3.12 

密钥 cryptographic key, key 
控制密码算法运算的关键信息或参数。 

3.13 

密钥组件 cryptographic key component, key component 
安全功能中用于进行密码功能运算的参数 

3.14 

密码模块 cryptographic module, module 
实现密码运算功能的、相对独立的软件、硬件、固件,或其组合 

3.15 

密码模块安全策略 cryptographic module security policy 
密码模块操作应遵循的安全规则,包括为满足本标准要求而提出的规则以及模块采用的其他额外规则。详见附录B。 

3.16 

密码管理员 crypto officer 
由个体或进程(即主体)所承担的角色,代表个体允许对密码模块执行密码初始化或管理职能 

3.17 

数据路径 data path 
数据通过的物理或逻辑路径。多个逻辑数据路径可共用同一物理数据路径。 

3.18 

差分能量分析 differential power analysis, DPA 
一种密码分析方法,使用统计方法和纠错技术等对密码设备的功耗的变化进行分析,以提取密码算法中有关密钥的信息 

3.19 

数字签名 digital signature 
签名者使用私钥对待签名数据的杂凑值做密码运算得到的结果,该结果只能用签名者的公钥进行验证,用于确认待签名数据的完整性、签名者身份的真实性和签名行为的抗抵赖性 

3.20 

电子密钥输入 electronic key entry 
使用密钥加载器或通过在线工具等电子方式往密码模块输入密钥。 密钥的操作者可能不知道输入的密钥值。 

3.21 

电子密钥传输 electronic key transport 
使用诸如计算机网络等电子方式传送密钥,通常以加密方式传送。 

3.22 

密文密钥 encrypted key 
使用密钥加密密钥和认可的安全函数加密后的密钥。 

3.23 

实体 entity 
个人、群体、设备或进程 

3.24 

环境故障保护 environmental failure protection, EFP 
使用功能特性以抵御由于环境条件或环境波动超出模块正常运行范围给密码模块带来的安全威胁 

3.25 

环境故障检测 environmental failure testing, EFT 
使用特定的方法以提供合理的安全保障,确保密码模块的安全特性将不会由于环境条件或环境波动超出模块的正常运行范围而受到威胁 

3.26 

错误校验码 error detection code 
经数据计算得出的数值,由信息冗余比特所组成,用于检测、但不纠正数据误码。 

3.27 

有限状态模型 finite state model, FSM 
数学时序模型,包括有限输入事件集、有限输出事件集、有限状态集、将状态与输入映射到输出的变换函数、将状态与输入映射到状态的变换函数(状态转换函数),以及描述初始状态的说明。 

3.28 

固件 firmware 
存储于密码边界内的硬件中、执行期间不能被动态写入或修改的程序与数据组成部分。 
如存储硬件,包括但不限于ROM、PROM、EEPROM与FLASH。 

3.29 

硬件 hardware 
密码边界内用于处理程序与数据的物理设备/组件。 

3.30 

输入数据 input data 
输入密码模块的信息,用于数据变换或用于认可的安全功能运算。 

3.31 

完整性 integrity 
数据没有遭受以非授权方式所作的篡改或破坏的性质 

3.32 

接口 interface 
密码模块的逻辑输入或输出口,为逻辑信息流提供了访问模块的出入口 

3.33 

密钥加密密钥 key encryption key, KEK 
用于对密钥进行加密或解密的密钥 

3.34 

密钥建立 key establishment 
使一个或多个实体可使用一个共享密钥的过程。密钥建立包括密钥协商和密钥传输过程 

3.35 

密钥加载器 key loader 
至少能存储一组明文/密文密钥或密钥组件的独立装置,在需要时可将存储信息载入密码模块中 

3.36 

密钥管理 key management 
根据安全策略,对密钥的产生、分发、存储、更新、归档、撤销、备份、恢复和销毁等密钥全生命周期的管理 

3.37 

密钥传输 key transport 
密钥从一个实体到另一个实体的传输过程 

3.38 

维护角色 maintenance role 
承担物理维护及/或逻辑维护服务的角色。维护服务可包括但不仅限于硬件及/或软件诊断。 

3.39 

手工密钥输入 manual key entry 
使用键盘等设备,将密钥输入密码模块中 

3.40 

手工密钥传输 manual key transport 
使用密钥加载器等带外传送方式传输密钥 

3.41 

微代码 Microcode 
对应于可执行程序指令的处理器指令。如汇编码 

3.42 

操作员 operator 
代表个体进行操作的个体或进程(主体),可承担一种或多种角色 

3.43 

输出数据 output data 
密码模块产生的信息 

3.44 

钝化 passivation 
在半导体设备的构造中,为半导体设备的接口、零件和集成电路的表面提供保护的方法,可能会改变电路的运转状态。如二氧化硅和磷玻璃可用于此用途,但钝化材料由工艺决定。 

3.45 

口令 password 
用于鉴别身份或验证访问授权的字符串。如字母、数字和其他符号 

3.46 

个人识别码 personal identification number,PIN 
用于鉴别身份的数字代码 

3.47 

物理防护 physical protection 
以物理手段来保护密码模块、CSPs和PSPs的安全措施。 

3.48 

明文密钥 plaintext key 
未经加密的密钥 

3.49 

端口 port 
提供密码模块访问通道的物理/逻辑输入或输出节点 

3.50 

私钥 private key 
非对称密码算法中只能由拥有者使用的不公开密钥。 在非对称签名机制中,私钥用于签名变换。在非对称加密机制中,私钥用于解密变换。 

3.51 

产品级 production-grade 
经检测,符合使用规范的产品、组件或软件 

3.52 

公钥 public key 
非对称密码算法中可以公开的密钥。在非对称签名机制中,公钥用于签名验证计算。在非对称加密机制中,公钥用于加密变换。密钥“公开”并不意味着所有人都能获取。公钥可能仅被某特定群体的成员获取 

3.53 

公钥证书 public key certificate 
由相应证书机构为某实体签发的不可抵赖的公钥信息 

3.54 

公开安全参数 public security parameter,PSP 
安全相关的公开参数,若其被篡改将会危及密码模块的安全。如公钥、公钥证书、自签名证书以及与计数器相关的一次性口令。 

3.55 

随机数发生器 random number generator,RNG 
生成字节序列的装置或算法,其输出序列具有统计独立性和平衡性 

3.56 

活动封盖 removable cover 
可访问密码模块物理组成的物理工具 

3.57 

角色 role 
用户关联的安全属性,定义了用户对密码模块的访问权限或使用限制。一个角色可能关联一个或多个服务;一个角色可能关联一个或多个用户;一个用户也可能承担一个或多个角色 

3.58 

秘密密钥 secret key 
不可公开的密钥,仅用于一个或多个实体,用于对称算法 

3.59 

安全功能 security function 
国家密码主管部门认可的随机数发生器、实体鉴别、密钥建立、密码算法及其操作模式。如分组算法、流密码、非对称算法、消息认证码、杂凑函数,或其他安全功能等。详见附录C。 

3.60 

种子密钥 seed key 
用于初始化密码功能或密码操作的秘密值 

3.61 

简单能量分析 simple power analysis,SPA 
对指令集(或单一指令)的执行模式进行直接的(通常是视觉的)分析,分析的模式图样通过监测密码模块的电能消耗变化而获得,其目的在于揭露密码算法的特性及实施细节,而后获取密钥值 

3.62 

软件 software 
密码边界内的程序及数据组成,通常保存在可擦写媒介中,在执行过程中可被动态地写入或修改。如可擦除媒介,包括但不限于硬盘。 

3.63 

知识拆分 split knowledge 
将密钥拆分为多个密钥组件的过程,其中单个密钥组件不包含任何原始密钥信息。随后这些密钥组件可以由各实体导入或导出密码模块,组合后重新生成原始密钥 

3.64 

状态信息 status information 
密码模块的输出信息,用于指示某些操作特征或模块状态 

3.65 

对称密码技术 symmetric cryptographic technique 
加密解密变换中使用相同秘密密钥的密码技术 

3.66 

系统软件 system software 
密码边界内的通用软件,其目的在于方便进行密码模块操作。如操作系统、编译器及通用程序。 

3.67 

防侵害侦测 tamper detection 
密码模块的自动侦测功能,可确定企图侵害密码模块安全的行为 

3.68 

防侵害标记 tamper evidence 
外部痕迹,用于指示企图侵害密码模块安全的行为。侵害企图留下的痕迹易于观察 

3.69 

侵害响应 tamper response 
密码模块在侦测到侵害行为后自动采取的措施 

3.70 

用户 user 
代表个体访问密码模块、获取密码服务的个体或进程(主体) 

3.71 

清零 zerosation 
销毁存储数据和关键安全参数CSPs的方法,防止数据恢复和数据重用 

3.72 

可信路径 trusted path 
为主体和被访问对象之间提供的一种安全通讯保护机制,使得主体与被访问对象之间交换的信息不会被攻击者截取或修改。 

4 缩略语 

本标准使用以下缩略语 
API Application Program Interface,应用程序接口 
CBC Cipher Block Chaining,分组链接 
EDC Error Detection Code,错误校验码 
HDL Hardware Description Language,硬件描述语言 
IC Integrated Circuit,集成电路 
PROM Programmable Read-Only Memory,可编程只读存储器 
RAM Random Access Memory,随机存取存储器 
ROM Read-Only Memory,只读存储器 

5 密码模块安全等级 

以下章节概述了四个安全等级。给出的常见示例并不具有限制性或穷举性,仅为了形象地说明如何满足这些安全要求。本文档提到的“模块”视同为“密码模块”。 

5.1 安全等级1 

安全等级1为最低安全等级,给出了密码模块的基本安全要求(如至少应采用一个认可的算法或认可的安全功能)。除产品级组件的基本要求外,安全等级1的密码模块无需其他特定物理安全机制要求。例如,个人计算机加密板应归为安全等级1的密码模块。 
安全等级1允许密码模块的软件、固件组件在带有未经测评操作系统的通用计算机系统上运行。当诸如物理安全、网络安全与管理流程等其它管控方式受限或不存在时,此种密码模块的运行方式可适用于一些低等级的安全应用。密码功能的软件实现可能比相应的硬件实现更经济,这使得相关机构可从多种密码解决方案中选择合适的解决方案以满足低等级的安全需求。 

5.2 安全等级2 

安全等级2通过增加防侵害标记的要求,在安全等级1的基础上增强了物理安全机制。防侵害标记包括使用防侵害涂层或封印,或在活动封盖或封门处使用防撬锁等。 
防侵害涂层或封印加装在密码模块上,要访问模块内部的关键安全参数(CSPs)与/或公共安全参数(PSPs)则必须破坏封装或封印。防侵害封印或防撬锁装置在封盖或封门处,用以防止非授权的物理访问。 
安全等级2要求至少实现基于角色的认证技术,密码模块鉴别操作人员关于某角色的授权,鉴别通过后操作人员可承担该角色并执行相应的操作。 

运行于通用计算机系统中,满足安全等级2且以软件实现或部分软件实现的密码模块,其通用计算机使用的操作系统应满足附录C中认可的操作系统第2级系统审计保护级给出的安全要求。

5.3 安全等级3 

除安全等级2所要求的防侵害标记物理安全机制外,安全等级3力图阻止入侵者访问密码模块中所保存的关键安全参数(CSPs)和公共安全参数(PSPs)。安全等级3的物理安全机制要求对企图进行物理访问、使用或篡改密码模块的攻击行为,具有较高的侦测能力与响应能力。物理安全机制包含使用强封装与防侵害监测/响应电路,当密码模块的活动封盖或封门被打开时,相应的防侵害监测/响应电路将清零所有关键安全参数CSPs。 
安全等级3要求使用基于身份的认证机制,增强了安全等级2基于角色的认证机制所提供的安全特性。密码模块鉴别操作者的身份,并验证操作者关于承担特定角色并执行相应操作的授权。 

安全等级3要求关键安全参数CSPs的输入与输出(包括CSPs使用知识拆分技术的输入或输出),应使用与其他端口物理分离的端口,或使用基于可信路径与其他接口逻辑分离的接口。CSPs可以密文方式输入输出密码模块(这种情况下,CSPs数据可在外围或干扰系统中传播)。 运行于通用计算机系统中,满足安全等级3且以软件实现或部分软件实现的密码模块,其通用计算机使用的操作系统应满足附录C中认可的操作系统第2级系统审计保护级给出的安全要求,且在用户和通用操作系统内核之间开辟一条直接的可信任的交互通道,用于保护CSPs与密码模块的软件、固件组成部分免受其他可运行于系统中的非可信软件或固件的侵害。

5.4 安全等级4 

安全等级4是本标准中定义的最高安全级别。该级别的物理安全机制为密码模块提供了完整的封装保护。当模块内存有CSPs与/或PSPs时,无论有无外部供电,都能侦测所有非授权的物理访问并作出响应。来自于任何角度的、针对密码模块封装的入侵都极有可能被侦测出,从而导致所有CSPs的清零。安全等级4的密码模块对于未加物理保护环境中的应用具有很好的保护作用。 
同时,安全等级4也确保密码模块的安全性不因超出模块正常运行范围的外界条件或电压、温度等的波动而降低。攻击者可能故意制造超出正常运行范围的情况以试图对抗密码模块的防御措施。密码模块应具备特殊环境保护特性,可侦测条件波动并清零CSPs,或者经过严格的环境故障测试,确保在受到超出正常运行范围的外界环境波动侵袭时,密码模块安全性不受影响。 
运行于通用计算机系统中,满足安全等级4且以软件实现或部分软件实现的密码模块,其通用计算机使用的操作系统应满足附录C中认可的操作系统第3级安全标记保护级给出的安全要求。 

6 功能性安全目标 

本标准制定的安全要求涉及密码模块的安全设计与安全实现。密码模块应满足以下高等级功能性安全目标,密码模块安全要求是为满足这些安全目标而制定的: 
采用并正确实现认可的安全功能以保护敏感信息; 
保护密码模块免受非授权操作或使用; 
防止包括CSPs在内的密码模块内容的非授权泄露; 
防止对密码模块和密码算法未经授权和未经发现的篡改,包括对CSPs与/或PSPs的非授权修改、替换、插入及删除; 
提供密码模块的操作状态显示; 
确保密码模块能在认可的操作模式下正常运行; 
侦测模块的运行错误,并防止此类错误危害CSPs及/或PSPs的安全性。 

7 安全要求 

本节给出了遵循本标准的密码模块应满足的安全要求。这些安全要求涵盖了密码模块设计与模块实现的各个领域,包括模块说明,模块端口与接口,角色、服务与认证,有限状态模型,物理安全,运行环境,密钥管理,自检及设计保障。 
此外还有攻击缓解的相关安全要求,目前除安全等级4外,不对攻击缓解项进行测试,但要求提供实现的控制技术文档(如DPA)。表1总结了各领域的安全要求。 
检测机构依据本节列举的各领域要求对密码模块进行测试,分别就各领域安全要求的满足情况对模块定级。有些领域为各安全等级给出了渐强的安全要求,在这些领域中,密码模块都将各得到一个定级结果,该定级结果反映了密码模块在该领域中满足其下全部安全要求的最高安全等级。对于未提供不同等级安全要求的领域(即仅给出标准要求),密码模块将会在该领域得到一个与其整体安全等级相适应的定级结果。 
密码模块除了得到各安全领域的各自定级结果,也会得到一个整体安全级别。整体安全级别为模块各领域安全级别中的最低级别。

本标准大部分的安全要求都包含了详细而明确的文档要求,详见附录A。所有的文档,包括用户手册和安装手册的副本,都应该提交给检测机构供评估使用。 表1 安全要求概要 安全等级1 安全等级2 安全等级3 安全等级4 密码模块说明 关于密码模块、密码边界、认可的算法及认可的操作模式的说明;对密码模块的描述,包括所有硬件、软件和固件组成部分;关于密码模块安全策略的说明等。 密码模块端口与接口 必要的和可选的接口;所有接口及输入输出的数据路径的详细说明。 用于关键安全参数的数据端口应与其他数据端口逻辑隔离 角色,服务与认证 必选的和可选的角色及服务逻辑分离。 基于角色或基于身份的操作者认证。 基于身份的操作者认证。 有限状态模型 关于有限状态模型的说明;必选和可选的状态;状态转换表及状态转换说明。 物理安全 产品级设备。 锁或防侵害标记。 对封盖和封门的防侵害检测与响应。 全方位的防侵害检测与响应。具有环境故障保护(EFP)或环境故障检测(EFT)机制。 密钥管理 密钥管理机制:随机数发生器及随机密钥生成器,密钥建立,密钥分发,密钥导入/导出,密钥存储及密钥清零。 使用手工方式传输秘密密钥及私钥时,可以以明文方式进行导入或导出。 使用手工方式传输秘密密钥和私钥时,密钥应以加密或知识拆分的方式进行导入或导出。 自检 上电自检:密码算法测试,软件/固件完整性测试,关键功能测试;条件自检。 设计保障 配置管理(CM),安全安装及配置,设计与策略的一致性,指南性文件。 安全分发,功能说明。 高级语言实现。 形式化模型,详细的注释(非形式化证明),先决条件和后置条件。 缓解其他攻击 模块可抵抗其他攻击的说明,目前对该项目无测试要求。 模块可抵抗其他攻击的说明及其测试要求。

7.1 密码模块说明 

密码模块由包含在密码边界内的、用于实现密码功能或流程的一系列硬件、软件、固件或其组合构成。密码模块应在认可的操作模式下实现至少一种认可的安全功能。模块上也可实现非认可操作模式下的非认可安全功能(即用于模块范围内的非安全事件)。操作者应能决定何时选择认可的操作模式。对于安全等级1和2的模块,其安全策略可指定什么时候运行认可的操作模式。对于安全等级3和4的模块,密码模块应在选择认可的操作模式后给出相应显示。认可的安全功能详见附录C。 
密码边界由确定密码模块物理及/或逻辑界限的明确周界组成。如果密码模块由软件或固件组件构成,则密码边界应包含处理器以及用于存储和保护软件、固件组件的其它硬件组成部分。如果密码模块内的硬件、软件、固件组件对于模块安全性没有影响,则这类硬件、软件和固件可以不受本标准约束。 
以下文档要求适用于密码模块内所有与安全相关的硬件,软件和固件。这些要求不适用于微代码或不公开源代码的系统软件,也不适用于密码模块中与安全性无关的硬件、软件及固件组成部分。 
1. 文档应详细说明密码模块的硬件、软件及固件组成部分,详细说明环绕这些组件的密码边界,并描述模块的物理结构(见7.5节); 
2. 文档应详细说明密码模块中不受本标准安全要求约束的硬件、软件及固件组件,并说明理由; 
3. 文档应详细说明密码模块中的物理端口、逻辑接口,以及所有明确定义的数据输入输出路径; 
4. 文档应详细说明密码模块的手工控制或逻辑控制,物理或逻辑状态指示器以及相应的物理特性、逻辑特性与电气特性; 
5. 文档应列举密码模块采用的所有安全功能,包括认可功能与非认可功能,详细说明所有操作模式,包括认可操作模式与非认可操作模式; 
6. 文档应说明: 
    a. 用于说明密码模块内所有主要硬件组成部分及其相互关系的结构图,包括所有微处理器、输入/输出缓存、明文/密文缓存、控制缓存、密钥存储、工作存储器及程序存储器;   
    b. 密码模块的硬件、软件及固件组件设计,撰写设计文件时用于软件/固件设计的高级描述语言或描述硬件设计的图表; 
7. 文档应详细说明所有与安全相关的信息,这些信息的泄露与篡改将会威胁密码模块的安全,包含关键安全参数CSPs、公共安全参数PSPs以及其它受保护的信息(例如,审计事件及审计数据); 
8. 文档应详细说明密码模块安全策略。安全策略应包含由本标准安全要求衍生的相应规则以及在产品开发过程中采用的其他要求所衍生的规则(见附录B)。 

7.2 密码模块端口及接口 

密码模块的物理端口和逻辑接口定义了密码模块的所有出入口,密码模块应限定指向这些出入口的所有信息流和物理访问点。即使有几个不同的逻辑接口共享一个物理端口(如数据通过同一个端口进行输入输出),或者一个逻辑接口被拆分到一个或多个端口(如数据可通过串口和并口输入),也应该对密码模块的所有逻辑接口分别明确定义。对于密码模块软件组成部分的应用程序接口(Application Program Interface,API),一个API可被定义为一个或多个逻辑接口。 
密码模块应明确定义以下四类逻辑接口(“输入”和“输出”均是从模块的角度定义)。 
1. 数据输入接口。所有输入模块内(通过控制输入接口输入的控制数据除外)并经由模块处理的数据(包括明文数据、密文数据、CSPs、PSPs和来自其他模块的状态信息)均应通过“数据输入”接口输入; 
2. 数据输出接口。所有从密码模块中输出(通过状态输出接口输出的状态数据除外)的数据(包括明文数据、密文数据、CSPs、PSPs以及对其他模块的控制信息)均应通过“数据输出”接口输出。在错误状态和自检过程中应限制所有数据通过数据输出接口输出(见章节7.8); 
3. 控制输入接口。所有为控制密码模块运行而输入的指令、信号及控制数据(包括函数调用和诸如转换开关、按钮和键盘之类的手动控制)均应通过“控制输入”接口输入; 
4. 状态输出接口。所有用于指示密码模块状态的输出信号、指示器及状态数据(包括返回码、诸如发光二极管之类的物理指示器和显示器)均应通过“状态输出”接口输出。 

所有输入密码模块的外部电源(包括来自外部电源或电池的能源)均应通过电源端口输入。当所有电源都由密码边界内部提供或维持时(如使用内部电池),无需设置电源端口。 密码模块应区分数据输入与控制输入,区分数据输出与状态输出。所有经由“数据输入”接口输入密码模块的数据应仅通过输入数据路径。所有经由“数据输出”接口输出密码模块的数据应仅通过输出数据路径。在执行密钥生成、手工密钥导入或密钥清零时,输出数据路径应与电路、程序逻辑分离。为防止敏感数据的无意泄露,要经由任意输出接口输出明文CSPs或敏感数据时,必须由两个相互独立的动作共同触发(如设置两个不同的软件标记,其中一个由用户触发;或是由两个相互独立的动作设置的硬件门电路)。 安全等级1和2 用于数据输入输出的物理端口和逻辑接口可与密码模块的其他端口和接口物理共享、逻辑共享。 安全等级3和4 附加要求包括: 用于输入、输出明文CSPs的物理端口应与密码模块的其他端口物理分离。 或者, 用于输入、输出明文CSPs的逻辑接口应使用可信路径与密码模块的其他接口逻辑分离。 以及, 明文CSPs应通过可信路径或直接输入密码模块,而不能通过密钥组件可能被存储、重组或被其他方式处理的任何封闭系统或中介系统。(见7.7.4节)

7.3 角色、服务和认证 

密码模块应支持操作者的授权角色以及各角色的相应服务。一个操作者可担任多个角色。如果密码模块同时支持多个操作者,则密码模块应能在内部区分各操作者承担的角色以及相应的服务。在执行不会对CSPs和PSPs进行修改、泄露或替换(如显示状态、自检或其他不影响模块安全性的服务)的服务时,无需验证用户的角色授权。 
密码模块内部需要鉴别机制以鉴别操作者对模块的访问权限,以及验证操作者的角色及相应服务的授权。 

7.3.1 角色 

密码模块应支持操作者的以下授权角色: 
1. 用户角色。该角色可执行通用安全服务,包括密码操作和其他认可的安全功能。 
2. 密码管理员角色。该角色可执行密码初始化、密码管理等功能(如模块初始化,CSPs及PSPs的输入输出,以及审计功能)。 

如果密码模块允许操作者执行维护操作,则模块应支持以下授权角色: 1. 维护角色。该角色执行物理维护及/或逻辑维护服务(如硬件/软件诊断)。当进入或退出维护角色时所有CSPs应清零。 除以上指定角色外,密码模块还可支持其他角色或子角色。

7.3.2 服务 

服务涵盖模块能执行的一切服务、操作和功能。服务输入由所有用于初始化或用于获取指定服务、操作或功能的密码模块数据输入或控制输入构成。服务输出则由因服务输入进行初始化或获取的各项服务、操作或功能所产生的所有数据输出及状态输出构成。每项服务输入都将引起服务输出。 
密码模块应为操作者提供以下服务: 
1. 状态显示。输出密码模块的当前状态。 
2. 执行自检。初始化并运行自检,自检要求见7.8节。 
3. 执行认可的安全功能。至少实现一个认可操作模式下的认可安全功能,详见7.1节。 
除以上特定服务外,密码模块可额外提供其他服务、操作或功能,包括认可的和未经认可的。某些服务可供一个或多个角色使用(如用户角色和密码管理员角色都能执行密钥导入服务)。 
如果密码模块实现了旁路功能,提供未经密码处理的服务(如未经加密即通过模块进行明文传输),则模块必须满足: 
为了避免因单个错误而造成明文数据的意外旁路,应由两个独立的内部行为共同触发旁路功能(如设置两个软件标识或硬件标识,其中一个由用户触发)。 
模块应显示状态指示旁路功能的以下状态: 
1. 旁路功能未被启动,模块仅提供密码处理服务(如:明文加密); 
2. 旁路功能已被启动,模块不提供任何带密码处理的服务(如:不对明文数据进行加密);或者 
3. 旁路功能正被交替启动与关闭,模块正提供某些带密码处理的服务和某些不带密码处理的服务(例如多信道的密码模块,明文是否被加密取决于各自信道设置)。 

7.3.3 操作者认证 

密码模块可采用认证机制来鉴定操作者身份,并验证操作者对于某角色以及该角色下相应操作的授权。根据不同的安全等级,密码模块应至少支持以下一种机制以进行访问控制。模块可支持以下任意机制: 
基于角色的认证。若模块支持基于角色的认证,模块应要求由操作者隐式或显式地选择一个或多个角色,并对这些角色(或者角色集合)的授权进行认证。密码模块不要求对每一个操作者的身份进行认证。角色的选择和授权的认证可结合进行。如果密码模块允许操作者更改角色,则模块应对之前未经认证的所有角色授权进行认证。或者 
基于身份的认证。若密码模块支持基于身份的认证机制,模块应要求逐一鉴别操作者,应要求操作者隐式或显式的选出若干角色,同时对操作者的身份和角色(或角色集合)授权进行认证。操作者的身份认证、角色选取以及授权角色认证可结合进行。如果密码模块允许操作者更改角色,则模块应就该已通过身份认证的操作者之前未经认证的所有角色授权进行认证。 
密码模块可允许经过认证的操作者执行经授权角色中所有的许可服务,或者模块也可要求为每一个服务或一组服务分别进行授权认证。当密码模块被切断电源,随后上电时应不保留之前的认证结果,且模块应要求重新认证操作者。 
密码模块可要求用不同类型的认证数据实现其认证机制,包括(但不限于)知晓或拥有口令、PIN码、密钥或其等价物,拥有物理钥匙、令牌或其等价物,或是验证个人特征。密码模块应保护内部的验证数据以防非授权的泄露、篡改及替换。 
认证机制的初始化可能需要特殊处理。如果操作者第一次访问模块时模块内不含有认证数据,可采用其他认证方法来进行模块的访问控制并执行认证机制的初始化(如采用程序控制、出厂设置或缺省的认证数据)。 
认证机制的强度应满足以下要求: 
1. 对于每一次试图通过认证的尝试,其成功概率应满足认证目标的强度。例如,随机尝试(例如,猜测口令或PIN码,生物识别设备的错误接受率,或一些认证方法的组合)能成功的概率应小于百万分之一; 
2. 对于一分钟内多次尝试通过认证的行为,其成功概率应满足认证目标的强度。例如,随机尝试成功通过认证或被错误接受的概率应小于十万分之一; 
3. 验证过程中应当隐蔽给操作者的验证数据反馈(例如,当输入一个口令时没有可见的字符显示); 
4. 在尝试认证期间,认证机制给操作者的反馈信息不能削弱认证机制的强度,不能提供除认证通过或失败以外的任何信息。 
认证机制应满足相应安全等级的要求。 
安全等级1 
不要求密码模块采用认证机制以实现模块的访问控制。如果模块不支持认证机制,模块应要求操作者显式或隐式地选择一个或多个角色。 
安全等级2 
密码模块应采用基于角色的认证机制以实现模块的访问控制。 
安全等级3和4 
密码模块应采用基于身份的认证机制以实现模块的访问控制。 

7.4 有限状态模型 

应使用有限状态模型(或等价物)描述密码模块的运行,该模型使用状态转换图及/或状态转变表进行描述。 
该状态转换图及/或状态转变表应包含如下内容: 
密码模块中所有可操作状态及错误状态; 
从一个状态到另一个状态的相应转变; 
引起一个状态转变到另一个状态的输入事件; 
由一个状态到另一个状态的转变所产生的输出事件。 
密码模块应包含下列可操作状态及错误状态: 
1. 上电/断电状态。主要、次要或备用电源的状态,该状态可区分密码模块正在使用的电源; 
2. 密码管理员状态。在此状态下,执行密码管理员服务(如密码初始化及密钥管理); 
3. 关键/公共安全参数(CSPs、PSPs)输入状态。在此状态下,输入关键及公共安全参数至密码模块; 
4. 用户状态。在此状态下,经授权用户获得安全服务、执行密码操作、或执行其它认可或非认可功能; 
5. 自检状态。在此状态下,密码模块执行自检操作; 
6. 错误状态。当密码模块出错时的状态。错误状态可包含指示设备故障的“硬”错误,硬错误可能需要维护、维修或修理密码模块;也可包括可恢复的“软”错误,该错误可能需要模块初始化或重启。除了那些由需要维护、维修或修理密码模块的“硬”错误引起的错误状态之外,错误状态均能被复原。 
密码模块可包含但不仅限于如下所示其它状态: 
1. 旁路状态。在此状态下,启动旁路功能并提供不含有密码操作的服务(如通过密码模块传输明文); 
2. 维护状态。维护与维修密码模块的状态,包括物理及逻辑的维护测试。如果密码模块含有维护角色,则应包含维护状态。 

7.5 物理安全 

为了限制非授权物理访问模块的内容,并阻止模块安装后对其非授权的使用及修改(包括替换整个模块),密码模块应使用物理安全机制。密码边界内所有的硬件、软件、固件及数据组件均应受到保护。 
完全由软件实现、物理安全由主平台单独提供的密码模块不遵循本标准中的物理安全要求。 
对于密码模块的三类特定物理实体(单芯片、多芯片嵌入式及多芯片独立式),应满足如下物理安全要求: 
1. 单芯片密码模块。实体内部使用单个集成电路(IC)芯片作为独立设备、或嵌入到封装内,或嵌入到可能不带物理保护的产品中。单芯片密码模块的例子有:单个IC芯片、带有单个IC芯片的智能卡等。 
2. 多芯片嵌入式密码模块。实体内部连接两个或多个IC芯片,并嵌入到封装或无物理保护的产品中。多芯片密码模块的例子有:适配器、扩充卡等。 
3. 多芯片独立式密码模块。实体内部连接两个或多个IC芯片,且整个封装均受到物理保护。多芯片独立式密码模块的例子有:加密路由、安全无线通信等。 
依赖于密码模块的物理安全机制,密码模块应能极大限度地检测出如下非授权的物理访问、使用及修改尝试: 
对遗留可见痕迹的尝试访问,密码模块应有相应的保护举措(如防侵害标记)。 
及/或 
在一个访问尝试期间内,密码模块应能采取适当的即时措施以保护公共安全参数和关键安全参数(如防侵害响应),采取即时措施意味着公共安全参数和关键安全参数不可被获取。 
针对四种安全等级中的每一种等级,表2分别总结了通用的及三类特定物理实体的物理安全要求。每一种安全等级中,特定实体的物理安全要求增强了同等级的通用要求及前一等级特定实体的要求。 
一般来说,安全等级1要求最小的物理保护;安全等级2要求增加防侵害标记机制;安全等级3要求增加使用带有防侵害侦测及响应机制的活动封盖、封门的高强度封装;安全等级4要求增加使用具有防侵害侦测及响应机制的高强度封装。此外,安全等级4还要求模块具有环境故障保护(EFP)或环境故障检测(EFT)机制。防侵害侦测与防侵害响应不可替代防侵害标记。 
当密码模块被设计成支持物理访问(如通过模块供应商或其它授权个人)时,应详述维护访问接口的安全要求。 

7.5.1 通用物理安全要求 

下列要求应用于所有物理实体: 
文档应详述模块的物理实体与物理安全机制所执行的安全等级; 
如果密码模块含有维护角色,该角色要求对模块内容能够进行物理访问,或模块被设计成支持物理访问(如通过模块供应商或其它授权个人),则: 
1. 应定义维护访问接口; 
2. 维护访问接口应包括所有访问密码模块内容的物理路径,也包括所有活动封盖或封门; 
3. 对于任何维护访问接口所包含的活动封盖与封门,应使用适当的物理安全机制给予保护; 
4. 当访问维护访问接口时,应清零所有关键安全参数。

表2:物理安全要求摘要 所有实体的通用要求 单芯片密码模块 多芯片嵌入式密码模块 多芯片独立式密码模块 安全等级1 产品级组件 (带有标准钝化),访问维护接口时自动清零相关安全参数 无附加要求 如果可行,产品级封装外壳或活动封盖 产品级封装外壳 安全等级2 防侵害标记 (如封盖、封装外壳或封印) 在封装外壳或芯片上的非透明防侵害标记涂层 对于封门或活动封盖,带有防侵害标记封印或防撬锁的非透明防侵害标记封装材料 对于封门或活动封盖,带有防侵害标记封印或防撬锁的非透明封装外壳 安全等级3 防侵害响应及清零电路、通风孔保护 在芯片或强防撬、防穿透的封装外壳上增加坚硬不透明的防侵害标记涂层 多芯片电路实体的高强度不透明陶瓷材料封装,或多芯片独立模块安全等级3的可用要求 多芯片电路实体的高强度不透明陶瓷材料封装或带有移动、穿透尝试就会导致严重损坏的高强度封装外壳 安全等级4 具有温度和电压的环境故障保护(EFP)或环境故障检测(EFT)功能 芯片上坚硬非透明的防撬涂层 带有防侵害响应及清零电路的防侵害侦测封装外壳 带有防侵害响应及清零功能的防侵害侦测/响应封装外壳

安全等级1 
下列要求应用于所有安全等级1的密码模块: 
1. 密码模块应由产品级组件组成,组件应包括标准钝化技术(如保形涂层或用于覆盖模块电路以抵御环境或其它物理损害的封闭层); 
2. 执行物理维护时,应清零密码模块中所有关键安全参数。清零可由操作员按步骤执行或通过密码模块自动执行。 
安全等级2 
除安全等级1的通用要求外,下列要求应用于所有安全等级2的密码模块。 
1. 当尝试物理访问模块时,密码模块应提供防侵害标记(如在封盖、封装与封印上)。 
安全等级3 
除安全等级1、2中的通用要求外,下列要求应用于所有安全等级3的密码模块: 
1. 如果密码模块含有任何封门、活动封盖或已定义的维护访问接口,则模块应具备防侵害响应及清零机制。当打开封门、移除封盖或访问维护访问接口时,防侵害响应及清零功能应立即清零所有关键安全参数。当密码模块中含有关键安全参数时,防侵害响应及清零功能应持续运行; 
2. 如果密码模块含有通风孔或通风口,则该孔或口应以特定方式构建,该方式应能防止未被发现的、深入到封装内部的物理探测(如要求至少90°的弯曲或采用坚硬固块材料封盖)。 
安全等级4 
除安全等级1、2、3中的通用要求外,模块应具备环境故障保护(EFP)特征,或能通过环境故障检测(EFT),详见7.5.2节安全等级4。 

7.5.1.1 单芯片密码模块 

除7.5.1节所述的通用安全要求外,下列要求专用于单芯片密码模块。 
安全等级1 
对于单芯片密码模块,无附加的安全等级1要求。 
安全等级2 
除安全等级1中的要求外,下列要求应用于安全等级2中的单芯片密码模块。 
1. 密码模块应采用防侵害标记涂层进行封盖(如防侵害标记的钝化材料或遮盖钝化的防侵害标记材料),或应包含于防侵害标记封装外壳内,以阻止对模块的直接观察、探测或操作,并显示尝试损坏或移除模块的痕迹; 
2. 防侵害标记涂层或防侵害标记封装外壳应在可见光谱范围内非透明(即波长范围为400nm~750nm的可见光)。 
安全等级3 
除安全等级1、2中的要求外,下列要求应用于安全等级3的单芯片密码模块。 
1. 模块应采用坚硬非透明防侵害标记涂层封盖(如坚硬非透明环氧钝化覆盖物); 

或 2. 应采用强封装外壳封装模块,该封装可使得撬动、穿透外壳的尝试将极有可能导致模块严重损坏(即模块将不运行)。 安全等级4 除安全等级1、2、3中的要求外,下列要求应用于安全等级4的单芯片密码模块。 1. 密码模块应采用带有一定硬度与粘度的坚硬非透明、抗移除涂层进行封盖,以使得试图拨离或探查模块涂层的尝试将极有可能导致模块严重损坏(即模块将不运行); 2. 抗移除涂层应具备溶解特性,从而消溶涂层将极有可能消溶或严重损害模块(即模块将不运行)。

7.5.1.2 多芯片嵌入式密码模块 

除7.5.1所述的通用安全要求外,下列要求专用于多芯片嵌入式密码模块。 
安全等级1 
如果密码模块包含于封装或活动封盖中,则使用产品级的封装外壳或活动封盖。 
安全等级2 
除安全等级1中的要求外,下列要求应用于安全等级2的多芯片嵌入式密码模块。 
1. 密码模块组件应采用防侵害标记涂层或陶瓷材料进行封盖(如抗腐蚀涂层或渗色涂料),以防止直接观察、探测或操作模块组件,并显示尝试篡改或移除模块组件的痕迹。防侵害标记涂层或防侵害标记封装外壳应在可见光谱范围内非透明。 

或 2. 密码模块应整个封装在金属或硬塑料产品级封装外壳内,并可能含有封门或活动封盖;封装应在可见光谱范围内非透明;如果封装含有任何封门或活动封盖,则封门或封盖应采用带有物理或逻辑密钥的防撬机械锁锁定,或是利用防侵害标记封条对其进行保护(如证据胶带或全息封条)。 安全等级3 除安全等级1、2中的要求外,下列要求应用于安全等级3的多芯片嵌入式密码模块。 1. 密码模块内多芯片电路实体应采用坚硬材料或陶瓷材料封盖(如坚固环氧材料),该材料在可见光谱范围内非透明。 或 2. 应用多芯片独立式密码模块安全等级3的要求(详见7.5.1.3节)。 安全等级4 除安全等级1、2、3中的要求外,下列要求应用于安全等级4的多芯片嵌入式密码模块。 1. 密码模块组件应采用陶瓷材料进行封盖或整个包含于防侵害侦测封装外壳内(如带有弯曲几何图案导体的可弯曲聚酯薄膜印制电路、绕线包、非弹性易碎电路或其他坚硬的封装外壳),该防侵害侦测封装外壳应能侦测那些企图通过切割、钻探、铣削、碾磨、消溶相关陶瓷材料或封装等方式,非法访问关键安全参数及公共安全参数的损坏尝试。 2. 密码模块应含有防侵害响应及清零电路,该电路应持续不断监控防侵害侦测封装外壳,当侦测到侵害时,应立即清零所有关键安全参数。当密码模块中含有关键安全参数及/或公共安全参数时,防侵害响应电路应保持运行。当密码模块中含有关键安全参数时,清零电路应保持运行。

7.5.1.3 多芯片独立式密码模块 

除7.5.1节所述的通用安全要求外,下列要求专用于多芯片独立式密码模块。 
安全等级1 
对于安全等级1,应采用金属或硬塑产品级封装外壳对整个密码模块进行封装,该封装可带有封门或活动封盖。 
安全等级2 
除安全等级1中的要求外,下列要求应用于安全等级2的多芯片独立式密码模块。 
1. 密码模块的封装外壳应在可见光谱范围内非透明; 
2. 如果密码模块的封装外壳含有任何封门或活动封盖,则它们应采用带有物理或逻辑密钥的防撬机械锁锁定,或是利用防侵害标记封条对其进行保护(如证据胶带或全息封条)。 
安全等级3 
除安全等级1、2中的要求外,下列要求应用于安全等级3的多芯片独立式密码模块。 
1. 密码模块内多芯片电路实体应采用坚硬的陶瓷材料封盖(如坚固的环氧材料),该材料在可见光谱范围内非透明。 

或 2. 密码模块应整个封装于高强度封装外壳内,以使得任何移除或穿透模块封装的尝试都将极有可能导致模块严重损坏(即模块将不工作)。 安全等级4 除安全等级1、2、3中的要求外,下列要求应用于安全等级4中的多芯片独立式密码模块。 1. 密码模块应采用防侵害侦测外壳进行封装;或是通过使用防侵害侦测机制进行封装,如封盖开关(微型开关、磁性霍尔效应开关、永磁驱动器等)、移动侦测器(超声波、红外线或微波),或是通过使用前文所述的用于多芯片嵌入式密码模块的其它防侵害侦测机制封装起来。防侵害侦测机制应侦测出那些企图通过切割、钻探、铣削、碾磨、消溶相关陶瓷材料或封装等方式,非法访问关键安全参数及/或公共安全参数的损坏尝试; 2. 密码模块应具有防侵害响应及清零功能。该功能应持续监测防侵害侦测封装,当侦测到侵害时,应立即清零所有的关键安全参数。当密码模块中含有关键安全参数及/或公共安全参数时,防侵害响应功能应保持运行。当密码模块中含有关键安全参数时,清零功能应保持运行。

7.5.2 环境故障保护/检测 

电子设备及电路均被设计成在一系列特定环境条件下运行。有意或无意地偏离电压及温度的指定正常运行范围,将可能导致电子设备或电路的不稳定运行或故障,这些不稳定运行或故障可能会危及密码模块的安全。模块应具备环境故障保护(EFP)功能或能经受环境故障测试(EFT),提供适当的保障,以确保密码模块的安全免受极端环境条件的威胁。 

对于安全等级1、2、3而言,密码模块无需具备环境故障保护功能或经受环境故障测试。在安全等级4中,密码模块应具备环境故障保护功能或经受环境故障测试。

7.5.2.1环境故障保护功能(可选1) 

环境故障保护功能应保护密码模块抵御那些超出了模块正常运行范围、可能危及模块安全的异常环境条件或波动(无意或有意)。 
密码模块应对那些超出指定正常运行范围的温度及电压的波动进行监控并做出相应的响应。 
环境故障保护功能应包括持续测量密码模块运行温度及电压的电路或设备。如果温度或电压超出了密码模块的正常运行范围,则保护功能应: 
1. 关闭模块以防止进一步运行, 
或 
2. 立即清零所有的关键安全参数。 
文档应详述密码模块的正常运行范围及所使用的环境故障保护功能。 

7.5.2.2环境故障测试流程(可选2) 

环境故障测试应包括密码模块分析、仿真及测试等方法的综合使用,提供适当的保障,以确保超出模块正常运行范围的温度及电压的环境条件或波动(有意或无意)不会危及模块的安全。 
环境故障测试应能证明:即使密码模块的运行温度或电压超出其正常运行范围并导致模块故障,也绝不可能危及模块的安全。 
被测的温度范围应是从模块正常运行的温度到最大负温度,低至最大负温度时将1)关闭模块以阻止下一步运行或2)立即清零所有的关键安全参数;被测的温度范围应是从模块正常运行的温度到最大正温度,高达最大正温度时将1)关闭模块以阻止下一步运行或2)立即清零所有的关键安全参数。被测的温度范围应在摄氏-50°~+150°之间。只要出现1)模块关闭阻止下一步运行,2)所有的关键安全参数清零或3)模块故障的情况,整个测试将立即中断。 
被测的电压范围应从最小负电压(相对于地面)到最小正电压(相对于地面),包括反转电压极性。低至最小负电压时将1)关闭模块以阻止下一步运行或2)立即清零所有的关键安全参数;高至最小正电压时将1)关闭模块以阻止下一步运行或2)立即清零所有的关键安全参数。 
文档应详述密码模块的正常运行范围及所执行的环境故障测试。 

7.6 运行环境 

密码模块的运行环境涉及软件、固件及/或模块运行所需硬件组件的管理。操作环境可以是不可修改的(如包含于ROM的固件、包含于禁用I/O口计算机中的软件),也可以是可修改的(如包含于RAM的固件、通用计算机所执行的软件)。操作系统是密码模块运行环境中的重要组件。 
通用运行环境涉及商业通用操作系统(如资源管理器)的使用,该商业通用操作系统用于管理密码边界内的软件/固件组件,以及管理系统与操作员进程/线程,包括通用应用软件,如文字处理软件。 
本节详述了两个特定的运行环境。两者截然不同,具体要求详见7.6.1。 
1. 限定运行环境指的是不带有任何后台通用操作系统的、静态不可修改的虚拟运行环境(如基于不可编程PC卡的JAVA虚拟机),该运行环境唯一存储于通用操作系统上。 
2. 可修改操作环境指的是可被重置具备增添/删除/修改功能、及/或含有通用操作系统能力(如计算机O/S、可配置智能卡O/S、可编程固件的使用)的操作环境。如果操作者可修改软件/固件组件,及/或操作者能加载并执行那些不包含于模块认证部分的软件或固件(如文字处理软件),则该操作系统被认为是可修改的运行环境。 
如果运行环境是可修改的运行环境,则遵循7.6.1节的操作系统要求。 
如果运行环境是不可修改或限定的运行环境,则无需遵循7.6.1节的操作系统要求。 
文档应详述密码模块的运行环境,包括模块使用的操作系统(如果可用)及用于安全等级2、3、4的认可的安全保护等级要求,详见附录C.1.8。 

7.6.1 操作系统要求 

安全等级1 
下列要求应用于安全等级1的操作系统。 
1. 仅对安全等级1而言,应限定操作系统为单操作员操作的运行模式(即明令禁止多操作员同时操作); 
2. 仅对安全等级1而言,密码模块在执行/运行期间,应阻止其它进程访问关键安全参数及/或公共安全参数。密码模块产生的进程归模块自身所有,不属于外部进程/操作员。非密码进程不应中断正在执行的密码模块; 
3. 应以一定方式装载所有密码软件及固件,该方式可保护软件、固件的源代码及可执行代码免受非授权泄露和修改; 
4. 密码模块中所有密码软件及固件组件应使用认可的完整性保护技术(如认可的消息认证码或数字签名算法)的密码机制。如果模块的完整性测试使用了认可的验证技术,则此密码机制要求应作为软件/固件完整性测试(详见7.8.1)的一部分。 
安全等级2 
除安全等级1中的可用要求(即安全等级1的第3、4条)外,下列要求应用于安全等级2。 
1. 所有密码软件与固件、关键安全参数、公共安全参数、控制与状态信息应受如下控制: 
    a. 操作系统,该操作系统满足附录C.1.8中认可的操作系统第2级系统审计保护级给出的安全要求。 
2. 为保护明文数据、密码软件/固件、关键安全参数、公共安全参数,应配置操作系统的访问控制机制,明确其角色集应能执行如下功能: 
    a. 可执行现存的密码软件及固件; 
    b. 可修改(即写、替换和删除)下列存于密码边界内的密码模块软件或固件组件:密码程序、密码数据(如审计数据)、关键安全参数、公共安全参数及明文数据; 
    c. 可读取下列存于密码边界内的密码模块软件组件:密码数据(如密钥及审计数据)、关键安全参数及明文数据; 
    d. 可输入关键安全参数及/或公共安全参数。 
3. 操作系统应防止所有操作者及执行进程修改正在执行的密码进程(即加载并执行密码程序镜像)。此种情况下,执行进程指的是所有密码或非密码的非操作系统进程(即操作者启动的进程)。 
4. 操作系统应防止操作者及执行进程读取存于密码边界内的密码软件。 
5. 操作系统应提供审计机制以记录密码数据、关键安全参数及公共安全参数的修改、访问、删除及添加。 
    a. 审计机制应记录下列事件: 
    企图使用密码管理员功能进行非法输入,及 
    在密码管理员角色中添加或删除操作者。 
    b. 审计机制应能审计下列事件: 
    处理存于审计跟踪表中审计数据的操作, 
    使用认证数据管理机制的请求, 
    与安全相关的密码管理员功能的使用, 
    访问与密码模块相关联的用户认证数据的请求, 
    与密码模块相关的认证机制(如注册登陆)的使用, 
    授权密码管理员角色的直接请求, 
    密码管理员角色功能的分配。 
    c. 应保护现存审计数据免受非授权访问。 
安全等级3 
除安全等级1、2中的可用要求外,下列要求应用于安全等级3。 
1. 所有密码软件及固件、关键安全参数、公共安全参数、控制与状态信息均应受操作系统的控制。该操作系统应满足附录C.1.8中认可的操作系统第2级系统审计保护级给出的安全要求。 
2. 所有的关键安全参数、控制输入与状态输出应通过可信机制(如专用I/O物理端口或可信通道)进行通信。 
3. 除安全等级2中的审计要求外,审计机制应记录下列事件: 
    a. 企图使用可信通道功能, 
    b. 发起者的认证与可信通道的目标, 
    c. 未成功的自检操作,及 
    d. 防侵害侦测通知。 
安全等级4 
除安全等级1、2、3中的可用要求外,下列要求应用于安全等级4。 
所有密码软件、关键安全参数、公共安全参数及控制与状态信息应受操作系统的控制,该操作系统应附录C.1.8中认可的操作系统第3级安全标记保护级给出的安全要求。 

7.7 密钥管理 

密钥管理的安全要求贯穿密码模块所使用的关键安全参数与公共安全参数的整个生命周期。密钥管理包括随机数与密钥的生成、密钥建立、密钥分发、密钥导入/导出、密钥存储及密钥清零等。密码模块也可使用其它密码模块的密钥管理机制。密文关键安全参数指的是使用认可的算法或安全功能加密的关键安全参数。 
在本标准范围内,使用非认可算法或设计者自行设计的专有算法及方法进行加密的关键安全参数被认为是明文格式。 
应保护密码模块中的关键安全参数,以防止非授权泄露、修改及替换;应保护密码模块中的公共安全参数,以防止非授权修改及替换。 
文档应详述密码模块使用的所有关键安全参数及公共安全参数。 

7.7.1 随机数发生器(RNGs) 

密码模块可使用随机数发生器(RNGs)。所有的随机数发生器及其使用均应明确定义,一般情况下应使用国家密码主管部门认可的随机数生成部件来产生随机数。 
在认可运行模式下, 密码模块生成的随机数应能通过GM/T 0005标准规定的随机性检测。 

7.7.2 密钥生成 

密码模块可在内部生成密钥。由密码模块生成的、用于认可算法或认可安全功能的密钥应使用认可的随机数发生器产生。 
若攻击者想危及到密钥生成方法的安全(如企图猜测用于初始化确定性随机数发生器的种子向量),应至少需要进行与获取已生成密钥的值相同多次的操作。 
如果在密钥生成过程中输入种子密钥,则密钥的输入应满足7.7.4节所述密钥输入要求。如果从密码模块中输出中间密钥生成值,则该中间值应以加密形式输出或基于知识拆分技术处理输出。 

7.7.3 密钥建立 

密钥建立可通过认可的电子法(如使用公钥算法)、手工输入法(如使用手工传输的密钥装载设备)或电子与手工输入相结合的方法来完成。如果密码模块采用密钥建立方法,则仅能使用并定义认可的密钥建立方法。适用于本标准的认可密钥建立方法详见附录D。 
若想危及密钥建立方法的安全(如危及用于密钥建立算法的安全),应至少需要进行与获取传输或协商密钥值相同多次的操作。 
如果使用了密钥传输方法,则传输密钥应满足7.7.4节所述的密钥输入/输出要求;如果使用了密钥协商方法(如通过共享中间值导出密钥),则无需要求该共享值满足7.7.4节所述的密钥输入/输出要求。 

7.7.4 密钥输入与输出 

密码模块可支持密钥的输入输出。应使用手工方法(如通过键盘),或使用电子方法(如智能卡/令牌、PC卡或其它电子密钥装载设备或线路)完成及定义密钥的输入或输出。 
如果密钥生成阶段需输入种子密钥,则应采用与密钥相同的方式输入。 
所有输入输出于密码模块的、用于认可操作模式的密文秘密密钥及私钥均应使用认可的算法(详见附录C)进行加密,并可进行完整性保护;公钥可以明文形式输入输出于密码模块,并可进行完整性保护。密码模块应能将输入或输出的密钥(秘密密钥、私钥、公钥)与密钥所分配给的相应实体(如个人、组、进程)名称一一对应。 
手工输入的密钥(密钥以手工方式输入)应在输入到密码模块期间,采用7.8.2节所述的手工密钥输入测试进行校验,以确保其准确性。在密钥输入期间,可临时显示手工输入的数据以允许可视校验并提高其准确性。如果手工输入密文密钥或密钥组件到密码模块,则不应显示密钥或密钥组件的明文值。 

安全等级1、2 
使用电子方法传输的秘密密钥及私钥应以加密方式输入到密码模块,并应以加密方式从密码模块输出;使用手工方法传输的秘密密钥及私钥可以以明文方式输入到密码模块,或以明文方式从密码模块输出。 
安全等级3、4 
下列密钥输入/输出要求应用于安全等级3、4: 
1. 使用电子法传输的秘密密钥及私钥应以加密方式输入与输出于密码模块。 
2. 使用手工法传输的秘密密钥及私钥应1)以加密方式或2)使用知识拆分技术(即分成两个或多个明文密钥组件)输入输出于密码模块。 
3. 如果使用知识拆分程序: 
    a. 密码模块应分别鉴别操作员输入或输出的每一个密钥组件, 
    b. 明文密钥组件应通过可信通道输入输出于密码模块,或无需穿过任何非故意存储、组合或其他操作(详见7.2节)密钥组件的封闭或中间系统而直接输入或输出于密码模块。 
    c. 重构原始密钥应至少需要两个密钥组件。 
    d. 文档应证明:如果重构原始密钥需要n块密钥组件的信息,则任意n-1块密钥组件的信息除了提供长度外,均无法提供任何与原始密钥相关的信息。 
    e. 文档应详述密码模块所使用的知识拆分程序。 

7.7.5 密钥存储 

存于密码模块中的密钥应以明文方式,或以密文方式存储。密码模块外部的非授权操作者不允许访问明文秘密密钥及私钥。 
密码模块应将存储于其内部的密钥(秘密密钥、私钥或公钥)与密钥所分配给的相应实体(如个人、组、进程)名称一一对应。 

7.7.6 密钥清零 

密码模块应提供清零所有关键安全参数的方法。此外,无需将存于附加的嵌入式验证模块(满足本标准的要求)中,采用物理或逻辑保护的关键安全参数清零。 
对于专用于传递明文数据给授权代理进程的关键安全参数,则无需满足上述的清零要求。 
模块的初始化密钥为上述关键安全参数的一个实例。 

7.8 自检 

密码模块应执行上电自检与条件自检,以确保其自身正确地运行。当密码模块上电时应执行上电自检;当可用安全功能或操作启动时应执行条件自检(即安全功能需要自检)。除本标准指定测试外,密码模块可执行其他的上电或条件自检。 
如果密码模块自检失败,则模块应进入错误状态并输出错误指示。错误指示可通过状态输出接口直接输出,或通过其他机制间接输出。当模块处于错误状态时,密码模块应不再执行任何密码操作。当处于错误状态时,应禁止所有通过数据输出接口的数据输出。 
文档应详细说明: 
密码模块所执行的自检,包括上电及条件自检; 
当自检失败时,密码模块能进入的错误状态;及 
退出错误状态与恢复密码模块正常运行(即包括模块的维护或修理)的必要条件及操作。 

7.8.1 上电自检 

当模块上电时(在断电、复位、重启等之后),密码模块应执行上电自检。上电自检应自动启动,无需操作员干预。当完成上电自检时,将通过状态输出接口直接或间接输出结果。当执行上电自检时,应禁止所有通过数据输出接口的数据输出。 
上电时除执行上电自检外,密码模块应允许操作员启动其它满足模块定期测试要求的测试。复位、重启与电路震荡均为启动上电自检的方法。 
密码模块应执行下列上电自检: 
1. 密码算法测试。使用已知结果的密码算法测试方法测试密码模块所执行的每一种认可密码算法的所有密码功能(如加密、解密、认证等)。已知结果测试包括基于特定数据操作的密码算法,该特定数据的正确输出结果是已知的;也包括比较计算输出与之前产生的输出(即已知结果)。如果计算输出不等于已知结果,则已知结果测试失败。 
应使用已知结果测试或成对一致性(详见下文)测试等方法测试输出不同于给定输入的密码算法(如数字签名算法)。消息杂凑算法应有独立的已知结果测试,或相关密码算法测试(如数字签名标准)应包括已知结果测试。 
如果密码模块中含有一个算法的两个独立运算,则可省略已知结果测试,相应地,应不断比较两个运算的输出结果。如果两个运算的输出结果不相等,则密码算法测试失败。 
1. 随机数发生器测试。如果密码模块使用了认可的运行模式中的认可随机数发生器,模块应执行基本的随机数健壮性测试。如频数、扑克、游程参数检测。 
2. 软件/固件完整性测试。当模块上电时,应对密码模块内所有经认证的软件及固件组件进行软件/固件完整性测试,该测试使用了错误检测码(EDC)或认可的验证技术(如认可的消息认证码或数字签名算法)。对于不满足本标准安全要求(详见7.1节)的软件及固件组件,不要求其进行软件/固件完整性测试。如果计算结果不等于之前产生的结果,则软件/固件完整性测试失败。 

如果使用了EDC,则EDC长度至少应为16比特。 注:存于ROM的数据无需进行软件/固件完整性测试。 1. 关键功能测试。对于在上电时需进行上电自检的密码模块,其内部可能存在对模块的安全运行十分关键的其他安全功能。对于这类在特定环境下执行的关键安全功能,应对其进行条件自检的测试。 文档应详述所有对模块安全运行十分关键的安全功能,并区分模块所执行的上电自检及条件自检。

7.8.2 条件自检 

应执行如下条件测试。 

7.8.2.1 成对一致性测试 

如果密码模块可生成非对称密钥对,以用于认可功能的密钥传输、生成,及数字签名验证,则应使用已知结果测试验证该密钥对的成对一致性。 

7.8.2.2 手工密钥输入测试 

如果采用手工方式输入密钥或密钥组件到模块,则应执行下列手工密钥输入测试: 
1. 密钥或密钥组件应有可用的错误检测码,或应以重复输入的方式输入。 
2. 如果使用了错误检测码,则该检测码的长度至少应为16比特。 
3. 如果无法校验错误检测码,或重复输入值不匹配,则测试失败。 

7.8.2.3 连续随机数发生器测试 

如果密码模块在认可操作模式下使用了认可的随机数发生器,则模块应对每一个随机数发生器执行下列连续随机数发生器测试,如果出现常量,则相应随机数发生器测试失败。 
1. 如果每调用一个随机数发生器便产生多组n字节数据块(n>4),则不应使用在上电、初始化或复位后所生成的第1组n字节块,但为了与下一组生成的n字节块作比对,则应保存该第1组n字节块。每一组后续生成的n字节块均应与其之前的生成块进行比对。如果任意两个比对的n字节块相等,则测试失败。 
2. 如果每调用一个随机数发生器产生的值少于4字节,则不应使用在上电、初始化或复位后所生成的第1组n字节块(n>4),但为了与下一组生成的n字节块比对,则应保存第1组n字节块。每一组后续生成的n字节均应与其之前生成块作比对。如果任意两个比对的n字节块相等,则测试失败。 
本测试仅用于随机数发生器的最低健壮性测试,不包括随机数质量测试。随机数发生器所有其他的测试参见GM/T 0005规定的随机性检测要求。 

7.8.2.4 旁路测试 

如果密码模块可实现旁路功能,该功能模式下模块可提供不带有密码处理的服务(如通过模块传输明文),则 
应执行下列旁路测试,以确保模块组件的单点故障不会导致明文数据的意外输出: 
当专用旁路服务与专用密码服务之间发生转换时,密码模块应对密码处理服务的正确运行进行测试。 
如果密码模块能在旁路服务与密码服务之间自动转换,提供相应的无密码处理服务与带密码处理服务,则当修改控制该转换程序的机制(如IP地址源/目的表)时,模块应对密码处理服务的正确运行进行检测。 
文档应详细定义和描述控制转换程序的机制或逻辑。 

7.8.2.5 软件/固件加载测试 

如果软件或固件组成部分能够从外部加载到一个密码模块内,那么应执行以下的软件/固件加载测试: 
1、将一种认可的认证技术(例如:认可的消息认证代码、数字签名算法、或HMAC)应用到所有认证过的、从外部加载到密码模块内的软件和固件组成部分上。不受本标准安全需求约束的软件及固件组成部分,不要求进行该软件/固件加载测试(参考章节7.1)。 
2、将计算结果与之前产生的结果进行比较。如果计算结果与之前产生的结果不一致,那么该软件/固件加载测试失败。 

7.9 设计保证 

设计保证指的是用于密码模块的设计、部署及运行期间的最佳实践说明,以确保正确地设计、开发、测试、交付、安装、配置及使用密码模块,同时也提供了正确的操作指导文档。下列内容详述了配置、交付与操作、开发及指导文件等方面的安全要求。 

7.9.1 配置管理 

配置管理描述了应用于配置管理系统的安全要求,以确保在密码模块的设计、开发、测试、安装、使用等过程中实现相应的功能要求与规范。 
应使用配置管理系统对密码边界内的密码模块与模块组件的设计文档、源代码、可执行文件,以及相关的模块说明文档等进行管理。应妥善为每一个组成密码模块的配置项(如设计文档、源代码、用户指南、说明文档及二进制文件等)的各个版本及相关文档分配并采用唯一标识号进行标注。 
配置管理系统应区分所有组成密码模块的配置项及其相关文档,并能提供所有配置项的配置清单。配置项清单应包括关于以前的安全缺陷及解决方案等信息。 
配置管理系统应具备以下功能: 
提供手工或自动的方式以支持组成密码模块的配置项的生成; 
提供自动方式支持密码模块配置项的变更和版本控制; 
提供自动方式以确保只有经过授权的变更才能修改实现密码模块的配置项; 
应记录并维护相应日志以表明配置管理系统正按照配置管理计划正常运行,且所有配置项已经且正处于有效的维护中; 
应提供密码模块的基线管理和版本控制功能,对组成密码模块所有配置项的一致性和完整性进行有效管理。 

7.9.2 交付与操作 

交付与操作详述了密码模块的安全交付、安装及启动的安全要求,以确保模块安全地交付给授权操作员,并以正确安全的方式安装及初始化。 
安全等级1 
文档应详述密码模块安全安装、初始化及启动的流程。 
安全等级2、3、4 
除安全等级1的要求外,当交付、分发密码模块的所有版本给授权操作者时,文档应详细说明维护安全所需的流程。 

7.9.3 开发 

开发详细规定了从功能接口到实现表示等各种抽象层次的密码模块安全功能描述的安全要求,并确保密码模块的实现符合模块安全策略及功能规范的要求。 
功能规范包括对操作员可见端口和接口的高级描述,以及密码模块操作的高级描述。 
开发安全文档应描述所有用以保护在模块开发环境中密码模块设计与实现的机密性与完整性的物理的、程序的、个人的及其他必要的安全措施。开发安全文档应证明:在密码模块的开发与维护期间,实施了上述安全措施。 
应明确列出所有用于模块实现的开发工具。开发工具文档应明确解释所有用于模块实现的声明的含义。开发工具文档应明确解释所有非独立实现可选项的含义。 
安全等级1 
下列要求应用于安全等级1的密码模块: 
1. 文档应详述密码模块的硬件、软件及固件组件设计与密码模块安全策略(详见7.1节)之间的对应关系。 
2. 如果密码模块含有软件或固件组件,则文档应详述软件及固件组件的源代码,源码的注释应清楚地描述组件与模块设计的对应关系。 
3. 如果密码模块含有硬件组件,则文档应详述用于硬件组件的图表及/或硬件描述语言(HDL)清单。 
安全等级2 
除安全等级1中的要求外,下列要求应用于安全等级2的密码模块。 
文档应详述相应的功能规范,该规范非形式地描述了密码模块、密码模块的外部端口与模块接口、以及接口的目的。 
安全等级3 
除安全等级1、2中的要求外,下列要求应用于安全等级3的密码模块。 
除了模块的实现必须使用低级语言(如汇编语言、微代码),或当高级语言不可用时允许少量使用低级语言(如汇编语言、微代码)外,应尽量使用高级语言实现密码模块中所有的软件及固件组件。 
如果使用了HDL语言,则应使用高级描述语言实现密码模块中的所有硬件组件。 
安全等级4 
除安全等级1、2、3中的要求外,下列要求应用于安全等级4的密码模块: 
1. 文档应详述形式模型,该模型描述了密码模块安全策略的规则及特性。应使用形式规范语言描述形式模型,该形式语言是基于已有数学理论而构建的严谨的表示法,例如一阶逻辑理论或集合理论。 
2. 文档应详述相应的基本原理,以证明形式模型与密码模块安全策略的一致性与完整性。 
3. 文档应详述相应的形式证据,以证明形式模型与功能规范之间的一致性。 
4. 对于密码模块中每一个硬件、软件及固件组件,源代码应被加以注释,注释详细说明了(1)为正确执行而需要输入到模块组件、功能或流程的先决条件与(2)当模块组件、功能或流程执行完毕后,所期望的正确的后置条件。可使用任何注释详述先决条件及后置条件,只要该注释足够详细、完整、明确地解释密码模块组件、功能或流程的行为。 
5. 文档应详述相应的非形式化证据,以证明密码模块设计(正如先决条件与后置条件注释所描述的)与功能规范之间的一致性。 
注:密码模块内,若采用推荐开发实例(详见附录E)实现软件及固件组件,该实现将便于分析组件与本标准需求的符合性,并减小设计错误的机率。 

7.9.4 指导文件 

密码管理员指南包括密码模块的正确配置、维护及管理。用户指南描述了密码模块的安全功能以及与模块安全使用相关的操作指南、指导方针及警告。如果密码模块支持维护角色,对于授权为维护角色的操作者,用户/密码管理员指南应描述物理及/或逻辑维护服务。 
密码管理员指南应详述: 
1. 密码管理员可用的密码模块管理功能、安全事件、安全参数(及相应的参数值)、物理端口及逻辑接口; 
2. 如何以安全方式管理密码模块的流程; 
3. 对与密码模块安全运行相关的用户行为进行的授权管理。 
用户指南应详述: 
1. 密码模块中用户可用的已认可安全功能、物理端口与逻辑接口,及 
2. 密码模块安全运行所需的一切用户责任。 

7.10 缓解其它攻击 

密码模块对攻击的敏感性取决于模块的类型、应用及运行环境。有些攻击可能尤其针对在敌对环境(例如:攻击者可能是模块的授权用户)中运行的密码模块。这类攻击主要分析从模块外部物理信号源得到的信息。在任何情况下,攻击者都试图探测密码模块内部有关密钥和CSP的信息。附录F提供了目前已知攻击的简要概述。 
安全级别1,2和3 
在开发安全需求和相关测试后,将对安全机制的存在及其机能进行验证。 
安全级别4 
在安全级别4,如果模块声明具有缓解其它攻击的功能,则应在文档中给出可证明该附加安全性的必要测试方法及手段的详细说明。测试方法的说明将会用于对所使用缓解方法的测试。 

附录A 

文件需求 

A.1 目的 

该附录详细说明了对密码模块进行独立认证或评估所需的最低文件要求。 

A.1.1 密码模块说明 

a. 密码模块硬件、软件和固件组成部分的说明,围绕这些组成部分的密码边界的说明,以及模块物理结构的描述。(安全级别1,2,3,和4) 
b. 密码模块中不受本标准安全要求约束的所有硬件、软件或固件组成部分的说明,以及将这些组成部分排除于本标准之外的原因(安全级别1,2,3,和4) 
c. 密码模块物理端口和逻辑接口的说明。(安全级别1,2,3,和4) 
d. 密码模块手动或逻辑控制的说明,物理或逻辑状态指示器,以及可应用的物理、逻辑和电气特性。(安全级别1,2,3和4) 
e. 密码模块使用的所有安全功能的清单,包括认可的和未经认可的,以及所有运行模式的说明,包括认可的和未经认可的。(安全级别1,2,3,和4) 
f. 使用结构图描述密码模块内所有主要的硬件组成部分及其相互关系,包括微处理器、输入/输出缓存、明文/密文缓存、控制缓存、密钥存储器、工作寄存器和程序存储器。(安全级别1,2,3和4) 
g. 密码模块硬件、软件和固件组成部分的设计说明。(安全级别1,2,3和4) 
h. 所有与安全有关的信息的说明,包括CSP,PSP和其它受保护的信息(例如:审计事件、审计数据),这些信息的泄露或修改会危害密码模块的安全性(安全级别1,2,3和4) 
i. 密码模块安全策略的说明,包括由本标准安全需求衍生的安全策略以及由供应商采用的其他附加要求中衍生的安全策略。(安全级别1,2,3和4) 

A.1.2 密码模块端口和接口 

密码模块物理端口和逻辑接口的说明,以及所有定义的输入和输出数据的路径。(安全级别1,2,3和4) 

A.1.3 角色,服务和认证 

密码模块支持的所有授权角色的说明。(安全级别1,2,3和4) 
密码模块提供的服务、运行或功能的说明,包括认可的和未经认可的。对每一种服务来说,是对执行该服务时,该服务的输入、相应的输出、以及授权角色的说明。(安全级别1,2,3和4) 
不要求操作员承担授权角色即可提供的所有服务的说明,以及这些服务不会修改、泄露或替代CSP与/或PSP,或以其他方式影响模块安全性的说明。(安全级别1,2,3和4)。 
密码模块支持的认证机制的说明,执行该认证机制所需要的认证数据类型,进行初次模块访问以及认证机制初始化时对模块进行访问控制的授权方法,以及模块所支持的相应机制的强度。(安全级别2,3和4) 

A.1.4 有限状态模型 

通过状态转换图和/或状态转换表来表示有限状态模型(或等价模型),详细说明所有的运行状态和错误状态、从一个状态到另一个状态相应的转换、引起这种转换的输入事件(包括数据输入和控制输入)、以及由这种转换引起的输出事件(包括内部模块条件、数据输出、以及状态输出)。(安全级别1,2,3和4) 

A.1.5 物理安全 

密码模块执行物理安全机制所采用的物理实现与安全级别的说明。以及模块采用的物理安全机制的说明。(安全级别1,2,3和4) 
如果密码模块具有一个维护角色,该角色需要对模块内容进行物理访问,或者如果该模块支持物理访问,需要维护访问接口的说明以及对维护访问接口进行访问时,CSP如何进行清零的说明。(安全级别1,2,3和4) 
密码模块正常运行范围的说明。密码模块实现的环境故障保护特性的说明,或已通过的环境故障测试的说明。(安全级别4) 

A.1.6 运行环境 

密码模块运行环境的说明。(安全级别1,2,3和4) 
密码模块使用的操作系统、可应用保护文件。(安全级别2,3,和4) 

A.1.7 密钥管理 

密码模块使用的所有CSP和PSP的说明。(安全级别1,2,3和4) 
密码模块使用的每一个RNG(包括认可的和未经认可的)的说明。(安全级别1,2,3和4) 
密码模块使用的每一种密钥生成方法(认可的和未经认可的)的说明。(安全级别1,2,3和4) 
密码模块使用的密钥建立方法的说明。(安全级别1,2,3和4) 
密码模块使用的密钥导入和导出方法的说明。(安全级别1,2,3和4) 
如果使用了密钥分割方法,证明如果需要n个密钥组成部分的信息重组原始密钥,那么任意n-1个密钥组分的信息除了能提供原始密钥的长度外,不能提供其它信息,并说明密码模块使用的密钥分割的流程。(安全级别3和4) 
密码模块使用的密钥存储方法的说明。(安全级别1,2,3和4) 
密码模块使用的密钥清零方法的说明。(安全级别1,2,3和4) 

A.1.8 自测 

密码模块执行的自测试的说明,包括上电测试和条件测试。(安全级别1,2,3和4) 
错误状态的说明,即当自测试失败时,密码模块可以进入该错误状态、退出该错误状态、以及模块恢复正常运行的必须条件和行为。(安全级别1,2,3和4) 
保证密码模块安全运行必须的所有关键安全功能的说明,以及可执行的上电测试和条件测试的证明。(安全级别1,2,3和4) 
如果一个密码模块执行了旁路功能,需要有转换程序的机制或逻辑控制的说明。(安全级别1,2,3和4) 

A.1.9 设计保证 

密码模块安全安装、安全配置和安全启动的流程说明。(安全级别1,2,3和4) 
将密码模块版本分发并交付给授权操作员的安全流程说明,该流程应确保密码模块信息的安全性。(安全级别2,3和4) 
说明密码模块的硬件、软件及固件组成部分的相关设计与模块安全策略(如运行规则)的对应关系。(安全级别1,2,3和4) 
如果密码模块包含软件或固件组成部分,应给出软件和固件组成部分的源代码,注释应清晰注明各部分与模块设计之间的对应关系。(安全级别1,2,3和4) 
如果一个密码模块包含硬件组成部分,需要硬件组成部分相关图表的说明和/或硬件描述语言(HDL)的清单。(安全级别1,2,3和4) 
密码模块、密码模块外部端口与接口,以及接口用途的非正式的功能说明。(安全级别2,3和4) 
给出密码模块的正式模型,用正式的描述语言说明模块安全策略的规则与特性。所使用的正式语言是基于一级推理或集合论等已有数学理论的严格的数学符号。(安全级别4) 
证明正式模型对于密码模块安全策略的一致性与完整性,给出基本原理说明。(安全级别4) 
对正式模型与功能性说明之间的对应关系给出非正式证明。(安全级别4) 
对每一个硬件、软件和固件组成部分来说,源代码的注释能够详细说明(1)输入模块组成部分、函数或程序,使其能正确执行的前提条件,以及(2)当模块组分、功能或程序的执行完成时,期望能得到的正确的后续状态。(安全级别4) 
密码模块的设计和功能说明之间的对应关系(正如前提条件和后续状态的注释所反映的)需要一个非形式化说明。(安全级别4) 

密码管理员的指南: 
对密码模块密码管理员开放的管理职能,安全事件,安全参数(适当的参数值),物理端口,以及逻辑端口。(安全级别1,2,3和4) 
密码模块安全管理方法流程(安全级别1,2,3和4);以及 
对与密码模块的安全运行有关的用户行为的假设。(安全级别1,2,3和4) 

用户指南: 对密码模块用户开放的认可的安全功能、物理端口和逻辑端口。(安全级别1,2,3和4);和 密码模块安全运行所必须的全部用户职责。(安全级别1,2,3和4)

A.1.10 缓解其它攻击 

如果一个密码模块的设计用于减缓一个或多个特定的攻击,那么需要对密码模块减缓攻击所使用的安全机制的对应的模块的安全策略进行说明。(安全级别1,2,3和4) 

A.1.11 安全策略 

附录B详细说明了密码模块安全策略最低程度的需求。安全策略包括由本标准相关要求衍生的安全规则,以及应用中其他附加要求衍生的安全规则。(安全级别1,2,3和4) 

附录B 

密码模块安全策略 

B.1 目的 

该附录详细说明了密码模块安全策略最低程度的需求。安全策略包括由本标准相关要求衍生的安全规则,以及应用中其他附加要求衍生的安全规则。 

B.2 背景 

密码模块安全策略包含安全规则的说明(密码模块遵循该规则来运行),包括由本标准相关要求衍生的安全规则,以及应用中其他附加要求衍生的安全规则。 
该说明十分详细的回答了下面的问题: 
1. 当操作员X以Z的角色执行Y服务时,应以什么方式访问可供任意角色访问的安全相关的数据项W、服务、以及包含在密码模块内部的安全相关的数据项? 
2. 使用什么样的物理安全机制来保护密码模块?为了维护模块的物理安全需要采取什么样的方法? 
3. 密码模块内部使用什么样的安全机制,来缓解该标准中未定义的可测试需求的攻击? 

B.3 目标 

开发和遵守准确的密码模块安全策略有两个主要的原因: 
1. 密码模块安全策略为密码模块的安全性提供了一份详细的说明,这份说明允许个人和组织来决定一个密码模块的实现是否满足规定的安全策略。 
2. 模块安全策略为个人和组织描述了密码模块的性能、保护和访问权限,因此,允许对模块是否能充分满足个人和组织的安全需求进行评估。 

B.3.1 鉴定和认证策略 

密码模块安全策略详细说明了一种鉴别和认证策略,包括: 
所有的角色(例如:用户、密码管理员和维护人员)和相关的认证类型(例如:基于身份、基于角色、或不基于任何),和 
每一个角色或操作员需要的认证数据(如口令或生物特征数据),以及相应的认证机制的强度。 

B.3.2访问控制策略 

密码模块安全策略详细说明了一种访问控制策略。该说明十分详细地描述了操作人员在执行一个服务时如何鉴别具有访问权限的CSP和PSP,以及操作员对参数的访问类型。 
安全策略规定以下内容: 
密码模块支持的所有角色; 
密码模块提供的所有服务; 
密码模块使用的所有CSP 和 PSP,包括: 
1. 秘密的、私有的和公开的密钥(明文和经加密的), 
2. 认证数据如口令或PIN,和 
3. 其它安全相关的信息(例如:审计事件和审计数据) 
操作员被授权在每个角色下可执行的服务,和 
各角色对应的各项服务对CSP和PSP的访问类型。 

B.3.3 物理安全策略 

密码模块安全策略详细说明了一种物理安全策略,包括: 
密码模块内部执行的物理安全机制(例如:防篡改密封、锁、篡改响应、清零开关和报警装置),和 
操作员维护物理安全所需采取的方法。(例如:防篡改密封的周期性检查或篡改响应和清零开关的周期性测试) 

B.3.4缓解其它攻击的策略 

密码模块安全策略详细说明了一种缓解其它攻击的安全策略,包括缓解攻击使用的安全机制。 

附录C 

认可的安全功能 

C.1 目的 

该附录提供了经国家密码主管部门认可的标准的清单,详细说明了符合本标准要求的安全功能。种类包括分组密码、流密码、非对称密钥、消息认证码、哈希函数、实体认证、密钥建立和随机数生成器。该清单会随着标准的升级进行更新。 

C.1.1 分组密码 

a. GM/T 0002 《SM4分组密码算法》 
b. 《SM1分组密码算法》 

C.1.2 流密码 

a. GM/T 0001 《祖冲之序列密码算法》 

C.1.3 非对称算法和技术 

a. GM/T 0003 《SM2椭圆曲线公钥密码算法》 
b. GM/T 0009 《SM2密码算法使用规范》 
c. GM/T 0010 《SM2密码算法加密签名消息语法规范》 
d. GM/T 0015 《基于SM2密码算法的数字证书格式规范》 

C.1.4 消息认证码 

a. ISO/IEC 9797-2,信息技术—安全技术—消息认证码(MACs)—第2部分:使用专用哈希函数的机制 

C.1.5 哈希功能 

a. GM/T 0004 《SM3密码杂凑算法》 

C.1.6 实体认证 

a. ISO/IEC 9798-2,信息技术—安全技术—实体认证—第2部分:使用对称加密算法的机制 
b. ISO/IEC 9798-3,信息技术—安全技术—实体认证—第3部分:使用数字签名技术的机制 
c. ISO/IEC 9798-4,信息技术—安全技术—实体认证—第4部分:使用密码校验函数的机制 
d. ISO/IEC 9798-5,信息技术—安全技术—实体认证—第5部分:使用零知识技术的机制 
e. ISO/IEC 9798-6,信息技术—安全技术—实体认证—第6部分:使用人工数据转换的机制 
f. ISO/IEC 11770-2,信息技术—安全技术—密钥管理—第2部分:使用对称技术的机制 
g. ISO/IEC 11770-3,信息技术—安全技术—密钥管理—第3部分:使用非对称技术的机制 
h. ISO/IEC 11770-4,信息技术—安全技术—密钥管理—第4部分:基于弱隐私的密钥建立机制 

C.1.7 随机数生成器 

a. GM/T 0005 《随机性检测规范》 

C.1.8 操作系统 

a. GB/T 20272 信息安全技术 操作系统安全技术要求 

附录D 

认可的密钥建立方法 

D.1 目的 

该附录提供了遵循本标准并经国家密码主管部门认可的密钥建立方法的清单,但并不排斥使用经权威认可的密钥管理方法。 

D.1.1密钥建立方法 

a. GM/T 0003.3-2012 《SM2椭圆曲线公钥密码算法》第三部分:密钥交换协议 
b. ISO/IEC 11770-2,信息技术—安全技术—密钥管理—第2部分:使用对称技术的机制 
c. ISO/IEC 11770-3,信息技术—安全技术—密钥管理—第3部分:使用非对称技术的机制 

附录E 

推荐的软件开发习惯 

E.1 目的 

本附录给出了软件开发最佳实践,但其并不包含遵循这一标准的密码模块的安全需求。 

E.2 背景 

软件开发应遵循软件工程生命周期各阶段的开发建议(涉及软件的规格说明、架构、验证、测试、维护及相关文档)。软件工程习惯可能包括有明确作业程序的单元测试、代码走查、清晰的高低级别设计文档、清晰的需求和功能说明、结构图、数据流图、功能点分析、缺陷及解决方案跟踪、配置管理和具有明确作业程序的软件开发过程。 
对所有的软件开发来说,不论是大型的还是小型的,下面的编程技术与目前的编程习惯是相符的,应采用以下编程技术对密码模块软件组成部分进行分析,降低编程出错的几率。 

E.3 模块化设计 

推荐使用模块化设计,尤其适用于中型到大型软件的开发。每一个软件模块都应具有清晰定义的和易于理解的逻辑接口。 
软件组成部分应通过数据抽象原则来构造。如果可行,应使用一种支持构造抽象数据类型的、面向对象的高级语言。 
该软件应按照一系列的层次分级构建。 

E.4 软件模块/程序接口 

应通过外部调用已经明确定义的接口,进入一个软件模块或程序。 
每一个程序应仅具有一个进入点和最多两个退出点,一个用于正常退出和一个用于错误退出。 
通过使用变量列表和/或确切的返回值,数据将在软件模块间和软件程序间进行通信。除了执行抽象数据类型必须的地方,则在程序间不能使用全局变量。通过声明语句对输入值与输出值进行误差范围的检查(如果所使用的程序设计语言提供了该方法)。 
当CSPs作为输入值时,应通过它的存储地址与调用函数进行通信,不允许敏感信息的复制。 

E.5 内部架构 

每一个程序应仅能执行单一的、被明确定义的功能。 
通过使用有序、有组织的条件程序结构(例如:if-then-else 或case),以及有组织的循环结构(例如:while-do 或repeat-until),来定义单线程过程中的控制流。 
如果使用了并发执行的方式(例如:通过多线程、多任务或多进程),那么软件组成部分应限制并发执行的最大许可数目,并且应使用结构化的同步架构来控制对共享数据的访问。 
不能使用等价变量来支持基于不同目的的存储器冲突重用。 
应执行强大的命令解析和数值范围检查机制来预防不合理的请求、超出范围的参数和I/O缓存溢出。 
如果程序需要使用一个中间变量(如分配存储空间)来计算一个CSP,那么该软件组分应确保使用完该中间变量后对其清零。 

E.6 关联文件 

每一个软件模块、程序和主要的设计架构都应被记载,来详细说明其执行的功能,并(正式或非正式地)说明前提条件和结果。 
每一次循环将会预置一个可靠的条件(作为一种注释)以保证其能够终止。 
在同一流程中,变量名只能唯一的在上下文环境中使用。 
每一个变量将会有一个相关的注释,注明该变量的用途和说明其允许值的范围,其范围是不受限制的情况也包括在内。 
如果使用了并发执行的方式,该文件应详细说明程序是如何实现其对并发执行的最大允许数目的限制,以及为了避免(可能未被探测到的)运行时错误,对共享数据的访问是如何达到同步地。 

E.7 汇编语言 

当以汇编语言实现时,应使用以下附加的设计习惯: 
除非是出于适当的安全性考虑、效率考虑,或是硬件的强制性关联要求,所有的代码都会被独立安置。 
所有的寄存器索引应使用寄存器符号名称。 
不应使用自修改代码 
所有的程序应为保存和恢复程序使用的任意寄存器内容负责。 
控制转换指令不应使用数字表示。 
每一个单元应包含用以描述该单元中使用的寄存器的说明。 

附录F 

缓解其它攻击的举例 

能量分析:基于功耗分析的攻击可以大体分为两类,简单能量分析(SPA)和差分能量分析(DPA)。SPA需要直接(首先靠视觉)分析密码模块在执行密码进程中各指令的电能消耗模式和时机。通过监视密码模块能量消耗的变化,可以发现执行的密码算法的特点和实现方法,从而获取密钥值。DPA具有相同的目的,但是,为了分析密码模块能量消耗的变化,使用了先进的统计方法和/或纠错技术。使用外部电源(直流)的密码模块遭受能量分析攻击的风险最大。有几个可以降低这种攻击的风险的方法,包括使用电容器件来平滑能量消耗,使用内部电源,或在密码进程期间,通过控制密码算法或进程中的各指令运行来平滑能量消耗的比率。 

计时分析:计时分析攻击依赖于精确地测量密码模块执行与密码算法或过程有关的特殊数学操作时所需要的时间。对收集的时钟信息进行分析可以确定模块的输入和算法或过程所使用的密钥之间的关系。通过对此关系的分析,可以确定计时度量,揭露密钥和关键安全参数CSPs。计时分析攻击假定攻击者具有有关密码模块的设计知识。通过控制算法或进程中各指令的运行,可以降低过程中的时间波动,这是降低这种计时攻击风险的一种方法。 

错误诱导:错误诱导攻击使用外部力量,如对微波、极端温度和电压的控制,引发密码模块内部运行错误。对这些错误及其模式的分析可能用于密码模块的逆向工程尝试中,揭示密码算法的特性、实现、以及随后的密钥值。物理安全不足的密码模块承担着最大的风险。选择适当的物理安全特性可以降低这种攻击的风险。 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment