一种防止对分组算法进行功耗分析和电磁辐射分析的防护方法转让专利

申请号 : CN201110257273.0

文献号 : CN102970132B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王连成袁永锋

申请人 : 北京中电华大电子设计有限责任公司

摘要 :

本发明提出了一种可以抵御通过功耗分析(简单功耗分析SPA和差分功耗分析DPA)或电磁辐射分析(DEMA)技术对分组算法模块、芯片和智能卡卡片等进行攻击以获取加解密运算密钥的技术。在有安全要求的各种应用领域中,例如但不限于,电子身份证、金融卡、社保卡等应用领域中,本发明能够地保护分组算法模块、芯片和智能卡卡片等的加解密运算密钥不被功耗分析或电磁辐射分析技术所破译获取,从而提高了对分组算法模块、芯片和智能卡卡片等的安全防护强度。本发明具有很好的创新性、实用性和有效性。

权利要求 :

1.一种防止对分组算法进行功耗分析和电磁辐射分析的防护方法,其特征在于在分组密钥算法的每轮或某些轮运算中,使用虚密钥的值来代替实际运算的SBOX S盒分组子密钥,虚密钥遍历所有的或部分的子密钥取值空间,当虚密钥和SBOX S盒分组子密钥相等时,运算结果存储到一个子寄存器中,当虚密钥和SBOX S盒分组子密钥不等时,运算结果存储到其它子寄存器中;当虚密钥遍历完毕所有的或部分的子密钥取值空间时,完成一轮运算,运算的正确结果则存储在多个分组子寄存器构成的寄存器中,然后在下一轮运算时,则对存储有上一轮正确结果的寄存器进行与前一轮相同的分组运算,以此类推,一直重复完成所有轮分组运算。

2.如权利要求1所述的一种防止对分组算法进行功耗分析和电磁辐射分析的防护方法,其特征在于本方法也能对分组算法重复进行多次完整的分组运算,并在多次重复的完整的分组运算中将各分组子密钥全部或部分遍历,最后输出正确结果。

说明书 :

一种防止对分组算法进行功耗分析和电磁辐射分析的防护

方法

技术领域

[0001] 本发明主要应用于信息安全技术领域,是一种适用于安全芯片的防攻击技术。

背景技术

[0002] 智能卡和计算机网络的迅速发展,不断普及,各种形式的专用密码电路和密码算法处理器得到广泛地应用,信息安全问题日益突出。常用的密码算法大致可以分为两类:以DES,AES(高级加密标准)为代表的分组密码算法和以RSA,ECC为代表的非对称算法。随着测量技术和分析技术的不断进步,攻击对象不再局限于密码算法本身,出现了许多针对密码算法实现载体(如集成电路)的攻击方法。侧信道攻击是这些方法中比较有代表性和威胁性较大的一种。一个实际应用的密码系统,其硬件部件在运行过程中不可避免要泄露一些信息,诸如功耗、时间、电磁波、以及差错信息等。利用上述泄露信息对密码系统进行攻击称为旁路攻击。常见的针对分组密码算法的旁路攻击技术是功耗分析和电磁分析。通过采集集成电路工作时的功耗曲线或者电磁辐射曲线,通过信号处理、数学分析,来获取密码算法的密钥。
[0003] 加密硬件以半导体器件为基础,由大量晶体管构成,当晶体管上发生充放电时,电子从硅衬底流过,消耗能量,同时产生电磁辐射。代表0,1信息的大量晶体管电路翻转会导致功耗不同,使运算密钥与功耗或电磁辐射之间存在相关性。功耗分析和电磁分析就是依赖于加密硬件在运算过程中功耗消耗和电磁辐射与加密信息和密钥的相关性。
[0004] 分组密码算法是信息安全的核心技术。通常的分组密码算法中,一个长的密钥在实际加密和解密的过程中,会拆分成多个子密钥。例如DES实际参与运算的48位密钥,会拆分成8组,每一组6个bits,和信息异或后送入8个不同的S盒。128位的AES类似,128位的密钥,拆分成16组,每组8个bits,和信息异或后参与以后的变换。这一点可以被攻击者所利用,容易遍历6bits或者8bits的子密钥,通过功耗分析或者电磁分析,先获取一部分密钥信息,逐一遍历分析其余的密钥分组,从而获得整个的密钥信息。
[0005] 要想消除集成电路工作过程中和密码相关的功耗特征或者电磁特征,是比较困难的事情,代价也很大。从功耗分析和电磁分析方法提出以来,针对分组密码算法,如DES,AES,提出了许多的防护方法,有算法级别的方法,例如使用随机掩码,密码运算过程中插入随机等待等;有电路级别的方法,例如双轨编码,差分逻辑等。这些方法对运算性能和面积影响比较大,尤其对智能卡而言,由此带来的面积和功耗增加的代价是难以接受的。

