SM2 -
1 符号和缩略语
2 二元扩域
当
设
- 零元
用全0比特串表示; - 乘法单位元
用比特串00…001表示; - 两个域元素的加法为比特串的按比特异或运算;
- 域元素
和 的乘法定义如下:设 和 对应的 上多项式为 和 ,则 定义为多项式 对应的比特串;
2.1 有限域上的椭圆曲线
有限域
2.1.1
定义在
椭圆曲线
2.1.2
椭圆曲线
; , ; , 的逆元素 , ;- 两个非互逆的不同点相加的规则:
点 , ,且 ,设 ,则 其中 - 倍点规则:
设 ,且 , ,
则 其中
2.2 二元扩域
由
2.2.1 多项式基
设
域元素集合
——加法运算
——乘法运算
注意,
2.2.2 正规基
形如
在正规基表示下,
2.2.3 高斯正规基
由2.2.2节可知,
当
有限域
- 乘法单位元
由 个1的比特串表示; - 零元
由 个0的比特串表示; - 两个域元素的加法由比特串对位异或运算完成;
- 域元素的乘法在2.2.3.3节中描述。
2.2.3.1 选择正规基的规则
选择
2.2.3.2 高斯正规基的检验
给定类型
输入:大于
输出:若
- 计算
; - 若
不是素数,则输出“错误”并停止; - 计算
模 的阶 ; - 计算
; - 计算
; - 若
,则输出“正确”;否则输出“错误”。
2.2.3.3 高斯正规基下的乘法算法
对于任意给定的高斯正规基,其乘法运算包含三部分:乘法预运算;给定两个元素后,其乘积的第一项
——乘法预运算:
输入:大于
输出:相对于
- 计算
; - 产生模
阶为 的整数 ; - 计算序列
;
3.1. 置 ;
3.2. 从 到 执行:
3.2.1. 置 ;
3.2.2. 从 到 执行:
3.2.2.1. 置 ;
3.2.2.2. 置 ;
3.2.2.3. 置 ; - 输出序列
。
——给定在高斯正规基
记
输入:大于
输出:在高斯正规基
- 利用乘法预运算得到输出序列
; 为偶数,则 ,否则- 输出公式
——利用域元素
对
输入:大于
输出:积
- 置
; - 置
; - 对
从 到 执行:
3.1. 计算 ;
3.2. 置 ,并置 ,其中 表示循环左移1位运算,即 ; - 输出
。
2.3
2.3.1 概述
2.3.2 仿射坐标表示
; , ; , 的逆元素 , ;- 两个非互逆的不同点相加的规则:
设 , ,且 ,设 ,则: 其中 ; - 倍点规则:
设 且 , ,则: 其中 。
2.3.3 射影坐标表示
2.3.3.1 标准射影坐标系
若
若
标准射影坐标系下,
椭圆曲线
; ,则 ; , 的逆元素 , 且 , ;- 设点
, , ,
若 ,则:
, , , , , , , , , , , , , ;
若 ,则:
, , , , , , , 。
2.3.3.2 Jacobian加重映射坐标系
若
若
Jacobian加重射影坐标系下,
椭圆曲线
; ,则 ; , 的逆元素 , 且 , ;- 设点
, , ,
若 ,则:
, , , , , , , , , , , ;
若 ,则:
, , , 。
2.4
由Hasse定理知:
3 椭圆曲线多倍点运算
3.1 概述
设
3.2 椭圆曲线多倍点运算的实现
椭圆曲线多倍点运算的实现有多种方法,这里给出三种方法,以下都假设
算法一:二进制展开法
输入:点
输出:
- 置
; 从 下降到 执行:
2.1. ;
2.2. 若 ,则 ;- 输出
。
算法二:加减法
输入:点
输出:
- 设
的二进制表示是 ,其中最高位 为 ; - 设
的二进制表示是 ,显然 或 ; - 置
; - 对
从 下降到 执行:
4.1. ;
4.2. 若 ,且 ,则 ;
4.3. 若 ,且 ,则 ; - 输出
。
算法三:滑动窗法
输入:点
输出:
设窗口长度
预计算
, ; 从 到 计算 ;- 置
, 。
主循环
- 当
执行:
4.1. 若 ,则 , ;
4.2. 否则
4.2.1. 令 是使 且 的最小整数;
4.2.2. ;
4.2.3. ;
4.2.4. 置 ; - 输出
。
4
椭圆曲线系统参数是可以公开的,系统的安全性不依赖于对这些参数的保密。
4.1
- 域的规模
,对 中元素表示法的标识,一个 上的 次约化多项式; - (选项)一个长度至少为192的比特串
; 中的两个元素 和 ,它们定义椭圆曲线E的方程: ;- 基点
, ; - 基点
的阶 (要求: 且 ); - (选项)余因子
。
4.2
椭圆曲线系统参数的生成者应验证下面的条件。椭圆曲线系统参数的用户可以选择验证这些条件。
输入:
输出:若椭圆曲线系统参数是有效的,则输出“有效”;否则输出“无效”。
- 对某个
,验证 ;若所用的是TPB,则验证约化多项式是 上的不可约三项式;若所用的是PPB,则验证不存在 次不可约三项式,且约化多项式是 上的不可约五项式;若所用的是GNB,则验证 不能被 整除; - 验证
、 、 和 是长度为 的比特串; - 若按照4.3节描述的方法拟随机产生椭圆曲线,验证
是长度至少为192的比特串,且 , 由 派生得到; - 验证
; - 在
中验证 ; - 验证
是素数, 且 (参见4.5节); - 验证
; - (选项)计算
,并验证 ; - 验证抗MOV攻击条件成立(参见4.6.1节);
- 若以上任何一个验证失败,则输出“无效”;否则,输出“有效”。
4.3
输入:域的规模
输出:比特串
- 任意选择长度至少为192的比特串
; - 计算
,并记 ; - 若
,令 ,置比特串 , 为与 对应的 中的元素; - 若
,则转步骤1; - 取
为 中的任意元素; - 所选择的
上的椭圆曲线为 ; - 输出
。
4.4
输入:比特串
输出:输入参数“有效”或“无效”。
- 计算
,并记 ; - 若
,令 ,置比特串 , 为与 对应的 中的元素; - 若
,则输出“有效”;否则输出“无效”。
4.5 概率素性检查
输入:一个大的奇数
输出:“概率素数”或“合数”。
- 计算
和奇数 ,使得 ; - 对
从 到 执行:
2.1. 在区间 中选取随机数 ;
2.2. 置 ;
2.3. 若 或 ,转到步骤2.6;
2.4. 对 从 到 执行:
2.4.1. 置 ;
2.4.2. 若 ,转到步骤2.6;
2.4.3. 若 ,输出“合数”并终止;
2.4.4. 下一个 ;
2.5. 输出“合数”,并终止;
2.6. 下一个 ; - 输出“概率素数”。
若算法输出“合数”,则
4.6 安全椭圆曲线满足的条件
4.6.1 抗MOV攻击条件
A. Menezes、T. Okamoto、S. Vanstone、G. Frey和H. Rück的约化攻击将有限域
在验证抗MOV攻击条件之前,必须选择一个MOV阈,它是使得求取
下述算法用于验证椭圆曲线系统参数是否满足抗MOV攻击条件。
输入:MOV阈
输出:若
- 置
; - 对
从 到 执行:
2.1. 置 ;
2.2. 若 ,则输出“错误”并结束; - 输出“正确”。
5 密钥对的生成与公钥的验证
5.1 密钥对的生成
输入:一个有效的
输出:与椭圆曲线系统参数相关的一个密钥对
- 用随机数发生器产生整数
; 为基点,计算点 ;- 密钥对是
,其中 为私钥, 为公钥。
5.2
输入:一个有效的
输出:对于给定的椭圆曲线系统参数,若公钥
- 验证
不是无穷远点 ; - 验证公钥
的坐标 和 是域 中的元素(即验证 和 是长度为 的比特串); - 在
中验证 ; - 验证
; - 若通过了所有验证,则输出“有效”;否则输出“无效”。
6 曲线示例:
椭圆曲线方程为:
示例1:
基域生成多项式: |
系数 |
0 | ||||||
系数 |
00 | 2FE22037 | B624DBEB | C4C618E1 | 3FD998B1 | A18E1EE0 | D05C46FB |
坐标 |
00 | D78D47E8 | 5C936440 | 71BC1C21 | 2CF994E4 | D21293AA | D8060A84 |
坐标 |
00 | 615B9E98 | A31B7B2F | DDEEECB7 | 6B5D8755 | 86293725 | F9D2FC0C |
阶 |
80000000 | 00000000 | 00000000 | 43E9885C | 46BF45D8 | C5EBF3A1 |
示例2:
基域生成多项式: |
系数 |
0 | ||||||||
系数 |
00 | E78BCD09 | 746C2023 | 78A7E72B | 12BCE002 | 66B9627E | CB0B5A25 | 367AD1AD | 4CC6242B |
坐标 |
00 | CDB9CA7F | 1E6B0441 | F658343F | 4B10297C | 0EF9B649 | 1082400A | 42E7A748 | 5735FADD |
坐标 |
00 | 3DE74DA6 | 5951C4D7 | 6DC89220 | D5F7777A | 611B1C38 | BAE260B1 | 75951DC8 | 060C2B3E |
阶 |
7FFFFFFF | FFFFFFFF | FFFFFFFF | FFFFFFFF | BC972CF7 | E6B6F900 | 945B3C6A | 0CF6161D |
参考
GM/T 0003.1—2012
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
· 由 MCP 官方推出的 C# SDK,使 .NET 应用程序、服务和库能够快速实现与 MCP 客户端
· 电商平台中订单未支付过期如何实现自动关单?
· 上周热点回顾(3.31-4.6)
· X86-64位简易系统开发 - 从BIOS阶段开始