国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,在金融领域目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法,密钥长度和分组长度均为128位。
随着金融安全上升到国家安全高度,近年来国家有关机关和监管机构站在国家安全和长远战略的高度提出了推动国密算法应用实施、加强行业安全可控的要求。摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统的“安全可控”能力显得尤为必要和迫切。
国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1,SM2,SM3等,其中:
SM1 为对称加密,盖算法的算法实现原理没有公开,他的加密强度和 AES 相当,需要调用加密芯片的接口进行使用。SM1 高达 128 bit 的密钥长度以及算法本身的强度和不公开性保证了通信的安全性。由于 SM1 加密算法的不公开,我们无法知晓其内部的原理,所以这儿也无法做代码实现。
SM 1由获得国密办资质认证的特定机构将算法封装在芯片中,并销售给指定的厂商。
SM1 算法已经被普遍应用于电子商务、政务及国计民生(例如国家政务、警务等机关领域)的各个领域。目前,市场上出现的系列芯片、智能 IC卡、加密卡、加密机等安全产品,均采用的是 SM1 算法。数据加密包括软件加密和硬件加密两种方式。
软件加密指单纯依靠代码来实现对软件的保护,而不需要特定的硬件服务。软件加密最突出的优势体目前它的成本低廉,实现简单,并且具备良好的灵活性和可移植性。但是,软件实现的加密要求 CPU 的全程参与,可能会产生不必要的等待和中断,从而导致系统资源浪费,特别是用软件加密处理海量数据时,会存在硬盘读写瓶颈的风险。而硬件加密利用集成在 CPU 芯片上的加密芯片实现,加密过程独立于 CPU,且在芯片内完成,可有效的防止数据被篡改。大多数银行使用的硬加密,底层算法也常常含有 SM1 。
加密卡,就是将 AES、DES、MDS 等加密和认证算法集成在芯片上,该芯片被制成托卡(即加密卡),所有数据加解密和认证涉及到的运算全部在该卡上完成,进而加速了加解密过程,提升了设备的整体性能。目前,加密卡一般分为两类,一种是实现通用加解密和验证算法的加密卡,另一种是实现国密算法(SM1)的加密卡。
国密 SM2 为非对称加密,也称为公钥密码;国密算法的本质是椭圆曲线加密。关于对称加密和非对称加密的内容请查阅笔者写的《深入理解对称加密和非对称加密》一文。SM2 椭圆曲线公钥密码 ( ECC ) 算法是我国公钥密码算法标准。SM2 算法的主要内容包括 3 部分: 数字签名算法、 密钥交换协议和公钥加密算法。
在所有的公钥密码中,使用得比较广泛的有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)。
在有限域 K 上,形如以下方程:

的方程被称为 Weierstrass 方程,其中 O=[0,1,0] 是唯一 的 Z 坐标为零的点,称为无穷远点。令 x=X/Z, y=Y/Z, 可将方 程记为:

且仍有无穷远点 O。对于方程中的系数,定义

其中:

当 Δ ≠ 0 时,椭圆曲线是非奇异的 [1],即对所有满足 F(X,Y,Z)=0 的射影点 P=(X ∶ Y ∶ Z), F 在 P 点的 3 个偏导数必不全为 0。
当 K 的特征不为 2 或 3 时,Weierstrass 方程又有以下形式:

