密码又是网络安全的核心技术,是网络信任的基石。利用密码在安全认证、加密保护、信任传递等方面的重要作用,能够有效消除或控制潜在的“安全危机”,实现被动防御向积极防御的战略转变。
目前,有很多单位和个人对本社反映对密码中的密码模块部分的相关信息了解渠道较少,有鉴于此,本社结合多位专家的观点,重点介绍密码模块的涵义、与密码产品的关系、安全等级划分、应用选型建议、与安全测评等有关情况,以飨读者。
密码模块是指一系列包含于密码边界之中的硬件、软件、固件或其组合的集合,至少使用一个经国家密码管理局认可的密码算法、协议,实现一项或多项已定义的密码服务 ( 如加 /解密、数字签名 / 验证、密钥管理等 )。
密码边界是实现密码模块安全防护能力的硬件、软件、固件或其组合形成的相对明确的逻辑区域。密码边界应当至少包含密码模块内所有安全相关的算法、安全功能相关的部件。2014 年、2015 年国家密码管理局分别发布了 GM/T0028 -2014《密码模块安全技术要求》和 GM/T0039-2015《密码模块安全检测要求》,两个标准是从业单位在广泛消化吸收国内外相关技术标准的基础上,结合国内在密码安全技术上的研究探索、技术创新和应用实践编制的,适用于除安全芯片和密码系统外的密码产品类型,如智能 IC 卡、智能密码钥匙、密码机、密码卡、VPN网关、支付终端等,是今后密码行业产品安全性要求、测评和应用的指导性文件。密码产品是密码技术的实现载体,直接为各种应用提供机密性、完整性、不可抵赖性保护,在网络和信息安全风险不断增强的情况下,密码产品自身安全防护能力的强弱也成为产品选型的重要参考。
密码模块是针对密码产品自身安全防护能力进行度量而引入的一种描述。目前,国家密码管理局已开始将密码产品达到安全等级列入商用密码产品型号审批的重要因素。新的《商用密码产品型号证书》中不仅包含商用密码产品遵循的技术标准,也包括了防护能力达到的安全级别。按照密码边界划分方式不同,密码模块可分为硬件密码模块、软件密码模块、固件密码模块、混合密码模块。
硬件密码模块的密码边界为硬件边线,包括部件之间提供互联的物理配线的物理结构,如电路板、基板或其它表面贴装;有效电器元件,如半集成、定制集成或通用集成的电路、处理器、内存、电源、转换器等;封套、灌封或封装材料、连接器和接口之类的物理结构;可以包含操作系统。软件密码模块的密码边界为执行在可修改运行环境中的纯软件部件和数据组件,包括构成密码模块的可执行文件或文件集;保存在内存中并由一个或多个处理器执行的密码模块的实例 ; 可执行文件运行实例依赖的数据或文件集合。不包括其运行环境所包含的计算平台和操作系统,如移动终端密码模块(可修改运行环境指能够对系统功能进行增加、删除和修改等操作的可配置运行环境,如 Windows/Linux/ MacOS/Android/iOS 等通用操作系统)。固件密码模块的密码边界为执行在受限的或不可修改的运行环境中的纯固件部件,包括可执行文件或文件集;保存在内存中并由一个或多个处理器执行的可执行文件,不包括运行环境所包含的计算平台和操作系统 , 如 JavaCard中的 Java 虚拟机(受限运行环境指允许受控更改的软件或者固件模块、基于可信执行环境技术的 TEE 操作系统等,不可修改运行环境指不可编程的固件模块或者硬件模块)。混合密码模块的密码边界为软件 / 固件和不相交的硬件部件(即软件 / 固件不在硬件模块边界中)及相关端口和接口集合,不包括运行环境所包含的计算平台和操作系统。特别需要指出,密码模块的密码边界是相对的,一个密码模块产品有可能包含另一个或几个规模更小的密码模块。如一个实现复杂密码服务功能的加密机,其本身可定义为一个密码模块,而该密码机内部可能包含了一个或多个密码卡,而密码卡本身也可以作为独立的密码模块来定义。对于宏观上的同一款产品,由于划定的边界不同,则其模块类型也会有所不同,如采用 Native 技术的智能密码钥匙产品,在外壳边界之内的硬件和固件部分可以定义为一个硬件模块;而如果将智能密码钥匙依赖的上位机中间件(如密码接口、CSP/PKCS#11 接口等)包含在边界之内,则可以将其定义为一个混合密码模块。《安全技术要求》指定了密码模块应该满足的安全需求,涵盖了密码模块安全设计和实现的 11 个领域,包括:
密码模块的规格说明;密码模块端口和接口;角色、服务和认证;软件 / 固件安全;运行环境;物理安全;非入侵安全;敏感安全参数管理;自测试;生命周期保障和其它攻击的缓解。按防护能力从弱到强定义了四个级别,每个领域在特定的安全级别上分别开展评估,综合后形成密码模块达到的安全等级。- 安全一级。基础级,阐明了密码模块的基本安全要求。在安全一级密码模块设计时,“软件 / 固件安全”、“非入侵安全”和“自测试”等 3 个安全域需要着重考虑,其他域的安全要求相对容易满足。安全一级密码模块不要求具有物理安全防护能力,可用于保护价值较低的数据。
因此,安全一级密码模块的使用场景是已经配置了物理安全、网络安全以及管理过程等控制措施的运行环境。- 安全二级。在安全一级的基础上增加了拆卸证据、基于角色鉴别的功能。硬件密码模块的拆卸证据可使用拆卸存迹的涂层或封条,或者在封盖或门上加防撬锁等手段以提供拆卸证据。角色鉴别要求密码模块鉴别并验证操作员的角色,以确定其是否有权执行对应的服务。
软件密码模块能够达到的最大整体安全等级为安全二级。安全二级密码模块可以抵抗使用简单工具的主动攻击,但其安全应当由操作员负责。在无保护运行环境下,安全二级密码模块只能用于保护价值一般的数据。尤其应当注意,为保证数据信息安全,必要时应对安全二级软件密码模块的运行环境设置有效安全防护措施。- 安全三级。在安全二级的基础上,增强了物理安全、身份鉴别、环境保护、非入侵式攻击缓解、敏感参数管理等安全机制。
安全三级密码模块能够检测并防护直接访问和探测的物理攻击,能有效保护明文关键安全参数或密钥分量的输入和输出,当密码模块的封盖 / 门被打开时,可以提供主动防护的功能;执行服务时会验证操作员的身份和权限;能够有效防止电压、温度等环境异常对模块安全性的破坏;安全三级密码模块可以抵抗使用简单工具的中等强度攻击,在无保护运行环境下,安全三级密码模块可用于保护价值较高的数据。- 安全四级。安全四级是标准中的最高安全等级。该等级包括安全一级、安全二级、安全三级中所有的安全特性,并增加了一些扩展特性。
安全四级的密码模块提供完整的封套保护,无论外部电源是否供电,都能够检测并响应所有非授权的物理访问,从任何方向穿透密码模块的外壳都会以很高的概率被检测到,并立刻置零所有未受保护的敏感安全参数;支持多因素身份鉴别,至少包括“已知某物、拥有某物、物理属性”中的两个;还要实现规定的非入侵式攻击的缓解方法。安全四级密码模块可以抵抗使用特制工具的高强度长时间攻击。在无保护运行环境下,安全四级密码模块可用于保护价值高的数据。一方面,应考虑运行环境提供的防护能力。密码模块及其运行环境共同构成了密码安全防护系统。
在低安全防护能力的运行环境中选用高安全等级的密码模块,也可能达到较高的安全防护效果;在高安全防护能力的运行环境中,也可选用较低安全等级的密码模块。另一方面,还要考虑所保护信息资产的重要程度。信息资产包括数据、系统提供的服务以及相关的各类资源,其重要程度与所在的行业、业务场景以及影响范围有很大关系。信息资产重要程度的界定由用户机构或其主管机构负责,可参考标准 GB/T 22240-2008《信息安全技术 信息系统安全保护等级定级指南》和 GB/T 20984-2007《信息安全技术 信息安全风险评估规范》。重要信息系统中密码模块的选用还要符合其业务主管部门的相关要求。另外,不同系统的重要程度不同,同一系统中的不同功能模块的重要程度也不尽相同。以电子银行系统为例,后台系统与银行账户资金直接相关,用户终端仅影响单一账户资金安全,性质不同。同一个密码模块在不同的场景中,随着配套环境的安全防护能力、访问控制等方面的差异,能够保护的信息资产重要程度也有所区别。经专家研讨,应综合考虑密码模块的运行环境自身的安全防护能力、被保护系统和被保护资产的价值等各方面因素,选择合适安全等级的密码模块。用于基础信息网络、重要信息系统、重要工业控制系统和面向社会服务的政务信息系统的软件类密码产品,应达到安全二级或以上的安全要求。建议用户尽量选用采取硬件保护密钥机制的密码产品。确需选用软件的,要提醒用户注意防范风险,定期进行风险评估。由于密码技术对维护信息安全的基础性价值,密码模块一直以来都是安全测评的重要对象。在我国现有与密码模块安全测评有关的技术标准中,GB/T 18336和GM/T 0028的接受度最高,已被用于大量密码模块安全测评实践。
GB/T 18336标准是对国际通用评估准则(即CC)标准的等同翻译,目前我国在用的最新版本于2015年发布。为了简化描述,下面仍称之为CC标准。CC标准的目的是为信息技术产品的安全测评提供通用的测评模型和方法,当需要测评具体的产品时,可以通过细化操作,制定更明确的测评路线来实施安全测评。CC官方网站发布的认证产品列表中包含了数千款与密码模块相关的产品,包括常见的网络基础设备,芯片及嵌入式软件产品等,涉及访问控制、消息认证、密钥协商以及数据加密等密码相关功能。因此,尽管CC标准明确将密码算法的理论安全性分析排除于标准范围之外,但仍适用于密码实现方面的安全测评。使用CC标准开展安全测评的要点是解决好安全要求的刻画及测评方法这两个问题,下面简要地论述这方面的内容。刻画安全要求:从安全测评的角度来说,安全要求决定着测评范围和测评方法。为了导出密码模块的安全要求,包括功能要求及保障要求(这决定了测评的深度和严格程度),需要对密码模块的预期应用场景,可能面临的安全威胁以及环境方面的假设进行严格分析,并对威胁和要求之间的对应性进行论证。从2节的角度来说,这个过程就是找出所有可能的攻击,以及理论分析模型和实际情况下的攻击者能力差异,并确定密码模块需要具备哪些防护措施。通常这些内容需要开发者、评估者和用户一起合作来定义,在CC中称之为保护轮廓(Protection Profile,PP)。在安全要求的规范化描述方面,CC标准预定义了一些与密码相关的安全功能组件(如FCS、FIA、FPT、FTP等类中的组件),若这些组件不足以描述一些独特的安全功能要求,还可以通过组件扩展的方法来解决问题。进一步,当开发者提交一个明确的密码模块进行测评时,需要根据产品的实际特点对PP进一步细化和完善,按2节中的论述方法明确各项防护措施,并确立期望的评估保障级别。这些内容通常在安全目标(Security Target,ST)文档以及更细化的设计和实现文档中描述。以此为基础,评估者才具备开展实际测评的条件。测评方法:在CC测评框架下,理解攻击路径始终贯穿整个测评过程,因此CC采取了一种称为“攻击导向的”测评方法(Attack-based approach)来规范产品测评过程。根据这种方法,开发者需要按上面的办法明确安全要求和防护措施,并进行安全性的自证工作。在此基础上,评估者需要分析这些防护措施理论上是否足以抵抗所有威胁,确定防护措施的充分性;进一步,评估者自己设计测试用例:- 一方面测试各项功能的实现与安全要求的符合性,以检验密码模块各项防护措施的正确性;
- 另一方面,根据评估者对测试对象的理解,以及对最新攻击方法的把握,在仿真的运行环境中实施穿透性测试,评估各条攻击路径的可行性和复杂性。
若防护措施的充分性和正确性都达到了ST中描述的安全保障级别的要求,则可以认为密码模块在配置正确的情况下,在预期使用环境中能提供足够的安全性。具体的测试方法可以参考ISO/IEC 18045(即CC测试方法,CEM)标准。