一种基于信息泄露的公钥密码系统的私钥获取方法与流程

文档序号:12692027阅读:367来源:国知局
一种基于信息泄露的公钥密码系统的私钥获取方法与流程

本发明属于信息安全技术领域,具体内容涉及一种基于信息泄露的公钥密码系统的私钥获取方法。



背景技术:

随着计算机技术和信息安全技术的推广,企业界信息安全意识的逐步加强,为了满足日益增长的用户需求,密码设备的密码运算速度被一再的提升。在保证高性能密码运算的前提下,每台密码设备的安全性也至关重要。

许多密码系统和协议(如Diffie-Hellman密钥交换协议、ELGamal加密系统、ELGamal数字签名系统、DSA签名系统等)的安全性都是基于离散对数问题的困难性。这些加密系统和协议被有效的应用于互联网(保证电子邮件,家庭银行业务以及网页浏览器的安全性)、金融服务业(电子现金,信用卡交易,即时提款等服务)以及无线通信(寻呼机,手机)中。目前存在的解决经典离散对数问题的算法有baby-step giant-step method、Pollard’s rho method、index calculus method以及Pollard’s kangaroos method。其中index calculus method是目前最快的算法,当群元素的光滑密度适当的时候其时间复杂度是亚指数,否则仍是其中n是群的阶。其他几种算法平均情况下的时间复杂度均是随着密码学的发展,出现了一些特殊的离散对数问题用于解决实际中的密码学问题,比如在某个区间上的离散对数问题。该问题的出现是由于在实际应用中,如果没有进行有效的保护措施,敌手可能通过某些侧信道攻击的手段获取关于离散对数的某些比特位信息,从而推断出待求解离散对数问题的指数所在的区间范围,之后敌手在进行离散对数求解时只需要在该区间范围内求解即可。因此关注区间上离散对数问题的求解,在实际密码系统安全中有重要的用途。

Pollard's kangaroos method(即袋鼠算法)是求解该问题的一个经典算法,而此时本发明求得即对应于相应密码系统、协议的私钥或者随机数,实现了相关密码系统或随机数的攻击。对该算法的改进也一直倍受人们关注。本发明提出一个新的改进Pollard’s kangaroos算法,使得区间离散对数问题的求解效率得到提高。



技术实现要素:

本发明提出了一种基于信息泄露的公钥密码系统的私钥获取方法,主要是通过预定义可区分点条件和利用三角函数进行周期迭代的方式,优化了Pollard’s kangaroos算法中每次跳跃过程中的计算代价;并且只有当相关结果满足本发明给定的可区分条件时才进行完全乘法运算操作,从而使得Pollard’s kangaroos算法总的时间代价降低。

具体到某个应用,例如在经典的DH密钥交换协议中,Alice和Bob双方约定了素数p,G=<g>是中q阶的循环子群,整数g作为群G的生成元,其中1<g<p。Alice随机选择一个整数a(保密)作为私钥,并计算X=ga modp;Bob随机选择一个大整数b(保密)作为自己私钥,并计算Y=gbmodp(注意gb是g的b次幂);Alice把X发送给Bob,Bob把Y发送给Alice,Alice计算K=Ya=gab,Bob计算K=Xb=gabmod p;此时K即是共享的密钥,用来对明文信息进行加密。而由共享密钥是得不到私钥的。即当gab,ga,gb已知时,由计算离散对数问题的困难性保证了得不到私钥a或b,从而保证了DH协议的安全性。当敌手可能根据现有的侧信道攻击技术获取关于离散对数的某些比特位信息,获得私钥的所在范围,把范围记为[0,N]。当私钥a在区间[0,N]上,ga此时记为h,则通过一个算法求解gamodp=h,就可得到私钥a,从而对基于信息泄露的数字签名标准、DH协议等基于离散对数困难问题的密码系统实现攻击。本发明把待求的Alice的私钥记为n,在这种情下面给出计算n的算法,根据计算结果确定通信是否安全,该算法主要步骤有:

(1)固定索引集合S={1,2,…,η},并作为跳跃步集合,私钥的取值范围[0,N],取u=η2;p是一个素数,G=<g>是中阶为q的循环子群;令集合M定义为M={Mk=gk|k0S,k是整数};设置两个小整数参数d,ε满足固定一个小正整数l,并且预计算集合Ml={M∪{l}}l

(2)索引函数取为

(3)给定变量x,y∈G,对每个0≤i≤d-1,写成:其中0≤xi<ε。对每个0≤i≤d-1,定义ti=εiy mod 360(0≤ti<360);

(4)定义辅助标签函数ti的取值在(3)中得到。由上面过程,辅助索引函数取为

(5)预定义可区分点条件为

