首页> 中国专利> 一种高级数据加密标准的逆混合列变换实现电路

一种高级数据加密标准的逆混合列变换实现电路

摘要

本发明公开了一种高级数据加密标准的逆混合列变换的实现电路,该电路包括:输入异或模块组,该模块组包括2级共4个异或模块,在该模块组的四个输入端分别输入需要进行逆混合列变换的4个字节,输出端输出运算后的结果;有限域计算模块组,该模块组包括只具有1级异或和1个选择模块的FFmul_2、FFmul_4和FFmul_8硬件实现电路,该模块组的输入端分别与输入异或模块组相应输出端相连,输出端分别输出该模块组的运算结果;输出异或模块组,该模块组包括3级共4个异或模块,该模块组的输入端分别与有限域计算模块组的输出端相连,其它输入端与输入异或模块组的相应输入端和输出端相连,输出端输出逆混合列变换后的新字节。

著录项

  • 公开/公告号CN1625098A

    专利类型发明专利

  • 公开/公告日2005-06-08

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN200310118875.3

  • 发明设计人 张赞;黄勇;

    申请日2003-12-04

  • 分类号H04L9/06;

  • 代理机构11018 北京德琦知识产权代理有限公司;

  • 代理人王丽琴

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-17 16:16:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-01-18

    未缴年费专利权终止 IPC(主分类):H04L9/06 授权公告日:20090429 终止日期:20151204 申请日:20031204

    专利权的终止

  • 2009-04-29

    授权

    授权

  • 2006-04-26

    实质审查的生效

    实质审查的生效

  • 2005-06-08

    公开

    公开

说明书

技术领域

本发明涉及数据安全技术领域,尤其涉及在分组加密算法中,一种高级数据加密标准(AES)的逆混合列变换的实现电路。

背景技术

AES是2001年10月2日由美国国家标准技术局指定的一种数据加密标准,作为一种分组加密算法,AES一次对一个数据块进行加密或解密,当前,AES正在得到日益广泛的应用。参见图1,在使用AES对一个数据块进行加密时,需要经过移位列变换、字节替换、混合列变换、异或子密钥的操作,参见图2,在使用AES对一个数据块进行解密时,则需要进行与加密相对应的异或子密钥、逆混合列变换、逆字节替换、逆移位列变换的操作。由于混合列变换比逆混合列变换实现简单,因此导致加密的过程比解密过程实现快,为了提高利用AES进行数据加密和解密的电路性能,需要对逆混合列变换的实现电路进行优化,以提高该AES电路的整体速度。

下面首先对逆混合列变换所涉及的算法加以介绍:

逆混合列变换是对每个双字进行变换,其中,双字为4个字节,每个字节8比特,双字共32比特;逆混合列变换对双字进行如下公式1~公式4所示的变换,其中,在这些公式中,t代表进行变换前的双字,new_t代表变换后的双字,t[0]、t[1]、t[2]、t[3]分别为t的第1、2、3、4个字节,new_t[0]、new_t[1]、new_t[2]、new_t[3]分别为new_t的第1、2、3、4个字节,用0x表示16进制数,0x0e、0x0b、0x0d、0x09分别表示16进制的0e、0b、0d、09,对应的十进制数分别是14、11、13、9;

公式1:

new_t[0]=FFmul(0x0e,t[0])^

          FFmul(0x0b,t[1])^

          FFmul(0x0d,t[2])^

          FFmul(0x09,t[3])

公式2:

new_t[1]=FFmul(0x0e,t[1])^

          FFmul(0x0b,t[2])^

          FFmul(0x0d,t[3])^

          FFmul(0x09,t[0])

公式3:

new_t[2]=FFmul(0x0e,t[2])^

          FFmul(0x0b,t[3])^

          FFmul(0x0d,t[0])^

          FFmul(0x09,t[1])

公式4:

new_t[3]=FFmul(0x0e,t[3])^

          FFmul(0x0b,t[0])^

          FFmul(0x0d,t[1])^

          FFmul(0x09,t[2])

其中,在上述公式中,符号^表示异或运算,FFmul代表有限域256上的乘法运算,后面将该运算简称为有限域乘法或者乘法,FFmul(0x0e,t[0])表示16进制数0e与t[0]进行该乘法运算,公式中其余的FFmul也表示进行类似计算;

在直接实现上述有限域算法的硬件电路中,不但要耗费大量的门电路实现相应算法,而且还会造成电路的逻辑延时非常大,不利于提高时钟频率,由于上述逆混合列变换的算法中只使用到了已知一个乘数的有限域乘法,因此,可以针对此点对逆混合列变换的硬件实现电路进行优化,现有技术中,逆混合列变换的硬件电路优化通过以下方案得以实现:

在算法方面,在该技术方案中,通过多次进行有限域上的乘2运算来实现上述公式1~公式4所述的逆混合列计算,由于有限域上的乘2运算在硬件电路上易于实现,因此,该方案可以实现对于硬件电路的优化。在以下的叙述中,以FFmul_2表示有限域上的乘0x02运算,其它形如FFmul_2的形式也表示相应的有限域乘法运算,以FFmul_e为例,该现有技术方案中对该FFmul_e的简化过程如下:

