专利名称:基于旁路算子的椭圆曲线抗旁路攻击方法
技术领域:
本发明涉及一种信息安全技术领域的方法,具体是一种基于旁路算子的椭圆 曲线抗旁路攻击方法。
背景技术:
旁路攻击(SCA)是基于物理特征的分析技术,攻击者可以在获得密码算法运 行载体(计算机、保密机、加密盒、智能卡等)的情况下,利用运行环境的特性 进行攻击,从而快速获得密钥,破译整个密码系统。由于椭圆曲线密码体制(ECC) 具有密钥短、加解密速度快、低功耗、窄带宽和存储空间小等特点,通常应用于 移动、手持等无线设备,使用环境相对恶劣,非常易受攻击。因此研究防御旁路 攻击技术的高性能椭圆曲线密码优化技术及其实现方案迫在眉睫。
经对现有技术文献的检索发现,B. Chevallier-Mames等在《IEEE Transactions on Computers》(IEEE计算机学报)(2004年53巻第6期,760-768 页)发表的"Low Cost Solutions for Preventing Simple Side-Channel Analysis: Side-Channel Atomicity"(防止简单旁路分析的低成本解决方案旁路算子)提 出了旁路算子的方法用以抵抗简单功耗攻击,该方法首先定义了不能被旁路分析 所识别的等价算子模块,然后通过插入伪操作,将一连续的指令序列表示为旁路 算子的重复执行序列,得到了椭圆曲线倍点一点加算子模块矩阵。但按上述方案 执行素域上的椭圆曲线点乘操作是错误的,该方案中添加的伪操作虽然扰乱了椭 圆曲线密码标量点乘操作的中间执行序列,但在点乘操作结束后这些伪操作的执 行结果没有互相抵消。造成所述错误的原因在于若干伪操作所使用的结果寄存 器和后续中间执行序列的某些基本操作使用的运算寄存器是相关的,即某一伪操 作的结果寄存器是后续某些基本操作的运算寄存器,使得伪操作的引入改变了执 行序列的中间结果,且其影响无法最终消除,并由此得到了错误的倍点一点加算 子模块矩阵。
发明内容
本发明的目的在于针对现有技术中的不足,提供一种基于旁路算子的椭圆曲 线抗旁路攻击方法,使其修正上述背景技术中现有方案的错误,在不增加计算复 杂度的前提下有效防范简单功耗攻击,可以用于密码理论、密码破解、安全芯片 设计、智能卡设计等领域。
本发明是通过以下技术方案实现的,本发明首先修正现有方案的错误,得到 有限域Fp上正确的椭圆曲线倍点-点加操作的旁路等价执行序列,并将其表示为
正确的椭圆曲线倍点一点加算子模块矩阵;然后针对椭圆曲线密码体制的高效、 优化、安全实现,制定其0++软件实现方案,并在该软件方案中实现椭圆曲线密 码体制加解密的核心步骤——有限域上基于旁路算子的椭圆曲线标量点乘操作。 该技术方案通过添加正确的伪操作序列,实现了椭圆曲线密码抵抗旁路攻击能力 的提高。
所述的现有方案是指背景技术中B. Chevallier-Mames等人在2004提出的 方案。
所述有限域Fp上正确的椭圆曲线倍点-点加操作的旁路等价执行序列,是
指重新选择伪操作序列及其执行寄存器后得到的与基本椭圆曲线点乘操作等价 的执行序列。具体为选择寄存器L代替现有方案中的相关寄存器,这是因为 寄存器Te只在中间操作的最后若干步由其他寄存器进行赋值,在这之前对其进
行的操作都可作为伪操作。
所述正确的椭圆曲线倍点一点加算子模块矩阵,是指所述有限域Fp上正确
的椭圆曲线倍点-点加操作的旁路等价执行序列的矩阵表示,具体为
0化9
4115443445 533111361 3 5551133113 5054453522 3351133113 222 2224613
1441154115 2222223515 4452242445 4995155515 1145 155515
2245155515 4335155515
4346256656 4486564424
1161144 114
144 1156 116
4462246616
所述有限域上基于旁路算子的椭圆曲线标量点乘操作,是实现椭圆曲线密
码体制加解密的基本步骤,具体为
已知定义在大素数域Fn (P为大素数)上的椭圆曲线E/Fn :y^x3+ax+b上的
点/^U,K,《),其中a,beFp,义、K、《分别为点A在雅可比坐标系下X、 Y、
Z坐标的值,已知密钥^(1, oU…,d)2,即W为历比特的二进制正整数,各比特 位分别为d, ^0,…,tl,且dfl,采用所述椭圆曲线倍点一点加算子模块矩 阵("二,)n化25,实现椭圆曲线上点的标量乘法尸尸《"X, K,么)的过程,其中A
为同一椭圆曲线E/Fp上的点,Jrf、 K、么分别为点尸在雅可比坐标系下X、 Y、 Z 坐标的值。
设使用的寄存器为A ,户0,…,9。首先为各寄存器赋初值
A^a, y 产《,疋=凡尼=《,允=龙,"= ;,^=2;,取中间变量人&并分别为其赋初
值/=/^2,5=1。然后执行以下寄存器赋值操作-
h"S) X 0H1),緣示矩阵(0化2s的第射亍;
O div 25)+ (-£/》X U" div 9);
及.=及.X及.;及.=及.+及.;
"M wk4 Hk 2 "ia "ky4 "k^
及.=一及.;及.=W. +及.;
Wk^ "W wk<8 wkJ>
其中""表示所述正确的椭圆曲线倍点一点加算子模块矩阵的第射于第7列 的矩阵元素。
之后将i的值变为i-s,如果G0,则重复上述寄存器赋值操作,否则寄存 器l y 2、厄的值就分别为点A的x、 Y、 z坐标,故尸尸(x, 疋,允)。A
为尸i经椭圆曲线密码体制处理后的结果。
所述椭圆曲线密码体制的0++软件实现方集,是为确保椭圆曲线密码体制 的高效、优化、安全实现而制定的〔++软件实现方案。具体为首先根据椭圆 曲线的数学结构确定实现椭圆曲线密码体制的层次,将椭圆曲线上点的操作逐 步分解为CPU能够负担的操作,然后按层次由低到高依次定义各层的数据类型, 并实现各层的基本数据操作。
所述实现椭圆曲线密码体制的层次,是指将椭圆曲线上点的操作分为三 层实现,最顶层是椭圆曲线上的密码系统;中间一层为椭圆曲线上点的操作, 包括椭圆曲线上点的加法和点的乘法;最底层为有限域上的操作,包括域上加 法、域上减法、域上乘法、域上求逆、域上求模等。
所述各层的数据类型及基本数据操作,是指为实现所述最底层有限域上 的操作,首先定义大整数类,继而构建模P整数类,P为大素数;随后实现素域 Fp上的基本数据处理操作,包括域上加法、域上减法、域上乘法、域上求逆、
域上求模;为实现所述中间层的椭圆曲线上点的操作,首先构建仿射坐标系点
类以及雅可比坐标系点类,并定义其互为友元类,随后在这两个类中分别实现
点的操作,并在雅可比坐标系点类中实现不同坐标系下的相互转化、相互操作,
所述基于旁路算子的点乘操作也在雅可比坐标点类中实现;为实现所述最顶层
的椭圆曲线上的密码系统,分别构建公私钥对类、实现曲线类等。
本发明能够保证椭圆曲线密码体制的快速、安全、正确实现,采用椭圆曲
线密码系统的分层软件实现方案,确保了各层实现的独立性,使得任何一层实
现的改变都不会对其他各层产生太大的影响,而任何一层的改进,都会提高椭
圆曲线密码系统的整体性能,提高抗旁路供给的能力。本发明可以很好地应用
于椭圆曲线密码系统的优化实现、高速椭圆曲线密码算法芯片的安全设计等应
用领域。
具体实施例方式
下面对本发明的实施例作详细说明本实施例在以本发明技术方案为前提下 进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限 于下述的实施例。
设实施例拟对明文必采用密钥^/进行椭圆曲线加密处理。按照椭圆曲线密 码体制,首先将明文i/转换为椭圆曲线E/Fp :y2^3+ax+b上的点尸,然后通过实
施椭圆曲线上点的标量乘法操作^c/尸,得到在同一椭圆曲线上的密文的点的表 示。。在具体实现时,选择素数域Fp上的的椭圆曲线参数可以固定。比如取椭圆
曲线方程y2=x3+ax+b, a、 beFp, a=0x bb8e5e8f bcll5el3 9fe6a814 fe48aaa6 f0adalaa 5df91985, b=0x 1854bebd c31b21b7 aefc80ab 0ecdl0d5 blb3308e 6dbfllcl,大素数p取0x bdb6f4fe 3e8bld9e 0da8c0d4 6f4c318c efe4afe3 b6b8551f ,基点x坐标取为0x 4ad5f704 8de709ad 51236de6 5e4d4b48 2c836dc6 e4106640,基点y坐标为Ox 02bb3a02 d4aaadac ae24817a 4ca3alb0 14b52704 32db27d2,基点阶n为Ox bdb6f4fe 3e8bld9e 0da8c0d4 0fc96219 5dfae76f 56564677。整个发明采用上述0++实现方案的具体实施过程如下
1、为得到椭圆曲线上密文的点,按照上述椭圆曲线密码体制的0++软件 分层实现方案,首先需要实现有限域Fp的操作。在有限域Fp下,域中的元素
都需要采用大整数的形式来表示,其中对于任意一个元素m,都有0Srn^ (p-l)。 设m-「log^1, t = 「m/32,。因此,可以将域元素存储于由t个32比特组成
的字中a = (at—i,.",^,apa。)。定义最底层大整数类class BIGINT6及模素数 类class Pint。具体的数据类型及其基本操作的定义示例如下
class BIGINT6
friend int operator>= (const BIG丽6 & A, const BIGI訓& B):
friend int operator> (const BIGINT6 & A, const BIGI謹& B);
friend int叩erator〈 (const BIGINT6 & A, const BIGI歸& B);
friend int operator《const BIGINT6 & A, c懇t肌工NT6 & B);
friend int operator^(const BIGINT6 & A, const BIGINT6 & B);
friend WORD32 —sub(const W0RD32 * pa,const W0RD32 * pb,W0RD32 * dest);
friend WORD32 —add(const W0RD32 * pa,const W0RD32 * pb,W0RD32 * dest);
friend ostream & operator《(ostream &output, const BIGINT6 & N); publicr
BIG而6(void);
BIGINT6(const int N);
BIGINT6 (const丽D32 N);
BIGINT6(const W0RD32 wor[]);
BIGINT6(const BIGINT6 &aBig); public:
BIGINT6(void);
/*We use a word as the smallest cell to avoid little-endia or big-endia problem. 氺 data : store 192 bit BIGINT 氺 The represent struct:
* data[5] || data[4] || data[3] || data[2] || data[l] II data[O]
* most significant word least significant word */ WORD32 data[6];
};
class Pint
friend Pint & operator十(const Pint & PA,const Pint & PB): friend Pint & operator-(const Pint & PA,const Pint & PB); friend Pint & opemor氺(const Pint & PA, const Pint & PB); friend int operator〉= (const Pint & A, const Pint & B); friend int operator>(const Pint & A, const Pint & B); friend int operator〈=(const Pint & A, const Pint & B); friend int operator〈(const Pint & A, const Pint & B); friend int operator== (const Pint & A, const Pint & B); friend int NAF(const Pint A, char * trsf—result); friend int BINARY(const Pint A, char * trsf—result); friend void SHIFTRIGHT(PInt & 1,unsigned int amt); friend ostream & operator《(ostream &output, const Pint & N); friend Pint & operator %(const Pint & P, const Pint & N ); friend Pint & ranBiglnt(void); public:
Pint(void);
Pint(const BIGINT6 &big); Pint(const W0RD32 wor[]); Pint(const Pint &P); Pint (const W0RD32 N); Pint (const irrt N); Pint & operator^(void)const; Pint & operator-(void)const; static int setPri—N(void);
static int setPri—P(void);
static Pint & getPrime(void); public:
PInt(void); private:
BIGINT6 pint;
static BIGINT6 pri;
};
2、按照上述〔++软件分层实现方案,在上述l的基础上实现素域上椭圆曲线 的点的基本操作。首先定义椭圆曲线上的点类,包括仿射坐标系点类class APoint 及雅可比坐标系点类class JPoint,两类互为友元类;其次,在雅可比坐标系点 类中实现不同坐标系下的相互转化、相互操作。数据类型及其操作的定义示例如 下-
class APoint
friend class JPoint;
friend APoint & operator十(const APoint & LP, const APoint & RP) ; 〃〃/ADDITI0N〃〃〃〃〃 friend APoint & operator-(const APoint & LP, const APoint & RP) ; 〃〃〃〃〃〃〃SUBTRATI0N〃 friend APoint & operator*(const Pint & k, const APoint & P) ; 〃〃/P0INT MULTIPLY〃〃〃〃 friend APoint & operator*(const APoint & P,const Pint & k);
friend ost匿m & operator《(ostream &output, const APoint & P); ///////////DISPLAY////// public:
APoint(void);
APoint(const APoint & P):
APoint (const Pint & x,const Pint & y);
APoint(const int x,const int y);
APoint (const JPoint & P);
APoint & operator-(void) const;層〃層層層NEGTIVE POINT層層層
int opera1:or== (const APoint &rP)const; 〃〃〃〃〃〃〃〃C0MPARE〃〃〃〃〃〃〃〃〃
int operatorl l(const APoint &rP)const; ///〃〃is一Couple no-〉0;yes-〉1 this = -rP〃〃///
int operator! (void)const: 〃/〃/〃/is infinite no-〉0;yes-〉1/〃///////〃
int is—on—curve (void) const; /〃//////is on the curve1 no->0;yes->l///〃///〃
public:
APoint(void);
private:
Pint Px; Pint Py:
};
class JPoint
friend class APoint;
friend JPoint & operator+(const JPoint & L,const JPoint & R):
friend JPoint & operator+(const JPoint & LP,const APoint & RP);
friend JPoint & operator十(const APoint & LP, const JPoint & RP);
friend JPoint & PointAddition(const JPoint & pi, const JPoint & p2);
friend JPoint & Doubling (const JPoint & p);
friend JPoint & operator-(const JPoint & L,const JPoint & R);
friend JPoint & operator-(const JPoint & LP,const APoint & RP);
friend JPoint & operator-(const APoint & LP,const JPoint & RP);
friend JPoint & operator*(const JPoint & P,const Pint & D);
friend JPoint & operator* (const Pint & D,const JPoint & P);
friend ostream & operator《(ostream &output, const JPoint & P); public:
JPoint(void);
JPoint(const Pint & x,const Pint & y,const Pint & z); JPoint(const int x,const int y,const int z); JPoint(const JPoint & P); JPoirrt (const APoint & P);
JPoint & operator-(void)const
int operator==(const JPoint &P)const; 〃〃〃〃/ 〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃is—Couple no-〉0;yes-〉1 this
int operator I I(const JPoint &rP)const; //////////////////////////////////////////is infinite* no-X);yes-
int operator!(void)const; public:
JPoint(void); private:
Pint PX;
Pint PY;
Pint PZ;
3、为提高椭圆曲线密码体制的抗旁路攻击能力,其关键操作一一椭圆曲线标 量点乘采用上述有限域上基于旁路算子的椭圆曲线标量点乘方案。具体的,在上 述2的基础上,在JPoint类的函数JPoint & operator*(JPoint & P, Pint & D) 中实现。具体步骤为-
首先定义所述倍点 一 点加算子模块矩阵("h >
int u[26] [10]=
{ {4, 1, 1, 5, 4, 4, 3, 4, 4, 5}, {5, 3,3,1, 1, 1, 3, 6, 1, 3}, {5, 5, 5, 1, 1, 3, 3, 1, 1, 3} , {5, 0, 5, 4, 4, 5, 3, 5, 2, 2},
{3, 3,5,1, 1,3, 3, l,l, 3}, {2,2,2,2, 2, 2,4, 6, 1,3}, {5, 1, 2, 1, 1, 5, 5, 1, 1, 5}, U, 4, 4, 1, 1, 5, 4, 1, 1, 5},
{2,2,2,2,2,2, 3,5, 1,5}, {4, 4, 5, 2, 2, 4, 2, 4, 4, 5} , {4, 9, 9, 5, 1, 5, 5, 5, 1, 5} , {1, 1, 4, 5, 1, 5, 5, 5, 1, 5},
{4, 4, 9, 5, 1,5, 5, 5,1, 5}, {2, 2, 4, 5, 1, 5, 5, 5, 1, 5}, {4, 3, 3, 5, 1, 5, 5, 5, 1, 5}, (5, 4, 7, 6, 2, 5, 5, 5, 1, 5},
{4, 3,4,6,2, 5, 6, 6, 5,6), {4, 4, 8, 6, 5, 6, 4, 4, 2, 4} , {3,3,9,6,5,6,6,6,5,6}, {3, 3, 5, 6, 5, 6, 6, 6, 5, 6},
{6,5,5,6, 3,6, 3, 6, 3, 6}, {1, 1, 6, 1, 1, 4, 4, 1, 1, 4} , {5, 5, 6, 6, 1, 2, 2, 6, 2, 6}, {1, 4, 4, 1, 1, 5, 6, 1, 1, 6},
{2, 2, 5, 1, 1, 6, 3, 6, 1, 6} , (4, 4, 6, 2, 2, 4, 6, 6, 1, 6}}:
其次,实现有限域上基于旁路算子的椭圆曲线标量点乘。设明文#对应的点 K,Z),《、K、《分别为点尸在雅可比坐标系下X、 Y、 Z坐标的值;设密 钥^为//7比特的二进制正整数,即^ (l,ct2,'",o02, 设经点乘处理后得 到的点为4KX,几,么),l R、 ^分别为点^在雅可比坐标系下X、 Y、 z坐标的 值;设方案实施中使用的寄存器为A,户0,…,9。具体过程为
(1) .各寄存器赋初值A=a,7 2=K,尼=《,7 7=Zb A>8=K,尼=《;
(2) .取中间变量厶s,并分别为其赋初值/=矿2,^ 1;
(3) .执行以下寄存器赋值操作
(3. 1)加(,s) X 0H1), A表示矩阵(O化M的第A行;
'0化9
(3. 2) "X (A div 25) + (-《)X div 9);
(3.3) 及.=及.x及.;
"M Wb4 "M
(3.4) 及.=/ . +及.;
"W "W "1^5
(3.5) 及.=一及.;
(3.6) 及.=及.+及.;
"k^ "k^S
(3.7)
(4).如果/20,则重复执行步骤3;否则寄存器《、尼、尼的值就分别为点 。的X、 Y、 Z坐标,故^= (X,几,乙)=(X尼,厄)。
以上过程的〔++实现示例如下:
JPoint & operator* (JPoint & P,PInt & D)
static JPoint res; if((!P)M(D == O))
res = INFINITE—POINT; else {
chax水d = new chsr [200];
int N = BINARY (D, d);
Pint R[10];
int i, s, k;
R
= coeA ;
R[l] = P.PX;
R[2] = P.PY;
R[3] = P.PZ;
R[7] = P.PX;
R[8] = P.PY;
R[9] = P.PZ;
i = N - 2;
s = 1;
while(i 〉= 0)
if(s == 1)
k = 0; else if(s == 0)
k = k + 1; if ( d[i] == 0)
s = k / 9;
else if( d[i] =- 1 )
s = k / 25; R[u[k][O]] = R[u[k][l]] * R[u[k][2]]; R[u[k][3]] = R[u陽]]+ R[u[k][5]]; R[u[k][6]] = -R[UW则; R[U[k][7]] =R[u[k][8]] + R[u[k][9]];
res.PX = R[l]; res.PY = R[2]; res.PZ = R[3]; delete [] d; } return res;
4、 经过上述3步,完成了椭圆曲线密码体制的0++软件分层实现。为得到 本实施例中密文在椭圆曲线上的点ft只需在主程序中调用上述有限域上基于旁 路算子的椭圆曲线标量点乘函数JPoint: :JPoint &叩erator^(JPoint & P, Pint & D),即可得
5、 最后再将该点C按照椭圆曲线密码体制重新编码,即可得密文的十六进 制串,通过添加正确的伪操作序列,实现了椭圆曲线密码抵抗旁路攻击能力的提 高。
以上实施例表明,本发明基于旁路算子抗旁路攻击方法能够提高椭圆曲线密 码体制防范简单功耗攻击的能力,采用椭圆曲线密码系统的分层软件实现方案, 确保了各层实现的独立性,有效提高了系统性能。
权利要求
1、一种基于旁路算子的椭圆曲线抗旁路攻击方法,其特征在于,首先修正现有方案的错误,得到有限域Fp上正确的椭圆曲线倍点-点加操作的旁路等价执行序列,并将其表示为正确的椭圆曲线倍点-点加算子模块矩阵,然后针对椭圆曲线密码体制制定其C++软件实现方案,并在该软件方案中实现有限域上基于旁路算子的椭圆曲线标量点乘操作,从而通过添加正确的伪操作序列,实现椭圆曲线密码抵抗旁路攻击能力的提高。
2、 根据权利要求l所述的基于旁路算子的椭圆曲线抗旁路攻击方法,其特 征是,所述有限域Fp上正确的椭圆曲线倍点-点加操作的旁路等价执行序列,是指重新选择伪操作序列及其执行寄存器后得到的与基本椭圆曲线点乘操作等价的执行序列,即选择寄存器T6代替现有方案中的相关寄存器。
3、 根据权利要求1所述的基于旁路算子的椭圆曲线抗旁路攻击方法,其特征是,所述正确的椭圆曲线倍点一点加算子模块矩阵,具体为 <formula>formula see original document page 3</formula>
4、根据权利要求l所述的基于旁路算子的椭圆曲线抗旁路攻击方法,其特 征是,所述有限域上基于旁路算子的椭圆曲线标量点乘操作,具体为 已知定义在大素数域Fp上的椭圆曲线E/Fp : y^x3+ax+b上的点,尸U,K, 《),P为大素数,其中a,beFp,龙、K、《分别为点,在雅可比坐标系下X、 Y、Z坐标的值,己知密钥^(l,oU…,^)2,即"为历比特的二进制正整数,各比特 位分别为d., A0,…,y rl,且&产1,采用所述椭圆曲线倍点一点加算子模块矩 阵("I,)。^2s,实现椭圆曲线上点的标量乘法尸尸"尸尸C^, R,么)的过程,其中几'0化9为同一椭圆曲线E/Fp上的点,J,、 K、乙分别为点尸在雅可比坐标系下X、 Y、 Z30化9 坐标的值;设使用的寄存器为A,户0,…,9,首先为各寄存器赋初值ta,兆= &《=^,屑=上,屑=凡屑=《,取中间变量/、 &并分别为其赋初值i^r2, rl, 然后执行以下寄存器赋值操作a=(,s) x a+i)'婊示矩阵(";;,k^s的第射亍,"X (A div 25) +(-4) X O div 9),及.=及.x及.;及.=及.+及.,"kfl "IU "kj "M UM及.=—及.;及.=及.+及.,"k^ "kj Hk<8 "UJ其中":,,表示所述正确的椭圆曲线倍点一点加算子模块矩阵的第射亍第〗列 的矩阵元素;之后将i的值变为i-s,则重复上述寄存器赋值操作,否则寄存器疋、v 2、先的值就分别为点乃的x、 y、 z坐标,故尸尸(n;^^(&^應),A为月经椭圆曲线密码体制处理后的结果。
5、 根据权利要求l所述的基于旁路算子的椭圆曲线抗旁路攻击方法,其特 征是,所述椭圆曲线密码体制的€++软件实现方案,具体为首先根据椭圆曲 线的数学结构确定实现椭圆曲线密码体制的层次,将椭圆曲线上点的操作逐步 分解为CPU能够负担的操作,然后按层次由低到高依次定义各层的数据类型, 并实现各层的基本数据操作。
6、 根据权利要求5所述的基于旁路算子的椭圆曲线抗旁路攻击方法,其特 征是,所述实现椭圆曲线密码体制的层次,是指将椭圆曲线上点的操作分为三 层实现,最顶层是椭圆曲线上的密码系统,中间一层为椭圆曲线上点的操作,包 括椭圆曲线上点的加法和点的乘法,最底层为有限域上的操作,包括域上加法、 域上减法、域上乘法、域上求逆、域上求模。
7、 根据权利要求5所述的基于旁路算子的椭圆曲线抗旁路攻击方法,其特 征是,所述各层的数据类型及基本数据操作,是指为实现所述最底层有限 域上的操作,首先定义大整数类,继而构建模P整数类,P为大素数,随后实现 素域Fp上的基本数据处理操作,包括域上加法、域上减法、域上乘法、域上求逆、域上求模;为实现所述中间层的椭圆曲线上点的操作,首先构建仿射坐标 系点类以及雅可比坐标系点类,并定义其互为友元类,随后在这两个类中分别 实现点的操作,并在雅可比坐标系点类中实现不同坐标系下的相互转化、相互 操作,所述基于旁路算子的点乘操作也在雅可比坐标点类中实现,为实现所述 最顶层的椭圆曲线上的密码系统,分别构建公私钥对类、实现曲线类。
全文摘要
本发明公开一种信息安全技术领域的基于旁路算子的椭圆曲线抗旁路攻击方法,包括以下步骤首先修正现有方案的错误,得到有限域F<sub>p</sub>上正确的椭圆曲线倍点-点加操作的旁路等价执行序列,并将其表示为正确的椭圆曲线倍点—点加算子模块矩阵;然后针对椭圆曲线密码体制制定其C++软件实现方案,并在该软件方案中实现椭圆曲线密码体制加解密的核心步骤,即有限域上基于旁路算子的椭圆曲线标量点乘操作,从而通过添加正确的伪操作序列,实现了椭圆曲线密码抵抗旁路攻击能力的提高。
文档编号H04L9/36GK101183945SQ200710172598
公开日2008年5月21日 申请日期2007年12月20日 优先权日2007年12月20日
发明者张爱新, 杨福祥 申请人:上海交通大学