一. 关于本文
国密即国家密码局认定的国产密码算法。主要有 SM1(类比AES)、SM2(类比RSA)、SM3(类比MD5)、SM4。密钥长度和分组长度均为 128 位。SM1 为对称加密,SM2 为非对称加密,SM3 消息摘要,SM4 分组密码算法。
二. 本文结构
文章依次介绍 SM1、SM2、SM3、SM4 算法原理和代码实战,让大家对国密算法有所理解之后,我们接着会介绍国密 SM1、SM2、SM3、SM4 算法的应用场景,完成应用场景的介绍,我们将会分析国密的现状,以及国密未来的发展方向。
三. SM1 算法原理和代码实战
1. SM1 简介
SM1 为对称加密,盖算法的算法实现原理没有公开,他的加密强度和 AES 相当,需要调用加密芯片的接口进行使用。SM1 高达 128 bit 的密钥长度以及算法本身的强度和不公开性保证了通信的安全性。
由于 SM1 加密算法的不公开,我们无法知晓其内部的原理,所以这儿也无法做代码实现。
2. SM1 应用场景
SM1由获得国密办资质认证的特定机构将算法封装在芯片中,并销售给指定的厂商。SM1算法己经被普遍应用于电子商务、政务及国计民生(例如国家政务、警务等机关领域)的各个领域。目前,市场上出现的系列芯片、智能 IC卡、加密卡、加密机等安全产品,均采用的是 SM1 算法。数据加密包括软件加密和硬件加密两种方式。软件加密指单纯依靠代码来实现对软件的保护,而不需要特定的硬件服务。软件加密最突出的优势体现在它的成本低廉,实现简单,并且具备良好的灵活性和可移植性。但是,软件实现的加密要求 CPU 的全程参与,可能会产生不必要的等待和中断,从而导致系统资源浪费,特别是用软件加密处理海量数据时,会存在硬盘读写瓶颈的风险。而硬件加密利用集成在 CPU 芯片上的加密芯片实现,加密过程独立于 CPU,且在芯片内完成,可有效的防止数据被篡改。 大多数银行使用的硬加密,底层算法也常常含有 SM1 。
加密卡,就是将 AES、DES、MDS 等加密和认证算法集成在芯片上,该芯片被制成托卡(即加密卡),所有数据加解密和认证涉及到的运算全部在该卡上完成,进而加速了加解密过程,提升了设备的整体性能。目前,加密卡一般分为两类,一种是实现通用加解密和验证算法的加密卡,另一种是实现国密算法(SM1)的加密卡。
四. SM2 算法原理和代码实战
国密 SM2 为非对称加密,也称为公钥密码;国密算法的本质是椭圆曲线加密。关于对称加密和非对称加密的内容请查阅笔者写的《深入理解对称加密和非对称加密》一文。SM2 椭圆曲线公钥密码 ( ECC ) 算法是我国公钥密码算法标准。SM2 算法的主要内容包括 3 部分: 数字签名算法; 密钥交换协议和公钥加密算法。
1. SM2 的形成过程
在所有的公钥密码中,使用得比较广泛的有ECC 和 RSA;而在相同安全强度下 ECC 比 RSA 的私钥位长及系统参数小得多,这意味着应用ECC所需的存储空间要小得多,传输所的带宽要求更低,硬件实现ECC所需逻辑电路的逻辑门数要较RSA少得多,功耗更低。这使得ECC比RSA更适合实现到资源严重受限制的设备中,如低功耗要求的移动通信设备、无线通信设备和智能卡等。
ECC 的优势使其成为了最具发展潜力和应用前景的公钥密码算法,至2000 年国际上已有多个国家和行业组织将 ECC 采纳为公钥密码算法标准。在此背景下,我国从 2001 年开始组织研究自主知识产权的 ECC,通过运用国际密码学界公认的公钥密码算法设计及安全性分析理论和方法,在吸收国内外已有 ECC 研究成果的基础上,于2004 研制完成了 SM2 算法.SM2算法于2010年12月首次公开发布,2012 年3 月成为中国 商用密码标准(标准号为 GM/T0003—2012),2016年8月成为中国国家密码标准 (标准号为 GB/T 32918-2016)。
2. SM2 小结
SM2 算法是我国在吸收国际先进成果基础上研发出来的具有自主知识产权的ECC 算法,它在安全性和实现效率方面相当于或略优于国 际上同类的 ECC 算法, 能取代 RSA 以满足各种应用对公钥密码算法安全性和实现效率的更高要求,具有广阔的推广和应用前景。
五. SM3 算法原理和代码实战
1. SM3 简介
SM3密码杂凑算法是中国国家密码管理局年公布的中国商用密码杂凑算法标准。该算法由王小云等人设计,消息分组比特,输出杂凑值比特,采用 Merkle Damgard 结构。密码杂凑算法的压缩函数与的压缩函数具有相似的结构,但是,密码杂凑算法的压缩函数的结构和消息拓展过程的设计都更加复杂,比如压缩函数的每一轮都使用个消息字,消息拓展过程的每一轮都使用个消息字等。
SM3 密码杂凑算法消息分组长度为512b, 摘要长度 256b。压缩函数状态 256 b,共 64 步操作。
2. SM3 小结
杂凑函数的设计和应用已经发展了几十余年。自第一个直接构造的杂凑函数诞生以来密码学界普遍认为,构造安全的杂凑函数就是构造抗碰撞的压缩函数。然而,随着王小云等人成功破解 MD5 ,等杂凑函数以后,基于传统 MD 结构设计的杂凑函数被证明是不安全的。因此,对杂凑函数的设计与分析又成为了密码学界的一大研究热点,特别是当前最新的杂凑算法的研宄,推动了研究杂凑函数的高潮。SM3 轮数的研究将会是高潮,减少轮数的 SM3 算法进行随机性分析 32 轮、33 轮、34 轮和 35 轮算法的飞来去器攻击方法。但是如何对更多轮数的算法的原根、碰撞和第二原根进行分析也是需要进一步研究的问题。
六. SM4 算法原理和代码实战
1. SM4 简介
SM4 是一种 Feistel 结构的分组密码算法,其分组长度和密钥长度均为128bit。加解密算法与密钥扩张算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,即解密算法使用的轮密钥是加密算法使用的轮密钥的逆序。
2. SM4 小结
SM4 密码算法是中国第一次由专业密码机构公布并设计的商用密码算法,到目前为止,尚未发现有任何攻击方法对SM4 算法的安全性产生威胁。
七、SM7对称密码
SM7算法,是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7适用于非接触式IC卡,应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通等)。
八、SM9标识密码算法
为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家、RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Cryptography)的理念。标识密码将用户的标识(如邮件地址、手机号码、QQ号码等)作为公钥,省略了交换数字证书和公钥过程,使得安全系统变得易于部署和管理,非常适合端对端离线安全通讯、云端数据加密、基于属性加密、基于策略加密的各种场合。2008年标识密码算法正式获得国家密码管理局颁发的商密算法型号:SM9(商密九号算法),为我国标识密码技术的应用奠定了坚实的基础。
SM9算法不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。如基于云技术的密码服务、电子邮件安全、智能终端保护、物联网安全、云存储安全等等。这些安全应用可采用手机号码或邮件地址作为公钥,实现数据加密、身份认证、通话加密、通道加密等安全应用,并具有使用方便,易于部署的特点,从而开启了普及密码算法的大门。