一种抗差分功耗攻击的SM2椭圆曲线签名验签硬件系统及方法与流程

文档序号:16630218发布日期:2019-01-16 06:30阅读:130来源:国知局
一种抗差分功耗攻击的SM2椭圆曲线签名验签硬件系统及方法与流程

本发明涉及sm2密码算法的技术领域,尤其涉及到一种抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统及方法。



背景技术:

信息安全问题是一个关乎国家主权及安全、社会稳定和民族文化传承的重要问题。其中的密码技术是保障信息安全的核心技术,是保证信息完整性、保密性和安全性不可缺少的技术。

随着密码技术和计算技术的发展,目前常用的1024位rsa算法面临严重的安全威胁,由于sm2算法安全性高、计算量小、处理速度快等优势,我们国家密码管理部门经过研究,决定采用sm2椭圆曲线密码算法替换rsa算法。但是,随着椭圆曲线密码体系(ellipticcurvecryptography,ecc)在信息安全领域的应用不断推广,针对ecc的密码攻击技术层出不穷。在众多攻击方法中,利用时间、功耗等旁路信息获取密码设备的相关密钥信息的旁路攻击(sidechannelattacks,sca)方式对密码芯片的安全造成了严重的威胁,其中功耗分析攻击最具威胁性和最有效的攻击方式,特别是对于安全芯片等硬件加密设备中加密算法的实现,因为功耗在密码设备加密过程中是主要的旁路泄露信息。

功耗分析攻击基本上可以分为两类,简单能量分析(simplepoweranalysis,spa)和差分能量分析(differentialpoweranalysis,dpa)。所谓spa是指一种能够对密码算法进行过程中所收集到的功耗信息进行直接分析的攻击方法。对于不同的操作,密码设备会出现不同的能量消耗,从而攻击者可以从中判断出其中以什么样的顺序进行了什么样的操作。dpa是一种对密码芯片泄露的功耗信息进行统计分析从而恢复出密钥的攻击方法。dpa的攻击是通过结合多种监听数据与概率的分析工具,同时dpa优于具有使用资源非常少,更容易进行的特点,其攻击成功率要比spa更高,其攻击能力要比spa更强。因此,设计出能够防止dpa的安全加密模块对信息安全系统具有重大意义。

目前,针对dpa攻击的防御措施主要可以分为协议层、算法层、硬件结构层和电路逻辑层四个层次。其中电路逻辑层的防护效果最好,但是代价最大;协议层的防护代价最小,但是效果最差;硬件结构层和算法层的防护效果介于协议层和电路逻辑层之间。

对于ecc算法层的常见防御措施可分为以下三类:

1)密钥k的随机化:

首先计算出椭圆曲线e的阶n(椭圆曲线e(fp)上的点的数目用#e(fq)表示,称为椭圆曲线e(fp)的阶。),选择一个n位的随机数d,计算k'=k+d*n和q=k'p。由于椭圆曲线e的阶n是一个非常大的素数,取e的一个生成元p(x,y),其中p的阶是满足np=0,所以q=k'p=(k+d*n)p=kp。由于随机数d是随机变化的,因此密钥就能得到隐藏。

2)基点p的随机化:

在对点p进行标量乘法的时候,给p加上一个随机的点r,并且令s=kr,标量乘计算的是q'=k(r+p),接着计算q'-s=kp=q就得到最后的运算结果。由于p'=r+p是随机的,所以也无法通过运算结果来攻击获取密钥的值。

3)坐标系的随机化:

在进行标量乘运算的时候,为了避免耗时比较大的模逆运算,通常在射影坐标系上面进行运算。由于点的仿射坐标(x,y)和标准射影坐标(x,y,z)之间可以相互转化,而且点的标准射影坐标是可以等效随机的,即(x,y,z)=(λx,λy,λz)(其中λ≠0)。在进行标量乘运算前,通过随机参数λ对点p的坐标进行等效随机化,该方法也可以抗dpa攻击。

但是,上述三种防御措施均无法有效隐藏真实密钥和功耗相关性的问题,抗差分功耗攻击效果不太理想。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种破坏真实密钥信息和功耗曲线之间的相关性、给功耗分析获取信息带来很大难度、保证对差分功耗攻击的安全性、起到很好的抗差分功耗攻击作用的sm2椭圆曲线签名验签硬件系统。

