SM2白盒密码实现方法与流程

文档序号:14879905发布日期:2018-07-07 09:29阅读:452来源:国知局
本发明涉及的是一种信息安全领域的数字签名技术,具体是设计了国家商用密码sm2签名算法的一种白盒实现方法,该方法特别适用于各种手机钱包、第三方支付平台等软件。
背景技术
:sm2是国家密码管理局发布的椭圆曲线公钥密码算法,可用于公钥加密、数字签名等。在实际应用中,攻击者通过一些技术手段可对sm2算法实施白盒攻击,破解签名私钥。例如,攻击者通过木马植入、分析程序漏洞、盗取移动终端等途径,可对移动终端上的sm2算法进行二进制追踪、观察算法执行结果、控制算法使用随机数、开展程序静态分析、修改和改变运行状态等,破解签名私钥,伪造对虚假消息的签名。技术实现要素:本发明针对现有技术存在的上述不足,提出一种sm2签名算法的白盒实现方法,该方法的安全性强于已有方案,即在白盒攻击下签名私钥不可破解,这种不可破解性具有严格的理论保证。因此,本方法首先可应用于任何需使用数字签名方案的场景,实现数据来源确认、数据完整性保护、消息与签名不可抵赖等安全需求。本发明特别适用于签名算法运行于移动终端的场景。在移动终端存在程序漏洞、木马侵入、设备被盗取等安全风险下,本方法仍能保证攻击者不能破解签名私钥。本发明是通过以下技术方案实现的:本发明以签名参数对消息进行签名后采用验证参数对消息与签名进行验证,其中:签名参数中包含由sm2椭圆曲线公钥密码算法为基础生成的基本参数以及由基本参数构建得到的签名参数表;验证参数中包含sm2椭圆曲线公钥密码算法为基础生成的基本参数以及由基本参数构建得到的验证参数表。所述的sm2椭圆曲线公钥密码算法,即国家密码管理局颁布的《sm2椭圆曲线公钥密码算法》。所述的基本参数包括:数域fq、椭圆曲线方程e、sm2椭圆曲线基点g=(xg,yg)、签名私钥da、验证公钥pa=[da]·g,其中:[k]表示kmodn,n为基点g在椭圆曲线群中的阶。所述的构建是指:使用sm2椭圆曲线基点g、签名私钥da、验证公钥pa、n、新增参数λ生成第一签名参数表t1、第二签名参数表t2、第三签名参数表t3、验证参数表t4,生成表后删除da。所述的新增参数λ为第一签名参数表t1、第二签名参数表t2的行数,其值优选为大于2log(nn)的整数,其中:n为一个签名私钥在其使用周期内可能签名的消息数上界,log为底数为2的对数运算。所述的签名参数是指:(g,pa,t1,t2,t3),即sm2椭圆曲线基点g、验证公钥pa、第一签名参数表t1、第二签名参数表t2、第三签名参数表t3。所述的验证参数是指:(g,pa,t4),即基点g、验证公钥pa和验证参数表t4。所述的第一签名参数表t1共λ行,其第i行值为[ui]·g,其中:i=1,2,…,λ,ui是zn上独立均匀随机数,zn为模n剩余类,·为椭圆曲线群上点乘运算。所述的第二签名参数表t2共λ行,其第i行值为[(1+da)-1·ui],其中:i=1,2,…,λ,u1,…,uλ即是生成t1时所用的随机数。所述的第三签名参数表t3共l行,其中l表示n的二进制表示长度,第i行值为[(1+da)-1·da·2i-1+randi],其中:i=1,2,…,l,randi是zn上独立均匀随机数。所述的验证参数表t4共l行,其第i行值为[randi](g+pa),其中:i=1,2,…,l,rand1,…,randl即是生成t3时所用的随机数。所述的签名过程:使用签名参数(g,pa,t1,t2,t3)对消息m进行签名,生成签名(r,s'),具体步骤包括:1)按文档《sm2椭圆曲线公钥密码算法》定义生成za,计算其中:h为杂凑函数;所述的za是用户的可辨识标识、部分椭圆曲线系统参数、用户公钥的杂凑值。2)均匀随机生成λ比特0-1随机串k,将k表示为k=kλkλ-1......k1;对所有满足ki=1的i值,将表t1中对应的i行值相加,得到3)计算r=(e+x1)modn,当r=0或[r]·g+(x1,y1)=0ec或(x1,y1)=[r]·pa时重执行步骤2),否则执行步骤4),其中:0ec指椭圆曲线群的幺元;4)对所有满足ki=1的i值,将表t2中对应的i行值相加,得到5)记r的二进制表示为rlrl-1......r1,对所有满足ri=1的i值,将表t3中对应的i行值相加得计算s'=s1-s2',生成签名(r,s')。所述的验证过程:使用验证参数(g,pa,t4)对消息与签名对(m,(r,s'))进行验证,具体步骤包括:1)当r不属于[1,n-1]时签名验证不通过,否则令计算2)计算[s']·(g+pa)+[r]·pa。记r的二进制表示rlrl-1......r1,对所有满足ri=1的i值,将表t4中对应的i行值相加,得到[δ]·(g+pa),其中:3)计算(x1,y1)=[s']·(g+pa)+[r]·pa+[δ]·(g+pa),当(x1,y1)=[r]·pa或[r]·g+(x1,y1)=0ec时签名验证不通过,否则执行步骤4);4)计算r=(e+x1)modn,当r=r时签名验证通过,否则验证不通过。技术效果与现有sm2签名算法标准实现相比,本发明具有白盒攻击下的签名私钥不可破解性,对任意攻击者,即使该攻击者能获得本白盒方法的签名方和验证方程序(含签名参数和验证参数),则无论其进行何种攻击与分析(如对软件实现控制代码执行攻击,对硬件实现进行电路分析、侧信道攻击等),该攻击者均不能计算出签名私钥。附图说明图1为实施例1示意图。具体实施方式实施例1如图1所示,本实施例涉及签名方和验证方,签名方生成白盒方法所有参数,将验证参数发给验证方,本地保留签名参数。当需对消息m签名时,签名方使用签名参数生成签名(r,s'),将消息与签名发给验证方,验证方使用验证参数对签名的有效性进行验证。在典型的移动支付应用中,签名方为智能移动终端,验证方为第三方支付平台,消息m为单笔交易记录,签名方对其发起的交易记录签名,将交易记录和签名发给验证方,验证方验证签名的有效性,实现交易记录的真实性和不可抵赖性等。本实施例签名和验证过程具体实施如下,签名方预先生成基本参数:数域fq、椭圆曲线方程e、椭圆曲线基点g、签名私钥da、验证公钥pa、λ,通过基本参数生成表t1,t2,t3,t4,生成表后删除da。以(g,pa,t1,t2,t3)作为签名参数,其中t1,t2,t3不公开,公开(g,pa,t4)作为验证参数。签名方通过签名参数对消息进行签名后将消息与签名发送至验证方,验证方使用验证参数对签名进行验证。本实施例具体包括以下步骤:步骤1:按照《sm2椭圆曲线公钥密码算法》设置数域fq、椭圆曲线方程e、基点g=(xg,yg),生成其它基本参数;由基本参数生成签名参数与验证参数;杂凑函数h使用商用密码标准sm3算法,该算法参见《sm3密码杂凑算法》。确定签名方标识id,za按《sm2椭圆曲线公钥密码算法》定义生成。步骤2:对消息m,签名方按
发明内容中所述签名步骤由签名参数(g,pa,t1,t2,t3)生成签名(r,s'),将消息m与签名(r,s')发给验证方。步骤3:收到消息m与签名(r,s')时,验证方按
发明内容所述验证步骤由验证参数(g,pa,t4)验证(r,s')的有效性。与现有sm2签名算法标准实现相比,本方法在白盒攻击下签名私钥da不可破解,而sm2签名算法的标准实现在白盒攻击下是不安全的。攻击者可实施多种白盒攻击破解签名私钥,例举三种破解方式:第一,当sm2签名算法的标准实现对签名密钥da未作任何保护时,若攻击者能观测内存,则其可直接读取da。第二,考察现有sm2签名算法的运行:对于消息m,sm2首先计算计算均匀生成随机数k∈[1,n-1];计算(x1,y1)=[k]·g;计算r=(e+x1)modn,若r=0或r+k=n,则返回至选择随机数k的步骤再重新计算,否则计算s=(1+da)-1·(k-r·da)modn,若s=0,则返回至选择随机数k的步骤再重新计算,否则最终签名为(r,s)。若攻击者能观测到sm2算法生成(r,s)用的随机数k,则可如下破解da(即使da被保护):由s=(1+da)-1·(k-r·da)modn,得(1+da)·s=(k-r·da)modn,进而(r+s)·da=(k-s)modn,因此da=(k-s)·(r+s)-1modn,da被破解。第三,当攻击者能控制sm2签名算法使用同一随机数k对两消息m1和m2进行签名(即使k被保护),则可如下破解da(即使da被保护):令(r1,s1)为m1的签名、(r2,s2)为m2的签名(注此处s1是现有sm2签名算法输出s的实施例,而不是指本方法内容中的s1),则s1=[(1+da)-1(k-r1da)]、s2=[(1+da)-1(k-r2da)],则[s1(1+da)]=[k-r1da]、[s2(1+da)]=[k-r2da],两式相减消去k可得[(s1-s2)(1+da)]=[(r2-r1)da],移项有[s1-s2]=[(r2+s2-r1-s1)da],因此计算出da=[(r2+s2-r1-s1)-1(s1-s2)],da被破解。而本方法在白盒攻击下签名私钥da不可破解,da的不可破解性可严格归约至椭圆曲线离散对数问题的困难性,因此具有可证明安全性。椭圆曲线离散对数问题(ecdlp)定义如下:给定基点g=(xg,yg)和[u]·g,其中u是1到n-1之间随机数,目标是计算u。目前针对ecdlp问题只有指数算法,即当前最快的计算ecdlp问题的算法运行时间是n的二进制表示长度的指数级。例如,当选择sm2的推荐参数时,n可表示为256位二进制数,即n的二进制表示长度为256,则当前最快计算ecdlp问题算法的时间复杂度为2256级,因此学术界认为ecdlp是困难问题。本方案具有以下安全性:任何攻击者在获得方案所有参数(g,pa,t1,t2,t3,t4)(包含签名方和验证方所有参数)后如果能在有效时间破解出签名私钥da,则ecdlp问题可在有效时间内计算。但这与ecdlp问题的困难性矛盾,因而不存在能破解签名私钥的攻击者。通过以下方法取得可证安全性:当给定基点g=(xg,yg)和[u]·g要计算u时,利用g和[u]·g构造出符合要求的随机(pa,t1,t2,t3,t4)(针对某未知的签名私钥da,da与u可有效转换),因此,如果存在攻击算法在获得(g,pa,t1,t2,t3,t4)时能破解da,则可调用该算法,给其输入(g,pa,t1,t2,t3,t4)得到da,再由da计算出u,从而解决ecdlp问题,导出矛盾。由签名私钥的不可破解性有如下结论:对任意攻击者,即使该攻击者能获得本方法的签名方和验证方程序(含签名参数和验证参数),则无论其进行何种攻击与分析(如对软件实现控制代码执行攻击,对硬件实现进行电路分析、侧信道攻击等),该攻击者均不能计算出da。实施例2在本实施例中,签名方预先生成基本参数:数域fq、椭圆曲线方程e、椭圆曲线基点g、签名私钥da、验证公钥pa、λ,通过基本参数生成表t1,t2,t3,t4,生成表后删除da。以(g,pa,t1,t2,t3)作为签名参数,其中t1,t2,t3不公开,公开(g,pa,t4)作为验证参数。签名方通过签名参数对消息进行签名后输出消息与签名至验证方,验证方使用验证参数对签名进行验证。本实施例具体包括以下步骤:步骤1:按照《sm2椭圆曲线公钥密码算法》设置数域fq、椭圆曲线方程e、基点g=(xg,yg),生成其它基本参数;由基本参数生成签名参数与验证参数;杂凑函数h使用商用密码标准sm3算法,该算法参见《sm3密码杂凑算法》,其输入是长度小于264比特的消息,输出是长度为256比特的杂凑值;签名方标识id选为“1234567812345678”,za按《sm2椭圆曲线公钥密码算法》定义生成。签名方签名消息m=“thexel'nagaareaseeminglyextinctraceofextragalacticscientists.theyarrivedinthemilkywaygalaxyintheirworldships,andtheretheybeganmanipulatingvariousspecies,intendingtocreatesomethingwithpurityofformandpurityofessence,asanecessarypartoftheirlifecycle.theyfirstmodifiedtheprotoss,anintelligentpsychicspeciestheydiscoveredontheoutlyingworldofaiur.totheirjoy,theydiscoveredtheprotosshadbothpurityofformandessence.however,thexel'nagapushedtheircreationtoofar,causingtheirpsychiclinktodisappearandtheirpurityofessencetovanish.theprotossfellintomadnessasthexel'nagaabandonedthem.”m长度为679字节(注:m消息末有一个空格)。步骤2:随机生成私钥da,计算公钥pa=[da]·g=(px,py),具体值如下:da=ce8af24e40bf5167f0831ce40fef5e94c8430793972df60e69cb4d1da8302fd8px=62534f07d3fbb38b3289c29e852ae89bd41bbf7627ff34eda1b075b6bd171b75py=5ffe87db80787516699849d45be8a60d4d7318f2a2c24dca3340df446ae1455a选λ=560,按
发明内容所述生成表t1,t2,t3,t4,由于表格行数较大,因此t1,t2,t3,t4的具体内容这里省略,注:本实施例的输出签名依赖于t1,t2,t3,t4的值。在签名中,随机生成k=8cee95b7fe75dc0108c38ff7549192cc534abe6b168ee6a20b53856b2dd4e5761e63326a472498a3eb40d7a8c497aaf00f7cfd4ff644a7b35df31b05fd6214856b94fa2d425c步骤3:生成消息m的签名(r,s')如下:r=3b9a2269a23cbc7dbbf32c0b60911c8e7f1ef7c70afe46febeca9ceefd4c0cf9s'=78ba9aa25260af8c3597368afae5ee0604d5a7cf6ea123d69053f8d5aa96d399步骤4:签名方将消息m与签名(r,s')发给验证方。步骤5:当验证方收到签名方的消息m与签名(r,s')时,采用验证算法验证签名,在本实施例中验证通过。针对消息m,本实施例在λ不同取值下、在多个不同手机平台上进行多次签名和验证算法,统计签名与验证时间,实验结果如下所示:上述手机配置如下:设备cpu内存操作系统摩托motogarmv7cortex-a71gandroid7.1.2lgnexus5armv7krait4002gandroid5.0华为荣耀4aarmv7msm89092gandroid5.1三星galaxys7edgearmv8msm89963gandroid7.0苹果iphone6armv81gios8.4苹果iphone5carmv71gios9.0.1笔记本电脑inteli5-6200u2gubuntu16.04服务器e5intele5-264332gubuntu14.04从上表中,本方法的签名与验证时间符合应用需求;与sm2标准实现运行时间对比来看,本方法的签名时间约是sm2标准实现的2-3倍,验证时间约为2倍。在此强调的是,本方法优点是通过在原有sm2算法上增加若干保护机制使得在白盒攻击下签名私钥da不可破解。实施例3相比较于实施例1,本实施例中生成表格t1,t2,t3,t4之后,改变表格行之间的对应关系。例如,使用排序算法f和g分别对表格t2和t4的行进行排序。在查表t2或t4过程中,对于查找的第i行,需要转为查找第f(i)或g(i)行。实施例4相比较于实施例1,本实施例中生成表格t1,t2,t3,t4之后,可使用置换改变表格行。例如,使用置换算法f更新表格t2的行。在查表t2过程中,对于查找的第i行,查找第f(i)行。实施例5在验证方和签名方彼此信任、共同生成签名的实际应用时,验证方和签名方可共同合作生成表格t1,t2,t3,t4。上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1