薛刚汝
摘要:伴随着云计算、大数据等新技术应用的飞速发展,信息安全问题也愈发凸显。密码学算法是应对信息安全问题的核心技术和基础支撑。针对我国的商用密码算法,实现了一套基于CPU的硬件加速指令(GMI)。文章围绕着GMI的特点、应用加以阐述,希望能够开发一套灵活高效的密码应用解决方案。
关键词:信息安全;国密算法;硬件加速;GMI
中图分类号:TP309 文献标识码:A
1 引言
随着互联网、物联网的快速发展,网络和信息安全事件频频发生,因此信息安全越来越受到世界各国以及各个行业的广泛重视。特别是在云计算、大数据等新技术应用快速崛起的时代,通过数据挖掘技术往往可以从海量数据中获取关键信息,这对企业和个人的信息安全都产生了严重威胁。
密码学算法是信息安全的核心技术和基础支撑,可以说是整个信息安全的灵魂所在。在密码学领域,国家也在积极发展独立自主的密码体系,其中应用范围最为广泛的国产商用密码(简称国密算法)就是我国密码体系中的重要一环。
经过多年的发展,现在支持国密算法的设备,从小到TPM/TCM的密码芯片,到兼顾成本与性能的加密卡,再到专用的加密服务器,可谓种类繁多。但是,这些设备依然存在着性能欠缺、使用不够灵活或者成本较高等不足。
为了探索国密算法应用的新途径,创新应用的新模式,上海兆芯集成电路有限公司(简称兆芯)实现了基于CPU的安全、灵活、高效的国密算法加速指令—GMI(Guo Mi Instruction)。本文旨在介绍兆芯GMI指令的模式、特點,并探讨一些基于GMI的可能应用场景。
2 GMI 和相关概念
国密算法是指由国家密码管理局颁布的一系列密码学算法标准,包括SM1、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法(ZUC)等一系列的密码算法。其中,SM1、SM4、SM7以及ZUC属于对称加密算法,SM2、 SM9属于非对称密码算法,而SM3是密码杂凑算法,即常见的哈希算法。
目前,支持国密算法的TPM/TCM等芯片类设备,往往受限于成本而性能较低;性能较高的加密卡需要高性能的计算机来配合,给用户带来了不小的成本压力。与此同时,经过几代产品的发展,兆芯CPU的性能有了大幅的提升。为提高密码学相关应用的性能,充分利用CPU的计算能力,兆芯提出了使用CPU指令来实现国密算法的构想,由此设计实现了GMI。
GMI是依据已经公开的国密算法标准而自主设计实现的一组硬件加速指令集。目前,已经实现了两条CPU指令,分别用于加速国密算法SM3和SM4。其中,SM3常用于计算消息摘要、验签数字签名、生成与验证消息认证码以及产生随机数,可满足多种密码应用的安全需求。SM4是分组密码算法,适用于对称加解密等密码应用场景。根据使用场景的不同,SM4又可以有很多的操作模式,GMI支持常见的ECB、CBC、CTR、OFB、CFB五种模式。
概括来说,得益于CPU的高性能,GMI可以为用户带来许多好处。GMI具有三项特性。
易用性。在传统的国密算法使用方式中,比较常见的就是通过软件编程的方式来实现相应的密码算法,通常这都需要进行大量、复杂的编程。以OpenSSL为例,SM3、SM4的代码量大概在200~300行左右,但是在将这些密码算法进行硬件指令化后,原本需要使用数百行复杂编码才可以实现的算法,现在只需要简单地调用一条硬件指令即可完成相应的操作。这明显地简化了操作的复杂度,为用户带来了极大的便利性。GMI SM3/4的具体指令代码如表1所示。
同时,对GMI指令进行了封装,提供了适合上层应用开发使用的API和库,便于需要开发上层应用的用户使用。
安全性。无论是在运行之前,还是在运行过程中, 软件最常遇到的攻击就是被非法篡改。使用软件编程实现的密码算法也同样会受到这类威胁。然而,硬件则不会存在被篡改的风险, 因此在将密码算法硬件固化后, 也就消除了密码算法被非法篡改的风险,留给攻击者的攻击面也相应减小。在密码算法实现硬件化后,不仅用于实现算法的代码量会变少,而且调用、使用密码算法的代码量也会随着减少,这就意味着在程序中引入Bug的几率也会随之大大降低。这些都大大增强了用户程序的健壮性。
高效性。将密码算法硬件化,省去了大量的软件调用等系统开销,可以使密码算法应用获得极大的性能提升。在将GMI集成到OpenSSL后,借助于OpenSSL的Speed 测试命令,测试了使用GMI和未使用GMI两种方式下的国密算法的性能(单线程),对比情况如图1和图2所示。
该测试分别对不同长度(16~8192字节)的数据块,进行了SM3摘要计算和SM4-ECB模式的加密计算。从测试结果的对比可以看出,使用了GMI硬件加速指令后, SM3和SM4的性能较之软件实现都有了巨大提升,特别是在处理大数据块时,提升尤其显著。
3 GMI应用
3.1 SM3的应用
实现了SM3的GMI可用于校验文件的完整性,确保使用的文件或软件是没有被攻击者篡改过的。现在比较常见的文件校验算法有奇偶校验和CRC校验,但是这两种校验都不具有较强的抗数据篡改的能力,对于超过一定位数的篡改就无力校验了。然而,由于哈希算法的特点,SM3则可以校验出任意长度的篡改,而且由于其产生的数据摘要长度要更长,因此更难以发生碰撞,也就更加安全。因此,用户只需要调用GMI的SM3指令计算所用到的文件/软件的摘要值,与文件自带的校验值进行比较,就可以检验出文件是否被篡改过,从而保证了所用文件/软件的完整性。
此外,由于在计算信息摘要时, 用户所关心的主要是消息的完整性,而不是机密性,因此在使用性能较低的安全芯片或者加密卡时,可以将计算摘要值的工作交给GMI的SM3指令来完成,以获取更高的系统性能。
3.2 SM4的应用
与其他对称加解密算法一样,SM4同样可以用在静态数据加密、传输数据加密以及应用层的数据加密。
3.2.1 静态数据加密
全磁盘加密是对静态数据加密的一个典型应用。顾名思义,全磁盘加密就是对磁盘上的所有数据都进行加密存储。在存储着个人隐私或商业机密等敏感信息的计算机设备丢失或者需要维修时,如果使用了全磁盘加密的保护,就可以避免信息泄露的风险。特别是对于企业用户来说,在设备更新时,如何处理旧硬盘上的敏感数据是一个令人棘手的问题。借助于全磁盘加密,只需要将全磁盘加密的加解密密钥销毁,即可达到销毁旧磁盘上敏感数据的目的。同时,借助于GMI的加速特性,可以让全磁盘加密具有更高的性能,大大改善了用户的使用体验。此外,在安全可靠的要求下,有些行业会对加解密算法有要求,比如要求使用SM4算法来加解密系统中的数据。在这种情况下,就可以使用GMI的SM4指令替代传统的纯软件实现,不仅能防止算法被篡改,还能提高运算速度,同时还可以满足政策法规的合规要求, 可谓一举三得。
3.2.2 传输数据加密
另一个对称加解密的常用领域是对传输中的数据加以保护。比如在使用HTTPS访问网站时,在完成最初的密钥交换后,客户与Web Server之间就使用对称加密算法来保护双方的数据传输。另外,在云计算领域,保存在云环境中的数据或涉及个人隐私,或涉及企业商业机密,用户对这些数据的机密性格外关心。在这种情况下,就需要在将数据加密后再通过网络传输到云中。这样,数据不仅可以确保云环境中数据的机密性,还可以确保数据在网络传输过程中的机密性。此时,如果能够在浏览器或者云的客户端支持GMI SM4硬件加速指令,可以满足用户对数据传输的安全性要求。
3.2.3 应用层数据加密
在应用层的数据加密中,数据库是一个典型的应用场景。众所周知,常见的数据库都支持一种称为透明数据加密(TDE)的安全特性。这种特性可以将数据库的内容整体加密。其中所用到的三个加密中有两个属于对称加密:服务主密钥(Service Master Key)和数据加密密鑰(Data Encryption Key)。这些都可以利用到GMI SM4的硬件加密指令。
3.3 结合密钥保护的GMI应用
在各种GMI的应用里,还有一个影响安全性的重要因素—密钥本身的安全性。在一些受管制的行业,比如银行、医疗健康以及电子商务都需要使用行业认可的密钥管理设备(比如HSM, Hardware Security Module)来保护用户的密码、密钥等敏感信息。
密钥是保证信息安全的基石,密钥本身的保密性也必须要受到保护,因此要确保密钥绝对不能以明文的形式出现在内存中。为了确保GMI所使用的密钥的安全,在CPU内部实现一段专用空间来存放这些密钥。这里设计了一些只有CPU才可以访问的私有MSR用于保存密钥,并设计了一种新的SM4的调用模式,使得SM4指令可以直接从指定的MSR中找到所需要的Key,而无需再从内存中取回。
尽管CPU内的存储空间有限,但是利用CPU的私钥(CPU Private Key,CPK),将一些临时不用的密钥使用CPK加密后保存在内存或NVRAM中,下次使用时再通过GMI Driver从内存/NVRAM中取回,既保证了密钥的安全性,又实现了密钥存储空间的扩展性。具体的流程分为几个步骤。
(1)在应用几个部署阶段
a) 用户在外部的密钥服务器上生成并存储一个对称加密密钥( Symmetric Wrapping Key,SWK),使用这个对称加密密钥加密用户的私钥(Private Key),生成一个WPK(Wrapped Private Key),该WPK跟应用 image存放在一起。
b) 使用密钥导入协议将SWK从外部的密钥服务器安全的部署到用户应用程序将要运行的主机,并使用主机CPU的私钥(CPK)加密保存在硬盘或者SPI Flash等NVRAM空间。这一步是为了确保操作环境的安全,可以利用兆芯的TCT可信计算技术,并配合内存保护技术DPR(DMA Protected Region,DPR)/PMR(Protected Memory Region,PMR)来对这一部署过程加以保护。
(2)在用户应用程序启动时,CPU会根据应用程序的ID从NVRAM空间找到对应的经CPK加密过的SWK—CPK(SWK),并加载到CPU的Key MSR中,在调用SM3指令验证其完整性后,再使用CPK将其解密,得到SWK,同样保存在Key MSR中。此时,应用程序会收到与该Key MSR对应的动态Handle。
(3)在应用程序运行时,应用程序会使用该Handle以及用户的WPK作为参数调用GMI Driver。通过这两个参数就可以得到对应的SWK,进而调用GMI的SM4指令就可以对WPK解密,从而得到用户的私钥以继续完成相关的操作。最后,在调用结束后CPU会自动清除相关的Key MSR,以清除用户私钥, 防止私钥泄露。
4 未来工作
未来还会继续丰富GMI的指令集,比如实现对SM2/SM9等国密算法的支持。同时,也会不断完善现有的GMI指令,比如完善SM4对GCM/XTS等模式的支持,使其具有更高的性能,适应更广泛的应用领域。另外,为了方便用户使用,将GMI逐步适配诸如OpenSSL的主流密码应用平台,积极推广国密算法的应用。
5 结束语
本文以信息安全中的关键技术——密码算法的硬件加速实现为主线,介绍了兆芯基于CPU的GMI国密算法硬件加速指令的模式、特点以及应用,并特别描述了一种结合密钥保护的GMI应用场景,希望能帮助用户开发出更加灵活高效的安全应用解决方案。最后,介绍了兆芯GMI的未来的工作,希望能够支持更多的国密算法指令和更丰富的运算模式,为用户提供更高性能、更高安全性的产品。
参考文献
[1] Hari Tadepalli. Intel QuickAssist Technology with Intel Key Protection Technology in Intel Server Platforms Based on Intel Xeon Processor Scalable Family[EB/OL]. https://www.intel.com/content/www/us/en/architecture-and-technology/key-protection-technology-white-paper.html. 2017.
[2] 邓宇珊.探究云计算之完全问题[J].网络空间安全, 2018(9):78~81.
[3] 徐树民,等.国产算法安全芯片与市场应用[J].信息安全与通信保密,2012(2):36~38.
[4] 李芳芳.国产密码行业应用的初步研究和探索[J].金融科技时,2016(9):28~33.
[5] 蔡成杭.支持国产密码算法的OpenSSL设计实现及应用[J].信息安全研究,2018(2):115~132.
[6] 王良田.数据存储及码流数据传输中的国密算法安全应用[J].电子世界,2019(1):161~163