为实现上述目的,本发明所提供的技术方案为:

一种抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统,包括sm2主控模块、签名生成模块、签名验证模块、随机数发生器、模运算模块、密码杂凑模块、点乘运算模块以及点加运算模块;所述签名生成模块和签名验证模块均与sm2主控模块连接,而随机数发生器、模运算模块、密码杂凑模块、点乘运算模块以及点加运算模块均与所述签名生成模块和签名验证模块连接;

其中,所述sm2主控模块用于调用签名生成模块和签名验证模块;

所述签名生成模块用于在接收到sm2主控模块发送的签名生成命令后,通过调用随机数发生器、模运算模块、密码杂凑模块、点乘运算模块以及点加运算模块,生成消息m的数字签名(r,s);

所述签名验证模块用于在接收到sm2主控模块发送的签名验证命令后,通过调用随机数发生器、模运算模块、密码杂凑模块、点乘运算模块以及点加运算模块,验证签名生成的消息m'及其数字签名(r',s');

所述随机数发生器用于产生随机数k∈[1,n-1];

所述模运算模块用于进行模加、模减、模乘和模逆运算;

所述密码杂凑模块用于产生对于的密码杂凑值,通过调用sm3密码杂凑算法;

所述点乘运算模块用于进行签名验签过程中需要进行的点乘运算;

所述点加运算模块用于进行签名验签过程中需要进行的点加运算。

为实现上述目的,本发明另外提供一种用于抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统的方法:

签名生成的步骤如下:

a1、输入用户a的原始数据,包括椭圆曲线系统参数a,b、阶n、基点g、公钥的杂凑值za、待签名的消息m、用户a的公钥pa、用户a的私钥da;

a2、计算在签名的生成过程之前,用密码杂凑函数对进行压缩;

a3、调用密码杂凑模块的密码杂凑函数hv,计算同时将e的数据类型转换成整数;

a4、调用随机数发生器产生随机数k∈[1,n-1];

a5、调用点乘运算模块计算椭圆曲线上的点(x1,y1)=[k]g,同时将x1的数据类型转换成整数;

a6、调用模运算模块计算r=(e+x1)modn,若r=0或r+k=n则返回a4;

a7、调用点乘运算模块、模运算模块和点加运算模块计算s=((1+da)-1·(k-r·da))modn,若s=0则返回a4;

a8、将得到的r、s的数据类型转换为字符串,消息m的签名为(r,s);

签名验证的步骤如下:

b1、输入用户b的原始数据,包括椭圆曲线系统参数a,b、阶n、基点g、公钥的杂凑值za、待验证的消息m′、用户a的公钥pa、收到的签名(r′,s′);

b2、检验r′∈[1,n-1]是否成立,若不成立则验证不通过;

b3、检验s′∈[1,n-1]是否成立,若不成立则验证不通过;

b4、计算

b5、调用密码杂凑模块的密码杂凑函数hv,计算同时将e′的数据类型转换成整数;

b6、将r′、s′的数据类型转换为整数,调用模运算模块计算t=(r′+s′)modn,若t=0,则验证不通过;

b7、调用点乘运算模块和点加运算模块计算椭圆曲线点(x′1,y′1)=[s′]g+[t]pa;

b8、将x′1的数据类型转换成整数,调用模运算模块计算r=(e′+x′1)modn,检查r=r′是否成立,若成立则验证通过;否则验证不通过。

进一步地,所述调用到的点乘运算模块的具体算法如下:先输入基点p(x,y),标量k=(kn-1,kn-2,···,k0)2以及调用随机数发生器生成随机数d;然后计算k'=k+d,通过k'计算得到q'=k'p;再计算s=dp,s'=-dp;最后得出q=q'+s'=kp。

进一步地,所述调用到的点乘运算模块的具体算法中采用到三种算法,包括计算正整数的窗口宽度w的naf算法,计算点乘的窗口naf算法以及计算点乘的从左到右的二进制算法;

当椭圆曲线的基点p为固定点时,点乘运算模块采用计算正整数的窗口宽度w的naf算法以及计算点乘的窗口naf算法;