(6)一个搜索路径的迭代过程,对应到一个G中的序列:算法开始于某一初始值g0∈G,在集合S中随机选取初始值s0=s(g0)。不用计算的乘积,可利用即将带入上述计算得到下次索引值s1,同样不用计算出g1就可得这里在步骤(1)中已预计算出。依次计算索引值s2,s3…,每次迭代计算索引值完成一次跳跃的过程中,都不用计算完全乘法,只有满足预定义可区分点的条件,即函数的结果落入区间中时,才计算一次完全乘法,并把结果存入相应的索引表中。获得此时对应的其中,已预计算,可通过查表得。

本发明通过定义两只kangaroos(表示两个迭代过程),分别记为T和W计算得到私钥n,其中,T和W分支对应的指数分别从区间[0,N]中点(即对应g0=gN/2)和g'0=h开始迭代跳跃,交替执行上述过程。分支T和W分别在集合S中随机选取初始值s0=s(g0)和s'0=s(g'0)并令两分支初始跳跃点和跳跃距离分别为和d0(T)=0,d0(W)=0。用Ti,Wj分别表示两分支当前所在的第i(j)次跳跃过程,i和j分别从0开始。则按T0、W0、T1、W1、T2、W2…Ti-1、Wi-1如此交替执行下去,当Ti或Wj分支中函数的结果落入区间即满足预定义可区分点条件时,计算出当前分支对应的跳跃点值gi或gj,然后以三元组(gi,T/W)的形式记录。这里用di(T)记录T分支的前i次的跳跃距离和用dj(W)记录W分支的前i次的跳跃距离和,即对应各自三元组中的值,然后将三元组各自以gi或gj为索引存入索引表Lt或Lw中。某个gi被不同类型分支(T或者W)kangaroos访问时即发生碰撞,算法终止,输出私钥n=N/2+di(T)-dj(W)。

与现有技术相比,本发明的积极效果为:

本发明中的新的改进Pollard’s kangaroos算法提出的函数是将一次完全整数乘法转换为多次小整数乘法的关键。函数计算量约为d||ε||||N||次比特运算,明显小于原来完全乘法所用的||p||2次比特运算。对于1024比特的素数的乘法用171次6比特与6比特乘法共进行了6156次比特运算和经典Pollard’s kangaroos算法进行完全乘法所用的1049576次比特运算相比,迭代计算量大大降低相比。从而具有降低算法的每次跳跃的计算代价的作用,使得算法总的运行效率得到提高。另外改进是:本发明通过设定预定义的可区分点条件,进行一定量的预计算和优化参数设置,使其更加简洁明确。分析和实验表明,相比之前的工作,该算法有明显优势。

附图说明

图1为分支T一次跳跃过程的示意图。

图2为分支W一次跳跃过程的示意图。

图3为算法中分支T和W的总的跳跃过程的示意图。

具体实施方式

图1是本发明采用kangaroo分支T的跳跃过程的示意图,描述了第i次跳跃过程。图2则是说明kangaro分支W的第j次跳跃过程。图3则说明改进Pollard’s kangaroos算法的两个分支总的运行情况,分支T和分支W依次执行,首先定义两个分支的各自初始值,然后迭代运行,当找到碰撞时程序终止。DH协议中p为素数,n为整数作为我们要求Alice的私钥,G=<g>是中q阶的循环子群。给定G的生成元g。在DH协议消息传输过程中,Alice公开的会话消息记为h,以及由于信息泄露密钥取值范围[0,N]。下面给出本发明的具体实施方式:

(1)固定索引集合S={1,2,…,η},并作为跳跃步集合,私钥的取值范围[0,N],取u=η2;令集合M定义为M={Ms=gs|s∈S};设置两个小整数参数d,ε满足固定一个小正整数l,并且预计算集合Ml={M∪{l}}l

(2)标签函数τ定义为:

(3)给定变量x,y∈G,对每个0≤i≤d-1,写成:其中0≤xi<ε。对每个0≤i≤d-1,定义ti=εiy mod 360(0≤ti<360);

(4)定义辅助标签函数ti的取值在(3)中得到。由上面过程,索引函数取为s=τ,辅助索引函数取为

(5)预定义可区分点条件为

(6)一个搜索路径的迭代过程,对应到一个G中的序列:算法开始于某一初始值g0∈G,在集合S中随机选取初始值s0=s(g0)。不用计算的乘积,可利用即将带入上述计算得到下次索引值若计算得出的索引值s满足预先定义的可区分点判断条件不用计算出g1就可得这里在步骤(1)中已预计算出。依次计算索引值s2,s3…,每次迭代计算索引值完成一次跳跃的过程中,都不用计算完全乘法,只有满足预定义可区分点的条件,即函数的结果落入区间中时,才计算一次完全乘法,并把结果存入相应的索引表中。我们获得此时对应的其中,已预计算,可通过查表得到。若已进行l次迭代还未发生碰撞,此时,将计算出的gl+1值存入表中,然后将其作为新的起始点再次执行算法即可。

定义两个搜索路径,分别记为T和W。T和W分支对应的指数分别从区间[0,N]中点(即g0=gN/2)和g'0=h开始向区间右侧跳跃,交替执行上述过程。分支T和W分别在集合S中随机选取初始值s0=s(g0)和s'0=s(g'0)并令两分支初始跳跃点和跳跃步分别为和d0(T)=0,d0(W)=0。用Ti,Wj分别表示两分支第i(j)次跳跃,i和j分别从0开始。则按T0、W0、T1、W1、T2、W2…Ti-1、Wi-1如此交替执行下去,当Ti,Wj分支中函数的结果落入区间即满足预定义可区分点条件时,计算出当前分支对应的跳跃点值gi或gj,然后以三元组(gi,T/W)的形式记录,这里用di(T)和dj(W)记录两个分支的各自跳跃步长距离的和,然后将三元组各自以gi和gj为索引存入索引表Lt或Lw中。某个gi被不同类型分支(T或者W)kangaroos访问时即发生碰撞,算法终止,输出私钥n=N/2+di(T)-dj(W)。

以T分支第i次跳跃过程和W分支第j次跳跃为例,本发明给出算法描述则,初始值给定后,di-1(T),di-1(W),yi-1,yj-1,si-1,sj-1,等已通过前面的i-1和j-1次跳跃过程得到,并作为相应分支下一轮的输入,给出算法1和算法2。

算法过程如下:

算法1.T分支一次跳跃(第i次跳跃)伪代码描述

输入:di-1(T)yi-1,si-1

输出:n

算法2.W分支一次跳跃(第j次跳跃)伪代码描述

输入:dj-1(W),yj-1,sj-1

输出:n;

算法实例:给定一个32比特的素数p=2147483659,g0=29参数取ε=8,N = 50,索引集合S={1,2,3,..,η},同时集合M={g0s|s∈S,g0=29},可区分点满足的条件为[η/2,η],即为[6,13]。给定h=44895682,则在区间[1,N]之内找x,使29xmodp=44895682。

预计算M和Ml=(M∪{1})1是至多l个Ms乘积的集合,而对于两个kangaroos,本发明分别记为分支T和分支W,然后把它们依次执行,将满足可区分点的数据存入表中,并在另一只访问的时候,将结果进行比较,找到碰撞则算法终止,否则继续进行。具体运行过程如下:

对分支W:

W分支初始条件:随机选取s0=6(si作为索引集合S的元素,则对应集合M中元素是),g0=h=44895682。

第一次跳跃:对g1计算:根据我们的定义则s1=10,满足给出的可区分点条件,故进行乘法运算得到g1=hg6=2131527625,将点(2131527625,6,W)记录入W表中。

第二次跳跃:对g2计算:s2=7满足可区分点条件进行乘法运算得到g2=hg6g10=371226886,将点(371226886,16,W)记录入W表中。

第三次跳跃:对g3计算:s3=11,满足可区分点条件,故进行乘法运算得到g3=hg6g10g7=1437182517,记录该点(1437182517,23,W)加入W表中。

第四次跳跃:对g4计算:则s4=7,满足可区分点条件,故进行乘法运算得到g4=hg6g10g7g11=1129469434,记(1129469434,34,W)加入W表中。

对分支T:

T分支初始条件:随机选取s0=1,g0=gN/2=2925mod p=1252290799。

第一次跳跃:对g1计算:根据定义则s1=11,满足本发明给出的可区分点条件,故进行乘法运算得到g2=g25g1=1956699847,将该点(1956699847,1,T)记录入T表中。

第二次跳跃:对g2计算:则可以发现s2=10满足可区分点条件,故进行乘法运算得到g2=g25g1g11=1250046359,将点(1250046359,12,T)记录入T表中。

第三次跳跃:对g3计算:s3=11,满足可区分点条件,故进行乘法运算得到g2=g25g1g11g10=1940414804,本发明将点(1940414804,22,T)记录入T表中。

第四次跳跃:对g4计算:则s4=13,可知s4满足可区分点条件,故进行乘法运算得g2=g25g1g11g10g11=1437182517,记录该点(1437182517,33,T)加入T表中。发现与W中元素找到碰撞。

执行上述算法发现,当分支T第四次跳跃时与分支W对应的表中元素1437182517发生碰撞。于是,程序返回x=25+33-23=35。验证得2935modp=44895682=h,从而求解出了该区间离散对数问题的值。

实验数据:

本发明中提出的算法和经典Pollard’s kangaroos算法分析时间代价对比情况见表1。对于1024比特的素数的乘法用了171次6比特与6比特乘法共进行了6156次比特运算和经典Pollard’s kangaroos算法进行完全乘法所用的1049576次比特运算相比,迭代计算量大大降低相比。从而具有降低算法的每次跳跃的计算代价的作用,使得算法总的运行效率得到提高。

表1时间代价对比

本发明用实例运行本发明中提出的算法同时对上面的分析用实例进行验证,本发明在微软的win7 32位系统中基于Microsoft Visual C++6.0的编程环境执行本发明的算法,相应的处理器是Intel(R)Core(TM)2Quad CPU Q8400@2.66GHz 2.67GHz。

表2对素数p=2147483659,g0=29算法执行结果

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者同等替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1