发明内容

[0006] 本发明针对分组密码算法,运用功耗分析或者电磁辐射分析,通过遍历子密钥的方式获取整个密钥的问题,提出来一种有别于其它防护方法的一种新的措施,本发明是采用RTL实现方式,使用标准单元库,逻辑资源开销比标准分组密码算法逻辑资源开销增加的较少。不需要特殊设计的门电路,不会过多增加逻辑资源开销,不需要掩盖运算功耗的复杂措施。本发明是通过使用虚密钥替换真实的子密钥,主动的遍历子密钥空间,使得攻击者运用功耗分析或者电磁辐射分析,通过遍历子密钥的方式获取整个密钥的攻击方法失效。通过本发明的方法,使得芯片进行密码运算时,功耗特征和电磁辐射特征和攻击者遍历的子密钥都相关。攻击者无法对其猜测的子密钥是否正确做出判断,从而使得攻击失效。
[0007] 本发明公开的一种防止对分组算法进行功耗分析和电磁辐射分析的防护方法,在分组密钥算法的每轮运算中,使用虚密钥的值来代替实际运算的SBOX分组子密钥,虚密钥遍历所有的或部分的子密钥取值空间,当虚密钥和SBOX分组子密钥相等时,运算结果存储到一个子寄存器中,当虚密钥和SBOX分组子密钥不等时,运算结果存储到其它子寄存器中;当虚密钥遍历完毕所有的或部分的子密钥取值空间时,完成一轮运算,运算的正确结果则存储在多个分组子寄存器构成的寄存器中,然后在下一轮运算时,则对存储有上一轮正确结果的寄存器进行与前一轮相同的分组运算,以此类推,一直重复完成所有轮分组运算。
[0008] 以一轮分组算法的加密运算的一个SBOX分组运算的2n+1次运算为例,对子寄存器RA[n+(i-1)*j:(i-1)*j](n表示子密钥的位数减一,i表示分组序号,j表示分组位宽)中的数据进行加密运算,当虚密钥和真正的子密钥相等时,运算结果存储到子寄存器RB[n+(i-1)*j:(i-1)*j],不等时,运算结果存储到子寄存器RC[n+(i-1)*j:(i-1)*j]。当虚密钥遍历完毕所有的子密钥取值空间时,完成一轮运算,寄存器RB[i*j-1:0]存储的是本轮的正确结果,寄存器RC[i*j-1:0]存储的是本轮的错误结果。等到再下一轮运算时,对子寄存器RB[n+(i-1)*j:(i-1)*j]存储的正确结果进行加密运算,正确的运算结果存储到子寄存器RC[n+(i-1)*j:(i-1)*j],错误的运算结果存储到子寄存器A[n+(i-1)*j:(i-1)*j]。等到再下一轮运算时,对子寄存器RC[n+(i-1)*j:(i-1)*j]存储的正确结果进行加密运算,正确的运算结果存储到子寄存器RA[n+(i-1)*j:(i-1)*j],错误的运算结果存储到寄存器子RB[n+(i-1)*j:(i-1)*j]。以此类推,直到完成所有的轮运算。
[0009] 对分组算法,本发明使用计数器,但不限于计数器方式实现虚密钥,替代了分组密码算法每轮运算所使用的子密钥,计数器(虚密钥)的范围可以是所有的一个分组子密钥空间,也可以是部分分组子密钥空间。当进行分组算法的每一轮的一个SBOX分组运算时,计数器开始遍历所有的或部分的子密钥空间,运算过程中的所有的子密钥都用计数器n+1替代。以分组算法的一轮加密运算进行2 次为例,对子寄存器RA[n+(i-1)*j:(i-1)*j]中的数据进行加密运算,当计数器和真正的子密钥相等时,运算结果存储到子寄存器RB[n+(i-1)*j:(i-1)*j],不等时,运算结果存储到子寄存器RC[n+(i-1)*j:(i-1)*j]。当计数器遍历完毕所有的子密钥空间时,完成一轮运算,寄存器RB[i*j-1:0]存储的是本轮的正确结果,寄存器RC[i*j-1:0]存储的是本轮的错误结果。下一轮运算时,对子寄存器RB[n+(i-1)*j:(i-1)*j]存储的正确结果进行加密运算,正确的运算结果存储到子寄存器RC[n+(i-1)*j:(i-1)*j],错误的运算结果存储到子寄存器RA[n+(i-1)*j:(i-1)*j]。再下一轮运算时,对子寄存器RC[n+(i-1)*j:(i-1)*j]存储的正确结果进行加密运算,正确的运算结果存储到子寄存器RA[n+(i-1)*j:(i-1)*j],错误的运算结果存储到子寄存器RB[n+(i-1)*j:(i-1)*j]。以此类推,直到完成所有的轮运算。
[0010] 本发明同样适用于对分组算法重复进行2n+1次或小于2n+1次完整的分组运算,并在所有重复的完整分组运算中将各子密钥取值空间全部或部分遍历,最后输出分组运算的正确结果实现方式。
[0011] 以DES重复进行2n+1次(共64次,每次16轮)完整加密运算为例,在第一次加密运算中的每一轮运算中,分别使用一组子密钥,得到一个加密结果,接下来再进行与第一次类似的另一次加密运算,并在其每一轮运算中,分别使用另一组子密钥,并得到第二个加密结果,以此类推,直到完成所有64次加密运算,共得到64个加密运算结果。在所有64次加密运算中的每次加密运算的相同的轮运算中,计数器将遍历所有子密钥空间一次。比如,第一次加密运算的第一轮运算到第64次加密运算的第一轮运算,在这64次加密运算的第一轮运算中,各个分组计数器将按某种方式分别在0到63中取值一次做为各个分组子密钥。所有64次加密运算的其余15轮运算也类似。最后,在所有64次DES加密运算中只有一次DES加密运算的结果是正确的,其每轮运算都使用真正的子密钥运算。重而得到正确结果。