当椭圆曲线的基点p为不固定点时,点乘运算模块采用计算点乘的从左到右的二进制算法。

进一步地,所述计算正整数的窗口宽度w的naf算法,具体如下:输入窗口宽度w,正整数k,初始i←0;当k≥1时,重复执行以下步骤:若k为奇数,则ki←kmod2w,k←k-ki,否则ki←0,i←i+1;直至k<1时,返回(ki-1,ki-2,...k1,k0)。

进一步地,所述计算点乘的窗口naf算法,具体如下:输入窗口宽度w,正整数k,p∈e(fq),通过计算正整数的窗口宽度w的naf算法计算然后对于i∈{1,3,5...,2w-1-1},计算pi=ip,初始q←∞;再之,对于i从l-1到0,重复执行以下步骤:q←2q,若ki≠0,则若ki>0,则q←q+pki,否则q←q-p-ki;最后返回q。

进一步地,所述计算点乘的从左到右的二进制算法,具体如下:输入正整数k=(ki-1,ki-2,...k1,k0)2,p∈e(fq),初始q←∞;对于i从t-1到0,重复执行以下步骤:q←2q,若ki=1,则q←q+p;最后返回q。

与现有技术相比,本方案原理和优点如下:

椭圆曲线密码体系中,加密、解密、签名和验签等的操作是以椭圆曲线上的点乘运算q=kp为基础来实现的,也就是说椭圆曲线上的标量乘法(点乘运算)的运算速度决定了整个密码体系的性能。本方案中的抗差分功耗攻击方法运用到标量乘法里,通过将改进的随机化标量方法加入到点乘运算里,破坏了真实密钥信息和功耗曲线之间的相关性,给功耗分析获取信息带来很大难度达到抵御功耗分析的目的,保证了对差分功耗攻击的安全性,从而起到很好的抗差分功耗攻击作用;而且这种方法简单易行,同时可以集成到多种加密芯片等硬件设备上。

附图说明

图1为本发明一种抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统的结构示意图;

图2为本发明一种抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统中点乘运算模块的算法流程图;

图3为本发明中计算正整数的窗口宽度w的naf方法的流程图;

图4为本发明中计算点乘的窗口naf方法的流程图;

图5为本发明中从左到右二进制计算点乘的方法的流程图;

图6为本发明中签名生成算法的流程图;

图7为本发明中签名验证算法的流程图。

具体实施方式

下面结合具体实施例对本发明作进一步说明:

参见附图1所示,本实施例所述的一种抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统,包括sm2主控模块1、签名生成模块2、签名验证模块3、随机数发生器4、模运算模块5、密码杂凑模块6、点乘运算模块7以及点加运算模块8;所述签名生成模块2和签名验证模块3均与sm2主控模块1连接,而随机数发生器4、模运算模块5、密码杂凑模块6、点乘运算模块7以及点加运算模块8均与所述签名生成模块2和签名验证模块3连接。

如图6所示,系统进行签名生成的具体步骤如下:

a1、输入用户a的原始数据,包括椭圆曲线系统参数a,b、阶n、基点g、公钥的杂凑值za、待签名的消息m、用户a的公钥pa、用户a的私钥da;

a2、计算在签名的生成过程之前,用密码杂凑函数对进行压缩;

a3、调用密码杂凑模块6的密码杂凑函数hv,计算同时将e的数据类型转换成整数;

a4、调用随机数发生器4产生随机数k∈[1,n-1];

a5、调用点乘运算模块7计算椭圆曲线上的点(x1,y1)=[k]g,同时将x1的数据类型转换成整数;

a6、调用模运算模块5计算r=(e+x1)modn,若r=0或r+k=n则返回a4;

a7、调用点乘运算模块7、模运算模块5和点加运算模块8计算s=((1+da)-1·(k-r·da))modn,若s=0则返回a4;

a8、将得到的r、s的数据类型转换为字符串,消息m的签名为(r,s);

如图7所示,系统进行签名验证的具体步骤如下:

b1、输入用户b的原始数据,包括椭圆曲线系统参数a,b、阶n、基点g、公钥的杂凑值za、待验证的消息m′、用户a的公钥pa、收到的签名(r′,s′);

b2、检验r′∈[1,n-1]是否成立,若不成立则验证不通过;

