SM2 - 公钥加密算法
符号
A,B:使用公钥密码系统的两个用户。
密钥派生函数
设密码杂凑函数为
密钥派生函数
输入:比特串
输出:长度为
- 初始化一个32比特构成的计数器
; - 对
从 到 执行:
2.1. 计算 ;
2.2. ; - 若
是整数,令 ,否则令 为 最左边的 比特; - 令
。
加密算法
设需要发送的消息为比特串
为了对明文
- 用随机数发生器产生随机数
; - 计算椭圆曲线点
; - 计算椭圆曲线点
,若 是无穷远点,则报错并退出; - 计算椭圆曲线点
; - 计算
,若 为全0比特串,则返回步骤1; - 计算
; - 计算
; - 输出密文
。
解密算法
设
为了对密文
- 从
中取出比特串 ,验证 是否满足椭圆曲线方程,若不满足则报错并退出; - 计算椭圆曲线点
,若 是无穷远点,则报错并退出; - 计算
; - 计算
,若 为全0比特串,则报错并退出; - 从
中取出比特串 ,计算 ; - 计算
,从 中取出比特串 ,若 ,则报错并退出; - 输出明文
。
注:观察加密算法的步骤4与解密算法的步骤3,有如下等式成立
参考
GM/T 0003.4—2012
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· 干货分享!MCP 实现原理,小白也能看懂
· Cursor:一个让程序员“失业”的AI代码搭子
· MCP开发应用,使用python部署sse模式
· 慢查询解决思路