由于0x0e=0x08^0x04^0x02,根据有限域乘法中FFmul(a,b^c)=FFmul(a,b)^FFmul(a,c)的特性,可以得到如下简化结果:

FFmul_e(a)=FFmul_8(a)^FFmul_4(a)^FFmul_2(a);

由于在有限域上乘4等于两次有限域上乘2,有限域上乘8等于3次有限域上乘2,因此可以继续化简,从而得到公式5所示的化简结果:

公式5:

FFmul_e(a)=FFmul_2(FFmul_2(FFmul_2(a)))^FFmul_2(FFmul_2(a))^FFmul_2(a)

同理,也可以对FFmul_d、FFmul_b、FFmul_9进行化简,得到如下公式6~公式8所示的化简结果:

公式6:

FFmul_d(a)=FFmul_2(FFmul_2(FFmul_2(a)))^FFmul_2(FFmul_2(a))^a

公式7:

FFmul_b(a)=FFmul_2(FFmul_2(FFmul_2(a)))^FFmul_2(a)^a

公式8:

FFmul_9(a)=FFmul_2(FFmul_2(FFmul_2(a)))^a

由上述的化简结果,可以把上述公式1~公式4所示的逆混合列变换计算转换为只包括有限域上乘2运算的计算,从而达到在算法方面简化逆混合列变换算法的效果;

在硬件电路实现方面,该现有技术方案采用如图3所示的FFmul_2实现电路来实现有限域上的乘2运算,该电路中包括有左移模块、异或(XOR)模块和选择模块,其中,左移模块实现对输入的8比特数组进行左移,该左移为将数组的低7位数向左移动一位,并将最后一位用值为0的一比特补齐,以上述左移方式实现乘2运算;在该FFmul_2实现电路中,左移模块的输入端输入数组din[7:0],该数组中保存有需要进行乘2运算的1字节内容,左移模块的输出结果输入至选择模块,由于左移模块的输出结果可能会超出有限域的范围,因此,还需将左移模块的输出结果输入至异或模块,该异或模块的另一输入端输入预先计算得到的常数0x1b,异或模块对这两个输入进行异或运算后,将运算结果输入至选择模块;选择模块根据数组din[7:0]进行左移前的din[7]的数值进行选择输出,当该din[7]为0时,则输出的dout[7:0]就是左移模块输入选择模块的值,当该din[7]为1时,表明数组din[7:0]在进行上述左移后会溢出有限域的范围,而由于上述异或模块所进行的异或运算能够实现将该溢出的结果转换为有限域内的乘法结果,因此,选择模块选择异或模块输入选择模块的结果作为dout[7:0]输出。

采用该FFmul_2实现电路,可以根据上述公式5所述的化简结果,利用如图4所示的实现电路实现FFmul_e的运算;同样,也可采用该FFmul_2实现电路,根据公式6~公式8所述的FFmul_d、FFmul_b、FFmul_9的化简结果,采用与该化简结果相对应并且与上述FFmul_e实现电路形式类似的实现电路加以实现,在采用该FFmul_2实现电路分别实现FFmul_e、FFmul_d、FFmul_b、FFmul_9运算后,根据公式1~公式4所述的内容,还需要对这些运算结果进行异或运算,采用图5所示的实现电路实现上述的异或运算,从而最终输出逆混合列变换后的结果new_t;其中,在图5中,以FFmul_e模块、FFmul_b模块、FFmul_d模块、FFmul_9模块分别表示上述采用FFmul_2实现电路实现相应运算时的实现电路,根据公式1~公式4的运算内容,这些模块分别输入相对应的字节,从而最终输出相对应的逆混合列变换结果。

由于公式5的化简结果中至少调用了三次FFmul_2,因此,参见图4,在该硬件实现电路中相应地调用了三次FFmul_2实现电路,故在该电路中,从电路的输入到输出所走路径最多的最大路径经过了4次异或和3个选择模块,共经过了7级逻辑;同样,由于公式6~公式8所述的化简结果也分别调用了三次FFmul_2,因此,这些化简结果所对应的FFmul_b、FFmul_d、FFmul_9硬件实现电路也需要分别经过7级逻辑,而图5所示的实现电路表明要完成逆混合列变换还需要再经过2次异或,因此,采用该现有技术实现逆混合列变换共需要6级异或逻辑和3级选择逻辑,而电路的逻辑数多会导致最大路径的延时长,从而导致电路的运行速度缓慢,不能很好地实现提高电路运行频率,进而提高AES电路的整体运行速度的目的。

发明内容

有鉴于此,本发明的主要目的在于提供一种逆混合列变换的实现电路,该电路的逻辑级数少,能够减小电路中最长路径的延时,从而提高电路的运行速度,进而达到提高AES电路整体运行速度的目的。

