SM2 - F2m

1 符号和缩略语
a,bFq中的元素,它们定义Fq上的一条椭圆曲线E
E:有限域上由ab定义的一条椭圆曲线。
E(Fq)Fq上椭圆曲线E的所以有理点(包括无穷远点O)组成的集合。
Fp:包含p个元素的素域。
Fq:包含q个元素的有限域。
Fq:由Fq中所有非零元构成的乘法群。
F2m:包含2m个元素的二元扩域。
G:椭圆曲线的一个基点,其阶为素数。
gcd(x,y)xy的最大公因子。
h:余因子,h=E(Fq)/n,其中n是基点G的阶。
m:二元扩域F2m关于F2的扩张次数。
mod f(x):模多项式f(x)的运算。若f(x)是二元域上的的多项式,则所有系数执行模2运算。
mod n:模n运算。
n:基点G的阶(nE(Fq)的素因子)。
O:椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
PP=(xP,yP)是椭圆曲线上除O之外的一个点,其坐标xPyP满足椭圆曲线方程。
P1+P2:椭圆曲线E上两个点P1P2的和。
p:大于3的素数
q:有限域Fq中元素的数目。
xP:点Px坐标。
x1 mod n:使得xy1(mod n)成立的唯一整数y1yn1gcd(x,n)=1
xyxy的拼接,其中xy是比特串或字节串。
xy(mod n)xyn同余。亦即,x mod n=y mod n
yP:点Py坐标。
Zp:整数模p的剩余类环。
G:基点G生成的循环群。
[k]P:椭圆曲线上点Pk倍点,即:[k]P=P+P++Pk,其中k是正整数。
[x,y]:大于或等于x且小于或等于y的整数的集合。
x:顶函数,大于或等于x的最小整数。例如,7=78.3=9
x:底函数,小于或等于y的最大整数。例如,7=78.3=8
E(Fq)E(Fq)上点的数目,称为椭圆曲线E(Fq)的阶。
:长度相等的两个比特串按比特的异或运算。


2 二元扩域F2m
q2的方幂2m时,二元扩域F2m可以看成F2上的m维向量空间,其元素可用长度为m的比特串表示。
F2m中的元素有多种表示方法,其中最常用的两种方法是多项式基(PB)表示(参见2.2.1)和正规基(NB)表示(参见2.2.2)。基的选择原则是使得F2m中的运算效率尽可能高。SM2并没有规定基的选择。下面以多项式基表示为例说明二元扩域F2m
F2m次不可约多项式f(x)=xm+fm1xm1++f2x2+f1x+f0(其中fiF2i=0,1,,m1)是二元扩域F2m的约化多项式。F2mF2上所有次数低于m的多项式构成。多项式集合{xm1,xm2,,x,1}F2mF2的一组基,称为多项式基。F2m中的任意一个元素a(x)=am1xm1+am2xm2++a1x+a0F2上的系数恰好构成了长度为m的比特串,用a=(am1,am2,,a1,a0)表示。

  1. 零元0用全0比特串表示;
  2. 乘法单位元1用比特串00…001表示;
  3. 两个域元素的加法为比特串的按比特异或运算;
  4. 域元素ab的乘法定义如下:设ab对应的F2上多项式为a(x)b(x),则ab定义为多项式(a(x)b(x)) mod f(x)对应的比特串;

2.1 有限域上的椭圆曲线
有限域Fq上的椭圆曲线是由点组成的集合。在仿射坐标系下,椭圆曲线上点P(非无穷远点)的坐标表示为P=(xP,yP),其中xPyP为满足一定方程的域元素,分别称为点Px坐标和y坐标。此处,称Fq为基域。
2.1.1 F2m上的椭圆曲线
定义在F2m上的椭圆曲线方程为:

y2+xy=x3+ax2+ba,bF2m,且b0
椭圆曲线E(F2m)定义为:
E(F2m)={(x,y)y2+xy=x3+ax2+b,x,yF2m}{O},其中O是无穷远点。
椭圆曲线E(F2m)上的点的数目用E(F2m)表示,称为椭圆曲线E(F2m)的阶。

