一、SM2加密运算
1.1加密原始数据
SM2加密运算首先是用户A对数据加密,用户A拥有原始数据
- 椭圆曲线系统参数
- 长度为klen比特的消息M
- 公钥Pb
椭圆曲线系统参数,已经在 椭圆曲线参数(二)中详细介绍;M就是需要加密消息,长度为klen;
1.1.1 公钥Pb的计算方式
公钥Pb=dBG,其中dB是私钥,是256bit的随机数(1<d<n,d为整数),n、G都为椭圆曲线参数。
1.2 SM2加密步骤
- 选取一个随机数k,计算C1=kG,k此时为用户A的临时私钥,是为了和解密用户B进行密钥交换。(解密用户B拿到C1,会进行s=dB C1=dB k G)
- 判断 S=hPb结果是否为无穷远点, 该步骤的意义是如果S 的结果不是无穷远点,后续步骤 kPb 就不可能是无穷远点。具体的详细证明见G点的选择
- kPb=k dB G,密钥交换,后续的密钥派生和异或操作,就是将用户A的临时密钥k和用户B的密钥dB 对消息进行加密。
- 最后的hash操作是防止在信息传递的过程中,数据被篡改。
- C1 将自己的临时密钥k传递给解密用户B
- C2 就是把自己临时密钥k的解密用户B的dB和消息一起加密起来,传递给解密用户B
- C3 就是防止C1,C2在传递到解密用户B的过程中信息被篡改。
二、SM2解密运算
2.1解密拥有的数据
- 椭圆曲线系统参数
- 加密用户A传递过来的信息C1,C2,C3
- 解密用户B的私钥dB
2.2解密步骤
- dB C1就是密钥交换,要将C2中的消息解密出来,必须要有加密用户A的临时密钥k和机密用户B的私钥dB。
- 密钥派生和异或操作就是将C2中的消息解密出来
- 哈希运算就是确定在信息的传递过程中,没有人篡改数据