为实现上述目的,本发明采用一种高级数据加密标准的逆混合列变换的实现电路,在该电路的输入端按顺序输入要进行逆混合列变换的四个字节,该电路的输出端输出与输入的四个字节相对应的逆混合列变换后的四个字节中的一个字节,该电路包括输入异或模块组、有限域计算模块组和输出异或模块组:

输入异或模块组,自该模块组的四个输入端按顺序分别输入要进行逆混合列变换的四个字节,该模块组对输入的四个字节进行异或运算,自该模块组的第一输出端将该模块组第一输入端所输入字节与该模块组第三输入端所输入字节的异或结果输出至有限域计算模块组中的FFmul_4模块,自该模块组的第二输出端将该模块组第一输入端所输入字节与该模块组第二输入端所输入字节的异或结果输出至有限域计算模块组中的FFmul_2模块,自该模块组的第三输出端将该模块组四个输入端所输入字节的异或结果输出至有限域计算模块组中的FFmul_8模块,自该模块组的第四输出端将该模块组第三输入端所输入字节与该模块组第四输入端所输入字节的异或结果输出至输出异或模块组;该模块组的第二输入端将所输入的字节输出至输出异或模块组;

有限域计算模块组,该模块组中用于实现FFmul_2计算的FFmul_2模块将计算结果输出至输出异或模块组,该模块组中用于实现FFmul_4计算的FFmul_4模块将计算结果输出至输出异或模块组,和该模块组中用于实现FFmul_8计算的FFmul_8模块将计算结果输出至输出异或模块组;

输出异或模块组,该模块组对输入进行异或运算,将异或运算后所得到的进行逆混合列变换后的新字节自该模块组的输出端输出;在该实现电路的输入异或模块组的第一输入端~第四输入端分别输入t[0]、t[1]、t[2]和t[3]时,该输出异或模块组的输出端输出new_t[0];在该电路的输入异或模块组的第一输入端~第四输入端分别输入t[1]、t[2]、t[3]和t[0]时,该输出异或模块组的输出端输出new_t[1];在该电路的输入异或模块组的第一输入端~第四输入端分别输入t[2]、t[3]、t[0]和t[1]时,该输出异或模块组的输出端输出new_t[2];在该电路的输入异或模块组的第一输入端~第四输入端分别输入t[3]、t[0]、t[1]和t[2]时,该输出异或模块组的输出端输出new_t[3];其中,t表示进行逆混合列变换前的字节,new_t表示进行逆混合列变换后的字节。

其中,所述FFmul_4硬件实现电路包括:

左移模块,在该模块的输入端输入保存有一个字节的数组,该模块对该数组中的8比特进行左移2位操作,将左移后的结果自输出端输出至选择模块;

三个异或模块,这些异或模块的一个输入端分别输入预先计算得到的十六进制常数1b、36和2d,另一个输入端则分别输入所述左移模块输出端所输出的结果,这些异或模块的输出端将进行异或运算后的结果输出至选择模块;

选择模块:该模块根据所述数组左移前的高2位数值从所接收到的输入中选择其中的1个作为所述计算结果输出。

其中,所述FFmul_8硬件实现电路包括:

左移模块,在该模块的输入端输入保存有一个字节的数组,该模块对该数组中的8比特进行左移3位操作,将左移后的结果自输出端输出至选择模块;

七个异或模块,这些异或模块的一个输入端分别输入预先计算得到的十六进制常数1b、36、2d、6c、77、5a和41,另一个输入端则分别输入所述左移模块输出端所输出的结果,这些异或模块的输出端将进行异或运算后的结果输出至选择模块;

选择模块:该模块根据所述数组左移前的高3位数值从所接收到的输入中选择其中的1个作为所述计算结果输出。

其中,所述FFmul_2硬件实现电路包括:

左移模块,在该模块的输入端输入保存有一个字节的数组,该模块对该数组中的8比特进行左移1位操作,将左移后的结果自输出端输出至选择模块;

一个异或模块,该异或模块的一个输入端输入预先计算得到的十六进制常数1b,另一个输入端则输入所述左移模块输出端所输出的结果,该异或模块的输出端将进行异或运算后的结果输出至选择模块;

选择模块:该模块根据所述数组左移前的高1位数值从所接收到的输入中选择其中的1个作为所述计算结果输出。

其中,所述输入异或模块组包括:

异或模块1:自该异或模块1的第一输入端输入所述输入异或模块组第一输入端所输入的字节,自该异或模块1的第二输入端输入所述输入异或模块组第三输入端所输入的字节,该异或模块1对输入的字节进行异或运算后,将运算结果自所述输入异或模块组的第一输出端输出;

异或模块2:自该异或模块2的第一输入端输入所述输入异或模块组第一输入端所输入的字节,自该异或模块2的第二输入端输入所述输入异或模块组第二输入端所输入的字节,该异或模块2对输入的字节进行异或运算后,将运算结果自所述输入异或模块组的第二输出端输出;

异或模块3:自该异或模块3的第一输入端输入所述输入异或模块组第三输入端所输入的字节,自该异或模块3的第二输入端输入所述输入异或模块组第四输入端所输入的字节,该异或模块3对输入的字节进行异或运算后,将运算结果自所述输入异或模块组的第四输出端输出;