2.1.2 F2m上的椭圆曲线群
椭圆曲线E(F2m)上的点按照下面的加法运算规则,构成一个交换群:

  1. O+O=O
  2. P=(x,y)E(F2m){O}P+O=O+P=P
  3. P=(x,y)E(F2m){O}P的逆元素P=(x,y)P+(P)=O
  4. 两个非互逆的不同点相加的规则:
    P1=(x1,y1)E(F2m){O}P2=(x2,y2)E(F2m){O},且x1x2,设P3=(x3,y3)=P1+P2,则
    {x3=λ2+λ+x1+x2+ay3=λ(x1+x3)+x3+y1
    其中
    λ=y1+y2x1+x2
  5. 倍点规则:
    P1=(x1,y1)E(F2m){O},且x10P3=(x3,y3)=P1+P1
    {x3=λ2+λ+ay3=x12+(λ+1)x3
    其中
    λ=x1+y1x1

2.2 二元扩域F2m的定义
2m个元素构成的有限域F2mF2m次扩张,称为m次二元扩域。F2m可以看成F2上维数为m向量空间,也就是说,在F2m存在m个元素α0,α1,,αm1,使得αF2mα可以唯一表示为:α=a0α0+a1α1++am1αm1,其中aiF2i=0,1,,m1),称{α0,α1,,αm1}F2mF2上的基。给定这样一组基,就可以由向量(a0,a1,,am1)来表示域元素αF2mF2上的基有多种选择,域元素的加法在不同的基下的元素规则是一致的,都可以通过向量按分量异或运算得到;域元素的乘法在不同的基下有不同的运算规则(如用多项式基表示和用正规基表示时其运算规则就不一致)。
2.2.1 多项式基
F2m次不可约多项式f(x)=xm+fm1xm1++f2x2+f1x+f0(其中fiF2i=0,1,,m1)是二元扩域F2m的约化多项式。F2mF2上所有次数低于m的多项式构成,即:

F2m={am1xm1+am2xm2++a1x+a0aiF2,i=0,1,,m1}
多项式集合{xm1,xm2,,x,1}F2m作为向量空间在F2上的一组基,称为多项式基。
域元素集合am1xm1+am2xm2++a1x+a0相对多项式基可以由长度为m的比特串(am1am2a1a0)来表示,所以
F2m={(am1am2a1a0)aiF2,i=0,1,,m1}
乘法单位元1(0001)表示,零元由(0000)表示。域元素的加法和乘法定义如下:
  ——加法运算
  (am1am2a1a0),(bm1bm2b1b0)F2m,则(am1am2a1a0)+(bm1bm2b1b0)=(cm1cm2c1c0),其中ci=aibii=0,1,,m1,亦即,加法运算按分位异或运算执行。
  ——乘法运算
  (am1am2a1a0),(bm1bm2b1b0)F2m,则(am1am2a1a0)(bm1bm2b1b0)=(rm1rm2r1r0),其中多项式(rm1xm1+rm2xm2++r1x+r0)(am1xm1+am2xm2++a1x+a0)(bm1xm1+bm2xm2++b1x+b0)F2mod f(x)的余式。
注意,F2m恰包含2m个元素。记F2m是由F2m中所有非零元构成的乘法群,F2m是循环群,在F2m中至少存在一个元素g,使得F2m中任一非零元都可以由g的一个方幂并表示,称gF2m的生成元(或本原元),即:F2m={gi0i2m2}。设a=giF2m,其中0i2m2,则a的乘法逆元为:a1=g2m1i

2.2.2 正规基
形如{β,β2,β22,,β2m1}的基就是F2mF2上的一组正规基,其中βF2m。这样的基总是存在的。αF2m,则α=a0β20+a1β21++am1β2m1,其中aiF2i=0,1,,m1),并记为α=(a0a1a2am2am1),域元素α由长度为m的比特串表示。所以F2m={(a0a1a2am2am1)aiF2,0im1},乘法单位元1m个1的比特串(111)表示,零元由m个0的比特串(000)表示。
在正规基表示下,F2m中求平方运算时循环右移运算:

