本发明涉及密码算法硬件实现
技术领域:
,特别是涉及一种SM4算法的掩码方法及装置。
背景技术:
:SM4算法是国家商用密码管理办公室公布的分组密码算法,是目前应用最广泛的中国自主设计的分组密码算法,该算法目前在智能卡和USBKey中逐步得到应用,并且考虑到运算效率的问题,基本通过硬件实现的方式。在智能卡、USBKey等应用中,加密算法不仅要保证协议和数学算法的安全性,更重要的是保证实际使用中加密电路运行时的功耗或者电磁信息不会被旁路分析方法利用,造成安全威胁。对于SM4算法来说,能量攻击可以通过轮运算中间值的相关性获取密钥,因此需要使用能够抵抗能量攻击的硬件设计方法。掩码技术是当前常用的抵抗能量攻击的方法之一。通过在明文或密钥上增加随机的掩码,使得加密算法的中间值是不可预知的,从而达到抗能量攻击的目的。现有的针对SM4算法的掩码方法,通常是通过每轮引入随机掩码,使易受攻击的轮运算中间结果所带的掩码值不同,从而有效抵抗能量攻击。具体地,在引入下一轮的随机掩码前,需要使用前一轮的掩码对该前一轮输出的结果先进行脱掩,而后才能使用该下一轮引入的随机掩码对脱掩后的结果进行加掩。由于脱掩会出现真实的中间值信息,因此容易导致能量的泄露,不能抵抗能量攻击。技术实现要素:为解决上述技术问题,本发明实施例提供了一种SM4算法的掩码方法及装置,用于解决每轮引入随机掩码的掩码方法中出现真实中间值信息导致的能量的泄露的问题,技术方案如下:一种SM4算法的掩码方法,包括:获取输入的带掩码的明文、随机掩码、轮密钥;对所述带掩码的明文、所述随机掩码以及所述轮密钥中的第一轮密钥进行轮函数的第一轮运算,获得第一轮密文和第一轮掩码;对所述第一轮密文、所述第一轮掩码以及所述轮密钥中的第二轮密钥进行所述轮函数的第二轮运算,获得第二轮密文和第二轮掩码,依此实现所述轮函数的N轮运算,N为大于1的正整数;将所述第N轮运算输出的第N轮密文与第N轮掩码进行异或运算,将运算结果作为所述SM4算法的输出。可选地,对所述带掩码的明文、所述随机掩码以及所述轮密钥中的第一轮密钥进行轮函数的第一轮运算,包括:按照比特由高到低的顺序,将组成所述带掩码的明文的比特划分成M组,以得到M组带掩码的子明文,所述M组带掩码的子明文的比特数相同;按照比特由高到低的顺序,将组成所述随机掩码的比特划分成M组,以得到M组子随机掩码,所述M组子随机掩码的比特数相同;对后M-1组子明文、所述第一轮密钥进行所述带掩码的明文的第一轮运算中的合成置换运算,所述后M-1组子明文为所述M组带掩码的子明文在所述带掩码的明文中比特位低的M-1组子明文;对后M-1组子随机掩码进行所述随机掩码的第一轮运算中的合成置换运算,所述后M-1组子随机掩码为所述M组子随机掩码在所述随机掩码中比特位低的M-1组子随机掩码;将所述带掩码的明文的合成置换运算的结果与除所述后M-1组子明文之外的子明文取异或运算,将异或运算的结果作为所述第一轮密文,将所述随机掩码的合成置换运算的结果与除所述后M-1组子随机掩码之外的子随机掩码取异或运算,将异或运算的结果作为所述第一轮掩码。可选地,所述合成置换运算包括非线性变换,所述非线性变换通过带掩码的S盒实现;所述带掩码的S盒的运算,包括:接收第一轮密文的中间值和第一轮掩码的中间值,所述第一轮密文的中间值为所述后M-1组子明文与所述第一轮密钥取异或运算的结果,所述第一轮掩码中间值为所述后M-1组子随机掩码取异或运算的结果;对所述第一轮密文的中间值和所述第一轮掩码的中间值进行仿射变换和求逆运算,并将所述仿射变换和求逆运算后的结果作为所述S盒的输出。可选地,对所述第一轮密文的中间值和所述第一轮掩码的中间值进行仿射变换矩阵和求逆运算,包括:利用第一仿射变换矩阵,分别对所述第一轮密文的中间值和所述第一轮掩码的中间值,进行有限域GF(28)上的第一次仿射变换运算,得到带掩码的S盒输出和掩码输出;对所述带掩码的S盒输出和所述掩码输出,分别进行复合域GF(((22)2)2)上的取逆运算,得到带掩码的取逆输出和掩码取逆输出;利用第二仿射变换矩阵,分别对所述带掩码的取逆输出和所述掩码取逆输出,进行有限域GF(28)上的第二次仿射变换运算,并将所述第二次仿射变换运算的结果作为所述S盒的输出。可选地,对所述带掩码的S盒输出和所述掩码输出分别进行复合域GF(((22)2)2)上的取逆运算,包括:使用第一正规基,分别将所述带掩码的S盒输出和所述掩码输出,表示为有限域GF(24)中的一次线性多项式,所述第一正规基中的元素为常量属于有限域GF(24)的二次不可约多项式的根,所述有限域GF(24)中的一次线性多项式的系数属于有限域GF(24);依据所述带掩码的S盒输出、在有限域GF(24)中的一次线性多项式及所述掩码输出在有限域GF(24)中的一次线性多项式,将所述带掩码的S盒输出与所述掩码输出的和的取逆,用有限域GF(24)中的元素与第一参数表示,所述第一参数用于对所述有限域GF(24)中的元素取逆;将用有限域GF(24)中的元素与第一参数表示的所述和的取逆,用第一输出和第二输出表示,所述第一输出和所述第二输出为第一函数的因变量,所述第一函数的自变量为将所述第一参数分解成的第一子参数和第二子参数,对所述第一子参数和第二子参数的和的取逆运算的结果为所述第一输出和第二输出之和;将用所述第一输出和所述第二输出表示的所述和的取逆,分解成第一部分和第二部分,并将第一部分作为所述带掩码的取逆输出,将第二部分作为所述掩码取逆输出;使用第二正规基,将所述第一子参数和所述第二子参数,分别表示为有限域GF(22)中的一次线性多项式,所述第二正规基中的元素为常量属于有限域GF(22)的二次不可约多项式的根,所述有限域GF(22)中的一次线性多项式的系数属于有限域GF(24);依据所述第一子参数和所述第二子参数在有限域GF(22)中的一次线性多项式,将对所述第一参数的取逆用有限域GF(22)中的元素与第二参数表示,所述第二参数用于对所述有限域GF(22)中的元素取逆;将用有限域GF(22)中的元素与第二参数表示的第一参数的取逆,用第三输出和第四输出表示,所述第三输出和所述第四输出为第二函数的因变,所述第二函数的自变量为将所述第二参数分解成的第三子参数和第四子参数,对所述第三子参数和第四子参数的和的取逆运算的结果,为所述第三输出和第四输出之和;将用所述第三输出和所述第四输出表示的第一参数的取逆,分解成第三部分和第四部分,并将第三部分作为对所述第一输出,将第四部分作为所述第二输出;使用第三正规基,将所述第三子参数和所述第四子参数分别表示为有限域GF(2)中的一次线性多项式,所述第三正规基中的元素为常量属于有限域GF(2)的二次不可约多项式的根,所述有限域GF(2)中的一次线性多项式的系数属于有限域GF(2);依据所述第三子参数和所述第四子参数在有限域GF(2)中的一次线性多项式,将对所述第二参数的取逆用有限域GF(2)中的元素表示,并最终得到对所述第二参数取逆的结果为,第三子参数的负一次与所述第四子参数的负一次的和;取所述第三输出为所述第三子参数的负一次,所述第四输出为所述第四子参数的负一次;根据为所述第三子参数的负一次的第三输出及为所述第四子参数的负一次的第四输出,计算所述第三部分和第四部分,以得到所述第一输出和所述第二输出;根据计算得到的第一输出和第二输出,计算所述第一部分和第二部分,并将计算得到第一部分作为所述带掩码的取逆输出,将计算得到的第二部分作为所述掩码取逆输出。一种SM4算法的掩码装置,包括:获取模块,用于获取输入的带掩码的明文、随机掩码、轮密钥;第一轮运算模块,用于对所述带掩码的明文、所述随机掩码以及所述轮密钥中的第一轮密钥进行轮函数的第一轮运算,获得第一轮密文和第一轮掩码;第二轮运算模块,用于对所述第一轮密文、所述第一轮掩码以及所述轮密钥中的第二轮密钥进行所述轮函数的第二轮运算,获得第二轮密文和第二轮掩码,依此实现所述轮函数的N轮运算,N为大于1的正整数;第一输出模块,用于将所述第N轮运算输出的第N轮密文与第N轮掩码进行异或运算,将运算结果作为所述SM4算法的输出。可选地,所述第一轮运算模块,包括:第一划分模块,用于按照比特由高到低的顺序,将组成所述带掩码的明文的比特划分成M组,以得到M组带掩码的子明文,所述M组带掩码的子明文的比特数相同;按照比特由高到低的顺序,将组成所述随机掩码的比特划分成M组,以得到M组子随机掩码,所述M组子随机掩码的比特数相同;第二划分模块,用于对后M-1组子明文、所述第一轮密钥进行所述带掩码的明文的第一轮运算中的合成置换运算,所述后M-1组子明文为所述M组带掩码的子明文在所述带掩码的明文中比特位低的M-1组子明文;合成置换运算模块,用于对后M-1组子随机掩码进行所述随机掩码的第一轮运算中的合成置换运算,所述后M-1组子随机掩码为所述M组子随机掩码在所述随机掩码中比特位低的M-1组子随机掩码;异或运算模块,用于将所述带掩码的明文的合成置换运算的结果与除所述后M-1组子明文之外的子明文取异或运算,将异或运算的结果作为所述第一轮密文,将所述随机掩码的合成置换运算的结果与除所述后M-1组子随机掩码之外的子随机掩码取异或运算,将异或运算的结果作为所述第一轮掩码。可选地,所述合成置换运算包括非线性变换,所述非线性变换通过S盒的运算模块实现;所述S盒的运算模块,包括:接收模块,用于接收第一轮密文的中间值和第一轮掩码的中间值,所述第一轮密文的中间值为所述后M-1组子明文与所述第一轮密钥取异或运算的结果,所述第一轮掩码中间值为所述后M-1组子随机掩码取异或运算的结果;第二输出模块,用于对所述第一轮密文的中间值和所述第一轮掩码的中间值进行仿射变换和求逆运算,并将所述仿射变换和求逆运算后的结果作为所述S盒的输出。可选地,所述第二输出模块,包括:第一仿射变换模块,用于利用第一仿射变换矩阵,分别对所述第一轮密文的中间值和所述第一轮掩码的中间值,进行有限域GF(28)上的第一次仿射变换运算,得到带掩码的S盒输出和掩码输出;取逆模块,用于对所述带掩码的S盒输出和所述掩码输出,分别进行复合域GF(((22)2)2)上的取逆运算,得到带掩码的取逆输出和掩码取逆输出;第二仿射变换模块,用于利用第二仿射变换矩阵,分别对所述带掩码的取逆输出和所述掩码取逆输出,进行有限域GF(28)上的第二次仿射变换运算,并将所述第二次仿射变换运算的结果作为所述S盒的输出。可选地,所述取逆模块,包括:第一表示模块,用于使用第一正规基,分别将所述带掩码的S盒输出和所述掩码输出,表示为有限域GF(24)中的一次线性多项式,所述第一正规基中的元素为常量属于有限域GF(24)的二次不可约多项式的根,所述有限域GF(24)中的一次线性多项式的系数属于有限域GF(24);第二表示模块,用于依据所述带掩码的S盒输出、在有限域GF(24)中的一次线性多项式及所述掩码输出在有限域GF(24)中的一次线性多项式,将所述带掩码的S盒输出与所述掩码输出的和的取逆,用有限域GF(24)中的元素与第一参数表示,所述第一参数用于对所述有限域GF(24)中的元素取逆;第三表示模块,用于将用有限域GF(24)中的元素与第一参数表示的所述和的取逆,用第一输出和第二输出表示,所述第一输出和所述第二输出为第一函数的因变量,所述第一函数的自变量为将所述第一参数分解成的第一子参数和第二子参数,对所述第一子参数和第二子参数的和的取逆运算的结果为所述第一输出和第二输出之和;第一分解模块,用于将用所述第一输出和所述第二输出表示的所述和的取逆,分解成第一部分和第二部分,并将第一部分作为所述带掩码的取逆输出,将第二部分作为所述掩码取逆输出;第四表示模块,用于使用第二正规基,将所述第一子参数和所述第二子参数,分别表示为有限域GF(22)中的一次线性多项式,所述第二正规基中的元素为常量属于有限域GF(22)的二次不可约多项式的根,所述有限域GF(22)中的一次线性多项式的系数属于有限域GF(24);第五表示模块,用于依据所述第一子参数和所述第二子参数在有限域GF(22)中的一次线性多项式,将对所述第一参数的取逆用有限域GF(22)中的元素与第二参数表示,所述第二参数用于对所述有限域GF(22)中的元素取逆;第六表示模块,用于将用有限域GF(22)中的元素与第二参数表示的第一参数的取逆,用第三输出和第四输出表示,所述第三输出和所述第四输出为第二函数的因变,所述第二函数的自变量为将所述第二参数分解成的第三子参数和第四子参数,对所述第三子参数和第四子参数的和的取逆运算的结果,为所述第三输出和第四输出之和;第二分解模块,用于将用所述第三输出和所述第四输出表示的第一参数的取逆,分解成第三部分和第四部分,并将第三部分作为对所述第一输出,将第四部分作为所述第二输出;第七表示模块,用于使用第三正规基,将所述第三子参数和所述第四子参数分别表示为有限域GF(2)中的一次线性多项式,所述第三正规基中的元素为常量属于有限域GF(2)的二次不可约多项式的根,所述有限域GF(2)中的一次线性多项式的系数属于有限域GF(2);第八表示模块,用于依据所述第三子参数和所述第四子参数在有限域GF(2)中的一次线性多项式,将对所述第二参数的取逆用有限域GF(2)中的元素表示,并最终得到对所述第二参数取逆的结果为,第三子参数的负一次与所述第四子参数的负一次的和;确定模块,用于取所述第三输出为所述第三子参数的负一次,所述第四输出为所述第四子参数的负一次;第一计算模块,用于根据为所述第三子参数的负一次的第三输出及为所述第四子参数的负一次的第四输出,计算所述第三部分和第四部分,以得到所述第一输出和所述第二输出;第二计算模块,根据计算得到的第一输出和第二输出,计算所述第一部分和第二部分,并将计算得到第一部分作为所述带掩码的取逆输出,将计算得到的第二部分作为所述掩码取逆输出。本发明实施例所提供的技术方案,在轮函数的N轮运算中,除第一轮运算外,每一轮运算所需的掩码均通过与该轮运算相邻的上一轮运算的输出得到,即,除第一轮运算外的每一轮运算无需引入新的随机掩码,因此,采用本申请的方案无需对N轮运算的中间值进行脱掩,从而实现了对能量攻击的抵抗。进一步地,由于仅在第一轮运算时需要输入随机掩码,后续每一轮运算所需的掩码均可以通过与该轮运算相邻的上一轮运算的输出得到,因此,本申请的技术方案所需要的随机掩码少。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例所提供的一种SM4算法的掩码方法一种流程示意图;图2为本发明实施例所提供的一种SM4算法的掩码方法的另一种流程示意图;图3为本发明实施例所提供的对第一轮密文的中间值和第一轮掩码的中间值进行仿射变换矩阵和求逆运算的一种流程示意图;图4为本发明实施例所提供的对带掩码的S盒输出和掩码输出分别进行复合域GF(((22)2)2)上的取逆运算的一种流程示意图;图5为当M取4时实现SM4算法的掩码的方法的原理图;图6为本发明实施例所提供的一种SM4算法的掩码的装置的一种结构示意图;图7为本发明实施例所提供的一种SM4算法的掩码的装置的另一种结构示意图;图8为本发明实施例所提供的第二输出模块的一种结构示意图;图9为本发明实施例所提供的取逆模块的一种结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本申请发明人,在对现有技术中提供的SM4算法的掩码方法的研究过程中发现,由于每轮运算都需要输入随机掩码,并且每轮引入的随机掩码不能保证完全相同,因此在引入下一轮的随机掩码前,需要使用前一轮的掩码先进行脱掩,而脱掩会出现真实的中间值信息,因此容易导致能量的泄露,不能抵抗能量攻击。本申请的方案,在轮函数的N轮运算中,除第一轮运算外,每一轮运算所需的掩码均通过与该轮运算相邻的上一轮运算的输出得到,因此,采用本申请的方案无需对N轮运算的中间值进行脱掩,从而实现了对能量攻击的抵抗。请参阅图1,图1为本申请实施例提供的SM4算法的掩码方法的一种实现流程图,该方法包括:步骤S101、获取输入的带掩码的明文、随机掩码、轮密钥。所述带掩码的明文通过将输入的明文与所述随机掩码进行异或运算得到,具体地,在获取输入的带掩码的明文、随机掩码、轮密钥之前,还包括:将输入的明文与所述随机掩码取异或运算,得到所述带掩码的明文。其中,输入的明文可以为128比特,输入的随机掩码可以为32-128比特。步骤S102、对所述带掩码的明文、所述随机掩码以及所述轮密钥中的第一轮密钥进行轮函数的第一轮运算,获得第一轮密文和第一轮掩码。步骤S103、对所述第一轮密文、所述第一轮掩码以及所述轮密钥中的第二轮密钥进行所述轮函数的第二轮运算,获得第二轮密文和第二轮掩码,依此实现所述轮函数的N轮运算,N为大于1的正整数。在实际运算中,N可以为32,当然不限于此。步骤S104、将所述第N轮运算输出的第N轮密文与第N轮掩码进行异或运算,将运算结果作为所述SM4算法的输出。本发明实施例所提供的技术方案,在轮函数的N轮运算中,除第一轮运算外,每一轮运算所需的掩码均通过与该轮运算相邻的上一轮运算的输出得到,即,除第一轮运算外的每一轮运算无需引入新的随机掩码,因此,采用本申请的方案无需对N轮运算的中间值进行脱掩,从而实现了对能量攻击的抵抗。进一步地,由于仅在第一轮运算时需要输入随机掩码,后续每一轮运算所需的掩码均可以通过与该轮运算相邻的上一轮运算的输出得到,因此,本申请的技术方案所需要的随机掩码少。请参阅图2,图2为本申请实施例提供的SM4算法的掩码方法的另一种实现流程图,该方法包括:步骤S201、获取输入的带掩码的明文、随机掩码、轮密钥。步骤S202、按照比特由高到低的顺序,将组成所述带掩码的明文的比特划分成M组,以得到M组带掩码的子明文,所述M组带掩码的子明文的比特数相同。本实施例中,M为大于1的正整数。在实际应用中,带掩码的明文的比特可以为128比特,M为可以为4,从而,本步骤S202可以表述为,按照比特由高到低的顺序,将带掩码的明文的128比特划分成4组32比特的子明文,如划分后的子明文可以表示为X′i、X′i+1、X′i+2、X′i+3,X′i中的比特在带掩码的明文中的比特位>X′i+1中的比特在带掩码的明文中的比特位>X′i+2中的比特在带掩码的明文中的比特位>X′i+3中的比特在带掩码的明文中的比特位。步骤S203、按照比特由高到低的顺序,将组成所述随机掩码的比特划分成M组,以得到M组子随机掩码,所述M组子随机掩码的比特数相同。本实施例中,M为大于1的正整数。在实际应用中,随机掩码的比特可以为32~128比特,M为可以为4,从而,本步骤S203可以表述为,按照比特由高到低的顺序,将随机掩码的比特划分成4组子随机掩码,如划分后的子随机掩码可以表示为Mi、Mi+1、Mi+2、Mi+3,Mi中的比特在带掩码的明文中的比特位>Mi+1中的比特在带掩码的明文中的比特位>Mi+2中的比特在带掩码的明文中的比特位>Mi+3中的比特在带掩码的明文中的比特位。需要说明的是,本实施例并不限定步骤S202、步骤S203的执行顺序,即可以先执行步骤S202后执行步骤S203,也可以先执行步骤S203,后执行步骤S202。步骤S204、对后M-1组子明文、所述第一轮密钥进行所述带掩码的明文的第一轮运算中的合成置换运算。其中,所述后M-1组子明文为所述M组带掩码的子明文在所述带掩码的明文中比特位低的M-1组子明文。以M为4举例说明步骤S204,当M为4时,实现该步骤的公式为:T'(X'i+1,X'i+2,X'i+3,rki);其中,T'为合成置换运算,X'i+1,X'i+2,X'i+3为后三组子明文,rki为第一轮轮密钥,i表示轮运算的轮数。步骤S205、对后M-1组子随机掩码进行所述随机掩码的第一轮运算中的合成置换运算。其中,所述后M-1组子随机掩码为所述M组子随机掩码在所述随机掩码中比特位低的M-1组子随机掩码。以M为4举例说明步骤S204,当M为4时,实现该步骤的公式为:T'(Mi+1,Mi+2,Mi+3);其中,T'为合成置换运算,Mi+1,Mi+2,Mi+3为后三组子随机掩码,i表示轮运算的轮数。步骤S206、将所述带掩码的明文的合成置换运算的结果与除所述后M-1组子明文之外的子明文取异或运算,将异或运算的结果作为所述第一轮密文,将所述随机掩码的合成置换运算的结果与除所述后M-1组子随机掩码之外的子随机掩码取异或运算,将异或运算的结果作为所述第一轮掩码。以M为4举例说明步骤S206,当M为4时,实现该步骤的公式为:{Xi′⊕T′(Xi+1′,Xi+2′,Xi+3′,rki),Mi⊕T′(Mi+1,Mi+2,Xi+3)};]]>其中,表示异或运算,i表示轮运算的轮数。步骤S204及步骤S205中的合成置换运算包括非线性变换τ'和线性变换L,线性变换L的输入为非线性变换τ'的输出,非线性变换τ'通过带掩码的S盒实现。以下以M取4、输入带掩码的明文为128比特和随机掩码为32~128比特为例,说明S盒的实现:S盒的输入为第一轮密文的中间值和第一轮掩码的中间值,第一轮密文的中间值为后3组子明文与所述第一轮密钥取异或运算的结果,所述第一轮掩码中间值为所述后3组子随机掩码取异或运算的结果;其中,设后3组子明文与所述第一轮密钥取异或运算的结果用A'表示、设后3组子随机掩码取异或运算的结果用MI表示,则A'、MI的取值公式分别为:A′=(a0′,a1′,a2′,a3′)=(Xi+1′⊕Xi+2′⊕Xi+3′⊕rki);]]>MI=(m0,m1,m2,m3)=(Mi+1⊕Mi+2⊕Mi+3).]]>S盒的输出为对所述第一轮密文的中间值和所述第一轮掩码的中间值进行仿射变换和求逆运算的结果。设S盒的输出为{B,'M'},则{B′,M′}=(b0′,m0′},{b1′,m1′},{b2′,m2′}{b3′,m3′})=τ′(A′,M)=(Sbox′(a0′,m0),Sbox′(a1′,m1),Sbox′(a2′,m2),Sbox′(a3′,m3)).]]>进一步地,线性变换L的输出为:{C′,M′}=L(B,′M′)={B⊕B(<<<2)⊕B(<<<10)⊕B(<<<18)⊕B(<<<24),M′⊕M′(<<<2)⊕M′(<<<10)⊕M′(<<<18)⊕M′(<<<24)};]]>C',M″分别为带掩码的明文的合成置换运算的结果及随机掩码的合成置换运算的结果,即:T'(X′i+1,X′i+2,X′i+3,rki)=C',T'(Mi+1,Mi+2,Mi+3)=M″;{Xi+4′,Mi+4}={Xi′⊕C′,Mi⊕M′′}.]]>可选地,对所述第一轮密文的中间值和所述第一轮掩码的中间值进行仿射变换矩阵和求逆运算,如图3所示,包括:步骤S301、利用第一仿射变换矩阵,分别对所述第一轮密文的中间值和所述第一轮掩码的中间值,进行有限域GF(28)上的第一次仿射变换运算,得到带掩码的S盒输出和掩码输出。设第一轮密文中间值为x',第一轮掩码的中间值为m,带掩码的S盒输出为y',掩码输出为n,则:y'=TA1*x'+TC1;n=TA1*m。其中TA1为8*8的仿射变换矩阵,TC1为列向量,具体值如下:TA1=0000010001010001010000110111000111101000100000100101010000100110,]]>TC1=(11000010)T。步骤S302、对所述带掩码的S盒输出和所述掩码输出,分别进行复合域GF(((22)2)2)上的取逆运算,得到带掩码的取逆输出和掩码取逆输出。设带掩码的取逆输出为z',掩码取逆输出为n',其中:(z',n')=f(y',n);f(y',n)表示GF(28)上的有限域运算,满足以下两个条件:①(z'+n')=(y'+n)-1,其中GF(28)上的求逆运算所对应的8次不可约多项式为:g(x)=x8+x7+x6+x5+x4+x2+1。②计算时不出现未经掩码的中间结果。步骤S303、利用第二仿射变换矩阵,分别对所述带掩码的取逆输出和所述掩码取逆输出,进行有限域GF(28)上的第二次仿射变换运算,并将所述第二次仿射变换运算的结果作为所述S盒的输出。设S盒的输出为s',m's'=TA2*z'+C2;m'=TA2*n'。其中,TA2为8*8的仿射变换矩阵,C2为列向量,具体值如下:TA2=0011101100000010001111111111001110111010011100010101010001000000;]]>C2=(11010011)T。从而能够得到S盒的最终输出S(x)=S(x'+m)=s'+m'。可选地,对所述带掩码的S盒输出和所述掩码输出分别进行复合域GF(((22)2)2)上的取逆运算,如图4所示,包括:步骤S401、使用第一正规基,分别将所述带掩码的S盒输出和所述掩码输出,表示为有限域GF(24)中的一次线性多项式,所述第一正规基中的元素为常量属于有限域GF(24)的二次不可约多项式的根,所述有限域GF(24)中的一次线性多项式的系数属于有限域GF(24)。本实施例中,带掩码的S盒输出为y',掩码输出为n;使用第一正规基[Y16,Y]来表示GF(28)域上的元素,其中Y和Y16是不可约多项式r(y)=y2+y+v,v∈GF(24)的一组根,那么y',n可以表示为:y'=y′1Y16+y'0Y,n=n1Y16+n0Y;其中,y′i,ni∈GF(24),(i=0,1)。步骤S402、依据所述带掩码的S盒输出、在有限域GF(24)中的一次线性多项式及所述掩码输出在有限域GF(24)中的一次线性多项式,将所述带掩码的S盒输出与所述掩码输出的和的取逆,用有限域GF(24)中的元素与第一参数表示,所述第一参数用于对所述有限域GF(24)中的元素取逆。设第一参数为a,在GF(28)/GF(24)上的求逆可以表示为:(y′+n)-1=(a-1(y0′+n0))Y16+(a-1(y1′+n1))Y;a=(y0′+n0)(y1′+n1)+(y0′+n0+y1′+n1)2v=(y0′y1′+(y0′+y1′)2v)+y1′n0+y0′n1+(n0n1+(n0+n1)2v).]]>其中a,v∈GF(24)。步骤S403、将用有限域GF(24)中的元素与第一参数表示的所述和的取逆,用第一输出和第二输出表示,所述第一输出和所述第二输出为第一函数的因变量,所述第一函数的自变量为将所述第一参数分解成的第一子参数和第二子参数,对所述第一子参数和第二子参数的和的取逆运算的结果为所述第一输出和第二输出之和。设第一输出为b',第二输出为t',a',t分别为第一子参数和第二子参数,(b',t')=h(a',t),b',t',a',t∈GF(24),(b'+t')=a-1=(a'+t)-1,(y'+n)-1=((b'+t')(y'0+n0))Y16+((b'+t')(y′1+n1))Y(1)步骤S404、将用所述第一输出和所述第二输出表示的所述和的取逆,分解成第一部分和第二部分,并将第一部分作为所述带掩码的取逆输出,将第二部分作为所述掩码取逆输出。设带掩码的取逆输出为z',掩码取逆输出为n';将公式(1)分解成两部分,得到z'和n';z'=((b'+t')y'0+b'n0)Y16+((b'+t')y′1+b'n1)Y,z'∈GF(28)(2)n'=t'n0Y16+t'n1Y,n'∈GF(28)(3)步骤S405、使用第二正规基,将所述第一子参数和所述第二子参数,分别表示为有限域GF(22)中的一次线性多项式,所述第二正规基中的元素为常量属于有限域GF(22)的二次不可约多项式的根,所述有限域GF(22)中的一次线性多项式的系数属于有限域GF(24)。使用第二正规基[Z16,Z]来表示GF(24)域上的元素,其中Z和Z4是不可约多项式s(z)=z2+z+ρ,ρ∈GF(22)的一组根。那么a',t可以表示为:a'=a′1Z4+a'0Z,t=t1Z4+t0Z,其中,a′i,ti,b′i,t′i∈GF(22),(i=0,1)。步骤S406、依据所述第一子参数和所述第二子参数在有限域GF(22)中的一次线性多项式,将对所述第一参数的取逆用有限域GF(22)中的元素与第二参数表示,所述第二参数用于对所述有限域GF(22)中的元素取逆。设第二参数为c,则实现步骤S406的公式为:(a'+t)-1=(c-1(a'0+t0))Z4+(c-1(a′1+t1))Z;c=(a'0a′1+(a'0+a′1)2ρ)+a′1t0+a'0t1+(t0t1+(t0+t1)2ρ)。其中c,ρ∈GF(22)。步骤S407、将用有限域GF(22)中的元素与第二参数表示的第一参数的取逆,用第三输出和第四输出表示,所述第三输出和所述第四输出为第二函数的因变,所述第二函数的自变量为将所述第二参数分解成的第三子参数和第四子参数,对所述第三子参数和第四子参数的和的取逆运算的结果,为所述第三输出和第四输出之和。设第三输出为d',第四输出为k',第三子参数为c',第四子参数为k,则:(d',k')=g(c',k),使得(d'+k')=c-1;(a'+t)-1=((d'+k')(a'0+t0))Z4+((d'+k')(a′1+t1))Z(4)步骤S408、将用所述第三输出和所述第四输出表示的第一参数的取逆,分解成第三部分和第四部分,并将第三部分作为对所述第一输出,将第四部分作为所述第二输出。将公式(4)分解成两部分,得到:b'=((d'+k')a'0+d't0))Z4+((d'+k')a′1+d't1))Z,b'∈GF(24)(5)t'=k't0Z4+k't1Z,t'∈GF(24)(6)步骤S409、使用第三正规基,将所述第三子参数和所述第四子参数分别表示为有限域GF(2)中的一次线性多项式,所述第三正规基中的元素为常量属于有限域GF(2)的二次不可约多项式的根,所述有限域GF(2)中的一次线性多项式的系数属于有限域GF(2)。使用第三正规基[W2,W]来表示GF(22)域上的元素,其中W和w2是不可约多项式t(w)=w2+w+1的一组根,那么c',k可以表示为:设c'=c1'w2+c'0w,k=k1w2+k0w。步骤S410、依据所述第三子参数和所述第四子参数在有限域GF(2)中的一次线性多项式,将对所述第二参数的取逆用有限域GF(2)中的元素表示,并最终得到对所述第二参数取逆的结果为,第三子参数的负一次与所述第四子参数的负一次的和。在GF(22)/GF(2)上的求逆可以由下式表示:(c'+k)-1=(c'0+k0)W2+(c′1+k1)W=c'-1+k-1。步骤S411、取所述第三输出为所述第三子参数的负一次,所述第四输出为所述第四子参数的负一次。取d'=c'-1,k'=k-1。步骤S412、根据为所述第三子参数的负一次的第三输出及为所述第四子参数的负一次的第四输出,计算所述第三部分和第四部分,以得到所述第一输出和所述第二输出。将d'=c'-1,k'=k-1带入公式(5)、(6)得到b'与t'。步骤S413、根据计算得到的第一输出和第二输出,计算所述第一部分和第二部分,并将计算得到第一部分作为所述带掩码的取逆输出,将计算得到的第二部分作为所述掩码取逆输出。将b'与t'带入公式(2)、(3),得到z'与n'。步骤S207、对所述第一轮密文、所述第一轮掩码以及所述轮密钥中的第二轮密钥进行所述轮函数的第二轮运算,获得第二轮密文和第二轮掩码,依此实现所述轮函数的N轮运算,N为大于1的正整数。同样地,以M为4继续说明该步骤,经过步骤S206及步骤S207之后,得到的第一轮密文可以为X′i+4,得到的一轮掩码可以为Mi+4,将X′i+1、X′i+2、X′i+3、X′i+4、rki+1、Mi+1、Mi+2、Mi+3、Mi+4作为第二轮运算的输入,进行轮函数的第二轮运算。步骤S208、将所述第N轮运算输出的第N轮密文与第N轮掩码进行异或运算,将运算结果作为所述SM4算法的输出。本发明实施例所提供的技术方案,在轮函数的N轮运算中,除第一轮运算外,每一轮运算所需的掩码均通过与该轮运算相邻的上一轮运算的输出得到,即,除第一轮运算外的每一轮运算无需引入新的随机掩码,因此,采用本申请的方案无需对N轮运算的中间值进行脱掩,从而实现了对能量攻击的抵抗。下面对本申请实施例提供的SM4算法的掩码装置进行描述,下文描述的SM4算法的掩码装置与上文描述的SM4算法的掩码方法可相互对应参照。请参阅图6,图6为本申请实施例公开的SM4算法的掩码装置的一种结构示意图,包括:获取模块601,用于获取输入的带掩码的明文、随机掩码、轮密钥;第一轮运算模块602,用于对所述带掩码的明文、所述随机掩码以及所述轮密钥中的第一轮密钥进行轮函数的第一轮运算,获得第一轮密文和第一轮掩码;第二轮运算模块603,用于对所述第一轮密文、所述第一轮掩码以及所述轮密钥中的第二轮密钥进行所述轮函数的第二轮运算,获得第二轮密文和第二轮掩码,依此实现所述轮函数的N轮运算,N为大于1的正整数;第一输出模块604,用于将所述第N轮运算输出的第N轮密文与第N轮掩码进行异或运算,将运算结果作为所述SM4算法的输出。本发明实施例所提供的技术方案,在轮函数的N轮运算中,除第一轮运算外,每一轮运算模块所需的掩码均通过与该轮运算相邻的上一轮运算模块的输出得到,即,除第一轮运算外的每一轮运算无需引入新的随机掩码,因此,采用本申请的方案无需对N轮运算的中间值进行脱掩,从而实现了对能量攻击的抵抗。请参阅图7,图7为本申请实施例公开的SM4算法的掩码装置的另一种结构示意图,包括:获取模块701,用于获取输入的带掩码的明文、随机掩码、轮密钥;第一划分模块702,用于按照比特由高到低的顺序,将组成所述带掩码的明文的比特划分成M组,以得到M组带掩码的子明文,所述M组带掩码的子明文的比特数相同;按照比特由高到低的顺序,将组成所述随机掩码的比特划分成M组,以得到M组子随机掩码,所述M组子随机掩码的比特数相同;第二划分模块703,用于对后M-1组子明文、所述第一轮密钥进行所述带掩码的明文的第一轮运算中的合成置换运算,所述后M-1组子明文为所述M组带掩码的子明文在所述带掩码的明文中比特位低的M-1组子明文;合成置换运算模块704,用于对后M-1组子随机掩码进行所述随机掩码的第一轮运算中的合成置换运算,所述后M-1组子随机掩码为所述M组子随机掩码在所述随机掩码中比特位低的M-1组子随机掩码;合成置换运算包括非线性变换,所述非线性变换通过S盒的运算模块实现;所述S盒的运算模块,包括:接收模块,用于接收第一轮密文的中间值和第一轮掩码的中间值,所述第一轮密文的中间值为所述后M-1组子明文与所述第一轮密钥取异或运算的结果,所述第一轮掩码中间值为所述后M-1组子随机掩码取异或运算的结果;第二输出模块,用于对所述第一轮密文的中间值和所述第一轮掩码的中间值进行仿射变换和求逆运算,并将所述仿射变换和求逆运算后的结果作为所述S盒的输出。如图8所示,所述第二输出模块,包括:第一仿射变换模块801,用于利用第一仿射变换矩阵,分别对所述第一轮密文的中间值和所述第一轮掩码的中间值,进行有限域GF(28)上的第一次仿射变换运算,得到带掩码的S盒输出和掩码输出;取逆模块802,用于对所述带掩码的S盒输出和所述掩码输出,分别进行复合域GF(((22)2)2)上的取逆运算,得到带掩码的取逆输出和掩码取逆输出;第二仿射变换模块803,用于利用第二仿射变换矩阵,分别对所述带掩码的取逆输出和所述掩码取逆输出,进行有限域GF(28)上的第二次仿射变换运算,并将所述第二次仿射变换运算的结果作为所述S盒的输出。如图9所示,所述取逆模块,包括:第一表示模块901,用于使用第一正规基,分别将所述带掩码的S盒输出和所述掩码输出,表示为有限域GF(24)中的一次线性多项式,所述第一正规基中的元素为常量属于有限域GF(24)的二次不可约多项式的根,所述有限域GF(24)中的一次线性多项式的系数属于有限域GF(24);第二表示模块902,用于依据所述带掩码的S盒输出、在有限域GF(24)中的一次线性多项式及所述掩码输出在有限域GF(24)中的一次线性多项式,将所述带掩码的S盒输出与所述掩码输出的和的取逆,用有限域GF(24)中的元素与第一参数表示,所述第一参数用于对所述有限域GF(24)中的元素取逆;第三表示模块903,用于将用有限域GF(24)中的元素与第一参数表示的所述和的取逆,用第一输出和第二输出表示,所述第一输出和所述第二输出为第一函数的因变量,所述第一函数的自变量为将所述第一参数分解成的第一子参数和第二子参数,对所述第一子参数和第二子参数的和的取逆运算的结果为所述第一输出和第二输出之和;第一分解模块904,用于将用所述第一输出和所述第二输出表示的所述和的取逆,分解成第一部分和第二部分,并将第一部分作为所述带掩码的取逆输出,将第二部分作为所述掩码取逆输出;第四表示模块905,用于使用第二正规基,将所述第一子参数和所述第二子参数,分别表示为有限域GF(22)中的一次线性多项式,所述第二正规基中的元素为常量属于有限域GF(22)的二次不可约多项式的根,所述有限域GF(22)中的一次线性多项式的系数属于有限域GF(24);第五表示模块906,用于依据所述第一子参数和所述第二子参数在有限域GF(22)中的一次线性多项式,将对所述第一参数的取逆用有限域GF(22)中的元素与第二参数表示,所述第二参数用于对所述有限域GF(22)中的元素取逆;第六表示模块907,用于将用有限域GF(22)中的元素与第二参数表示的第一参数的取逆,用第三输出和第四输出表示,所述第三输出和所述第四输出为第二函数的因变,所述第二函数的自变量为将所述第二参数分解成的第三子参数和第四子参数,对所述第三子参数和第四子参数的和的取逆运算的结果,为所述第三输出和第四输出之和;第二分解模块908,用于将用所述第三输出和所述第四输出表示的第一参数的取逆,分解成第三部分和第四部分,并将第三部分作为对所述第一输出,将第四部分作为所述第二输出;第七表示模块909,用于使用第三正规基,将所述第三子参数和所述第四子参数分别表示为有限域GF(2)中的一次线性多项式,所述第三正规基中的元素为常量属于有限域GF(2)的二次不可约多项式的根,所述有限域GF(2)中的一次线性多项式的系数属于有限域GF(2);第八表示模块910,用于依据所述第三子参数和所述第四子参数在有限域GF(2)中的一次线性多项式,将对所述第二参数的取逆用有限域GF(2)中的元素表示,并最终得到对所述第二参数取逆的结果为,第三子参数的负一次与所述第四子参数的负一次的和;确定模块911,用于取所述第三输出为所述第三子参数的负一次,所述第四输出为所述第四子参数的负一次;第一计算模块912,用于根据为所述第三子参数的负一次的第三输出及为所述第四子参数的负一次的第四输出,计算所述第三部分和第四部分,以得到所述第一输出和所述第二输出;第二计算模块913,根据计算得到的第一输出和第二输出,计算所述第一部分和第二部分,并将计算得到第一部分作为所述带掩码的取逆输出,将计算得到的第二部分作为所述掩码取逆输出。异或运算模块705,用于将所述带掩码的明文的合成置换运算的结果与除所述后M-1组子明文之外的子明文取异或运算,将异或运算的结果作为所述第一轮密文,将所述随机掩码的合成置换运算的结果与除所述后M-1组子随机掩码之外的子随机掩码取异或运算,将异或运算的结果作为所述第一轮掩码。第二轮运算模块706,用于对所述第一轮密文、所述第一轮掩码以及所述轮密钥中的第二轮密钥进行所述轮函数的第二轮运算,获得第二轮密文和第二轮掩码,依此实现所述轮函数的N轮运算,N为大于1的正整数;第一输出模块707,用于将所述第N轮运算输出的第N轮密文与第N轮掩码进行异或运算,将运算结果作为所述SM4算法的输出。本发明实施例所提供的技术方案,在轮函数的N轮运算中,除第一轮运算外,每一轮运算模块所需的掩码均通过与该轮运算相邻的上一轮运算模块的输出得到,即,除第一轮运算外的每一轮运算无需引入新的随机掩码,因此,采用本申请的方案无需对N轮运算的中间值进行脱掩,从而实现了对能量攻击的抵抗。对于装置或系统实施例而言,由于其基本相应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置或系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,在没有超过本申请的精神和范围内,可以通过其他的方式实现。当前的实施例只是一种示范性的例子,不应该作为限制,所给出的具体内容不应该限制本申请的目的。例如,所述单元或子单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或多个子单元结合一起。另外,多个单元可以或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所描述系统,装置和方法以及不同实施例的示意图,在不超出本申请的范围内,可以与其它系统,单元,技术或方法结合或集成。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。以上所述仅是本发明的具体实施方式,应当指出,对于本
技术领域:
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页1 2 3