详解SM2椭圆曲线公钥密码算法

发布于:2025-06-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到