SM2算法技术详解

一、SM2密钥结构

  1. 私钥

    • 为随机生成的256位整数d,取值范围满足1 ≤ d ≤ n-1(n为椭圆曲线基点G的阶)

    • 存储形式:通常以十六进制或二进制格式保存,需严格保密

  2. 公钥

    • 由私钥d通过椭圆曲线点乘运算生成:公钥P = [d]G(G为曲线基点)

    • 结构:椭圆曲线上的点坐标(x,y),每个坐标分量长度为256位,可表示为04||x||y(04标识非压缩格式)

二、加密数据构成

密文格式为C1||C3||C2(部分规范为C1||C2||C3),具体分量为:

  1. C1

    • 随机数k与基点G的椭圆曲线点乘结果,即[k]G = (x1,y1),转换为比特串

    • 固定长度:65字节(04标识符+32字节x1+32字节y1)

  2. C2

    • 实际密文数据,通过对称加密生成:

      • 计算临时点[k]PB = (x2,y2)(PB为接收方公钥)

      • 使用KDF(密钥派生函数)生成密钥流t = KDF(x2||y2, klen)

      • C2 = 明文M ⊕ t(按位异或)

  3. C3

    • 哈希校验值,使用SM3算法计算:C3 = Hash(x2||M||y2),固定为256位

三、解密流程

  1. 解析C1为椭圆曲线点,验证其有效性

  2. 计算共享秘密点[dB]C1 = (x2,y2)(dB为接收方私钥)

  3. 重新生成密钥流t = KDF(x2||y2, klen),解密C2得到M' = C2 ⊕ t

  4. 验证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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值