一、国密算法简介
国密算法是中国国家密码管理局颁布的密码算法标准,包括SM2、SM3、SM4等算法。这些算法属于非对称加密算法,意味着加密与解密的密钥是不同的。与其他国际知名的加密算法相比,国密算法具有更好的安全性和性能。其中,SM2算法是国密椭圆曲线密码算法,类似于RSA、ECC; SM3算法是国密Hash算法,类似于SHA256; SM4算法是国密分组密码算法,类似于AES。
二、SM2算法
2.1 基本概念
SM2密码算法是国产密码算法标准,是一种基于椭圆曲线密码(ECC,Elliptic Curve Cryptography)的公钥密码,椭圆曲线密码是非对称密码的一种,具有更高的安全性与更低的计算复杂性。SM2密码算法实际上是在ECC的基础上制定的一套密码系统标准。且相比于RSA算法、DSA算法等具有更高的密钥强度,因此在信息安全领域具有广泛的应用。
2.1.1 密钥对
密钥对是SM2算法中使用的公钥和私钥的组合,其中公钥用于加密数据,而私钥用于解密数据。私钥是一组秘密的随机数,而公钥则是私钥与椭圆曲线上一点的乘积。
2.1.2 曲线
国密SM2算法采用的是椭圆曲线离散对数问题(ECDLP),椭圆曲线的选取是有限域能够保证算法的安全性。具体的曲线参数是国家密码管理局推荐的一组参数。
2.2 数字签名
SM2算法的数字签名分为两个过程:签名和验签。
2.2.1 签名过程
签名过程包括以下几个步骤:
生成随机数k;
计算椭圆曲线上点(x1, y1),其中(x1, y1) = k * G。G是椭圆曲线上的一个基点;
计算 r = (Mhash + x1) % n,其中 Mhash 为待签名消息的 SM3 Hash值,n 为椭圆曲线的阶;
计算签名值s = 1 / (k − rd) % n,其中 d为私钥.
最终,签名值为(r, s)。
2.2.2 验签过程
验签过程有以下几个步骤:
计算椭圆曲线上点Qa = d * G,其中d为私钥;
计算椭圆曲线上点R = s * G + r * Qa;
计算R.hash % n;
如果R == Mhash,则验证通过。
2.3 密钥交换协议
密钥交换协议是指两个用户在公共信道上,根据一定的协议生成一对临时的密钥对,并只有他们之间能知道这对密钥的具体值。SM2算法通过三个步骤来完成密钥交换协议。
2.3.1 三个步骤
密钥协商
确认交换密钥的完整性
双方验证对方的确认值
2.3.2 密钥协商
双方各自生成一个临时密钥对,并发出请求: 甲方发出密钥协商请求,乙方接收后生成一个临时密钥,并将消息发给甲方。甲方产生一个临时公钥。
2.3.3 确认交换密钥的完整性
甲乙双方采用对方的临时公钥和自己的私钥计算出一个共享密钥,并使用SM3算法对共享密钥进行哈希得到确认值。然后将确认值发送给对方,以确保交换的密钥完整性。
2.4 数字信封
数字信封是指在公共信道上传输数据时,使用对称加密算法对数据进行加密,并将加密后的数据和加密所使用的密钥分别用接收方的公钥和私钥进行加密,然后发送给接收方。接收方使用自己的私钥解密出加密密钥,并使用该密钥解密出原始数据。
SM2算法可以用于数字信封的加密和解密过程,其中加密过程如下:
随机生成一个对称密钥K;
使用SM4算法对明文数据进行加密得到密文C;
使用接收方的公钥对密钥K进行加密得到E(K);
将E(K)和C合并成数字信封并发送给接收方。
解密过程如下:
使用自己的私钥解密出E(K),得到对称密钥K;
使用SM4算法对密文C进行解密得到明文数据。
三、SM3算法
3.1 基本概念
SM3算法是中国国密标准中的Hash算法,用于将任意长度的消息压缩成一个固定长度的摘要。它的输出长度为256位,与SHA-256算法相同。
3.2 过程
SM3算法的过程主要包括Hash函数、填充、初始化摘要值、分组和迭代。
3.2.1 Hash函数
Hash函数是SM3算法中的核心部分,它由四个基本的压缩函数和一个异或函数组成。SM3算法中使用了类似于SHA-256的迭代压缩算法,将消息分组后依次进行压缩,并将最终的压缩结果组合成256位的摘要值。
3.2.2 填充
SM3算法使用了和SHA-256相似的填充方式,将消息填充至512位的整数倍。填充方式为将消息的末尾添加一个1,然后添加若干个0,使得消息长度满足对512取模为448,最后在末尾添加一个64位的长度值,表示消息的长度。
3.2.3 初始化摘要值
SM3算法中,摘要值的初始值由八个16进制数构成,这些数是由国家密码管理局推荐的。
3.2.4 分组
SM3算法将填充后的消息分成512位的分组,并依次进行Hash运算。
3.2.5 迭代
SM3算法中,每个分组都会进行一次迭代,迭代过程包括消息扩展、压缩和更新摘要值。
四、SM4算法
4.1 基本概念
SM4算法是中国国密标准中的分组密码算法,用于加密和解密数据。它的密钥长度为128位,分组长度为128位,类似于AES算法。
4.2 过程
SM4算法的过程主要包括加密过程和解密过程。
4.2.1 加密过程
SM4算法的加密过程包括以下几个步骤:
使用密钥扩展算法生成轮密钥;
将明文数据分成128位的分组;
对每个分组进行加密,包括轮函数、置换和轮密钥加;
输出密文数据。
4.2.2 解密过程
SM4算法的解密过程与加密过程相似,只是轮密钥的使用顺序与加密过程相反。具体步骤如下:
使用密钥扩展算法生成轮密钥;
将密文数据分成128位的分组;
对每个分组进行解密,包括轮函数、置换和轮密钥加;
输出明文数据。
4.2.3 子密钥生成
SM4算法中,轮密钥的生成是通过密钥扩展算法实现的。该算法将128位的密钥扩展成32个轮密钥,每个轮密钥为32位。具体步骤如下:
将输入的128位密钥分成4个32位的子密钥;
使用S盒和非线性变换对子密钥进行变换;
通过线性变换和置换生成每个轮密钥。
总结
国密算法是中国国家密码管理局颁布的密码算法标准,包括SM2、SM3、SM4等算法。这些算法具有更好的安全性和性能,逐渐被广泛应用。其中,SM2算法是中国国密椭圆曲线密码算法,类似于RSA、ECC; SM3算法是中国国密Hash算法,类似于SHA256; SM4算法是中国国密分组密码算法,类似于AES。了解这些算法的基本概念和过程,对于加强数据安全具有重要的作用。