前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sm2和sm4加密算法浅析

sm2和sm4加密算法浅析

作者头像
全栈程序员站长
发布2022-11-08 15:27:35
发布2022-11-08 15:27:35
3.2K00
代码可运行
举报
运行总次数:0
代码可运行

sm2和sm4加密算法浅析

一: SM2

简介:SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 ,SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

SM2和RSA算法比较

SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小

①:加密算法以及流程:

输入:需要发送的消息为比特串M,klen为M的比特长度。

1.用随机数发生器产生随机数k∈[1,n-1],k的值为1到n-1

2.计算椭圆曲线点C1=[k]G=(x1,y1),将C1的数据类 型转换为比特串

3.计算椭圆曲线点S=[h]PB,若S是无穷远点,则报错并退出

4.计算椭圆曲线点[k]PB=(x2,y2),按本文本第1部分4.2.5和4.2.4给出的细节,将坐标x2、y2 的 数据类型转换为比特串

5.计算t=KDF(x2 ∥y2, klen),若t为全0比特串,则返回A1

6.计算C2 = M ⊕t

7.计算C3 = Hash(x2 ∥ M ∥ y2)

8.输出密文C = C1 ∥ C2 ∥ C3

加密算法流程:

②:解密算法以及流程

klen为密文中C2的比特长度,对密文C=C1 ∥ C2 ∥ C3 进行解密,需要实现以下步骤

1.从C中取出比特串C1,按本文本第1部分4.2.3和4.2.9给出的细节,将C1的数据类型转换为椭 圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出

2.计算椭圆曲线点S=[h]C1,若S是无穷远点,则报错并退出

3.计算[dB]C1=(x2,y2),按本文本第1部分4.2.5和4.2.4给出的细节,将坐标x2、y2的数据类型转 换为比特串

4.计算t=KDF(x2 ∥y2, klen),若t为全0比特串,则报错并退出

5.从C中取出比特串C2,计算M′ = C2 ⊕t

6.计算u = Hash(x2 ∥ M′ ∥ y2),从C中取出比特串C3,若u ̸= C3,则报错并退出 7.输出明文M′

解密算法流程:

③:SM2椭圆曲线公钥密码算法推荐曲线参数

椭圆曲线方程:y2 = x3 + ax + b。

曲线参数:

代码语言:javascript
代码运行次数:0
运行
复制
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

二:SM4

简介:SM4由国家密码管理局于2012年3月21日发布,SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

算法定义:该算法的分组长度为 128 比特,密钥长度为 128 比特。加密算 法与密钥扩展算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮 密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序

(1)基本运算:

​ ⊕ 32 比特异或

​ i 32比特循环左移 i 位

(2)密钥及密钥参量 :

(3)轮函数 F:

(4)合成置换 T:

(5) 非线性变换τ

(6): 线性变换 L

(7):S 盒

(8)加/解密算法

(9):密钥扩展算法

代码语言:javascript
代码运行次数:0
运行
复制
00070e15, 1c232a31, 383f464d, 545b6269, 
70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,
e0e7eef5, fc030a11, 181f262d, 343b4249, 
50575e65, 6c737a81, 888f969d, a4abb2b9, 
c0c7ced5, dce3eaf1, f8ff060d, 141b2229, 
30373e45, 4c535a61, 686f767d, 848b9299,
a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209, 
10171e25, 2c333a41, 484f565d, 646b7279 

这边有个小demo:以供参考:https://download.csdn.net/download/kawayiyy123/12535104?spm=1001.2014.3001.5503

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185419.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月6日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sm2和sm4加密算法浅析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档