异或模块4:自该异或模块4的第一输入端输入所述异或模块2的输出端所输出的运算结果,自该异或模块4的第二输入端输入所述异或模块3的输出端所输出的运算结果,该模块对输入的运算结果进行异或运算后,将运算结果自所述输入异或模块组的第三输出端输出。

其中,所述输出异或模块组包括:

异或模块5:自该异或模块5的第一输入端输入所述输入异或模块组第四输出端所输出的异或结果,自该异或模块5的第二输入端输入所述输入异或模块组第二输入端所输入的字节,该异或模块5对输入进行异或运算后,自该异或模块5的输出端将运算结果输出至异或模块7的第一输入端;

异或模块6,自该异或模块6的两个输入端输入FFmul_2模块、FFmul_4模块和FFmul_8模块中任意两个模块的输出端所输出的运算结果,该异或模块6对输入进行异或运算后,将运算结果输出至异或模块8的第二输入端;

异或模块7,FFmul_2模块、FFmul_4模块和FFmul_8模块中未将运算结果输出至异或模块6的那个模块将运算结果自异或模块7的第二输入端输入异或模块7,该异或模块7对输入进行异或运算后,将异或运算结果自输出端输出至异或模块8的第一输入端;

异或模块8,该异或模块8对输入进行异或运算后,自其输出端输出所述进行逆混合列变换后的新字节。

其中,所述输出异或模块组包括:

异或模块9:自该异或模块9的第一输入端输入所述输入异或模块组的第四输出端所输出的异或结果,自该异或模块9的第二输入端输入FFmul_2模块、FFmul_4模块和FFmul_8模块中任意一个模块输出端所输出的运算结果,该异或模块9对输入进行异或运算后,自该异或模块9的输出端将运算结果输出至异或模块10的第一输入端;

异或模块10:FFmul_2模块、FFmul_4模块和FFmul_8模块中未将运算结果输出至异或模块9的两个模块中的任意一个模块将该模块的运算结果自异或模块10的第二输入端输入异或模块10,异或模块10对输入进行异或运算后,将运算结果自输出端输出至异或模块12的第一输入端;

异或模块11:FFmul_2模块、FFmul_4模块和FFmul_8模块中未将运算结果输出至异或模块9和异或模块10的那个模块将该模块的运算结果自异或模块11的第一输入端输入异或模块11,自该异或模块11的第二输入端输入所述输入异或模块组第二输入端所输入的字节,该异或模块11对输入进行异或运算后,将运算结果自输出端输出至异或模块12的第二输入端;

异或模块12:该异或模块12对输入进行异或运算后,自输出端输出所述进行逆混合列变换后的新字节。

其中,所述异或模块为异或门。

可见,由于本发明采用了只具有1级异或模块和1级选择模块的FFmul_2、FFmul_4、FFmul_8实现电路,分别实现FFmul_2运算、FFmul_4运算和FFmul_8运算,然后再根据对逆混合列变换的化简结果,利用上述FFmul_2、FFmul_4、FFmul_8实现电路实现逆混合列变换,从而使得实现AES逆混合列变换的电路中所包括的逻辑级数减少为6级,该6级逻辑可以为4级异或逻辑、1级选择逻辑和1级反相逻辑,或者也可为5级异或逻辑和1级选择逻辑,从而使得电路中最长路径延时减小,加快了电路的运行速度,达到了提高AES电路整体运行速度的目的,并且,由于该电路具有延时小、运行速度快的性能,因此,可以将该电路应用在较高的频率上,从而提高电路的工作性能。

附图说明

图1为AES加密迭代单元所实现操作的流程图。

图2为AES解密迭代单元所实现操作的流程图。

图3为现有技术中FFmul_2的实现电路示意图。

图4为现有技术中FFmul_e的实现电路示意图。

图5为现有技术中进行逆混合列变换的实现电路示意图。

图6为本发明中FFmul_4的实现电路示意图。

图7为本发明中FFmul_8的实现电路示意图。

图8为本发明进行逆混合列变换的模块图。

图9为本发明中输入异或模块组的示意图。

图10为本发明中有限域计算模块的示意图。

图11为本发明一实施例中输出异或模块组的示意图。

图12为本发明另一实施例中输出异或模块组的示意图。

图13为本发明一实施例中实现逆混合列变换的电路图。

具体实施方式

本发明为一种逆混合列变换的硬件实现电路,该电路采用只具有1级异或模块和1级选择模块的FFmul_2、FFmul_4、FFmul_8实现电路分别实现FFmul_2运算、FFmul_4运算和FFmul_8运算,进而再根据对逆混合列变换的化简结果,利用上述FFmul_2、FFmul_4、FFmul_8实现电路实现逆混合列变换,该电路只需要经过6级逻辑即可实现逆混合列变换,其运行速度快;其中,上述所述的实现电路所具有的异或模块的级数为从电路的输入到输出所走路径最多的最大路径中所包括的异或模块数量,而上述所述的实现电路所具有的选择模块的级数为从电路的输入到输出所走路径最多的最大路径中所包括的选择模块数量。

