一、SM2密钥结构
-
私钥
-
为随机生成的256位整数d,取值范围满足1 ≤ d ≤ n-1(n为椭圆曲线基点G的阶)
-
存储形式:通常以十六进制或二进制格式保存,需严格保密
-
-
公钥
-
由私钥d通过椭圆曲线点乘运算生成:公钥P = [d]G(G为曲线基点)
-
结构:椭圆曲线上的点坐标(x,y),每个坐标分量长度为256位,可表示为04||x||y(04标识非压缩格式)
-
二、加密数据构成
密文格式为C1||C3||C2(部分规范为C1||C2||C3),具体分量为:
-
C1
-
随机数k与基点G的椭圆曲线点乘结果,即[k]G = (x1,y1),转换为比特串
-
固定长度:65字节(04标识符+32字节x1+32字节y1)
-
-
C2
-
实际密文数据,通过对称加密生成:
-
计算临时点[k]PB = (x2,y2)(PB为接收方公钥)
-
使用KDF(密钥派生函数)生成密钥流t = KDF(x2||y2, klen)
-
C2 = 明文M ⊕ t(按位异或)
-
-
-
C3
-
哈希校验值,使用SM3算法计算:C3 = Hash(x2||M||y2),固定为256位
-
三、解密流程
-
解析C1为椭圆曲线点,验证其有效性
-
计算共享秘密点[dB]C1 = (x2,y2)(dB为接收方私钥)
-
重新生成密钥流t = KDF(x2||y2, klen),解密C2得到M' = C2 ⊕ t
-
验证C3 = Hash(x2||M'||y2),若不匹配则判定密文篡改
四、曲线参数规范
采用国标推荐的素域曲线,参数包括:
-
素数p、系数a/b、基点G=(Gx,Gy)、阶n、辅因子h=1
-
示例参数(十六进制):
p = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF a = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC Gx= 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
1万+

被折叠的 条评论
为什么被折叠?