αF2m,α=a0β20+a1β21++am1β2m1=(a0a1a2am2am1),α2=(i=0m1aiβ2i)2=i=0m1ai2β2i+1=i=0m1aiβ2i=(am1a0am2)
在这种情况下,求平方运算只是长度为m的比特串的循环移位,便于在硬件上实现。

2.2.3 高斯正规基
由2.2.2节可知,F2mF2上的正规基是形式为N={β,β2,β22,,β2m1}的一组基,其中βF2m。正规基表示在求取元素的平方时有计算优势,但对于一般意义下的不同元素的乘法运算不太方便。因此,通常专用一种称为高斯正规基的基,对这样的基,乘法既简单又有效。
m不能被8整除时F2m存在高斯正规基。高斯正规基的类型T是指在此基下度量乘法运算复杂度的一个正整数。一般情况下,类型T愈小,乘法效率愈高。对于给定的mT,域F2m至多有一个类型T的高斯正规基。在所有正规基中,类型1和类型2的高斯正规基有最有效的乘法运算,因而也称它们为最优正规基。类型1的高斯正规基称为Ⅰ型最优正规基,类型2的高斯正规基称为Ⅱ型最优正规基。
有限域F2m中的元素a在高斯正规基下可以由长度为m的比特串(am1am2a1a0)来表示。

  1. 乘法单位元1m个1的比特串表示;
  2. 零元0m个0的比特串表示;
  3. 两个域元素的加法由比特串对位异或运算完成;
  4. 域元素的乘法在2.2.3.3节中描述。

2.2.3.1 选择正规基的规则
选择F2m存在的最小类型的高斯正规基。

2.2.3.2 高斯正规基的检验
给定类型T,利用下述算法可以检验F2mm大于1且不能被8整除)中类型T的高斯正规基的存在性。
输入:大于1且不被8整除的整数m,正整数T
输出:若F2m存在一个类型T的高斯正规基,输出“正确”;否则输出“错误”。

  1. 计算p=Tm+1
  2. p不是素数,则输出“错误”并停止;
  3. 计算2p的阶k
  4. 计算u=Tmk
  5. 计算d=gcd(u,m)
  6. d=1,则输出“正确”;否则输出“错误”。

2.2.3.3 高斯正规基下的乘法算法
对于任意给定的高斯正规基,其乘法运算包含三部分:乘法预运算;给定两个元素后,其乘积的第一项c0的公式,计算两个元素的乘积。下面对这三部分进行详细描述:
  ——乘法预运算:
输入:大于1的整数m,正整数T,其中在F2m上存在类型T的高斯正规基B
输出:相对于B的序列f(1),f(2),,f(p1)

  1. 计算p=Tm+1
  2. 产生模p阶为T的整数u
  3. 计算序列f(1),f(2),,f(p1)
    3.1. 置w=1
    3.2. 从j=0T1执行:
     3.2.1. 置n=w
     3.2.2. 从i=0m1执行:
      3.2.2.1. 置f(n)=i
      3.2.2.2. 置n=2n mod p
      3.2.2.3. 置w=uw mod p
  4. 输出序列f(1),f(2),,f(p1)

  ——给定在高斯正规基B表示下的两个域元素ab,其乘积的第一项c0的公式:
c0=F(a,b)
输入:大于1的整数m,正整数T(其中在F2m上存在类型T的高斯正规基B)及在高斯正规基B表示下的两个域元素ab
输出:在高斯正规基B表示下的两个域元素ab乘积的第一项c0的公式。

  1. 利用乘法预运算得到输出序列f(1),f(2),,f(p1)
  2. T为偶数,则J=0,否则
    J=k=1m(ak1bm/2+k1+am/2+k1bk1)
  3. 输出公式
    c0=J+k=1p2af(k+1)bf(pk)

  ——利用域元素ab乘积的第一项c0的公式,计算域元素ab的乘积:
