随着商用密码技术在我国的应用和推广,国产密码算法软件引擎(又称密码算法软件模块、密码算法软件实现、软件密码产品等)已成为不可或缺的密码产品形态。 与硬件形式的密码产品相比,密码算法软件引擎具有更好的适用性、灵活性、成本更低; 然而,密码算法软件引擎也面临着更大的技术挑战。
本文分析了国产密码算法软件引擎面临的主要安全挑战:随机数生成器和密钥安全。 与美国NIST的随机数发生器标准体系相比,我国相关标准尚不完善,仍需要大量工作。 密码软件引擎运行在不完全可信的通用计算机软硬件环境上,关键数据面临各种攻击(包括系统软件攻击和物理攻击等)。
在各种计算机系统上,各种漏洞和攻击相继出现。 设计关键安全方案和保护关键数据也很困难。 由于随机数发生器的标准体系尚未建立,关键数据的安全技术挑战尚未完全解决,国产密码算法软件引擎的安全测试也存在明显困难。 在密码算法软件引擎的检测过程中,需要对软硬件运行环境进行合理的假设,然后检测密码算法软件引擎能否在此前提下生成不可预测的随机数并有效保护关键数据。假设。
1
国产商用加密技术的应用与推广
密码技术是网络空间安全的重要基础,在计算机和网络系统中发挥着不可替代的安全作用。 推广国产加密技术、应用商用加密算法,是建设我国网络空间安全基础设施的必要措施之一。 全面推广国产加密技术,深入应用商用加密算法,需要完成以下三个方面的工作:
(1)密码算法标准化。 目前,我国已制定并公开发布了完整的密码算法体系:分组密码算法SM4、流密码算法ZUC、哈希算法SM3、公钥密码算法SM2(包括加解密、数字签名和密钥协商)和身份密码算法 SM9 。 而且,其中一些密码算法已经成为国际标准。
(二)制定配套的密码应用标准。 在数字证书、通信协议、应用接口等方面形成支撑标准,实现商用密码应用的标准体系。
(3)形成多元化的加密产品生态系统。 多种形式的硬件、固件、软件密码产品满足应用系统的不同需求; 特别是软件密码产品在技术上更加灵活,更容易实施和部署,并且更具成本效益。
我国在商用密码算法和密码应用标准方面已经发展多年。 但在密码产品多元化方面,一方面,由于历史原因,我国商用密码长期以来只支持合规的硬件产品。 近年来,已经开放了合格的软件密码产品,但软件密码产品的发展仍然薄弱; 另一方面,由于软件密码产品面临较大的技术挑战,尤其是密钥安全,因此在软件密码产品(又称软件密码引擎、密码算法软件模块)方面,还存在较多需要攻克的技术难点。
2
国产密码算法软件引擎的安全挑战
从密码学的基本原理出发,密码算法是公开的。 密码产品中最需要保护的重要数据是密钥和各种敏感参数。 根据GM/T 0028《加密动物模块安全技术要求》和GM/T 0039《加密动物模块安全测试要求》,密码模块尤其需要保证关键安全参数和敏感参数的安全,其中最重要的是钥匙。 密码算法的密钥和各种敏感参数(例如IV和Nonce等)通常是通过随机数生成获得的; 另一方面,确定性随机数生成器通常是带有密钥的密码功能模块; 两者是相互关联、不可分割的。
与常见的硬件形式的密码算法实现(例如密码机、密码卡、USB令牌等)相比,密码软件引擎面临着更大的安全挑战。 首先,密码算法软件引擎通常运行在传统计算机系统或移动智能终端上。 此类设备没有专用的随机数发生器芯片。 加密算法软件引擎必须实现自己的随机数生成器。 其次,由于密码软件引擎与其他功能软件共享操作系统等软硬件运行环境,由于各种应用功能的需求不断变化,操作系统必然会出现复杂的功能和众多的运行环境接口,可能会引入更多的计算机。 软件漏洞和攻击威胁。 因此,密码软件引擎在灵活、低成本、易于实现的同时,也成为安全挑战最大的密码实现方式。
2.1 随机数生成器的挑战
随机数生成器是各种密码计算参数的来源,包括密钥、初始化向量、随机填充值等,并且应该具有足够的随机性(即信息熵)以确保攻击者不可预测。 在计算机系统中,关于如何利用外部环境中的不确定因素(即熵源)构造不可预测的高速随机数生成器,已经有很多相关研究。 美国NIST在这方面也形成了比较完善的体系。 技术标准体系。 下面一一介绍。
Linux 内核还附带了随机数生成器的软件实现,并用于许多加密软件引擎。 但必须注意的是,即使在美国NIST多年制定的一系列随机数生成器标准中,安全问题仍然时不时被披露; 与此同时,即使是广泛使用的、开源代码实现的随机数生成器软件,仍然不时暴露出安全问题。 出现安全漏洞。
2.1.1 美国NIST随机数发生器标准体系
随机数生成器大致可以分为NRBG(非确定性随机位生成器,也称为真随机位生成器)和DRBG(确定性随机位生成器)。 生成器,又称Pseudorandom Bit Generator(伪随机数生成器)。 目前,美国NIST制定的与随机数生成器相关的FIPS标准主要包括以下几个:
(1) SP 800-22 用于密码应用程序的随机和伪随机数生成器的统计测试套件,随机数生成器的统计测试。
(2)SP 800-90A推荐使用确定性随机位生成器生成随机数,基于外部输入熵源,使用对称密码学或哈希等算法计算确定性随机数。
(3) SP 800-90B 用于随机比特生成的熵源的建议,随机数生成器的熵源分析。
(4) SP 800-90C关于随机位生成器(RBG)结构的建议、随机数生成器的系统结构、NRBG、DRBG、熵源和在线检测组件的组成。
(5) 0SP 800-108Recommendation for KeyDerivationUsingPseudorandomFunctions,使用伪随机数函数实现密钥推导。
上述标准之间的关系如图1所示。
图1 美国NIST密码随机数生成器标准体系
首先,SP 800-90A描述了各种确定性随机数生成器的算法。 基本原理是:生成器维护密钥和内部状态,间歇性地获取外部输入的熵源,并计算输出随机数。 SP 800-90B是DRBG随机数发生器的熵分析,用于评估和分析外部输入源的熵。 SP 800-90C是随机数发生器的系统结构。 它提供了NRBG、DRBG、熵源和在线检测组件的多种组合方法,形成可供实际使用的随机数生成器。 其次,可以利用SP 800-22标准给出的多种统计检测方法对随机数生成器(主要是NRBG)输出的随机数序列进行测试,以确定其随机性的好坏。 最后,SP 800-108 提出了使用伪随机数函数实现密钥导出的各种方法。
2.1.2 随机数生成器标准及其使用中的问题
下面结合现实软件随机数生成器的安全漏洞,对随机数生成器标准及其使用问题进行分析和讨论。 根据斯诺登报告和大量相关研究,在2006版SP 800-90A标准中包含的Dual EC算法中软件加密算法,美国NSA植入了一个后门,可以利用该后门来预测随机数生成器的输出算法[5-8]; SP 800 - 2014 版 90A 标准已删除 Dual EC 算法。 根据中科院DCS中心的研究成果,SP 800-22标准随机数统计检测方法和SP 800-90C标准熵分析方法也存在缺陷,影响统计检测的准确性和熵分析结果的准确性。
随机数生成器标准无法完全解决现实世界的密码算法软件引擎中的随机数问题。 例如,2012年国际研究结果表明,互联网上大量网络设备具有相同的RSA密钥对,或者使用相同的素因数,导致RSA密钥可分解。 上述问题部分是由于大量网络设备使用制造商预设的相同默认密钥,部分是由于随机数生成器问题:虽然这些设备使用了高强度的随机数生成器,但由于这种特殊性使得不同设备的随机数生成器在初始状态一致的情况下很容易输出随机数并用它们来生成密钥,因此它们将具有相同的RSA素因子。 在智能IC上也发现了类似的问题。
2.1.3 我国商用密码随机数发生器标准
与美国NIST制定的随机数发生器标准体系相比,我国商用密码随机数发生器的标准还存在不足。 国家隐动物管理局发布了GM/T 0062《隐动物产品随机数检测要求》标准。 该标准大致相当于 NIST SP 800-22 标准。 不过,我国尚未发布与随机数发生器相关的其他标准。
总体而言,与NIST SP-800系列随机数发生器标准相比,我国尚未形成系统的、定位类似的随机数发生器系列标准。 考虑到密码技术的特殊性,我国没有必要抄袭或模仿NIST SP-800随机数发生器系列标准,但有必要制定定位相似、发挥相同作用的商用密码系列标准。 特别是随着密码算法软件引擎需求的不断增长,我国急需随机数生成器标准,以更好地指导密码算法软件引擎随机数生成器的设计。
2.2 密钥安全挑战
密码算法软件引擎运行在通用计算机平台上。 与硬件实现相比,不仅存在侧通道攻击的威胁,对计算机系统的各种攻击也会直接威胁关键数据的安全。
2.2.1 密钥面临的各种攻击和安全威胁
在密码算法执行过程中,攻击者可以通过各种方法窃取关键数据。 首先,旁路攻击长期以来一直是密码学研究的一个重要方向。 在密码计算过程中,当密钥位具有不同的值时,密码计算的执行会略有不同,这会影响攻击者可以观察到的外部状态(例如,功率、电磁辐射、计算时间、声音、缓存状态等)。 无论密码算法是用软件还是硬件实现,都存在侧信道攻击的威胁。
其次,由于密钥在计算机系统内存空间中也作为数据变量出现,现有计算机系统中各种敏感数据面临的攻击和安全问题也会对密钥造成威胁。 此类安全威胁大致可分为:物理攻击、软件攻击和CPU硬件漏洞攻击。 物理攻击是指攻击者与被攻击系统进行物理接触,然后利用物理接触条件未经授权读取敏感数据。 最典型的物理攻击是冷启动攻击和DMA攻击。 冷启动攻击利用了存储芯片数据消失的延迟。 断电后,存储芯片的数据仍然保持一段时间,并且在低温下可以保持更长的时间,甚至几个小时。 攻击者可以直接移除计算机系统的存储芯片,并将其放置在攻击者控制的恶意计算机上,并读取其中的敏感数据; 或者在受害者计算机上插入恶意启动介质,并在启动后立即读取原始内存数据。 。 当攻击者插入恶意外设,发起DMA请求,绕过操作系统的访问控制,直接访问内存时,就会发生DMA攻击。
其次,各种计算机系统中的软件内存漏洞也会导致攻击者未经授权读取密钥。 例如,操作系统软件漏洞可以导致恶意进程绕过操作系统的内存隔离机制,读取其他进程甚至内核空间的内存数据。 软件系统的正常功能也可能造成内存数据泄露。 例如,Core dump或Crash报告可能会导致内存中的敏感数据扩散。 此外,近年来还披露了多个CPU硬件漏洞(包括Meltdown、Spectre、Foreshadow/L1TF和ZombieLoad等)。 这些漏洞可能允许攻击者读取敏感数据,例如内存中的密钥。
最后,加密算法软件引擎还可能在其实现中引入安全漏洞,导致密钥泄漏。 例如,著名的OpenSSL Heartbleed就是由于软件引擎在处理TLS心跳请求消息时存在缺陷而引起的。 当收到格式错误的请求消息时,内存空间中的 64K 字节随机地址将被发送给攻击者。
2.2.2 现有关键安全技术进展
在通用计算机平台上,如何保护密钥并提供安全有效的密码计算一直是学术界和工业界关注的重要技术问题。 首先,Windows操作系统的CSP(加密服务提供商)和CNG(下一代加密)都支持在内核空间中进行加密操作,关键数据出现在内核内存空间中; 同样,v2.5.45之后的Linux操作系统,也有一个名为Crypto API的内核空间密码计算服务。 由于关键数据出现在内核空间,普通用户空间攻击者必须提升权限,获得内核空间的读取权限,才能读取关键数据。
基于寄存器的密钥安全技术可以有效防止冷启动攻击。 2010年,TRESOR使用Intel完整的CPU AES-NI指令,完成寄存器实现的AES算法,有效抵御冷启动攻击。 后续的研究工作将其扩展到RSA算法。 Intel CPU计算机上寄存器中实现的RSA算法也可以抵抗冷启动攻击。
2014年,中国科学院DCS中心研究团队完成了第一个基于CPU缓存的密码算法软件实现[24-25]。 在Intel CPU上,使用cache工作模式配置,RSA私钥计算受限于CPU高速。 缓存内。 与基于寄存器的密码算法软件实现相比,缓存存储空间足够大,可以支持更多类型的密码算法软件加密算法,并且支持高级语言实现,无需汇编实现。
2015年,中科院DCS中心研究团队继续提出基于硬件事务内存的关键安全解决方案。 利用Intel TSX(Transactional Synchronization Extension)硬件事务内存功能,完成了密钥安全解决方案:只有在需要计算密码时才使用私钥。 ,解密进入硬件事务,开始密码计算; 在此期间,任何其他恶意线程或进程的读访问都会导致事务回滚、关键数据被清除。 而且,Intel TSX 功能在事务中间使用缓存存储未提交的数据,因此该解决方案还可以确保 RSA 私钥不会出现在存储芯片中,有效抵御冷启动攻击。
近年来,Intel推出了SGX(Software Guard eXtension)功能,在不受信任的操作系统和虚拟机监视器上创建执行环境。 该环境仅依赖CPU的安全特性并提供代码完整性和数据安全性。 保密性和动态执行远程证明的能力。 利用Intel SGX特性,还可以实现加密算法软件引擎,提高关键数据的安全性。 基于Intel SGX特性的软件系统的安全性完全依赖于Intel CPU。 即使操作系统和虚拟机监视器也无法获取有关用户软件系统代码或数据的任何信息。 从另一个角度来看,闭源CPU硬件设计和实现也会面临多年前对非开源操作系统同样的质疑和担忧。 而且,针对SGX执行环境的有效攻击方法不断被提出。
2.2.3 关键安全技术应用与实现
可以通过实施安全增强型加密算法来防御不同类型的侧信道攻击。 学术界长期以来一直在研究侧通道攻击防御,研究成果已逐渐开始应用于一些开源密码软件,但仍然值得扩大应用范围。 特别是对于密码算法的软件实现,近年来出现了多种基于共享缓存的侧通道攻击。 这种类型的攻击在原来的传统密码硬件实现中并不存在,因此同样的防御技术值得进一步研究。
各种密码算法软件引擎的关键安全解决方案的应用和实现都必须面临运行环境不可信的问题。
首先,作为一个软件程序,它必须在一定程度上依赖和信任操作系统、CPU等硬件。
其次,对操作系统、CPU等硬件的信任必须深入分析,不能简单概括为“绝对信任”和“不信任”; 具体来说,代码完整性、操作原子性、寄存器权限级别、寄存器接口访问唯一性等,不同的密钥安全方案对运行环境有不同的要求和假设。 运行环境只需满足相应的条件即可,并不是完全绝对的信任和依赖。
最后,应该更加辩证地考虑操作系统与CPU等硬件的关系。 基础软硬件构成密码算法软件引擎的运行环境; 同时,操作系统与各种基础硬件之间的关系也在运行过程中。 相互监督、相互制约,更有利于形成合理的生态。 如果运行环境的安全条件的信任仅基于特定的硬件或特定的软件模块,并且无法彻底分析或证明信任基础,那么采用分布式信任的技术思想更为合适。 安全基础应该建立在多个可以相互监视和限制的组件之上。
3
国产密码算法软件引擎的检测现状及问题
目前,国产密码算法软件的符合性测试是按照GM/T 0028《加密动物模块安全技术要求》和GM/T 0039《加密动物模块安全测试要求》进行的。 GM/T 0028和GM/T 0039作为指导性行业标准,并未对密码产品的随机数生成器和密钥安全设计提供详细的具体设计指导。 同时,我国随机数发生器和密钥安全的技术方案尚未形成行业标准或国家标准; 因此,在检测过程中,我们只能从密码学的技术原理出发,结合密码软件产品的能力。 根据实际情况,提出具体技术要求。
从整体技术思路来看,GM/T 0028《密码模块安全技术要求》和GM/T 0039《密码模块安全测试要求》参考了美国NIST FIPS 140标准和ISO/IEC 19790标准。 但我国仍有必要对随机数生成器方案和密钥安全方案提出并实施独特的安全要求。 随机数生成器和密钥安全作为密码算法软件实现中最重要的数据安全部分,应在运行环境提供适度安全保障的前提下,加强自身的安全设计,而不是完全依赖运行环境。
目前,我国商用密码算法软件模块对随机数生成器和密钥安全性仍有较高要求,需要外部密码硬件模块提供一定程度的支持和协作; 例如,外部输入真随机数作为熵源之一。 1、采用门限密码算法,配合外部密码硬件模块,保护密钥。 相比之下,美国FIPS 140密码模块评估要求软件密码模块允许完全由软件实现的随机数生成器和密钥安全解决方案,其安全性更依赖于运行环境。
国产商用密码软件引擎的检测需求与运行环境的安全假设密切相关。 如果假设通用计算机软硬件环境能够综合提供各种安全特性(例如内存安全、用户认证等),那么在其上运行的密码软件就可以降低安全要求; 如果运行环境不能完全提供必要的安全特性,密码算法软件模块必须加强自身的安全性。
在密码算法软件模块的检测中,需要综合考虑密码安全技术和随机数生成器技术的发展,分析各种计算机软硬件运行环境的安全状况,确定相应的安全要求细节和具体检测方法步骤。 。
4
结论
总而言之,笔者认为,国产密码算法软件引擎的开发需要在以下三个方面开展工作:
(一)制定随机数系列标准,形成标准体系。 通过技术标准,规范随机数生成器技术方案和密码算法软件引擎的安全实现。 同时,在标准的实施中,需要特别关注熵源的动态熵值和随机数生成器的有效变化。
(二)大力发展安全关键技术。 密码安全技术与计算机系统运行环境密切相关,很难形成标准化的技术方案; 针对不同的运行环境和相应的安全威胁,研究关键安全技术解决方案。
(三)落实国内有特色的密码算法软件引擎检测要求。 在软件密码引擎运行环境的安全得到有效保障之前,适当提高检测要求,适当降低运行环境的安全假设,将进一步有助于密码技术发挥其安全效果。 从密码软件引擎的角度来看,运行环境应该处于“完全可信”和“完全不可信”之间的中间状态:如果假设运行环境的软硬件完全不可信,那几乎是不可能的达到要求。 加密软件引擎; 如果不考虑实际情况,假设运行环境是完全可信的,那么密码软件引擎本身就缺乏必要的安全保护,这也会导致密码软件引擎受到攻击(例如密钥泄露等)。
加之,《中华人民共和国密码动物法》立法工作稳步推进,我国密码技术工作必将进入新的历史阶段。 为了更方便、有效地发挥密码技术在信息系统中的安全作用,国产密码算法软件引擎的研发势在必行。 我国应正视国产密码算法软件引擎的安全挑战,团结更多力量,探索具有中国特色的商用密码技术路线。
点击购买《2020-2021年中国商用密码行业发展报告》