b3、检验s′∈[1,n-1]是否成立,若不成立则验证不通过;

b4、计算

b5、调用密码杂凑模块的密码杂凑函数hv,计算同时将e′的数据类型转换成整数;

b6、将r′、s′的数据类型转换为整数,调用模运算模块计算t=(r′+s′)modn,若t=0,则验证不通过;

b7、调用点乘运算模块和点加运算模块计算椭圆曲线点(x′1,y′1)=[s′]g+[t]pa;

b8、将x′1的数据类型转换成整数,调用模运算模块计算r=(e′+x′1)modn,检查r=r′是否成立,若成立则验证通过;否则验证不通过。

如图2所示,上述所调用到的乘运算模块的具体算法如下:先输入基点p(x,y),标量k=(kn-1,kn-2,···,k0)2以及调用随机数发生器生成随机数d;然后计算k'=k+d,通过k'计算得到q'=k'p;再计算s=dp,s'=-dp;最后得出q=q'+s'=kp。

其中,该算法中采用到如图3、4、5所示的三种算法,分别为计算正整数的窗口宽度w的naf算法,计算点乘的窗口naf算法以及计算点乘的从左到右的二进制算法;

当椭圆曲线的基点p为固定点时(即每一轮的数字签名验签的基点p都相同),点乘运算模块采用计算正整数的窗口宽度w的naf算法以及计算点乘的窗口naf算法;设置naf的窗口宽度w=4,每次系统进行签名验签的时候都不改变,可以先在硬件系统里面存储着±p,±3p,±5p,±7p这个八个值,计算点乘运算的时候直接调用这八个值进行运算,所以使用这种方法计算点乘运算所用的时间会更短;

当椭圆曲线的基点p为不固定点时(即每一轮的数字签名验签的基点p都不相同),点乘运算模块采用计算点乘的从左到右的二进制算法。

计算正整数的窗口宽度w的naf算法,具体如下:输入窗口宽度w,正整数k,初始i←0;当k≥1时,重复执行以下步骤:若k为奇数,则ki←kmod2w,k←k-ki,否则ki←0,i←i+1;直至k<1时,返回(ki-1,ki-2,...k1,k0)。

计算点乘的窗口naf算法,具体如下:输入窗口宽度w,正整数k,p∈e(fq),通过计算正整数的窗口宽度w的naf算法计算然后对于i∈{1,3,5...,2w-1-1},计算pi=ip,初始q←∞;再之,对于i从l-1到0,重复执行以下步骤:q←2q,若ki≠0,则若ki>0,则q←q+pki,否则q←q-p-ki;最后返回q。

计算点乘的从左到右的二进制算法,具体如下:输入正整数k=(ki-1,ki-2,...k1,k0)2,p∈e(fq),初始q←∞;对于i从t-1到0,重复执行以下步骤:q←2q,若ki=1,则q←q+p;最后返回q。

基于本实施例的点乘模型,常见的算法层中三种防御措施效果都不是最好的,(1)在密钥k的随机化方法中,当椭圆曲线的基点p为不固定点时,每次进行运算前都需要计算出椭圆曲线e的阶n,椭圆曲线e的阶n计算起来比较复杂和麻烦。(2)在基点p的随机化方法中,基于本实施例的点乘模型就只能执行从左到右二进制计算点乘的方法来进行点乘运算,从左到右二进制计算点乘的方法的运行时间比计算正整数的窗口宽度w的naf方法加计算点乘的窗口naf方法要长。(3)对于坐标系的随机化方法,由于本实施例中点乘运算里集成的点加倍点运算是在雅克比坐标下进行的,得到的结果再转换成仿射坐标,因此不适合应用坐标系的随机化方法,以防坐标转换过多容易出错。

本实施例中的抗差分功耗攻击方法运用到标量乘法里,通过将改进的随机化标量方法加入到点乘运算里,破坏了真实密钥信息和功耗曲线之间的相关性,给功耗分析获取信息带来很大难度达到抵御功耗分析的目的,保证了对差分功耗攻击的安全性,从而起到很好的抗差分功耗攻击作用;而且这种方法简单易行,同时可以集成到多种加密芯片等硬件设备上。

以上所述之实施例子只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。

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