CN109582284B - 一种芯片中的标量乘实现方法及装置、计算机可读存储介质 - Google Patents
一种芯片中的标量乘实现方法及装置、计算机可读存储介质 Download PDFInfo
- Publication number
- CN109582284B CN109582284B CN201811367516.4A CN201811367516A CN109582284B CN 109582284 B CN109582284 B CN 109582284B CN 201811367516 A CN201811367516 A CN 201811367516A CN 109582284 B CN109582284 B CN 109582284B
- Authority
- CN
- China
- Prior art keywords
- point
- scalar
- coordinate point
- array
- scalar multiplication
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 100
- 239000011159 matrix material Substances 0.000 claims abstract description 20
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 claims description 16
- 238000012795 verification Methods 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 8
- 238000004364 calculation method Methods 0.000 abstract description 15
- 238000006243 chemical reaction Methods 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 3
- 230000000873 masking effect Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/588—Random number generators, i.e. based on natural stochastic processes
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
本申请公开了一种芯片中的标量乘实现方法及装置、计算机可读存储介质,所述方法包括获取第一标量k、固定坐标点P、窗口宽度w和椭圆曲线E(Fp)的参数;生成正整数r,r∈Fp,计算窗口个数l、m分别为k、r的二进制比特长度,将k加r*n再减去(2d‑1)得到的结果赋值给第二标量k′,n为椭圆曲线基点的阶;将k′编码为包含d个元素的数组C′,所述d个元素对应k′转换成的w行d列的矩阵中的各列二进制比特位序列;使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,输出循环结果。本申请通过在每次循环计算过程中设置一次倍点运算和点加运算,实现了完全抗SPA攻击和抗故障攻击。
Description
技术领域
本发明涉及但不限于信息安全技术领域,尤其涉及一种芯片中的标量乘实现方法及装置、计算机可读存储介质。
背景技术
随着计算机技术的发展、社会信息化程度的不断提高,信息安全问题越来越受到人们的广泛重视。椭圆曲线密码学(Elliptic curve cryptography,ECC) 与传统的公钥加密算法相比,具有安全性高、计算速度快、存储空间小、带宽要求低、计算参数少等优点,已被广泛地应用于信息安全领域。
标量乘运算是椭圆曲线公钥密码体制中的一个核心运算步骤,也是最耗时的一个运算步骤。梳状算法(Comb Method)是椭圆曲线标量乘运算中常使用的一种快速算法。但是,现有的梳状算法在执行过程中,会出现“非零窗口”和“零窗口”,攻击者可通过示波器观察功耗曲线上“非零窗口”与“零窗口”的差异性进行分析,以获取标量的部分信息,因此现有的梳状算法不能抵抗简单功耗分析(Simple Power Analysis,SPA)攻击。
发明内容
为了解决上述技术问题,本发明提供了一种芯片中的标量乘实现方法及装置、计算机可读存储介质,能够使芯片中的标量乘运算可完全抗SPA攻击和抗故障攻击。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种芯片中的标量乘实现方法,包括:
获取第一标量k、固定坐标点P、窗口宽度w和椭圆曲线E(Fp)的参数;
生成正整数r,r∈Fp,计算窗口个数其中,为向上取整符号,l为第一标量k的二进制比特长度,m为正整数r的二进制比特长度,将第一标量k加r*n再减去(2d-1)得到的结果赋值给第二标量k′,其中,n为椭圆曲线基点的阶;将第二标量k′编码为包含d个元素的数组C′,所述d个元素对应第二标量k′转换成的w行d列的矩阵中的各列二进制比特位序列;
在一实施例中,所述生成的正整数r为随机数,且r的二进制比特长度 m大于或等于32比特。
在一实施例中,所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,包括:
将无穷远点赋值给坐标点Q;
对于i从(d-1)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算: Q←Q+C′[i]P+P。
在一实施例中,所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,包括:
将所述数组C′的第d个元素C′[d-1]与所述固定坐标点P标量乘再加上所述固定坐标点P后得到的坐标点赋值给坐标点Q;
对于i从(d-2)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算: Q←Q+C′[i]P+P。
在一实施例中,所述方法之前还包括:
在所述芯片中存储2w个所有可能的窗口值,并存储所有可能的窗口值与所述固定坐标点P执行标量乘再加上所述固定坐标点P后得到的坐标点,以供循环执行所述点加运算时直接调用。
在一实施例中,在所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P之前,所述方法还包括:
将所述固定坐标点P从仿射坐标系转换至射影坐标系;
在所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算 Q←2Q与点加运算Q←Q+C′[i]P+P之后,所述方法还包括:
将循环运算的结果从射影坐标系转换至仿射坐标系。
在一实施例中,所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,包括:
生成随机数λ,λ≠0且λ∈Fp,对所述固定坐标点P进行坐标点掩码处理,得到掩码后的坐标点P′(λ2x,λ3y,λ);
使用数组C′中的元素C′[i]与所述掩码后的坐标点P′(λ2x,λ3y,λ)循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P′+P′。
在一实施例中,所述生成正整数r之前,所述方法还包括:
对所述获取的参数进行参数校验,如果参数校验通过,执行所述生成正整数r的步骤;如果参数校验没有通过,停止执行所述生成正整数r的步骤并报错。
在一实施例中,所述输出循环结果之前,所述方法还包括:
检验所述循环结果是否位于所述椭圆曲线E(Fp)上,如果位于所述椭圆曲线E(Fp)上,执行所述输出循环结果的步骤;如果没有位于所述椭圆曲线E(Fp) 上,确定标量乘运算结果错误并报错。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有芯片中的标量乘实现程序,所述芯片中的标量乘实现程序被处理器执行时实现如以上任一项所述的芯片中的标量乘实现方法的步骤。
本发明实施例还提供了一种芯片中的标量乘实现装置,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的标量乘实现程序,以实现如以上任一项所述的芯片中的标量乘实现方法的步骤。
本发明实施例还提供了一种芯片中的标量乘实现装置,包括获取单元、编码单元、计算单元,其中:
获取单元,用于获取第一标量k、固定坐标点P、窗口宽度w和椭圆曲线 E(Fp)的参数,将第一标量k、窗口宽度w和椭圆曲线E(Fp)的参数输出至编码单元,将固定坐标点P输出至计算单元;
编码单元,用于生成正整数r,r∈Fp,计算窗口个数其中,为向上取整符号,l为第一标量k的二进制比特长度,m为正整数r的二进制比特长度,将第一标量k加r*n再减去(2d-1)得到的结果赋值给第二标量k′,其中,n为椭圆曲线基点的阶;将第二标量k′编码为包含d个元素的数组C′,所述d个元素对应第二标量k′转换成的w行d列的矩阵中的各列二进制比特位序列,将数组C′输出至计算单元;
本发明的技术方案,具有如下有益效果:
本发明提供的芯片中的标量乘实现方法及装置、计算机可读存储介质,通过将标量经过编码之后均为非零窗口,消除了零窗口,使得功耗曲线上执行过程保持一致性,进而使得整个标量乘计算过程能够抵抗SPA的攻击;并且,本申请的标量乘实现过程中没有条件语句的执行,避免了条件语句被旁路的风险,并且点加运算的结果会累计到整个标量乘的运算过程,攻击者在任何一个点加运算上注入错误,最终的运算结果都不正确,保证了整个标量乘实现过程的安全性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例的一种芯片中的标量乘实现方法的流程示意图;
图2为本发明实施例的一种芯片中的标量乘实现装置的结构示意图;
图3为本发明实施例的另一种芯片中的标量乘实现装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
有限域Fp上的椭圆曲线常用的表示形式有两种:仿射坐标表示和射影坐标表示。
(1)仿射坐标表示
当p是大于3的素数时,Fp上的椭圆曲线方程在仿射坐标系下可以表示为:
y2=x3+ax+b,其中a,b∈Fp,并且满足(4a3+27b2)mod p≠0;
椭圆曲线上的点集记为E(Fp)={(x,y)|x,y∈Fp且满足曲线方程 y2=x3+ax+b}∪{O},其中O是椭圆曲线的无穷远点。
在仿射坐标系下,椭圆曲线上点P(非无穷远点)的坐标表示为P=(xP,yP),其中xP和yP分别称为点P的x坐标和y坐标。
椭圆曲线E(Fp)上点的数目用#E(Fp)表示,称为椭圆曲线E(Fp)的阶。
椭圆曲线E(Fp)上的点按照下面的加法运算规则,构成一个阿贝尔群:
a)O+O=O;
d)两个非互逆的不同点执行点加的规则:
设P1=(x1,y1)∈E(Fp)\{O},P2=(x2,y2)∈E(Fp)\{O},且x1≠x2,
e)倍点规则:
设P1=(x1,y1)∈E(Fp)\{O},且y1≠0,P3=(x3,y3)=P1+P1,则
(2)雅可比(Jacobian)加重射影坐标系
Fp上的椭圆曲线方程在Jacobian加重射影坐标系下可以表示为:
y2=x3+axz4+bz6,其中a,b∈Fp,并且满足(4a3+27b2)mod p≠0
椭圆曲线上的点集记为E(Fp)={(x,y,z)|x,y,z∈Fp且满足曲线方程 y2=x3+axz4+bz6。对于(x1,y1,z1)和(x2,y2,z2),若存在某个u∈Fp且u≠0,使得 x1=u2x2,y1=u3y2,z1=uz2,则称这两个三元组等价,表示同一个点。
若z≠0,记X=x/z2,Y=y/z3,则可从Jacobian加重射影坐标表示转化为仿射坐标表示:Y2=X3+aX+b;
若z=0,(1,1,0)对应的仿射坐标系下的点即无穷远点O。
Jacobian加重射影坐标系下,E(Fp)上点的加法运算定义如下:
a)O+O=O;
d)设点P1=(x1,y1,z1)∈E(Fp)\{O},P2=(x2,y2,z2)∈E(Fp)\{O}, P3=P1+P2=(x3,y3,z3)≠0,
若P1≠P2,则:
λ1=x1z2 2,λ2=x2z1 2,λ3=λ1-λ2,λ4=y1z2 3,λ5=y2z1 3,λ6=λ4-λ5,λ7=λ1+λ2,λ8=λ4+λ5,x3=λ6 2-λ7λ3 2,λ9=λ7λ3 2-2x3,y3=(λ9λ6-λ8λ3 3)/2,z3=z1z2λ3;
若P1=P2,则:
λ1=3x1 2+az1 4,λ2=4x1y1 2,λ3=8y1 4,x3=λ1 2-2λ2,y3=λ1(λ2-x3)-λ3, z3=2y1z1。
基于椭圆曲线的密码系统是由N.KobhtZ和VMiller在1985年提出的一种公钥密码体制,它的安全性建立在椭圆曲线离散对数问题(Elliptic Curve Discrete LogarithmProblem,ECDLP)的难解性上。与其它的公钥密码体制(如RSA(Ron Rivest、Adi Shamir、Leonard Adleman)、数字签名算法(Digital Signature Algorithm,DSA))相比,它的执行速度快、密钥长度短、安全性高。
在ECC密码算法实现的过程中,标量乘是最重要的一个运算操作。而标量乘Q=[k]P的计算可以采用多种不同的方式来实现,常见的有二进制按位扫描法、加减法、蒙哥马利阶梯法、宽度W的非相邻型(Non Adjacent Form, NAF(w))滑窗法和COMB编码法等。当给定的坐标点P为固定点时,在这些方法中,基于COMB编码方式实现的标量乘效率是最高的。
COMB编码方法实现的数乘运算是采用空间换时间的思想来实现的。当给定的坐标点P为固定点时,先预计算并存储大量的窗口点数据。在循环运算的过程中,窗口的坐标点数据直接从预存储的坐标点中提取,从而提高了运算效率。但是这种编码方式得到的窗口值有可能出现窗口0值,当窗口值为0时,则不会进行点加运算,从而不能抵抗SPA侧信道攻击。
COMB编码方式实现数乘运算的基本原理如下:
计算标量乘Q=[k]P。
令其中w为窗口宽度,在k的二进制左边填充dw-l个0,然后将k等分成w个二进制串,每个串有d bit,并使得k=Kw-1||…||K1||K0,将Kj表示成矩阵中的行向量。将k用矩阵表示如下,其中矩阵的列数表示窗口个数d,矩阵的行数表示窗口宽度w。
为提高计算速度,提前对所有可能的窗口位串进行如下预计算处理,并保存预计算坐标点,一共有2w-1个点(全0窗口值不需要预计算):
由于矩阵中每一列比特串构成的窗口取值范围都相同,因此窗口中二进制序列可以用(cw-1,...,c2,c1,c0)来表示,c的取值为0或1。预计算存储点可以用如下公式来计算:
[cw-1,...,c2,c1,c0]P=cw-12(w-1)d P+...+c222dP+c12dP+c0P
在计算标量乘Q=[k]P的过程中,每次循环操作处理一个窗口,即处理矩阵中的一列,窗口的坐标点数据直接从预计算存储的坐标点中进行提取。
COMB编码方法
输出:COMBw(k)=(Cd-1,...,C2,C1)(其中Ci表示上述矩阵中的第i列)
1)初始化数组C为全0;
2)对于i从0上升至w,执行:
3)返回C;
其中:<<为向左移位运算符,&为按位与运算符,|为按位或运算符。
从上述编码过程可以看到,数组C中每个元素的取值范围为[0,2w-1],每个元素C[i]对应矩阵k中的每一列二进制比特位序列这个列比特位序列组成的数值称之为窗口值,一共有个窗口。当矩阵的某一列为全0比特时,则对应的窗口值也为0。
COMB编码实现数乘过程
基于COMB编码的标量乘Q=[k]P的实现过程描述如下:
设定编码的窗口宽度w,预计算并存储结果点[cw-1,...,c2,c1,c0]P= cw-12(w-1)dP+…+c222dP+c12dP+c0P [cw-1,...,c2,c1,c0]P=cw-12(w1)dP+...+c222dP+c12dP+c0P,共2w-1个坐标点;
1)令Q←∞;
2)对于i从d-1下降至0执行:
a)Q←2Q;
b)如果(C[i]!=0)则执行Q←Q+C[i]P;
3)返回Q。
现有采用COMB编码方式的标量乘实现方法虽然实现运算的速度快,效率高,但是没有考虑到侧信道攻击的问题。攻击者通过点加及倍点运算功耗的不同,对原标量乘方案执行过程的功耗进行分析,可得到部分有关标量k 的敏感信息数据。
为了避免窗口为0不进行点加运算的情况,有的方案采用的是在窗口C[i] 等于0时,执行一次冗余的伪点加运算,然后将伪点加运算的结果点R存储在另一块地址空间,不参与点Q的累计运算过程。例如:
1)令Q←∞;
2)对于i从d-1下降至0执行:
a)Q←2Q;
b)如果(C[i]!=0)执行Q←Q+C[i]P;
否则执行R←Q+P;
3)返回Q。
该方案在窗口为0时,增加一次伪点加运算,并将伪点加的结果存储到另外的一块地址空间,而不参与整个标量乘的累计运算过程。这种方式可以抵抗SPA攻击,但不能有效地抵抗故障攻击(Fault Attack,FA),当攻击者在这些伪点加运算上注入错误,发现标量乘的运算结果没有发生改变时,从而能分辨出哪些是真正的点加运算,哪些是伪点加运算,因此达不到防护的目的。
本发明实施例的目的在于基于COMB编码方式实现标量乘的高效率性,在安全性方面进行提升。本发明对原COMB编码方式进行了改进,使得编码后的每个窗口均为非零窗口,避免窗口不同造成的差异性,并结合其它安全防护措施,来提高整个标量乘实现过程的安全性。
由于原COMB编码方案最后得到的部分窗口值等于0,而在标量乘循环的过程中,当窗口值等于0时,只执行倍点运算,而不执行点加运算。因此,本申请的标量乘实现方法考虑无论窗口值等于多少,都多执行一次Q=Q+P 的点加运算。通过上述的COMB数乘过程可以看出,对于l比特长度的标量k 矩阵来说,一共有列,即d个窗口,因此会多执行d次的Q=Q+P点加运算。考虑到实现的速度问题,因此可以把这个Q=Q+P点加运算在预计算存储点时就一并计算好,而在实际标量乘循环过程中,直接提取窗口值对应的预存储点坐标数据进行使用。
将点加运算Q=Q+P放在预计算阶段计算是指在计算原存储点的基础上多执行一次加点P的操作。即改进后的预计算存储点公式如下:
[cw-1,...,c2,c1,c0]P=cw-12(w-1)dP+...+c222dP+c12dP+c0P+P
原方案中窗口等于0对应的坐标点不需要存储,因此原方案需要预计算存储的坐标点个数为2w-1;而改进方案中窗口等于0对应存储的坐标点为点 P,因此需要存储的坐标点个数为2w。
由于每次循环操作都多执行了一次Q=Q+P的点加操作,而多执行的这个点加结果会累积参与到后续的倍点运算。一共进行了d次的循环过程,因此最后的执行结果相当于Q′=[k]P+(2d-1)P,它比原来的标量乘Q=[k]P多了个(2d-1)P。为了保持运算结果的正确性,因此需要提前将标量k执行一个减 (2d-1)操作。
为了避免出现在输入的标量k小于(2d-1)时,执行了减操作后小于零的情况,因此先对标量k执行加n,再执行减2d-1操作,即k′=k+n-(2d-1),其中 n为椭圆曲线基点的阶。对得到的新标量k′按照上述编码过程进行窗口值编码。
如图1所示,根据本发明实施例的一种芯片中的标量乘实现方法,包括如下步骤:
步骤101:获取第一标量k、固定坐标点P、窗口宽度w和椭圆曲线E(Fp) 的参数;
在本发明的一实施例中,所述方法之前还包括:
在所述芯片中存储2w个所有可能的窗口值,并存储所有可能的窗口值与所述固定坐标点P执行标量乘再加上所述固定坐标点P后得到的坐标点,以供循环执行所述点加运算时直接调用。
本实施例通过预先存储所有可能的窗口值与固定坐标点P执行标量乘再加固定坐标点P后得到的坐标点,在实际标量乘循环过程中,直接提取窗口值对应的预存储点坐标数据进行使用,可以提高运算的速度。
步骤102:生成正整数r,r∈Fp,计算窗口个数其中,为向上取整符号,1为第一标量k的二进制比特长度,m为正整数r的二进制比特长度,将第一标量k加r*n再减去(2d-1)得到的结果赋值给第二标量k′,其中,n为椭圆曲线基点的阶;将第二标量k′编码为包含d个元素的数组C′,所述d个元素对应第二标量k′转换成的w行d列的矩阵中的各列二进制比特位序列;
在本发明的一实施例中,所述正整数r为随机数,r的二进制比特长度m 大于或等于32比特。
需要说明的是,当r为比特长度大于或等于32比特的随机数时,对第一标量k的随机掩码(即对输入的标量数据添加一个随机数,以掩盖真实的标量数据)的效果更好,可达到更好地保护第一标量k的目的。掩码后第一标量k的二进制数据的比特0位和非0位进行了随机变换,这样可以避免第一标量k的信息的泄露。具体处理方式是:在计算标量乘的过程中,产生一个随机数r(r至少为32比特),对第一标量k进行掩码得到掩码后的标量 k″=k+r*n(其中n为曲线参数基点的阶)。因为[n]P=0,所以标量乘[k]P运算转换为计算[k″]P。由于后面的每次循环过程都多了一个Q=Q+P的点加的结果,而多出来的这个点加结果会累积参与到后续的倍点运算。一共进行了d 次的循环过程,为了保持运算结果的正确性,因此需要提前将标量k执行一个减(2d-1)的操作。
在本发明的一实施例中,在所述步骤102之前,所述方法还包括:
对所述获取的参数进行参数校验,如果参数校验通过,继续执行所述步骤102;如果参数校验没有通过,停止执行所述步骤102并报错。
该实施例通过曲线参数校验(即对ECC算法运算所需要的曲线参数进行验证,校验曲线参数是否为正确的参数数据),可以有效地防止曲线参数数据被篡改。例如,可以使用某种运算操作(如进行循环冗余校验(Cyclic Redundancy Check,CRC)或计算累加和等)先对曲线参数数据进行计算,得到一个校验值,并保存。而在执行标量乘时,再次计算曲线参数的校验结果,并与保存的校验值进行比对,若相等则可以正常地执行标量乘运算;若不一致,则表示曲线参数被篡改而停止运算并报错。
本发明实施例的标量乘实现方法在标量乘循环的过程中,没有条件语句的执行,避免了条件语句被旁路的风险,并且点加运算的结果会累计到整个标量乘的运算过程,攻击者在任何一个点加运算上注入错误,最终的运算结果都不正确,保证了整个标量乘实现过程的安全性。
在本发明的一实施例中,所述步骤103具体包括:
将无穷远点赋值给坐标点Q;
对于i从(d-1)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算: Q←Q+C[i]P+P;
输出坐标点Q。
在本发明的另一实施例中,所述步骤103具体包括:
将所述数组C′的第d个元素C′[d-1]与所述固定坐标点P标量乘后再加上所述固定坐标点P得到的坐标点赋值给坐标点Q;
对于i从(d-2)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算: Q←Q+C′[i]P+P;
输出坐标点Q。
在本发明的一实施例中,在所述步骤103之前,所述方法还包括:
将所述固定坐标点P从仿射坐标系转换至射影坐标系;
在所述步骤103之后,所述方法还包括:
将循环运算的结果从射影坐标系转换至仿射坐标系。
在该实施例中,所述射影坐标系可以为Jacobian加重射影坐标系或者其它的射影坐标系。
本实施例通过将循环运算从仿射坐标系移到射影坐标系中执行,可以加快整个标量乘实现方法的执行效率。
在本发明的一实施例中,所述步骤103具体包括:
生成随机数λ,λ≠0且λ∈Fp,对所述固定坐标点P进行坐标点掩码处理,得到掩码后的坐标点P′(λ2x,λ3y,λ);
使用数组C′中的元素C′[i]与所述掩码后的坐标点P′(λ2x,λ3y,λ)循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P′+P′;
输出坐标点Q。
本实施例通过坐标点随机掩码(即在进行标量乘运算前,先使用随机数对坐标点进行随机化处理,以掩盖真实的坐标点信息),可以避免标量乘运算中间过程坐标点信息的泄露。具体处理方式是:在计算标量乘的过程中,先将坐标点P转换为Jacobian射影坐标P(x,y,1),然后产生一个随机数λ(λ≠0 且λ∈Fp),对坐标点P进行掩码得到P′(λ2x,λ3y,λ)。
在本发明的一实施例中,所述输出循环结果之前,所述方法还包括:
检验所述循环结果是否位于所述椭圆曲线E(Fp)上,如果位于所述椭圆曲线E(Fp)上,执行所述输出循环结果的步骤;如果没有位于所述椭圆曲线E(Fp) 上,确定标量乘运算结果错误并报错。
该实施例通过标量乘结果点校验(即在执行完标量乘运算后,对运算得到的结果点Q(x,y)进行校验,查看其是否在给定曲线参数构成的椭圆曲线上),可以防止发生攻击者在运算过程中注入错误,使得最终的运算结果不正确的情况。在进行标量乘结果点校验时,可以将点Q的x坐标和y坐标代入椭圆曲线方程y2=x3+ax+b中,验证方程等式是否成立,若等式成立则表示标量乘运算结果正确;否则说明结果点不在给定的椭圆曲线上而报错。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有芯片中的标量乘实现程序,所述芯片中的标量乘实现程序被处理器执行时实现如以上任一项所述的芯片中的标量乘实现方法的步骤。
本发明实施例还提供了一种芯片中的标量乘实现装置,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的标量乘实现程序,以实现如以上任一项所述的标量乘实现方法的步骤。
如图2所示,本发明实施例还提供了一种芯片中的标量乘实现装置,包括获取单元201、编码单元202、计算单元203,其中:
获取单元201,用于获取第一标量k、固定坐标点P、窗口宽度w和椭圆曲线E(Fp)的参数,将第一标量k、窗口宽度w和椭圆曲线E(Fp)的参数输出至编码单元202,将固定坐标点P输出至计算单元203;
编码单元202,用于生成正整数r,r∈Fp,计算窗口个数其中,为向上取整符号,l为第一标量k的二进制比特长度,m为正整数r的二进制比特长度,将第一标量k加r*n再减去(2d-1)得到的结果赋值给第二标量k′,其中,n为椭圆曲线基点的阶;将第二标量k′编码为包含d个元素的数组C′,所述d个元素对应第二标量k′转换成的w行d列的矩阵中的各列二进制比特位序列,将数组C′输出至计算单元203;
本发明实施例的标量乘实现装置在标量乘循环的过程中,没有条件语句的执行,避免了条件语句被旁路的风险,并且点加运算的结果会累计到整个标量乘的运算过程,攻击者在任何一个点加运算上注入错误,最终的运算结果都不正确,保证了整个标量乘实现过程的安全性。
在本发明的一实施例中,如图3所示,所述标量乘实现装置还包括存储单元204,其中:
所述存储单元204,用于在所述芯片中存储2w个所有可能的窗口值,并存储所有可能的窗口值与固定坐标点P执行标量乘再加固定坐标点P后得到的坐标点,以供所述计算单元203循环执行所述点加运算时直接调用。
本实施例通过设置存储单元204,用于预先存储所有可能的窗口值与固定坐标点P执行标量乘再加固定坐标点P后得到的坐标点,在实际标量乘循环过程中,计算单元203直接提取存储单元204中存储的窗口值对应的预存储点坐标数据进行使用,提高了运算的速度。
在本发明的一实施例中,所述获取单元201还用于:
对所述获取的参数进行参数校验,如果参数校验通过,执行输出参数至编码单元202与计算单元203的步骤;如果参数校验没有通过,停止执行输出参数至编码单元202与计算单元203的步骤并报错。
在本发明的一实施例中,所述计算单元203具体用于:
将无穷远点赋值给坐标点Q;
对于i从(d-1)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算: Q←Q+C′[i]P+P;
输出坐标点Q。
在本发明的另一实施例中,所述计算单元203具体用于:
将所述数组C′的第d个元素C′[d-1]与所述固定坐标点P标量乘后再加上所述固定坐标点P得到的坐标点赋值给坐标点Q;
对于i从(d-2)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算: Q←Q+C′[i]P+P;
输出坐标点Q。
在本发明的一实施例中,所述计算单元203还用于:
在执行所述循环运算之前,将所述固定坐标点P从仿射坐标系转换至射影坐标系;在执行所述循环运算之后,将循环运算的结果从射影坐标系转换至仿射坐标系。
在该实施例中,所述射影坐标系可以为Jacobian加重射影坐标系或者其它的射影坐标系。
在本发明的一实施例中,所述计算单元203还用于:
生成随机数λ,λ≠0且λ∈Fp,对所述固定坐标点P进行坐标点掩码处理,得到掩码后的坐标点P′(λ2x,λ3y,λ);
使用数组C′中的元素C′[i]与所述掩码后的坐标点P′(λ2x,λ3y,λ)循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P′+P′;
输出坐标点Q。
在本发明的一实施例中,所述输出循环结果之前,所述计算单元203还用于:
检验所述循环结果是否位于所述椭圆曲线E(Fp)上,如果位于所述椭圆曲线E(Fp)上,执行所述输出循环结果的步骤;如果没有位于所述椭圆曲线E(Fp) 上,确定标量乘运算结果错误并报错。
示例性地,根据本发明实施例的一种芯片中的标量乘实现方法,具体包括如下过程:
输入:第一标量k=(kl-1,…,k1,k0),固定坐标点P,椭圆曲线E(Fp)相关参数(P,a,b,n,G,h);
输出:Q=kP。
2)提前预计算并存储坐标点:
[cw-1,...,c2,c1,c0]P=cw-12(w-1)dP+…+c222dP+c12dP+c0P+P,共2w个坐标点;
3)对曲线参数(p,a,b,n,G,h)进行CRC校验,如果校验失败则停止后续运算并报错;
4)产生32比特的随机数r(r≠0且r∈Fp),对第一标量k进行掩码后得到掩码后的标量K″=k+r*n(其中n为椭圆曲线基点的阶);
5)将掩码后的标量k″减去d位的全比特1,得到第二标量k′=k″-(2d-1);
6)按照前述的编码过程,对第二标量k′进行编码,并保存各个窗口的值,共d个窗口;
8)对点Q进行坐标系转换,将点Q从仿射坐标系转换到Jacobian射影坐标系:Q=(x,y)→(x,y,1);
9)产生256比特的随机数λ(λ≠0且λ∈Fp),对点Q进行坐标点掩码处理,得到Q=(x,y,1)→(λ2x,λ3y,λ);
10)对剩余窗口进行循环处理,每次循环过程处理矩阵的一列。循环过程如下:
对于i从d-2下降至0,执行:
{Q←2Q;
}
本发明实施例提供的芯片中的标量乘实现方法及装置、计算机可读存储介质,在保持原编码高效率的同时,也兼顾标量乘实现过程的安全性,本申请对原COMB编码方式进行了改进,使得编码后的每个窗口均为非零窗口,避免窗口不同造成的差异性,并且,本申请在实现标量乘循环的过程中,没有条件语句的执行,避免了条件语句被旁路的风险,并且点加运算的结果会累计到整个标量乘的运算过程,攻击者在任何一个点加运算上注入错误,最终的运算结果都不正确,能够有效地抗SPA和FA攻击。进一步地,通过在标量乘运算过程中辅加椭圆曲线参数校验、标量掩码、坐标点掩码及坐标点校验防护措施以保证整个标量乘实现过程的安全性。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种芯片中的标量乘实现方法,其特征在于,包括:
获取第一标量k、固定坐标点P、窗口宽度w和椭圆曲线E(Fp)的参数,Fp为素数域;
生成正整数r,r∈Fp,计算窗口个数其中,为向上取整符号,l为第一标量k的二进制比特长度,m为正整数r的二进制比特长度,将第一标量k加r*n再减去(2d-1)得到的结果赋值给第二标量k′,其中,n为椭圆曲线基点的阶;将第二标量k′编码为包含d个元素的数组C′,所述d个元素对应第二标量k′转换成的w行d列的矩阵中的各列二进制比特位序列;
2.根据权利要求1所述的方法,其特征在于,所述生成的正整数r为随机数,且r的二进制比特长度m大于或等于32比特。
3.根据权利要求1所述的方法,其特征在于,所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,包括:
将无穷远点赋值给坐标点Q;
对于i从(d-1)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算:Q←Q+C′[i]P+P。
4.根据权利要求1所述的方法,其特征在于,所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,包括:
将所述数组C′的第d个元素C′[d-1]与所述固定坐标点P标量乘再加上所述固定坐标点P后得到的坐标点赋值给坐标点Q;
对于i从(d-2)下降到0,对所述坐标点Q重复执行一次倍点运算:Q←2Q,并使用所述数组C′中的元素C′[i]与所述固定坐标点P重复执行一次点加运算:Q←Q+C′[i]P+P。
5.根据权利要求1所述的方法,其特征在于,所述方法之前还包括:
在所述芯片中存储2w个所有可能的窗口值,并存储所有可能的窗口值与所述固定坐标点P执行标量乘再加上所述固定坐标点P后得到的坐标点,以供循环执行所述点加运算时直接调用。
6.根据权利要求1所述的方法,其特征在于,在所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P之前,所述方法还包括:
将所述固定坐标点P从仿射坐标系转换至射影坐标系;
在所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P之后,所述方法还包括:
将循环运算的结果从射影坐标系转换至仿射坐标系。
7.根据权利要求6所述的方法,其特征在于,所述使用数组C′中的元素C′[i]与固定坐标点P循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P+P,包括:
生成随机数λ,λ≠0且λ∈Fp,对所述固定坐标点P进行坐标点掩码处理,得到掩码后的坐标点P'(λ2x,λ3y,λ);
使用数组C′中的元素C′[i]与所述掩码后的坐标点P'(λ2x,λ3y,λ)循环执行倍点运算Q←2Q与点加运算Q←Q+C′[i]P′+P′。
8.根据权利要求1所述的方法,其特征在于,所述生成正整数r之前,所述方法还包括:
对所述获取的参数进行参数校验,如果参数校验通过,执行所述生成正整数r的步骤;如果参数校验没有通过,停止执行所述生成正整数r的步骤并报错。
9.根据权利要求1所述的方法,其特征在于,所述输出循环结果之前,所述方法还包括:
检验所述循环结果是否位于所述椭圆曲线E(Fp)上,如果位于所述椭圆曲线E(Fp)上,执行所述输出循环结果的步骤;如果没有位于所述椭圆曲线E(Fp)上,确定标量乘运算结果错误并报错。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有芯片中的标量乘实现程序,所述芯片中的标量乘实现程序被处理器执行时实现如权利要求1至9中任一项所述的芯片中的标量乘实现方法的步骤。
11.一种芯片中的标量乘实现装置,其特征在于,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的标量乘实现程序,以实现如权利要求1至9中任一项所述的芯片中的标量乘实现方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811367516.4A CN109582284B (zh) | 2018-11-16 | 2018-11-16 | 一种芯片中的标量乘实现方法及装置、计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811367516.4A CN109582284B (zh) | 2018-11-16 | 2018-11-16 | 一种芯片中的标量乘实现方法及装置、计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109582284A CN109582284A (zh) | 2019-04-05 |
CN109582284B true CN109582284B (zh) | 2020-11-13 |
Family
ID=65922681
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811367516.4A Active CN109582284B (zh) | 2018-11-16 | 2018-11-16 | 一种芯片中的标量乘实现方法及装置、计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109582284B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110708160B (zh) * | 2019-10-10 | 2020-11-13 | 山东省计算中心(国家超级计算济南中心) | 基于sm2算法标量乘法编码的抗侧信道攻击方法及系统 |
CN111817847B (zh) * | 2020-06-17 | 2021-11-23 | 浙江大学 | 基于sike算法的旁路防御方法、装置、电子设备及可读介质 |
CN112131616B (zh) * | 2020-09-15 | 2022-02-18 | 郑州信大捷安信息技术股份有限公司 | 一种sm2算法的掩码运算方法及装置 |
CN113609511B (zh) * | 2021-09-30 | 2021-12-21 | 北京智芯微电子科技有限公司 | 数据处理和密钥保护方法、装置、设备、存储介质 |
CN114527956B (zh) * | 2022-01-25 | 2024-05-10 | 北京航空航天大学 | 抗spa攻击的sm2算法中非定点标量乘法的计算方法 |
CN115495764B (zh) * | 2022-09-29 | 2024-09-20 | 中金金融认证中心有限公司 | 点加运算模块以及应用其的公钥生成方法和加密解密方法 |
CN116527274B (zh) * | 2023-05-10 | 2024-02-06 | 山东省计算中心(国家超级计算济南中心) | 基于多标量乘快速计算的椭圆曲线验签方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101296076A (zh) * | 2007-04-29 | 2008-10-29 | 四川虹微技术有限公司 | 一种基于ecc的数字签名方案 |
CN104717060A (zh) * | 2015-03-10 | 2015-06-17 | 大唐微电子技术有限公司 | 一种攻击椭圆曲线加密算法的方法和攻击设备 |
CN107533454A (zh) * | 2015-05-06 | 2018-01-02 | 高通股份有限公司 | 用于固定执行流乘数再译码和标量乘法的方法和装置 |
-
2018
- 2018-11-16 CN CN201811367516.4A patent/CN109582284B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101296076A (zh) * | 2007-04-29 | 2008-10-29 | 四川虹微技术有限公司 | 一种基于ecc的数字签名方案 |
CN104717060A (zh) * | 2015-03-10 | 2015-06-17 | 大唐微电子技术有限公司 | 一种攻击椭圆曲线加密算法的方法和攻击设备 |
CN107533454A (zh) * | 2015-05-06 | 2018-01-02 | 高通股份有限公司 | 用于固定执行流乘数再译码和标量乘法的方法和装置 |
Non-Patent Citations (1)
Title |
---|
椭圆曲线中抗SPA和DPA攻击标量乘算法研究;童莲等;《计算机工程与应用》;20101231;第46卷(第35期);第72-74页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109582284A (zh) | 2019-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109582284B (zh) | 一种芯片中的标量乘实现方法及装置、计算机可读存储介质 | |
US9400636B2 (en) | Apparatus and method for calculating a result in a scalar multiplication | |
KR101255393B1 (ko) | 타원 곡선 점 곱셈 | |
JP5528848B2 (ja) | 故障耐性のある楕円曲線上の計算 | |
CN107040362B (zh) | 模乘设备和方法 | |
US9772821B2 (en) | Cryptography method comprising an operation of multiplication by a scalar or an exponentiation | |
Fan et al. | To infinity and beyond: Combined attack on ECC using points of low order | |
JP4668931B2 (ja) | 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置 | |
EP2523098B1 (en) | Finite field crytographic arithmetic resistant to fault attacks | |
US20110274271A1 (en) | Countermeasure method and devices for asymmetric encryption | |
KR20100098520A (ko) | 비밀 데이터를 획득하려는 공격으로부터 마이크로회로를 보호하는 방법 및 장치 | |
CN111835518B (zh) | 椭圆曲线公钥密码算法安全性测评中的错误注入方法及系统 | |
US20140294174A1 (en) | Efficient Prime-Number Check | |
JP2011510579A (ja) | 署名ダイアグラムを用いた非対称暗号方式のための対策方法およびデバイス | |
CN109600232B (zh) | 针对sm2签名算法的攻击验证、防护方法及装置 | |
CN108875416B (zh) | 椭圆曲线多倍点运算方法和装置 | |
KR101633148B1 (ko) | 페어링 연산 장치, 페어링 연산 방법, 및 페어링 연산 프로그램을 기록한 기록 매체 | |
CN113273131A (zh) | 使用共享的份额的计算设备 | |
US20060274894A1 (en) | Method and apparatus for cryptography | |
CN111480140B (zh) | 计算设备和方法 | |
Fournaris et al. | Secure and efficient rns software implementation for elliptic curve cryptography | |
EP2473912B1 (en) | Modular exponentiation resistant against skipping attacks | |
Dolev et al. | Verifiable computing using computation fingerprints within fhe | |
Akdemir et al. | Non-linear error detection for elliptic curve cryptosystems | |
Fournaris et al. | Secure and efficient RNS approach for elliptic curve cryptography |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |