用于抵御错误曲线攻击的ecdsa方法

文档序号:9846495阅读:1059来源:国知局
用于抵御错误曲线攻击的ecdsa方法
【技术领域】
[0001] 本发明涉及信息安全领域,特别是涉及一种用于抵御错误曲线攻击的ECDSA(椭 圆曲线数字签名算法)方法。
【背景技术】
[0002] 椭圆曲线数字签名算法(E⑶SA)理论介绍。数字签名对应于手写签名的数字化, 可以提供数据来源认证、具有数据完整性及不可否认性的特点。椭圆曲线数字签名算法就 是数字签名的椭圆曲线版本。ECDSA具体流程如下:
[0003] 输入参数组D = (q,FR, S,a,b,P,n,h),私钥d,消息m。其中,q为域的阶,FR为 域表示,S为种子,a,b为椭圆曲线参数,P为基点,η为点P的阶,h为余因子。
[0004] 输出签名对(r,s)。
[0005] 第1步、随机选择k e [1,n-1]。
[0006] 第2步、运算kP = (X1, Y1),之后把X1转化为整数,其中,(X1, Y1)为计算结果的横 坐标与纵坐标的值。
[0007] 第3步、计算r = X1Iiiod η,如果r = 0,那么跳回步骤1。
[0008] 第4步、计算e = H(m),其中,H(X)为哈希函数。
[0009] 第5步、计算s = k Ve+diOmod η,如果s = 0,那么跳回步骤1。
[0010] 第6步、输出签名对(r,s)。
[0011] 那么得到这个签名对的其他用户就可以通过公钥与签名对(r,s)判定是否为确 定用户的签名了。
[0012] 对原E⑶SA方案的错误曲线攻击。原E⑶SA是有可能通过错误曲线的攻击获取私 钥,这对于用户的信息是非常不安全的。假设对基点P的y坐标进行故障攻击,使其坐标从 (xp,yp)变为(xp,yp'),记为点P',设它落在的椭圆曲线为y 2 = x3+ax+b',设其中a与之 前的值不变,则存在
[0016] 由签名对可以得到r,从而得到X1,再根据不安全的椭圆曲线参数表达式得到yi。 由于这是一条安全性不强的椭圆曲线,那么攻击者很可能在可计算的时间内求解离散对数 (知道点P及(Xpy1))来得到k,再根据已知的 S,n,e和r可以推导出私钥d。
[0017] 在ECDSA抵御错误曲线攻击的一般方法。通常的对错误曲线的攻击的抵御方案就 是验算点P是否在原安全的椭圆曲线上,但是验算在工程上一般会做成一个函数,这样攻 击者通过向芯片注入毛刺是有可能跳过这步验算。为保证芯片的安全性,就必须多次在运 算过程中进行验算,但是过多的验算会极大牺牲芯片的运行效率。
[0018] 因此如果将运算点乘kP改进,在P遭受到攻击后,无法让攻击者得到正确的错误 点乘结果,那么错误曲线攻击就无法成功。

【发明内容】

[0019] 本发明要解决的技术问题是提供一种用于抵御错误曲线攻击的ECDSA方法,可以 有效地防止攻击者在ECDSA中通过错误曲线攻击获取用户的私钥。
[0020] 为解决上述技术问题,本发明的用于抵御错误曲线攻击的ECDSA方法,包括如下 步骤:
[0021] 输入参数组D = (q,FR, S,a,b,P,n,h),私钥d,消息m ;其中,q为域的阶,FR为 域表示,S为种子,a,b为椭圆曲线参数,P为基点,η为点P的阶,h为余因子;
[0022] 输出签名对(r,s);
[0023] 步骤1,随机选择k e [1,n-1];
[0024] 步骤2,取椭圆曲线的随机一点R,计算M = R+kP ;
[0025] 步骤3,计算M-R = (X1, Y1),之后把X1转化为整数;
[0026] 步骤4,计算r = X1Iiiod η,如果r = 0,那么跳回步骤1 ;
[0027] 步骤5,计算e = H(m),其中,H(X)为哈希函数;
[0028] 步骤6,计算s = k 1 (e+dr)mod η,如果s = 0,那么跳回步骤1 ;
[0029] 步骤7,输出签名对(r,s)。
[0030] 其中,(X1, Y1)为计算结果的横坐标与纵坐标的值。
[0031] 执行步骤2,在运算M = R+kP时,可按照以下方法计算:
[0032] 输入:k = (kt !,…k!,k0)2
[0033] 输出:R+kP ;
[0034] 定义点Q为一个存储空间,作为存储计算的临时值;
[0035] 第 1 步、Q -R;
[0036] 第2步、对于i从0到t-Ι,重复执行:
[0037] a)右 Ici= 1,则 Q = P+Q ;
[0038] b)P - 2P ;
[0039] 第3步、返回Q。
[0040] 其中,(kt ρ . . . Ic1, kQ)2为k的二进制表达形式。
[0041] 这样运算的好处是以一个随机的椭圆曲线上的点作为起点,之后在与基点或基点 的几倍点进行点加,如果基点被攻击后并不落在此椭圆曲线上,那么点加运算就会在两个 不同的椭圆曲线上进行,而这样步骤2计算出的M是无法通过M-R还原出点kP。因此只有 在点P和点R同时注入故障,并使这两点都落在相同的错误曲线上,错误曲线攻击才有可能 成功,这样的防护方法无疑极高的增加了攻击者的难度。同时这种方案相对于多次在程序 中插入检验P是否落在正确的椭圆曲线上,安全性也会更高。因为在点乘运算中,攻击者不 能选择跳过这些点乘程序,否则攻击者无法获取正确的错误结果。因此本发明可以有效地 防止攻击者在ECDSA中通过错误曲线攻击获取用户的私钥。
[0042] 同时本发明的实现不会太多地浪费效率,因为这种方法就比普通点乘方法多了一 步:将点乘的结果与点-R进行点加。
【附图说明】
[0043] 下面结合附图与【具体实施方式】对本发明作进一步详细的说明:
[0044] 附图是所述抵御错误曲线攻击的E⑶SA方法流程图。
【具体实施方式】
[0045] 结合附图所示,美国国家标准技术研究院(NIST)推荐了 5套参数用于素数域的椭 圆曲线密码。本实施例中采用其中的一套参数,具体如下:
[0046] 在有限域Fp中,有椭圆曲线E,其定义如下:
[0047] E :y2 = x3+ax2+b
[0048] 其中
[0049] p = Oxfffffffffffffffffffffffffffffffeffffffffffffffff ;
[0050] a = Oxfffffffffffffffffffffffffffffffefffffffffffffffc
[0051] b = 0x64210519e59c80e70fa7e9ab72243049feb8deeccl46b9bl
[0052] 基点G的坐标为
[0053] [0xl88da80eb03090f67cbf20eb43al8800f4ff0afd82ffl012,0x07192b95ffc8da7 8631011ed6b24cdd573f977alle794811]
[0054] 取点 R
[0055] [0x79680B8E20EDCDB6B85DlCBFB6E83858CAA7BA83D3C3CFB3,0xEAEF626AA6A8EA2 93D39ABF2FA32FC04AD3E483844B3CD07]假设私钥 d 为
[0056] d = 0x79d280ca6646596bl85134d44d99d50dcda801265c2c4d56
[0057] 步骤一,随机选择k e [
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1