u=(u0u1um1)v=(v0v1vm1),设F(u,v)是以c0=F(a,b)导出的表达式。
输入:大于1的整数m,正整数T(其中在F2m上存在类型T的高斯正规基B)及在高斯正规基B表示下的两个域元素ab
输出:积(c0c1cm1)=(a0a1am1)×(b0b1bm1)

  1. (u0u1um1)=(a0a1am1)
  2. (v0v1vm1)=(b0b1bm1)
  3. k0m1执行:
    3.1. 计算ck=F(u,v)
    3.2. 置u=LeftRotate(u),并置v=LeftRotate(v),其中LeftRotate()表示循环左移1位运算,即LeftRotate(u)=LeftRotate(u0u1um1)=(u1u2um1u0)
  4. 输出c=(c0c1cm1)

2.3 F2m上椭圆曲线的定义
2.3.1 概述
F2m上椭圆曲线常用的表示形式有两种:仿射坐标表示和射影坐标表示。

2.3.2 仿射坐标表示
F2m上非超奇异椭圆曲线方程在仿射坐标系下可以简化为y2+xy=x3+ax2+b,其中a,bF2m,且b0。椭圆曲线上的点集记为E(F2m)={(x,y)y2+xy=x3+ax2+b,x,yF2m}{O},其中O是椭圆曲线的无穷远点,又称为零点。
E(F2m)上的点按照下面的加法运算规则,构成一个阿贝尔群:

  1. O+O=O
  2. P=(x,y)E(F2m){O}P+O=O+P=P
  3. P=(x,y)E(F2m){O}P的逆元素P=(x,x+y)P+(P)=O
  4. 两个非互逆的不同点相加的规则:
    P1=(x1,y1)E(F2m){O}P2=(x2,y2)E(F2m){O},且x1x2,设P3=(x3,y3)=P1+P2O,则:
    {x3=λ2+λ+x1+x2+ay3=λ(x1+x3)+x3+y1
    其中λ=y1+y2x1+x2
  5. 倍点规则:
    P1=(x1,y1)E(F2m){O}x10P3=(x3,y3)=P1+P1,则:
    {x3=λ2+λ+ay3=x12+(λ+1)x3
    其中λ=x1+y1x1

2.3.3 射影坐标表示
2.3.3.1 标准射影坐标系
F2m上非超奇异椭圆曲线方程在标准射影坐标系下可以简化为y2z+xyz=x3+ax2z+bz3,其中a,bF2m,且b0E(F2m)={(x,y,z)y2z+xyz=x3+ax2z+bz3,x,y,zF2m}。对于(x1,y1,z1)(x2,y2,z2),若存在某个uF2mu0,使得:x1=ux2y1=uy2z1=uz2,则称这两个三元组等价,表示同一个点。
z0,记X=xzY=yz,则可从标准射影坐标表示转化为仿射坐标表示:Y2+XY=X3+aX2+b
z=0(0,1,0)对应的仿射坐标系下的点即无穷远点O
标准射影坐标系下,E(F2m)上点的加法运算定义如下:
椭圆曲线E(F2m)上的点按照下面的加法运算规则,构成一个交换群:

  1. O+O=O
  2. P=(x,y,z)E(F2m){O},则P+O=O+P=P
  3. P=(x,y,z)E(F2m){O}P的逆元素P=(ux,u(x+y),uz)uF2mu0P+(P)=O
  4. 设点P1=(x1,y1,z1)E(F2m){O}P2=(x2,y2,z2)E(F2m){O}P3=P1+P2=(x3,y3,z3)O
    P1P2,则:
    λ1=x1z2λ2=x2z1λ3=λ1+λ2λ4=y1z2λ5=y2z1λ6=λ4+λ5λ7=z1z2λ8=λ32λ9=λ8λ7λ10=λ3λ8λ11=λ6λ7(λ6+λ3)+λ10+aλ9x3=λ3λ11y3=λ6(λ1λ8+λ11)+x3+λ10λ4z3=λ3λ9
    P1=P2,则:
    λ1=x1z1λ2=x12λ3=λ2+y1z1λ4=λ12λ5=λ3(λ1+λ3)+aλ4x3=λ1λ5y3=λ22λ1+λ3λ5+x3z3=λ1λ4

2.3.3.2 Jacobian加重映射坐标系
F2m上非超奇异椭圆曲线方程在Jacobian加重射影坐标系下可以简化为y2z+xyz=x3+ax2z2+bz6,其中a,bF2m,且b0E(F2m)={(x,y,z)y2z+xyz=x3+ax2z2+bz6,x,y,zF2m}。对于(x1,y1,z1)(x2,y2,z2),若存在某个uF2mu0,使得:x1=u2x2y1=u3y2z1=uz2,则称这两个三元组等价,表示同一个点。
z0,记X=xz2Y=yz3,则可从Jacobian加重射影坐标表示转化为仿射坐标表示:Y2+XY=X3+aX2+b
z=0(1,1,0)对应的仿射坐标系下的点即无穷远点O
Jacobian加重射影坐标系下,E(F2m)上点的加法运算定义如下:
椭圆曲线E(F2m)上的点按照下面的加法运算规则,构成一个交换群:

  1. O+O=O
  2. P=(x,y,z)E(F2m){O},则P+O=O+P=P
  3. P=(x,y,z)E(F2m){O}P的逆元素P=(u2x,u2x+u3y,uz)uF2mu0P+(P)=O
  4. 设点P1=(x1,y1,z1)E(F2m){O}P2=(x2,y2,z2)E(F2m){O}P3=P1+P2=(x3,y3,z3)O
    P1P2,则:
    λ1=x1z22λ2=x2z12λ3=λ1+λ2λ4=y1z23λ5=y2z13λ6=λ4+λ5λ7=z1λ3λ8=λ6x2+λ7y2z3=λ7z2λ9=λ6+z3x3=az32+λ6λ9+λ33y3=λ9x3λ8λ72
    P1=P2,则:
    z3=x1z12x3=x14+bz18λ=z3+x12+y1z1y3=x14z3+λx3

2.4 F2m上椭圆曲线的阶
F2m上一条椭圆曲线E的阶是指点集E(F2m)中元素的个数,记为E(F2m)
由Hasse定理知:2m+12p12E(F2m)2m+1+2p12


3 椭圆曲线多倍点运算
3.1 概述
P是椭圆曲线E上阶为N的点,k为正整数,Pk倍点为Q,即

Q=[k]P=P+P++Pk

3.2 椭圆曲线多倍点运算的实现
椭圆曲线多倍点运算的实现有多种方法,这里给出三种方法,以下都假设1k<N
算法一:二进制展开法
输入:点Pl比特的整数k=j=0l1kj2jkj{0,1}
输出:Q=[k]P

  1. Q=O;
  2. jl1下降到0执行:
    2.1. Q=[2]Q
    2.2. 若kj=1,则Q=Q+P
  3. 输出Q

算法二:加减法
输入:点Pl比特的整数k=j=0l1kj2jkj{0,1}
输出:Q=[k]P

  1. 3k的二进制表示是hrhr1h1h0,其中最高位hr1
  2. k的二进制表示是krkr1k1k0,显然r=ll+1
  3. Q=P
  4. ir1下降到1执行:
    4.1. Q=[2]Q
    4.2. 若hi=1,且ki=0,则Q=Q+P
    4.3. 若hi=0,且ki=1,则Q=QP
  5. 输出Q

算法三:滑动窗法
输入:点Pl比特的整数k=j=0l1kj2jkj{0,1}
输出:Q=[k]P
设窗口长度r>1
预计算

  1. P1=PP2=[2]P
  2. i12r11计算P2i+1=P2i1+P2
  3. j=l1Q=O

主循环

  1. j0执行:
    4.1. 若kj=0,则Q=[2]Qj=j1
    4.2. 否则
     4.2.1. 令t是使jt+1rkt=1的最小整数;
     4.2.2. hj=i=0jtkt+i2i
     4.2.3. Q=[2jt+1]Q+Phj
     4.2.4. 置j=t1
  2. 输出Q

4 F2m上椭圆曲线系统参数及其验证
椭圆曲线系统参数是可以公开的,系统的安全性不依赖于对这些参数的保密。
4.1 F2m上椭圆曲线系统参数
F2m上椭圆曲线系统参数包括:

  1. 域的规模q=2m,对F2m中元素表示法的标识,一个F2上的m次约化多项式;
  2. (选项)一个长度至少为192的比特串SEED
  3. F2m中的两个元素ab,它们定义椭圆曲线E的方程:y2+xy=x3+ax2+b
  4. 基点G=(xG,yG)E(F2m)GO
  5. 基点G的阶n(要求:n>2191n>22+m2);
  6. (选项)余因子h=E(F2m)n

4.2 F2m上椭圆曲线系统参数的验证
椭圆曲线系统参数的生成者应验证下面的条件。椭圆曲线系统参数的用户可以选择验证这些条件。
输入:F2m上椭圆曲线系统参数的集合。
输出:若椭圆曲线系统参数是有效的,则输出“有效”;否则输出“无效”。

  1. 对某个m,验证q=2m;若所用的是TPB,则验证约化多项式是F2上的不可约三项式;若所用的是PPB,则验证不存在m次不可约三项式,且约化多项式是F2上的不可约五项式;若所用的是GNB,则验证m不能被8整除;
  2. 验证abxGyG是长度为m的比特串;
  3. 若按照4.3节描述的方法拟随机产生椭圆曲线,验证SEED是长度至少为192的比特串,且abSEED派生得到;
  4. 验证b0
  5. F2m中验证yG2+xGyG=xG3+axG2+b
  6. 验证n是素数,n>2191n>22+m2(参见4.5节);
  7. 验证[n]G=O
  8. (选项)计算h=(2m2+1)2n,并验证h=h
  9. 验证抗MOV攻击条件成立(参见4.6.1节);
  10. 若以上任何一个验证失败,则输出“无效”;否则,输出“有效”。

4.3 F2m上椭圆曲线系统参数的拟随机生成
输入:域的规模q=2mF2m的约化多项式f(x)=xm+fm1xm1++f2x2+f1x+f0(其中fiF2i=0,1,,m1)。
输出:比特串SEEDF2m中的元素ab

  1. 任意选择长度至少为192的比特串SEED
  2. 计算H=H256(SEED),并记H=(h255,h254,,h0)
  3. i256,令hi=1,置比特串HH=(hm1,hm2,,h0)b为与HH对应的F2m中的元素;
  4. b=0,则转步骤1;
  5. aF2m中的任意元素;
  6. 所选择的F2m上的椭圆曲线为E:y2+xy=x3+ax2+b
  7. 输出(SEED,a,b)

4.4 F2m上椭圆曲线系统参数拟随机生成的验证
输入:比特串SEEDF2m中的元素ab
输出:输入参数“有效”或“无效”。

  1. 计算H=H256(SEED),并记H=(h255,h254,,h0)
  2. i256,令hi=1,置比特串HH=(hm1,hm2,,h0)b为与HH对应的F2m中的元素;
  3. b=b,则输出“有效”;否则输出“无效”。

4.5 概率素性检查
u是一个大的正整数,下面的改了算法(Miller-Rabin检测)将确定u使素数还是合数。
输入:一个大的奇数u和一个大的正整数T
输出:“概率素数”或“合数”。

  1. 计算v和奇数w,使得u1=2vw
  2. j1T执行:
    2.1. 在区间[2,u1]中选取随机数a
    2.2. 置b=aw mod u
    2.3. 若b=1u1,转到步骤2.6;
    2.4. 对i1v1执行:
     2.4.1. 置b=b2 mod u
     2.4.2. 若b=u1,转到步骤2.6;
     2.4.3. 若b=1,输出“合数”并终止;
     2.4.4. 下一个i
    2.5. 输出“合数”,并终止;
    2.6. 下一个j
  3. 输出“概率素数”。

若算法输出“合数”,则u是一个合数。若算法输出“概率素数”,在u是合数的概率小于22T。这样,通过选取足够大的T,误差可以忽略。

4.6 安全椭圆曲线满足的条件
4.6.1 抗MOV攻击条件
A. Menezes、T. Okamoto、S. Vanstone、G. Frey和H. Rück的约化攻击将有限域Fq上的椭圆曲线离散对数问题约化为FqBB>1)上的离散对数问题。这个攻击方法只有在B较小时是实用的,大多数椭圆曲线不符合这种情况。抗MOV攻击条件确保一条椭圆曲线不易受此约化方法攻击。多数Fq上的椭圆曲线确实满足抗MOV攻击条件。
在验证抗MOV攻击条件之前,必须选择一个MOV阈,它是使得求取FqB上的离散对数问题至少与求取Fq上的椭圆曲线离散对数问题同样难的一个正整数B。对于q>2191的标准,要求{B≥27}。选择B27也限制了对非超奇异椭圆曲线的选取。
下述算法用于验证椭圆曲线系统参数是否满足抗MOV攻击条件。
输入:MOV阈B,素数幂q和素数nnE(Fq) 的素因子,其中E(Fq)Fq上的椭圆曲线)。
输出:若Fq上包含n阶基点的椭圆曲线满足抗MOV攻击条件,则输出“正确”;否则输出“错误”。

  1. t=1
  2. i1B执行:
    2.1. 置t=(tq) mod n
    2.2. 若t=1,则输出“错误”并结束;
  3. 输出“正确”。