下面结合附图对本发明进行详细说明。

参见图6,本发明利用只具有1级异或和1个选择模块的FFmul_4硬件实现电路实现FFmul_4运算,在该电路中,左移模块实现对输入数组din[7:0]的左移2位操作,从而实现有限域上的乘4运算,左移模块的输出结果输入至选择模块,同时,为了对可能出现的左移后发生溢出的情况进行处理,左移模块的输出结果还输入至图中所示的3个异或模块,这3个异或模块的另一输入端分别输入预先计算得到的常数0x1b、0x36和0x2d,这3个异或模块的输出结果分别输入至选择模块,选择模块根据进行左移前din[7:0]中的高2位din[7:6]进行选择输出:如果din[7:6]为0,则dout就等于din左移后的值,若din[7:6]为1则dout等于din[7:0]左移后与0x1b异或的结果,若din[7:6]为2则dout等于din[7:0]左移后与0x36异或的结果,若din[7:6]为3则dout等于din[7:0]左移后与0x2d异或的结果,以上述方式保证左移后的结果在有限域范围之内;其中,根据din[7:6]的值预先计算得到上述3个异或模块所输入的常数,使得该常数与左移后的数组进行异或运算后的结果为左移两位的结果,以避免由于该数组中高两位进行左移而出现乘法结果溢出有限域的情况。

参见图7,本发明利用只具有1级异或模块和1个选择模块的FFmul_8硬件实现电路实现FFmul_8运算,在该电路中,左移模块实现对输入数组din[7:0]的左移3位操作,从而实现有限域上的乘8运算,左移模块的输出结果输入至选择模块,同时,为了对可能出现的左移后发生溢出的情况进行处理,左移模块的输出结果还输入至图中所示的7个异或模块,这7个异或模块的另一输入端分别输入预先计算得到的常数0x1b、0x36、0x2d、0x6c、0x77、0x5a和0x41,这7个异或模块的输出结果分别输入至选择模块,选择模块根据进行左移前din[7:0]中的高3位din[7:5]进行选择输出:如果din[7:5]为0,则dout就等于din左移后的值,若din[7:5]为1则dout等于din左移后的值异或0x1b的结果,若din[7:5]为2则dout等于din左移后的值异或0x36的结果,若din[7:5]为3则dout等于din左移后的值异或0x2d的结果,若din[7:5]为4则dout等于din左移后的值异或0x6c的结果,若din[7:5]为5则dout等于din左移后的值异或0x77的结果,若din[7:5]为6则dout等于din左移后的值异或0x5a的结果,若din[7:5]为7则dout等于din左移后的值异或0x41的结果,以上述方式保证左移后的结果在有限域范围之内;其中,根据din[7:5]的值预先计算得到上述7个异或模块所输入的常数,使得该常数与左移后的数组进行异或运算后的结果为左移三位的结果,以避免由于该数组中高三位进行左移而出现乘法结果溢出有限域的情况。

由于本发明采用FFmul_2、FFmul_4、FFmul_8实现电路实现逆混合列变换,因此,需要将公式1~公式4所述的逆混合列变换计算转换为只涉及上述FFmul_2、FFmul_4和FFmul_8运算,根据有限域算法中的FFmul(a,b^c)=FFmul(a,b)^FFmul(a,c)以及FFmul(0x01,a)=a的特性,可进行对公式1~公式4的转换,以对第一个字节进行逆混合列变换为例,上述转换的具体过程为:

new_t[0]=FFmul(0x0e,t[0])^

          FFmul(0x0b,t[1])^

          FFmul(0x0d,t[2])^

          FFmul(0x09,t[3])

        =FFmul(0x0d,t[0]^t[2])^

          FFmul(0x09,t[1]^t[3])^

          FFmul(0x02,t[0]^t[1])^

          t[0]

        =FFmul(0x0c,t[0]^t[2])^

          FFmul(0x08,t[1]^t[3])^

          FFmul(0x02,t[0]^t[1])^

          t[0]^t[1]^t[2]^t[3]^

          t[0]

        =FFmul(0x08,t[0]^t[1]^t[2]^t[3])^

          FFmul(0x04,t[0]^t[2])^

          FFmul(0x02,t[0]^t[1])^

          t[1]^t[2]^t[3]^

设u=t[0]^t[1]^t[2]^t[3],可以得到:

公式9:

new_t[0]=FFmul_8(u)^FFmul_4(t[0]^t[2])^FFmul_2(t[0]^t[1])

        ^t[1]^t[2]^t[3]

如公式10~公式12所示,同样可以得到求逆混合列变换其它几个字节的优化公式:

公式10:

new_t[1]=FFmul_8(u)^FFmul_4(t[1]^t[3])^FFmul_2(t[1]^t[2])

^t[0]^t[2]^t[3]

公式11:

new_t[2]=FFmul_8(u)^FFmul_4(t[0]^t[2])^FFmul_2(t[2]^t[3])^t[0]^t[1]^t[3]

