1 非对称密码学
想要了解SM2椭圆曲线公钥密码算法,首先要知道非对称密码学的概念。非对称密码学,也称为公钥密码学,其核心思想是使用一个公钥和一个私钥,实现数据的加密和解密。
在一个非对称加密体制中,通常包含有以下几个关键概念:
(1)明文P:明文是指原始的、未加密的信息。这是发送方希望安全传达给接收方的数据。明文可以是文本、图像、声音或任何其他形式的数据。
(2)密文C:密文是明文经过加密算法处理后的结果。它应该是无法辨认的,确保没有授权的人无法理解其内容。在非对称加密中,明文通过使用公钥转换为密文。
(3)密钥K:在公钥密码中,密钥分为两种:公钥KE和私钥KD。公钥是指用于加密明文或验证数字签名。它是公开可获取的,意味着任何人都可以使用它来加密 信息或验证签名。私钥是指用于解密密文或创建数字签名。它必须保持私密,只有密钥的持有者才能访问。
(4)加密方法E:加密是将明文转换成密文的过程。在公钥密码中,这通常是通过使用收件人的公钥完成的。这个过程包括将明文数据与公钥结合,并应用加密算法来生成密文,即:C=E(KE,P)
(5)解密方法D:解密是将密文转换回明文的过程。在公钥密码中,这是通过使用私钥完成的。只有拥有正确私钥的人才能将密文解密回原始的明文,即:P=D(KD,C)
(6)数字签名S:这是用私钥加密的明文的哈希值。签名确保了消息的真实性和完整性。当接收者用发送者的公钥验证签名时,他们可以确认发送者是谁(因为只有发送者有对应的私钥)并且消息自签名以来未被篡改(因为哈希值与原始数据是唯一对应的)。
公钥密码体系确保了信息的机密性和完整性,只有预期的接收者,即私钥的持有者,才能解密由公钥加密的信息。此外,数字签名验证了信息的来源和完整性,公钥用于验证签名的真实性。
2 SM2算法的工作流程
SM2是中国国家密码管理局发布的椭圆曲线公钥密码算法标准(GB/T 32918),属于国密算法体系的核心组成部分。其基于椭圆曲线离散对数难题(ECDLP),提供数字签名、密钥交换和公钥加密功能。算法采用256位素数域上的椭圆曲线,安全性等同于3072位RSA,但计算效率更高、密钥更短(256位私钥,512位公钥)。签名过程结合用户身份标识(Z值)和SM3哈希算法,增强安全性。SM2支持前向保密,并内置抵抗侧信道攻击的设计,广泛应用于政务、金融等领域的国产化密码解决方案,符合中国商用密码合规要求。
2.1公钥加密算法
公钥加密算法规定发送者用接收者的公钥将消息加密成密文,接收者用自已的私钥对收到的密文进行解密还原成原始消息。
2.1.1 SM2 加密算法及流程
SM2加密算法大致流程如图所示,其中M为发送方需要加密的数据,加密方进行数据加密的步骤简述如下:
A1:用户输入和初始化,用户输入用户的私钥和公钥信息以及明文信息M和接收者的公钥Pb。
A2:在椭圆曲线的有效范围内,生成一个随机数k,确保k在区间[1,n−1]内,其中n是椭圆曲线的阶。
A3:使用随机数k乘以基点G(椭圆曲线上的一个预定义点),得到椭圆曲线 上的点C1=kG=(x1,y1)。
A4:计算S=[h]Pb,其中h是椭圆曲线的辅因子,Pb是接收者的公钥。
A5-A11:进行密钥派生、加密和哈希运算,生成最终的密文C。
2.1.2 SM2 解密算法及流程
在接收方利用自己的私钥对收到的密文进行解密的过程中,解密方B将密文还原为明文的步骤可概括如下:
B1:首先接收方获得由C1、C2和C3三部分组成的密文C,以及自己的私钥Db。B2:从收到的密文C中提取出第一部分C1。
B3:检查点C1是否满足椭圆曲线方程。如果不满足,则认为密文无效。
B4:计算S=[h]C1,其中h是椭圆曲线的辅因子。
B5:如果S是无穷远点O,则密文无效;否则,继续解密过程。
B6:使用接收方的私钥Db乘以点C1,得到椭圆曲线上的点DbC1=(x2,y2)。
B7:使用点DbC1的坐标(x2,y2)和密文C2的长度,通过密钥派生函数KDF生成临时密钥t。
B8:如果t为0,则解密过程失败;否则,继续。
B9:使用临时密钥t对密文C2进行解密,得到明文M'。
B10:使用哈希函数Hash计算U=Hash(x2 |M' |y2),其中“|”表示连接操作。
B11:比较U和密文中提取的C3是否相等。如果不相等,表示密文已被篡改或密钥错误;如果相等,则解密过程成功。
B12:如果验证通过,则输出解密后的明文M'。
2.2 数字签名算法
数字签名算法由一个签名者对数据产生数字签名,并由一个验证者验证签名的可靠性。每个签名者有一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名。数字签名算法用于解决身份认证、数据完整性和不可否认性三大安全问题。
身份认证:验证消息发送方的真实身份(如网站服务器、设备或用户)。
数据完整性:确保传输或存储的数据未被篡改(如合同条款、软件固件)。
不可否认性:防止签名者事后否认自己的签名行为(如金融交易、法律文件)。
2.2.1 SM2 数字签名生成算法及流程
2.2.2 SM2 数字签名验证算法及流程
2.3 密钥交换协议
密钥交换协议是两个用户A和B通过交互的信息传递,用各自的私钥和对方的公钥来商定一个只有他们知道的秘密密钥。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用于密钥管理和协商。
密钥交换协议流程如下图:
3 辅助函数
在本部分规定的椭圆曲线密钥交换协议中,涉及到三类辅助函数:密码杂凑函数,密钥派生函数 与随机数发生器。这三类辅助函数的强弱直接影响密钥交换协议的安全性。
3.1密码杂凑函数
本部分规定使用国家密码管理局批准的密码杂凑算法,如SM3密码杂凑算法。
密码杂凑算法是一种加密手段,它能将任意长度的信息缩减为固定长度的哈希值,作为原始信息的唯一标识。
3.2密钥派生函数
密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。
3.2随机数发生器
本部分规定使用国家密码管理局批准的随机数发生器。
4 SM2椭圆曲线公钥密码算法推荐曲线参数
推荐使用素数域256位椭圆曲线。
椭圆曲线方程:y2=x3+ax+b。
曲线参数:
p=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF
a=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC
b=28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93
n=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123
Gx=32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
Gy=BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0