5 密钥对的生成与公钥的验证
5.1 密钥对的生成
输入:一个有效的Fqq=2m)上椭圆曲线系统参数的集合。
输出:与椭圆曲线系统参数相关的一个密钥对(d,P)

  1. 用随机数发生器产生整数d[2,n2]
  2. G为基点,计算点P=(xP,yP)=[d]G;
  3. 密钥对是(d,P),其中d为私钥,P为公钥。

5.2 F2m上椭圆曲线公钥的验证
输入:一个有效的F2m上椭圆曲线系统参数集合及一个相关的公钥P
输出:对于给定的椭圆曲线系统参数,若公钥P是有效的,则输出“有效”;否则输出“无效”。

  1. 验证P不是无穷远点O
  2. 验证公钥P的坐标xPyP是域F2m中的元素(即验证xPyP是长度为m的比特串);
  3. F2m中验证yP2+xPyP=xP3+axP2+b
  4. 验证[n]P=O
  5. 若通过了所有验证,则输出“有效”;否则输出“无效”。

6 曲线示例:F2m上椭圆曲线
椭圆曲线方程为:y2+xy=x3+ax2+b
示例1:F2m-193曲线

基域生成多项式:x193+x15+1
系数a 0
系数b 00 2FE22037 B624DBEB C4C618E1 3FD998B1 A18E1EE0 D05C46FB
基点G=(x,y),其阶记为n
坐标x 00 D78D47E8 5C936440 71BC1C21 2CF994E4 D21293AA D8060A84
坐标y 00 615B9E98 A31B7B2F DDEEECB7 6B5D8755 86293725 F9D2FC0C
n 80000000 00000000 00000000 43E9885C 46BF45D8 C5EBF3A1

示例2:F2m-256曲线

基域生成多项式:x257+x12+1
系数a 0
系数b 00 E78BCD09 746C2023 78A7E72B 12BCE002 66B9627E CB0B5A25 367AD1AD 4CC6242B
基点G=(x,y),其阶记为n
坐标x 00 CDB9CA7F 1E6B0441 F658343F 4B10297C 0EF9B649 1082400A 42E7A748 5735FADD
坐标y 00 3DE74DA6 5951C4D7 6DC89220 D5F7777A 611B1C38 BAE260B1 75951DC8 060C2B3E
n 7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF BC972CF7 E6B6F900 945B3C6A 0CF6161D


参考
GM/T 0003.1—2012

posted @   Miro'  阅读(139)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
· 由 MCP 官方推出的 C# SDK,使 .NET 应用程序、服务和库能够快速实现与 MCP 客户端
· 电商平台中订单未支付过期如何实现自动关单?
· 上周热点回顾(3.31-4.6)
· X86-64位简易系统开发 - 从BIOS阶段开始
点击右上角即可分享
微信分享提示