公式12: 

new_t[3]=FFmul_8(u)^FFmul_4(t[1]^t[3])^FFmul_2(t[3]^t[0])

^t[0]^t[1]^t[2]

采用上述公式10~公式12所述的优化公式,可以将逆混合列变换计算转换为只涉及FFmul_2、FFmul_4和FFmul_8运算,本发明根据上述优化结果,采用图8所示逆混合列变换电路实现逆混合列变换,该电路包括:

(1)输入异或模块组,该模块组由异或模块组成,该异或模块组具有四个输入端,自这些输入端输入要进行逆混合列变换的四个字节,同时,该异或模块组的第二输入端将输入的字节输入至输出异或模块组;该输入异或模块组具有四个输出端,第一输出端输出异或运算结果至有限域计算模块中的FFmul_4模块,该异或运算结果为FFmul_4模块进行公式9~公式12中的FFmul_4运算的自变量值;第二输出端输出异或运算结果至有限域计算模块中的FFmul_2模块,该异或运算结果为FFmul_2模块进行公式9~公式12中FFmul_2运算的自变量值;第三输出端输出异或运算结果至有限域计算模块中的FFmul_8模块,该异或运算结果为FFmul_8模块进行公式9~公式12中的FFmul_8运算的自变量值;第四输出端则输出异或运算结果至输出异或模块组;其中,输入异或模块组各个输出端所输出的异或运算结果分别为:

第一输出端:输入异或模块组第一输入端所输入的字节与输入异或模块组第三输入端所输入的字节的异或结果;

第二输出端:输入异或模块组第一输入端所输入的字节与输入异或模块组第二输入端所输入的字节的异或结果;

第三输出端:输入异或模块组四个输入端所输入的字节的异或结果;

第四输出端:输入异或模块组第三输入端所输入的字节与输入异或模块组第四输入端所输入的字节的异或结果;

(2)有限域计算模块组:该模块组由FFmul_2模块、FFmul_4模块、和FFmul_8模块组成,FFmul_2模块实现公式9~公式12中的FFmul_2计算,将计算结果输出至输出异或模块组;FFmul_4模块实现公式9~公式12中的FFmul_4计算,将计算结果输出至输出异或模块组;FFmul_8模块实现公式9~公式12中的FFmul_8计算,将计算结果输出至输出异或模块组;

(3)输出异或模块组:该模块组有五个输入端和一个输出端,五个输入端中的其中三个输入端分别接收有限域计算模块组输出的计算结果,从而得到公式9~公式12中FFmul_2的计算结果、FFmul_4的计算结果、和FFmul_8的计算结果;五个输入端中的另外两个输入端则分别接收输入异或模块组第四输出端所输出的异或结果和输入异或模块组第二输入端所输入的字节,从而得到公式9~公式12中除FFmul_2的计算结果、FFmul_4的计算结果、和FFmul_8的计算结果之外的另外三个变量;输出异或模块组对其输入端的输入进行异或运算后,实现公式9~公式12中的计算,从而得到进行逆混合列变换后的字节,输出异或模块组将所得到的逆混合列变换后的字节自其输出端输出;

其中,要分别得到逆混合列变换后的四个字节,根据公式9~公式12,图8所示输入异或模块组的四个输入端所输入的进行逆混合列变换前的四个字节分别为:

如果要得到new_t[0],输入异或模块组的四个输入端所输入的字节为:在第一输入端输入t[0],在第二输入端输入t[1],在第三输入端输入t[2],在第四输入端输入t[3];

如果要得到new_t[1],输入异或模块组的四个输入端所输入的字节为:

在第一输入端输入t[1],在第二输入端输入t[2],在第三输入端输入t[3],在第四输入端输入t[0];

如果要得到new_t[2],输入异或模块组的四个输入端所输入的字节为:

在第一输入端输入t[2],在第二输入端输入t[3],在第三输入端输入t[0],在第四输入端输入t[1];

如果要得到new_t[3],输入异或模块组的四个输入端所输入的字节为:

在第一输入端输入t[3],在第二输入端输入t[0],在第三输入端输入t[1],在第四输入端输入t[2]。

下面以对t[0]进行逆混合列变换的实现电路为例,分别对以上模块加以详细说明:

输入异或模块组:

参见图9,该模块组中包括2级共4个异或模块,包括4个输入端和4个输出端,具体包括:

异或模块1:该模块的第一输入端与异或模块2的第一输入端相连接,共同接收输入异或模块组第一输入端所输入的字节,在本实施例中,该所输入的字节为t[0];该异或模块1的第二输入端与异或模块3的第一输入端相连接,共同接收输入异或模块组第三输入端所输入的字节,在本实施例中,该所输入的字节为t[2];该异或模块1对输入的字节进行异或运算后,将运算结果自输入异或模块组的第一输出端输出,在本实施例中,所输出的运算结果为t[0]^t[2];