附图说明

[0012] 图1通常的DES算法硬件实现示意图
[0013] 图2采用本发明的DES算法硬件实现示意图
[0014] 图3采用本发明的DES算法R207/R208部分的详细硬件实现示意图[0015] 图4DES运算轮数和寄存器RA,RB,RC的使用示意图

具体实施方式

[0016] 下面,以DES算法的硬件实现和并在每一轮DES运算进行计数器替换密钥为例,说明本发明的具体实施方式。
[0017] 通常的DES算法的硬件实现如图1所表示。
[0018] 64位寄存器RA(101)存储待处理的信息,其右半部分R(32位)经过扩展变换E(102),变为48位。和48位的轮密钥经过异或(103)运算,将生成48位结果,每6位一组,分为8组,分别送入8个S盒中(104)。每个S盒是6进4出的非线性变换。输出的32位结果经过P变换(105)和寄存器RA的左半部分L(32位)异或(106),最后结果再存入寄存器RA,完成一轮的运算。使用不同的轮密钥,进行16次轮运算,完成一次加密。
[0019] 如果采用本发明的方法,可把DES算法的硬件实现修改为如图2和图3所示。
[0020] 64位寄存器RA(201)存储待处理的信息,其右半部分R(32位)先经过P变换(202),再经过扩展变换E(203),变为48位。然后不再和轮密钥异或,而是和计数器异或(204),生成48位结果,然后每6位一组,分为8组,分别送入8个S盒中(205)。输出的32位结果经和寄存器RA的左半部分L(32位)异或(206),然后对8个结果分别进行判断,如果计数器(虚密钥)和真实密钥的子密钥相等,结果存入寄存器RB(207)相应的子部分,如果计数器(虚密钥)和真实密钥的子密钥不相等,结果存入寄存器RC(208)相应的子部分。由于计数器可采用随机计数方式,从而将真伪密钥比较器的输出也随机化,防止多条曲线叠加后信息泄露,对真伪密钥信息进行掩盖。
[0021] 每一轮运算,计数器需要遍历所有的子密钥空间,对DES而言,子密钥是6位,遍历需要64个周期,即需要64个周期完成一轮运算。一轮运算结束后,寄存器RB(207)存储的是本轮正确的运算结果,寄存器RC(208)存储错误结果。对DES而言,并不需要在每一轮运算都进行子密钥空间遍历来抵御功耗或电磁分析的攻击,通常的攻击是针对第一轮或者最后一轮,所以采用本发明,完成一次加密或者解密增加的运算时间,在可以接受的范围。图4显示了16轮DES运算中,寄存器RA,寄存器RB,寄存器RC的使用。在第一轮的加密运算中,本轮待处理的数据存储在寄存器RA,运算的正确结果(计数器和轮密钥相等时)存入寄存器RB,错误结果存入寄存器RC。第二轮时,寄存器RB存储着上一轮的正确结果,也就是本轮待处理的数据,运算的正确结果存入寄存器RC,错误结果存入寄存器RA。第三轮时,寄存器RC存储着上一轮的正确结果,也就是本轮待处理的数据,运算的正确结果存入寄存器RA,错误结果存入寄存器RB。以此类推,直到16轮运算结束,寄存器RB存储着最终正确的运算结果。
[0022] 本发明包括但不限于此具体实施方式。本发明是以DES为例进行阐述的,但本发明不只限于DES加解密算法运算的抗功耗分析和电磁场辐射分析的防护。本发明同样适用于所有分组加解密算法运算的抗功耗分析和电磁场辐射分析的防护。例如但不限于,DES、AES、3DES等分组加解密算法运算的抗功耗分析和电磁场辐射分析的防护。