其中:E:y2=x3 Ax2 B 就是国家密码局提议使用的椭圆曲线,以此曲线为基础进行算法实现。
素数域椭圆曲线的参数:素数域的模P,椭圆曲线E(FP)的 系数:a,b;E(FP)上的基点G(Gx,Gy)≠0,基点G的解为n余 因子h=1,用户A持有的用户B的公钥PB,用户B持有的私钥dB。
(1)用随机数发生器生成随机数;
(2)计算椭圆曲线上的点;
(3)计算椭圆曲线点,若S为无穷远点则报错并退出,h 为余因子,这里取为 1;
(4)计算椭圆曲线上的点;
(5)计算,若t全为0则返回1;
(6)计算;
(7)计算;
(8)计算密文;
(1)从密文中取出 C1,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
(2)计算,若S为无穷远点则报错并退出;
(3)计算;
(4)计算;
(5)从 C 中取出 C2 计算;
(6)计算,若 u 与 C3 不相等,则报错 并退出;
(7)输出明文 m;
https://github.com/guoshijiang/NationalSecret
https://github.com/PopezLotado/SM2Java
SM2 算法是我国在吸收国际先进成果基础上研发出来的具有自主知识产权的 ECC 算法, 它在安全性和实现效率方面相当于或略优于国 际上同类的 ECC 算法, 能取代 RSA 以满足各种应用对公钥密码算法安全性和实现效率的更高要求, 具有广阔的推广和应用前景。
SM3 密码杂凑算法是中国国家密码管理局年公布的中国商用密码杂凑算法标准。该算法由王小云等人设计,消息分组比特,输出杂凑值比特,采用 Merkle Damgard 结构。密码杂凑算法的压缩函数与的压缩函数具有类似的结构,但是,密码杂凑算法的压缩函数的结构和消息拓展过程的设计都更加复杂,列如压缩函数的每一轮都使用个消息字,消息拓展过程的每一轮都使用个消息字等。
SM3 密码杂凑算法消息分组长度 为 512b, 摘要长度 256b。压缩函数状态 256 b, 共 64 步操作。
https://github.com/guoshijiang/NationalSecret
杂凑函数的设计和应用已经发展了几十余年。自第一个直接构造的杂凑函数诞生以来密码学界普遍认为,构造安全的杂凑函数就是构造抗碰撞的压缩函数。不过,随着王小云等人成功破解 MD5 ,等杂凑函数后来,基于传统 MD 结构设计的杂凑函数被证明是不安全的。因此,对杂凑函数的设计与分析又成为了密码学界的一大研究热点,特别是当前最新的杂凑算法的研宄,推动了研究杂凑函数的高潮。SM3 轮数的研究将会是高潮,减少轮数的 SM3 算法进行随机性分析 32 轮、33 轮、34 轮和 35 轮算法的飞来去器攻击方法。但是如何对更多轮数的算法的原根、碰撞和第二原根进行分析也是需要进一步研究的问题。
SM4 是一种 Feistel 结构的分组密码算法,其分组长度和密钥长度均为128bit。加解密算法与密钥扩张算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构一样,只是轮密钥的使用顺序相反,即解密算法使用的轮密钥是加密算法使用的轮密钥的逆序。
https://github.com/guoshijiang/NationalSecret
SM4 密码算法是中国第一次由专业密码机构公布并设计的商用密码算法,到目前为止,尚未发现有任何攻击方法对SM4 算法的安全性产生威胁。
SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
椭圆曲线参数并没有给出推荐的曲线,曲线参数的产生需要利用必定的算法产生。但在实际使用中,国密局推荐使用素数域256 位椭圆曲线,其曲线方程为y^2= x^3+ax+b(其中p是大于3的一个大素数,n是基点G的阶,Gx、Gy 分别是基点G的x与y值,a、b是随圆曲线方程y^2= x^3+ax+b的系数)。
SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有一样的密钥长度分组长度128比特,因此在安全性上高于3DES算法。
一种分组密码算法。
SM9 是我国采用的一种标识密码标准,由国家密码管理局于2016 年 3 月 28 日发布,相关标准为“GM/T 0044-2016 SM9标识密码算法”。在商用密码体系中,SM9 主要用于用户的身份认证。SM9 算法不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。据新华网公开报道,SM9 的加密强度等同于 3072 位密钥的 RSA 加密算法。
64.GB∕T 39786-2021 信息安全技术 信息系统密码应用基本要求(1626865557549).pdfSM2椭圆曲线公钥密码算法.pdf
SM2椭圆曲线公钥密码算法推荐曲线参数.pdf
SM3密码杂凑算法.pdf
网络安全等级保护测评与商密评估要求.pdf
应用安全要求(含数据).xlsx
中华人民共和国密码法.docx