异或模块2:除了该模块的第一输入端与异或模块1的第一输入端相连接,以共同接收输入字节之外,该模块的第二输入端自输入异或模块组的第二输入端接收所输入的字节,本实施例中,该所输入的字节为t[1];该异或模块2的输出端与异或模块4的第一输入端相连,并且,自输入异或模块组的第二输出端将该异或模块2进行异或运算后的结果输出,在本实施例中,该结果为t[0]^t[1];

异或模块3:除了该模块的第一输入端与异或模块1的第二输入端相连以接收输入异或模块组第三输入端的字节外,该模块的第二输入端自该输入异或模块组的第四输入端接收所输入的字节,本实施例中,该所输入的字节为t[3],该异或模块3的输出端与异或模块4的第二输入端相连,并且,该模块的输出端自输入异或模块组的第四输出端将该异或模块3进行异或运算后的结果输出,本实施例中,该结果为t[2]^t[3];

异或模块4:如上所述,该模块的第一输入端和第二输入端分别与异或模块2的输出端和异或模块3的输出端相连,该模块的输出端自输入异或模块组的第三输出端将该异或模块4进行异或运算后的结果输出,本实施例中,该结果为t[0]^t[1]^t[2]^t[3];

其中,上述异或模块1~异或模块3为第一级异或模块,上述异或模块4为第二级异或模块;

有限域计算模块组:

参见图10,该模块组中包括实现FFmul_2运算的FFmul_2模块、实现FFmul_4运算的FFmul_4模块和实现FFmul_8运算的FFmul_8模块,其中,FFmul_4模块和FFmul_8模块分别采用图6和图7的实现电路,FFmul_2模块采用图3所示的实现电路,FFmul_2模块与上述输入异或模块组的第二输出端相连,FFmul_4模块与上述输入异或模块组的第一输出端相连,FFmul_8模块与上述输入异或模块组的第三输出端相连,FFmul_2模块、FFmul_4模块和FFmul_8模块的输出端分别与输出异或模块组中所包括的异或模块相连,将各自的运算结果输出至这些异或模块;

在本实施例中,在FFmul_2模块的输入端输入上述输入异或模块组所输出的t[0]^t[1]的值,在FFmul_4模块的输入端输入上述输入异或模块组所输出的t[0]^t[2]的值,在FFmul_8模块的输入端输入上述输入异或模块组所输出的t[0]^t[1]^t[2]^t[3]的值,FFmul_2模块将公式9中FFmul_2(t[0]^t[1])的计算结果输出至输出异或模块组、FFmul_4模块将公式9中FFmul_4(t[0]^t[2])的计算结果输出至输出异或模块组、FFmul_8模块将公式9中FFmul_8(u)的计算结果输出至输出异或模块组,其中,u=t[0]^t[1]^t[2]^t[3];

输出异或模块组:

该模块组至少包括3级4个异或模块,其实现形式可以包括以下几种:

(1)参见图11,该输出异或模块组包括以下异或模块:

异或模块5:该模块的第一输入端与上述输入异或模块组的第四输出端相连,接收该输出端所输出的结果,本实施例中,该结果为t[2]^t[3];该模块的第二输入端与输入异或模块组的第二输入端相连,接收自输入异或模块组第二输入端所输入的字节,本实施例中,该字节为t[1];该异或模块5的输出端与异或模块7的第一输入端相连,将运算结果输出至异或模块7,本实施例中,该运算结果为t[1]^t[2]^t[3];

异或模块6,该模块的第一输入端和第二输入端与上述FFmul_2模块、FFmul_4模块和FFmul_8模块的三个输出端中的任意两个相连,该模块的输出端与异或模块8的第二输入端相连,从而将该异或模块6的运算结果输入至异或模块组8,本实施例中,该结果为FFmul_4(t[0]^t[2])^FFmul_2(t[0]^t[1]);

异或模块7,除了该模块的第一输入端与异或模块5的输出端相连之外,该模块的第二输入端与FFmul_2模块、FFmul_4模块和FFmul_8模块的三个输出端中未和异或模块6相连的那个输出端相连,该模块的输出端与异或模块8的第一输入端相连,将该异或模块7的运算结果输出至异或模块8,本实施例中,该运算结果为t[1]^t[2]^t[3]^FFmul_8(u);

异或模块8,如上所述,该模块的两个输入端分别与异或模块6和异或模块7的输出端相连,该模块的输出端输出进行逆混合列变换后的新字节,本实施例中,异或模块6向异或模块8的输入为:FFmul_4(t[0]^t[2])^FFmul_2(t[0]^t[1]),异或模块7向异或模块8的输入为:t[1]^t[2]^t[3]^FFmul_8(u),根据公式9,在异或模块8对这两个输入进行异或运算后,得到的新字节为new_t[0];

其中,上述异或模块5为第一级异或模块,异或模块6和异或模块7为第二级异或模块,异或模块8为第三级异或模块;

(2)参见图12,在实现该输出异或模块组的另一实施例中,该模块包括以下异或模块:

异或模块9:

该异或模块9的第一输入端与输入异或模块组的第四输出端相连,接收自该第四输出端所输出的结果,本发明实施例中,该结果为t[2]^t[3];该异或模块9的第二输入端与FFmul_2模块、FFmul_4模块和FFmul_8模块的三个输出端中的任意一个相连,本实施例中为与FFmul_4模块的输出端相连;该异或模块9的输出端与异或模块10的第一输入端相连,将该异或模块9的运算结果输出至异或模块10,本实施例中,该运算结果为t[2]^t[3]^FFmul_4(t[0]^t[2]);

异或模块10:

除了该异或模块10的第一输入端与异或模块9的输出端相连外,该异或模块10的第二输入端与FFmul_2模块、FFmul_4模块和FFmul_8模块的三个输出端中未和异或模块9相连的两个输出端中的任意一个输出端相连,本实施例中为与FFmul_2模块的输出端相连;该异或模块10的输出端与异或模块12的第一输入端相连,将异或模块10的运算结果输出至异或模块12,本实施例中,该运算结果为t[2]^t[3]^FFmul_4(t[0]^t[2])^FFmul_2(t[0]^t[1]);

异或模块11:

该异或模块11的第一输入端与FFmul_2模块、FFmul_4模块和FFmul_8模块的三个输出端中未和异或模块9和异或模块10相连的输出端相连,本实施例中为与FFmul_8模块的输出端相连;该异或模块11的第二输入端与输入异或模块组的第二输入端相连,接收自该第二输入端所输入的字节,本发明实施例中,该字节为t[1],该异或模块的输出端与异或模块12的第二输入端相连,将该异或模块的运算结果输出至异或模块12,本实施例中,该运算结果为t[1]^FFmul_8(u);

异或模块12:

异或模块12的两个输入端分别与异或模块10和异或模块11的输出端相连,对这两个输入进行异或运算后,得到逆混合列变换后的新字节,异或模块12的输出端输出该新字节,本实施例中,异或模块10向异或模块12输入t[2]^t[3]^FFmul_4(t[0]^t[2])^FFmul_2(t[0]^t[1]),异或模块11向异或模块12输入t[1]^FFmul_8(u),根据公式9,异或模块12对这两个输入进行异或运算后,得到的新字节为new_t[0];

其中,在该实施例中,输出异或模块组中的各个异或模块与有限域计算模块组中的各个模块的连接关系还可包括以下形式:

A:异或模块9的第二输入端与FFmul_2模块的输出端相连,异或模块10的第二输入端与FFmul_4模块的输出端相连,异或模块11的第一输入端与FFmul_8模块的输出端相连;

B:异或模块9的第二输入端与FFmul_2模块的输出端相连,异或模块10的第二输入端与FFmul_8模块的输出端相连,异或模块11的第一输入端与FFmul_4模块的输出端相连;

C:异或模块9的第二输入端与FFmul_4模块的输出端相连,异或模块10的第二输入端与FFmul_2模块的输出端相连,异或模块11的第一输入端与FFmul_8模块的输出端相连;

D:异或模块9的第二输入端与FFmul_4模块的输出端相连,异或模块10的第二输入端与FFmul_8模块的输出端相连,异或模块11的第一输入端与FFmul_2模块的输出端相连;

E:异或模块9的第二输入端与FFmul_8模块的输出端相连,异或模块10的第二输入端与FFmul_2模块的输出端相连,异或模块11的第一输入端与FFmul_4模块的输出端相连;

采用上述任意一种形式均可以实现该实施例。

图13所示为本发明一实施例中,在以上各个模块具体实现后,进行逆混合列变换的具体实现电路。

以上所述为对t[0]进行逆混合列变换的实现电路,对t[1]、t[2]和t[3]进行逆混合列变换的实现电路与该实现电路完全一致,只是在进行t[1]、t[2]和t[3]的逆混合列变换时,输入异或模块组的四个输入端输入t[0]~t[1]四个字节时的顺序不同,具体为:

根据公式10,在进行t[1]的逆混合列变换时,输入异或模块组的四个输入端的输入为:

在第一输入端输入t[1],在第二输入端输入t[2],在第三输入端输入t[3],在第四输入端输入t[0];相应的,输出异或模块组的输出端输出进行逆混合列变换后的新字节new_t[1];

根据公式11,在进行t[2]的逆混合列变换时,输入异或模块组的四个输入端的输入为:

在第一输入端输入t[2],在第二输入端输入t[3],在第三输入端输入t[0],在第四输入端输入t[1];相应的,输出异或模块组的输出端输出进行逆混合列变换后的新字节new_t[2];

根据公式12,在进行t[2]的逆混合列变换时,输入异或模块组的四个输入端的输入为:

在第一输入端输入t[3],在第二输入端输入t[0],在第三输入端输入t[1],在第四输入端输入t[2];相应的,输出异或模块组的输出端输出进行逆混合列变换后的新字节new_t[3]。

以上所述的左移模块可采用连线直接实现,并不需要逻辑门;以上所述的异或模块可采用异或门实现,而对于进行常数与其它输入进行异或运算的异或模块,则也可采用连线与反相器配合实现。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号