加密密钥生成电路的制作方法

xiaoxiao2020-6-27  127

专利名称:加密密钥生成电路的制作方法
背景技术
1、发明领域本发明涉及一个用于加密数据的电路,以及特别是涉及一个用于生成用在一个如“SAFER+”的加密算法中的一个循环子密钥的小规模的密钥生成电路。
2、相关技术的描述用于加密数据的算法,如公知的由Cylink公司开发的“SAFER+”。“SAFER+”如图20所示和用参考数字1表示。使用一个具有一个128、192和256位位长的加密密钥,“SAFER+”加密算法1将预加密的128位输入数据(纯文本)加密成一个128位加密后的文本。
“SAFER+”加密算法1使用一个循环子密钥生成电路2,当加密密钥是128位时,生成17个循环子密钥、当加密密钥是192位时,生成25个循环子密钥、当加密密钥是256位时,生成33个循环子密钥;以及使用所述循环子密钥生成电路2生成的循环子密钥来加密纯文本的加密电路3。
在该算法中,一个计算过程被分为涉及到“循环”的级。当加密密钥是128位时,循环的数字是8、当加密密钥是192位时,循环的数字是12、当加密密钥是256位时,循环的数字是16。每一个循环进一步分成两个子循环,而且只有最后一个循环被分成三个子循环。相应的,当加密密钥是128位时,子循环的数字是17、当加密密钥是192位时,子循环的数字是25、当加密密钥是256位时,子循环的数字是33。为每一个子循环生成一个128位循环子密钥。
图21是在加密密钥是128位时,生成17个循环子密钥的算法的图示。图22是在加密密钥是192位时,生成25个循环子密钥的算法的图示。
图23是在加密密钥是256位时,生成33个循环子密钥的算法的图示。在这些算法中,当加密密钥是128位时的算法参照图21来描述。
如图21所述的算法是由一个128位的加密密钥生成的从K1到K17的循环子密钥。方括号中标“1”、“2”……“15”和“16”的数字,每一个表示128位输入加密密钥的8位。在这128位中(也就是16字节),最低的字节指定为括号内的数字“1”,以及最高的字节指定为括号内的数字“16”。在128位中,最低(有效)位是由括号中的数字1表示的最低字节的最低位,而最高(有效)位是由括号中的数字16表示的最高字节的最高位。如第一个循环子密钥K1,128位加密密钥就是这样输出的。
为对第二个子循环产生一个循环子密钥K2,第17个字节是如下所述那样产生的。输入的128位加密密钥被分成16个字节,以及在相同的位的位置存在一个异或OR(XOR)的数据。最后的值被定义为表示在第17个字节中各自的位位置的数据。
然后,在17个字节中的每一个3位循环。也就是,例如,8位的{7,6,5,4,3,2,1,0}通过3位向左循环,因此获得{4,3,2,1,0,7,6,5}。作为第j次子循环的一个循环子密钥Kj,由第j个字节表示的数据是作为最低字节的第一个输出。然后,第(j+1)个字节,第(j+2)个字节……第(j+15)个字节均输出,总共16字节。当(j+1)大于17,通过从(j+1)输出减去17来获得字节数。例如,循环子密钥K15,用这种顺序选择字节{15,16,17,1,2,3,4,5,6,7,8,9,10,11,12,13}并顺序地输出。然后,将偏差值bj加入到用这种顺序输出的字节表示的数据中。偏差值bj是由128位表示的一个定值,它是由一个子循环数字j确定的。偏差值bj和所选择的值被加在一起因此就不用为每一个字节考虑进位。偏差值bj的第一个字节是bj[I],循环子密钥的最低字节K15通过增加由内部寄存器的第15个字节和B15
的数据获得的。依照不需要为每一个字节考虑进位的增加,当增加的结果α≤255时,α被设为增加的结果;当增加的结果α>255时,(α-256)被设为增加的结果。
如上所述,因为循环子密钥K2到K17,3位循环以及从第j个字节到第(j+15)个字节的偏差值的输出和增加都是重复进行的,因此生成相应的循环子密钥。
如图22和23所示,一个循环子密钥是从一个192位加密密钥或一个256位加密密钥用与128位加密密钥的情况的相同的方法产生的。除了以下不同之处,字节数的存储更大。另外,在128位的情况下,当(j+1)的值超过17时,从(j+1)减去17。在192位的情况下,当(j+1)的值超过25时,从(j+1)减去25。在256位的情况下,当(j+1)的值超过33时,从(j+1)减去33。
也提出过许多其他的加密算法并公开制造,例如,日本拟公开的出版物No.2000-39840。该出版物并不包括密钥生成的任何特定的例子。日本拟公开的出版物No.11-45049公开了一种密钥生成过程,但该加密算法在该出版物上的描述与本发明所使用的“SAFER+”是不同的。
上述描述的用于生成一个循环子密钥的算法有下面的问题。当输入一个加密密钥,同时地计算和输出所有的循环子密钥。因此,电路的规模不可避免的很大。这是很好理解的,因为为改变每一个循环子密钥的输出的字节,选择器是必不可少的,以及16(循环子密钥的数字-1)倍的加法器也是必不可少的;也就是说,当加密密钥是128位时,需要256个加法器,当加密密钥是192位时,需要384个加法器,当加密密钥是256位时,需要512个加法器。即使在如图24所示的结构中,循环子密钥是一个一个输出的,当同时计算所有的循环子密钥时,也会发生相似的问题。在图24中,一个循环子密钥生成电路2包括用于计算一个位于与加密密钥的不同字节的相同位置的一个异或位的一个异或“OR”逻辑电路9,一个寄存器10,一个3位循环电路12,一个输出选择器14,加法器15以及一个偏置表16。
本发明概述依照本发明的第一个方面,一个用于生成至少一个128位循环子密钥的加密密钥生成电路,该128位循环子密钥用于对128位纯文本加密的至少一个子循环中。从一个具有64×n位(2≤n≤4,其中n为整数)的加密密钥包括一个用于计算包括在加密密钥的每一个字节中的在8位数据中位于同样位置的1位数据异或的异或电路来生成1个字节的计算数据;一个寄存器用于存储由具有8×n个字节和所述1个字节计算数据的加密密钥的和表示的(8×n+1)个字节;一个字节循环电路通过至少一个子循环的每一个子循环中的1个字节,用于完成(8×n+1)个字节数据的循环的字节循环;一个3位循环电路通过每一个子循环中的3位,用于完成在(8×n+1)个字节数据中的每一个字节中的循环位的3位循环;以及16倍加法器用于从(8×n+1)个字节数据的最低字节将一个128位偏差值加到(8×n)字节数据中,该过程由字节循环电路和3位循环电路处理,用来在每一个子循环中产生至少一个128位循环子密钥中的一个。
依照本发明,对每一个循环子密钥,并不一定需要一个选择器来改变字节的输出顺序。因此,就能减小电路的规模。
依照本发明的另一个方面,用于生成至少一个128位循环子密钥的一个加密密钥生成电路用在对128位纯文本的加密的至少一个子循环中,从一个具有64×n位(2≤n≤4,其中n为整数)的加密密钥包括一个用于计算包括在加密密钥的每一个字节中的在8位数据中位于同样位置的1位数据异或的异或电路来生成1个字节的计算数据;一个寄存器用于存储由具有8×n个字节和该1个字节计算数据的加密密钥的和表示的(8×n+1)个字节;一个字节/3位循环电路通过在至少一个子循环中的每一个子循环的一个字节,用于完成(8×n+1)个字节数据的循环的字节循环和通过在至少一个子循环中的每一个子循环的3位,完成在(8×n+1)个字节数据中的每一个字节中的循环位的3位循环;以及16倍加法器用于从(8×n+1)个字节数据的最低字节将一个128位偏差值加到(8×n)字节数据中,该过程由字节循环电路和3位循环电路处理,用来在每一个子循环中产生至少一个128位循环子密钥中的一个。
在一个实施例的字节循环和3位循环是同时执行的,完成的时间缩短了而且电路的规模也变小了。
依照本发明的另一个方面,一个用于生成至少一个128位循环子密钥的加密密钥生成电路,该128位循环子密钥用于对128位纯文本加密的至少一个子循环中。从一个具有64×n位(2≤n≤4,其中n为整数)的加密密钥包括一个用于计算包括在加密密钥的每一个字节中的在8位数据中位于同样位置的1位数据异或的异或电路来生成1个字节的计算数据;一个寄存器用于存储由具有8×n个字节和该1个字节计算数据的加密密钥的和表示的(8×n+1)个字节;一个字节循环电路通过至少一个子循环的每一个子循环中的m个字节,用于完成(8×n+1)个字节数据的循环的m字节循环,至少一次;一个3位循环电路通过每一个子循环中的3位,用于完成在(8×n+1)个字节数据中的每一个字节中的循环位的3位循环;以及m个加法器用于从(8×n+1)个字节数据的最低字节将一个(8×m)位偏差值加到在(8×n)字节数据的每一个(8×m)位数据单元中,该过程由m字节循环电路和3位循环电路处理,用来在每一个子循环中产生至少一个128位循环子密钥中的一个。
在本发明的一个实施例中,m为1。
在本发明的一个实施例中,m为2。
在一个实施例中的偏差值是一次增加一个字节,只需要一个加法器而不是16个。电路的规模进一步减小。
在一个实施例中的偏差值是一次增加两个字节,只需要两个加法器而不是16个。电路的规模进一步减小。
依照本发明的另一个方面,用于生成至少一个128位循环子密钥的一个加密密钥生成电路用在对128位纯文本的加密的至少一个子循环中,从一个具有64×n位(2≤n≤4,其中n为整数)的加密密钥包括一个用于计算包括在加密密钥的每一个字节中的在8位数据中位于同样位置的1位数据异或的异或电路来生成1个字节的计算数据;一个寄存器用于存储由具有8×n个字节和该1个字节计算数据的加密密钥的和表示的(8×n+1)个字节;一个字节/3位循环电路通过在至少一个子循环中的每一个子循环的m个字节,用于完成至少一次,完成(8×n+1)个字节数据的循环的m字节循环(其中m是8×n的一个除数)和通过在每一个m字节循环中3位,完成在(8×n+1)个字节数据中的m字节数据中的循环位的3位循环;以及m个加法器用于从(8×n+1)个字节数据的最低字节将一个(8×m)位偏差值加到每一个(8×m)字节数据单元中,该过程由m字节循环电路和3位循环电路处理,用来在每一个子循环中产生至少一个128位循环子密钥中的一个。
本发明的一个实施例中,m为1。
本发明的一个实施例中,m为1。
在一个实施例中,当字节循环执行的时候同时在一个字节中执行3位循环,缩短了过程时间和减小了电路规模。
在一个实施例中,当字节循环执行的时候同时在两个字节中执行3位循环,缩短了过程时间和减小了电路规模。
因此,在这里描述的本发明使得提供一个使用一个“SAFER+”加密算法,生成一个循环子密钥的小规模的加密密钥生成电路成为可能。
对本领域的普通技术人员来说,在阅读和理解下面的参照附图的详细说明的基础上,本发明的这些和其他的优点就会很明显。
本发明的详细说明图1是根据本发明的第一个实施例,说明一个循环子密钥生成电路的方块图;图2A和2B示出了在如图1所示的循环子密钥生成电路中一个字节循环电路的一个操作过程;图3示出了在如图1所示的循环子密钥生成电路中的一个3位循环电路;图4示出了在如图1所示的循环子密钥生成电路的一个操作过程;图5是根据本发明的第二个实施例,说明一个循环子密钥生成电路的方块图;图6示出了如图5所示的循环子密钥生成电路中一个字节/3位循环电路的一个操作过程;图7示出了如图5所示的循环子密钥生成电路中一个字节/3位循环电路的一个操作过程;图8示出了如图5所示的循环子密钥生成电路的一个操作过程。
图9是根据本发明的第三个实施例,说明一个循环子密钥生成电路的方块图;图10示出了如图9所示的一个循环子密钥生成电路的一个操作过程;图11是根据本发明的第四个实施例,说明一个循环子密钥生成电路的方块图;图12示出了在如图11所示的一个循环子密钥生成电路中一个字节/3位循环电路;图13示出如图11所示的一个循环子密钥生成电路的一个操作过程;图14是根据本发明的第五个实施例,说明一个循环子密钥生成电路的方块图;图15A和15B示出了在如图14所示的循环子密钥生成电路中一个两字节的循环电路的一个操作过程;图16示出了如图14所示的循环子密钥生成电路的一个操作过程;图17图14是根据本发明的第六个实施例,说明一个循环子密钥生成电路的方块图;图18示出了在如图17所示的循环子密钥生成电路中,一个2字节/3位循环电路的一个操作过程;图19示出了如图17所示的循环子密钥生成电路的一个操作过程;图20是说明涉及如SAFER+的一个加密算法的方框图;图21示出了当加密密钥是128位时,生成一个循环子密钥的过程;
图22示出了当加密密钥是196位时,生成一个循环子密钥的过程;图23示出了当加密密钥是256位时,生成一个循环子密钥的过程;图24是一个传统的循环子密钥生成电路的一个方框图。
最佳实施例的描述在下文,将通过参照


实施例的方法来讲述本发明。
(实施例1)图1是根据本发明的第一个实施例,说明与一个加密密钥生成电路一样的一个循环子密钥生成电路201的方框图。该循环子密钥生成电路201不能代替如图20所示的循环子密钥生成电路2以及用于完成SAFER+1加密。
循环子密钥生成电路201包括一个异或电路9、一个内部寄存器10、一个字节循环电路11、一个3位循环电路12、一个偏差表16和16个加法器15。在图1中,为了简洁起见,16个加法器15用一个加法器符号来表示。
异或电路9将一个输入的加密密钥分成1字节(8位)单元,并计算在所有的1字节单元中的相同的位位置的位的一个异或来输出用1字节表示的数据。
内部寄存器10存储用于生成一个循环子密钥的数据,这些数据具有该输入加密密钥+1字节的字节的数目。内部寄存器10存储该输入的加密密钥,字节循环获得的信息,以及由3位循环获得的信息。
字节循环电路11对内部寄存器10中存储的数据进行循环,这些数据由一个字节(8位)单元中的输入的加密密钥+1字节的字节表示。该字节循环电路11主要包括一条线和一个选择器。
图2A示出了使用字节循环电路11完成17字节的字节循环的过程。在图2A中,每一个方框表示存在在内部寄存器10中的一个字节。每一个方框中的数字表示各个字节的序号。更准确地说,例如,数字“1”表示存储由第一个字节(或最低字节)表示的数据;数字“2”表示存储由第二个字节表示的数据等等。在图2中上部的一系列方框表示在执行字节循环前,内部寄存器10的状态。如图所示的,方框中有从左到右的连续数字。在图2中下部的一系列方框表示在执行了字节循环后,内部寄存器10的状态。如图所示,由第17个字节表示的数据从左边移动到第16个方框;由第16个字节表示的数据从左边移动到第15个方框等等。由第2个字节表示的数据移动到最左边的方框;以及由第1个字节表示的数据从左边移动到第17个方框。
图2A示出了内部寄存器10的逐字节的状态。图2B示出了内部寄存器10的一种逐位的状态。在图2B中,每一个方框表示存储在内部寄存器10的1位。在每一个方框中的数字表示存储在内部寄存器10中的各个位(从0位到135位)的序号。更准确地说,例如,数字“0”表示存储由第1位表示的数据;数字“1”表示存储由第2位表示的数据等等;在图2B中,最左边栏的8个方框(0到第7位)与图2A中最左边的方框(1字节)对应;且图2B中最左边的第二栏的8个方框(第8位到第15位)与图2A中最左边的第二个方框(1字节)对应。沿着在位之间提供的连线来执行字节循环;例如,由第8位表示的数据移动到第0位;由第0位表示的数据移动到第128位等等。
为了更好地理解信号的流程,图2B只示出了位之外的连线。实际上,字节循环电路11包括在每一条连线上的一个选择器,用来选择存储在内部寄存器10中的数据,也就是说,由字节循环来处理数据或者由其他的处理过程来处理数据。
图3是3位循环电路12的图解。3位循环电路12执行3位循环,也就是说,向左循环3位存储在内部寄存器10中的数据(加密密钥+1字节的字节)。例如,位{7,6,5,4,3,2,1,0}向左循环3位变成位{4,3,2,1,0,7,6,5}。
3位循环电路12主要包括一条线和一个选择器(在下面说明)。在图3中,右边栏的8个方框表示存储在内部寄存器10里的字节中的任意一个字节。每一个方框表示1位。右边栏的8个长方形框表示一个选择器。选择器选择将存储在内部寄存器10中的数据,也就是说,数据是由3位循环处理或由其它的处理过程来处理。3位循环是通过如把第7位表示的数据移动到第2位、把6位表示的数据移动到1位、把第5位表示的数据移动到第0位、把4位表示的数据移动到7位、把第3位表示的数据移动到第6位、把2位表示的数据移动到5位、把第1位表示的数据移动到第4位、把0位表示的数据移动到3位来完成的。
偏差表16提供一个由一个子循环信号(在下面描述)确定的一个偏差值(即由128位表示的不变值)。
加法器15没有进位地将在内部寄存器10中存储的数据表示的值与8位单元中的偏差值相加。16个加法器15均要求去执行16个字节(128位)的计算。
循环子密钥产生电路201如下所述的操作。尽管根据输入的加密密钥的位的数量,处理的方式不同,基本的操作还是相似的。因此,当输入128位加密密钥时,所执行的操作将参照图1到图4来说明。
在第一个实施例中的循环子密钥生成电路201删除了图24中所示的传统的循环子密钥生成电路2中的输出选择器14来减小电路的大小,相反,循环子密钥生成电路201包括如图1所示的字节循环电路11。
图4是沿时间轴,循环子密钥生成电路201的内部寄存器10中的数据的状态的图解。在图4中,每一个方框表示存储在内部寄存器10中的1个字节。当输入加密密钥时,每一个框中的数字表示在加密密钥中的各个字节的序号。更准确地说,例如,数字“1”表示在存储的所输入的加密密钥中,表示第一个字节的数据;数字“2”表示在存储的所输入的加密密钥中,表示第二个字节的数据等等。
在时间t1,内部寄存器10存储输入的128位加密密钥(16个字节)。在这一点上,异或OR电路9计算在所输入的加密密钥的所有16个字节中的相同的位置(也就是位)的数据的异或。结果值被定义为表示在第17个字节中各自位置的数据。例如,计算由所有16个字节中的第0位表示的数据的异或,结果值定义为表示在第17个字节中的第0位的数据。然后,由最低的16个字节表示的数据从加法器15输出作为一个循环子密钥K1。所输出的数据是前面的字节的循环数据,因此,该数据是由所输入的加密密钥表示的数据。
下一步,在时间t2,字节循环电路11完成字节循环。即如图4所示,字节通过向左移动1个字节来循环。更准确地说,例如,由最低字节表示的数据移动到最右边的框。由第2个字节表示的数据移动到最左边的框;由第3个字节表示的数据移动到从左数的第2个框等等。
然后,在时间t3,3位循环电路12完成在每一个字节的3位循环。然后,通过加法器15输出的由最低16个字节表示的数据作为一个循环子密钥K2,如图4所示的循环子密钥K2中的16个字节的顺序与如图21所示的循环子密钥K2中的16字节的顺序是相同的。因此,不需要选择字节的顺序来输出。
在时间t4,执行字节循环。在时间t5,在每一个字节中执行3位循环。然后,从加法器15输出一个循环子密钥K3。此外,如图4所示的循环子密钥K3中的16个字节的顺序与如图21所示的循环子密钥K3中的16个字节的顺序是相同的。因此,不需要选择字节的输出顺序。
此后,字节循环和3位循环都用相同的方式来完成。因此,能获得循环子密钥K1到K17中的所需的循环子密钥而不需要使用一个输出选择器。在输入一个192位加密密钥或一个256位加密密钥的情况下,用相同的过程来获得所需的循环子密钥。
如图24所示的传统的循环子密钥生成电路2为输出循环子密钥的每一位,需要存储在内部寄存器10中的通过输出选择器14选择的数据。因为下面的原因,输出选择器14需要具有一个大的规模。当输入的加密密钥是128位时,从17位中选择1位,当输入的加密密钥是192位时,从25位中选择1位,当输入的加密密钥是256位时,从33位中选择1位;因此为循环子密钥的128位的每一位完成这样的选择。
相比之下,在每一个实施例中的循环子密钥生成电路201对由内部寄存器10中的字节表示的数据进行循环。因此,只要循环子密钥生成电路201包括与由内部寄存器10中的字节表示的数据循环时一起的连线和选择器,就能输出所需的循环子密钥。因而能减小循环子密钥生成电路201。
(实施例2)图5是依照本发明的第二个实施例,说明与一个加密密钥生成电路一样的循环子密钥生成电路202的结构的方框图。循环子密钥生成电路202不能由图20所示的循环子密钥生成电路2来替代而且用来完成SAFER+1加密。
循环子密钥生成电路202包括一个异或电路9、一个内容寄存器10、一个字节/3位循环电路13,一个偏差表16以及16个加法器15。在图5中,为简洁起见,16个加法器15用一个加法器符号来表示。
循环子密钥生成电路202由字节/3位循环电路13的同一个循环完成字节循环和3位循环。因此,循环子密钥生成电路202缩短了过程时间并减小了规模。
参照图6,字节/3位循环电路13对存储在内部寄存器10中的数据进行循环,该数据是由输入的加密密钥+1位的字节表示,在1个字节(8位)单元中,当循环时,存储在每一个字节中的数据向左移3位。在第一个实施例中的完成的字节循环,例如,由每一个字节的第7位表示的数据移动到另一个字节的第7位。在第二个实施例中,字节循环和3位循环是同时完成的。因此,例如,由一个字节的第7位表示的数据移动到另一个字节的第2位。
图6示出了在内部寄存器10中的一个特定的字节中的数据的改变。图7示出了在内部寄存器10中多数字节的数据的改变。为了更好地理解信号的流程,图7仅示了位之外的连线。实际上,字节/3位循环电路13包括用来选择将存储在内部寄存器10的数据的每一条连线上的一个选择器,也就是说,由字节/3位循环处理数据或由另一个处理过程处理数据。
循环子密钥生成电路202按如下所述的操作。尽管根据输入的加密密钥的位的数据,处理方法有所不同,但基本的操作还是相似的。因此,当输入一个128位加密密钥时,所执行的操作将参照图5和8来进行描述。
图8是沿着时间轴,循环子密钥生成电路202的内部寄存器中的数据的状态的说明。
在时间t1,内部寄存器10存储输入的128位加密密钥(16个字节)。在这一点上,异或OR电路9计算在所输入的加密密钥的所有16个字节中的相同的位置(也就是位)的数据的异或。结果值被定义为表示在第17个字节中各自位置的数据。然后,由最低的16个字节表示的数据从加法器15输出作为一个循环子密钥K1。
下一步,在时间t2,字节/3位循环电路13同时完成字节循环和3位循环。因此从加法器15输出一个循环子密钥K2。即如图8所示,在时间t2完成的字节循环和在时间t3完成3位循环是同时完成的。因此,通过一个步骤所需的时间来缩短用于输出一个循环子密钥所需的时间。
此后,字节循环和3位循环用一个相似的方式来同时完成以在循环子密钥K1到K17中的获得一个所需的循环子密钥。在输入一个192位加密密钥或一个256位加密密钥的情况下,用相似的过程来获得所需的循环子密钥。
需要33步骤的处理过程在第一个实施例中能用17步骤来完成。
在电路大小方面,在第一个实施例的每一个字节循环电路11和3位循环电路12中提供的选择器通常可用在第二个实施例中。因此,与第一个实施例相比,能减少选择器的数量的一半。
(实施例3)图9依照本发明的第三个实施例,说明与一个加密密钥生成电路一样的循环子密钥生成电路203的结构的方框图。循环子密钥生成电路203不能由图20所示的循环子密钥生成电路2来替代而且用来完成SAFER+1加密。
循环子密钥生成电路203包括一个异或OR电路9、一个内部寄存器10、一个字节循环电路11、一个3位循环电路12、一个偏差表17以及一个加法器15。
循环子密钥生成电路203为每一个子循环输出一个循环子密钥,如同第一个实施例中的循环子密钥生成电路201。循环子密钥生成电路203通过8位在8位中输出128位循环子密钥,而循环子密钥生成电路201同时输出128位循环子密钥。另外,通过一个子循环信号和在偏差表17中的一个字节信号来确定一个8位偏差值。一个“子循环信号”指出每一个子循环的数量,以及在循环子密钥中,一个“字节信号”表示在内部寄存器10的最低字节的序号。由于一次增加的偏差值是1个字节,只需要一个加法器15而不是16个。这就进一步减小了电路的大小。
循环子密钥生成电路203按如下所述的操作。尽管依照输入的加密密钥的数量,处理的方式有所不同,但基本的操作还是相似的。在这里,当输入一个128位加密密钥时,所执行的操作是参照图9和10来描述。
在第三个实施例中,循环子密钥生成电路203删除了如图24所示的传统循环子密钥生成电路2中的输出选择器14而且包括一个加法器15而不是16,因此能减小电路的大小。相反,循环子密钥生成电路203包括如图9所示的字节循环电路11。循环子密钥生成电路203只输出在内部寄存器10中的最低的字节,而在第一个实施例中的循环子密钥生成电路201同时输出在内部寄存器10中的16字节表示的数据。
图10是沿时间轴,循环子密钥生成电路203的内部寄存器10中的数据的状态的图解。在图10中,每一个方框表示存储在内部寄存器10中的1个字节。当输入加密密钥时,每一个方框中的数字表示在加密密钥中的各个字节的序号。Kj[I]表示包括16个字节(128位)的循环子密钥Kj的第i个字节。
在时间t1,内部寄存器10存储输入的128位加密密钥(16个字节)。在这一点上,异或OR电路9计算在所输入的加密密钥的所有16个字节中的相同的位置(也就是位)的数据的异或。结果值被定义为表示在第17个字节中各自位置的数据。然后,内部寄存器10将由最低字节表示的数据输出到加法器15。在时间t1,输出由循环子密钥K1的第1个字节(即K1[1])表示的数据。
下一步,在时间t2,字节循环电路11完成字节循环,即如图10所示,通过向左移动一个字节来完成字节循环。更准确地说,例如,由最低字节表示的数据移动到最右边的框。然后,由最低字节表示的数据输出到加法器15。在时间t2,输出由循环子密钥的K1的第2字节(即K1[2])表示的数据。
重复执行上面所描述的步骤直到时间t16。用这种方式,连续地输出由循环子密钥K1的最低字节表示的数据,直到输出由所有128位表示的数据。
在时间t17、t18、t19,为将下一个子循环的第1个字节表示的数据调整到最低字节,只执行字节循环。
在时间t20,在内部寄存器10的第一个字节执行3位循环。因此,循环子密钥生成电路203准备输出一个循环子密钥K2。因此,输出一个循环子密钥K2[1]。
此后,字节循环和3位循环用相似的方式完成。因此,可以在不使用一个输出选择器的情况下获得由在循环子密钥K1到K17中所需的循环子密钥的所需的字节表示的数据。
为增加一个偏差值,用一个步骤从内部寄存器10输出1字节的数据,一个1字节偏差值是由需要输出的一个子循环信号和一个字节信号确定的。
在输入一个192位加密密钥或一个256位加密密钥的情况下,用相似的过程来获得所需的循环子密钥的一个所需的字节。
(实施例4)图11依照本发明的第四个实施例,说明与一个加密密钥生成电路一样的循环子密钥生成电路204的结构的方框图。循环子密钥生成电路204不能由图20所示的循环子密钥生成电路2来替代而且用来完成SAFER+1加密。
循环子密钥生成电路204包括一个异或OR电路9、一个内部寄存器10、一个字节/3位循环电路19、一个偏差表17以及一个加法器15。
循环子密钥生成电路204通过字节/3位循环电路19在同一个循环过程中完成字节循环和3位循环。因此,循环子密钥生成电路204缩短了过程时间因而具有一个减小后的大小。
如图12所示,字节/3位循环电路19只在最低字节完成移动到最右边的框的3位循环。由第(j+1)字节表示的数据移动到第j字节。移动到最右边的框的3位循环只在最低字节执行。在没有3位循环的情况下,字节/3位循环电路19可以将由最低字节表示的数据移动到最高字节。在这种情况下,字节/3位循环电路19与在第三个实施例中的字节循环电路11具有相同的功能。
除了图2B所示的字节循环电路11的结构外,字节/3位循环电路19包括连线和用于选择当由最低字节表示的数据移动到最右边的框时,是否执行3位循环的选择器19a(由图12所示的长方形框表示)。如上所述,当只执行简单的字节循环而不执行3位循环时,字节/3位循环电路19实质上与第三个实施例中的字节循环电路11具有相同的功能。
为更好地理解信号流程,除了这些位外,图12只示出连线和选择器19a。实际上,字节/3位循环电路19包括一个用来选择需存储在内部寄存器10中的数据的每一条连线上的一个选择器,即,字节/3位循环或位循环处理数据或用其它过程处理数据。
循环子密钥生成电路204按如下所述来操作。尽管依照输入的加密密钥的位的数据,处理的方法有所不同,但基本的操作还是相似的。在这里,当输入一个128位加密密钥时,所执行的操作将参照图11和13来描述。
第四个实施例中的循环子密钥生成电路204删除了如图24所示的传统的循环子密钥生成电路2中的输出选择器14而且只有一个加法器15而不是16个来减小电路的大小。相反,如图11所示,循环子密钥生成电路204包括字节/3位循环电路19。循环子密钥生成电路204只输出内部寄存器10的最低字节,就象循环子密钥生成电路203一样。
图13是沿时间轴,循环子密钥生成电路204的内部寄存器10中的数据的状态的图解。在图13中,每一个方框表示存储在内部寄存器10中的1个字节。当输入加密密钥时,每一个方框中的数字表示在加密密钥中的各个字节的序号。Kj[I]表示包括16个字节(128位)的循环子密钥Kj的第i个字节。
在时间t1,内部寄存器10存储输入的128位加密密钥(16个字节)。在这一点上,异或OR电路9计算在所输入的加密密钥的所有16个字节中的相同的位置的数据的异或。结果值被定义为表示在第17个字节中各自位置的数据。然后,内部寄存器10将由最低字节表示的数据到加法器15。在时间t1,输出由循环子密钥K1的第1个字节(即K1[1])表示的数据。
下一步,在时间t2,字节/3位循环电路19同时完成字节循环和3位循环。只在最低字节执行移动到最右边框的3位循环。其它位的数据一位一位向左移动,内部寄存器10将由最低字节表示的数据输出到加法器15。在时间t2,输出由一个循环子密钥的K1的最低字节(即K1[2])表示的数据。在图13中,循环子密钥的K1的处理过程中,在循环字节的数目中的3位循环的完成是循环的。
直到时间t16,一直重复上面所描述的步骤。在这种方法中,循环子密钥K1的最低字节表示的数据顺序地输出,直到所有128位表示的数据输出完毕。
在时间t17和t18,为了将下一个子循环的第1个字节表示的数据调整到最低字节,将执行字节循环和3位循环(只在移动到最右边的框的最低字节)。直到时间t18,当过程完成的时候,在内部寄存器10中的所有字节的数字都是循环的。这表示在所有字节中完成3位循环,而且循环子密钥生成电路204准备输出一个循环子密钥K2。
在时间t19,完成字节循环,而且循环子密钥生成电路204输出一个循环子密钥K2[1]。在时间t19,不执行3位循环。
此后,字节循环和3位循环用相同的方法完成。因此,在不需要使用一个输出选择器的情况下,能获得由循环子密钥K1到K17中的一个所需的循环子密钥的一个所需的字节表示的数据。
偏差表17输出一个由一个子循环信号和一个字节信号确定的1字节偏差值。
在输入一个192位加密密钥或一个256位加密密钥的情况下,用相似的过程来获得所需的循环子密钥的一个所需的字节。
在第四个实施例中,3位循环与字节循环同时完成。因此,通过用于一个步骤所要求的时间,缩短用于输出一个循环子密钥所要求的过程时间。在第三个实施例中需要320步的处理在第四个实施例中只要304来完成。
(实施例5)图14是根据本发明的第五个实施例,说明与一个加密密钥生成电路一样的一个循环子密钥生成电路205的方框图。该循环子密钥生成电路205不能代替如图20所示的循环子密钥生成电路2以及用于完成SAFER+1加密。
循环子密钥生成电路205包括一个异或电路9、一个内部寄存器10、一个2字节循环电路20、一个3位循环电路12、一个偏差表18和2个加法器15。在图14中,为了简洁起见,2个加法器15用一个加法器符号来表示。
循环子密钥生成电路205为每一个子循环输出一个循环子密钥,就象在第一个实施例中的循环子密钥生成电路201一样.而循环子密钥生成电路201同时输出128位循环子密钥,循环子密钥生成电路205输出是16位接16位地输出128位循环子密钥。另外,一个16位偏差值是由在偏差表18中的一个子循环信号和一个字节信息确定的。一个“子循环信号”指定每一个子循环的数量,以及在循环子密钥中,一个“字节信号”表示在内部寄存器10的最低字节的序号。由于偏差值一次增加2个字节,因此只需要2个加法器15而不是16个。这进一步降低电路的大小。
图15A示出了使用2字节循环电路20,完成17个字节的的2字节循环的过程。在图15A中,每一个方框表示存储在内部寄存器10中的1个字节。在每一个框内的数字表示各个字节的序号。更准确地说,例如,数字“1”表示存储由第一个字节表示的数据;数字“2”表示存储由第二个字节表示的数据等等。图15A上部一第列框表示在执行2字节前,内部寄存器10的状态。如图所示,框具有从左到右的连续数字。图15A的下部的一系列方框表示在完成2字节循环后,内部寄存器10的状态。如图所示,由第17字节表示的数据移动到从左数的第14个方框;由第16个字节表示的数据移动到从左数的第15个方框等等。由第3个字节表示的数据移动到最左边的方框;由第2个字节表示的数据移动到从左数的第17个框;以及由最左边字节表示的数据移动到从左数的第16个框。
图15A示出了内部寄存器10的字节接字节的状态。图15B示出了内部寄存器10的位接位的状态。在图15B中,每一个方框表示存储在内部寄存器10中的1位。在每一个方框中的数字表示存储在内部寄存器10中的各个位(从0位到135位)的序号。更准确在说,例如,数字“0”表示存储由第1位表示的数据;数字“1”表示存储由第2位表示的数据等等。在图15B中的最左边栏的8个方框(第0位到第7位)对应于图15A的最左边框(1字节);在图15B中的最左边的第二栏的8个方框(第8位到第15位)对应于图15A的最左边的第二个框(1字节)。连同位之间的提供的连线,完成2字节的循环;例如,由第8位表示的数据移动到第128位;由第0位表示的数据移动到第120位等等。
为了更好地理解信号的流程,除位之外,图15B只示了连线。实际上,2字节循环电路20包括一个在每一条连线上用于选择将存储在内部寄存器10的数据的选择器,即,数据由2字节循环处理以及由其它的处理程序处理。
循环子密钥生成电路205按如下所述操作。尽管依照输入的加密密钥的位的数量,处理的方式不同,但基本的操作还是相似的。在这里,当输入一个128位加密密钥时,所完成的操作将参照图14到16来描述。
在第五个实施例中的循环子密钥生成电路205删除了如图24所示的传统循环子密钥生成电路2中的输出选择器14而且包括两个加法器15而不是16,因此能减小电路的大小。相反,循环子密钥生成电路205包括如图14所示的2字节循环电路13。而第一个实施例中的循环子密钥生成电路201同时地输出内部寄存器10中的16字节表示的数据,循环子密钥生成电路205只输出内部寄存器10中的2个最低字节。
图16是沿时间轴,循环子密钥生成电路205的内部寄存器10中的数据的状态的图解。在图16中,每一个方框表示存储在内部寄存器10中的1个字节。当输入加密密钥时,每一个方框中的数字表示在加密密钥中的各个字节的序号。Kj[i]表示包括16个字节(128位)的循环子密钥Kj的第i个字节。
在时间t1,内部寄存器10存储输入的128位加密密钥(16个字节)。在这一点上,异或OR电路9计算在所输入的加密密钥的所有16个字节中的相同的位置的数据的异或。结果值被定义为表示在第17个字节中各自位置的数据。然后,内部寄存器10将由最低2个字节表示的数据输出到加法器15。在时间t1,输出由循环子密钥K1的第1个字节和第2个字节(即K1[1]和K1[2])表示的数据。
下一步,在时间t2,2字节循环电路20完成2字节循环,即如图16所示,通过向左移动两个字节来完成字节循环。更准确地说,例如,由最低字节表示的数据移动到从右数的第二个框,而由最低的第二个字节表示的数据移动到最右边框。然后,由最低2字节表示的数据输出到加法器15。在时间t2,输出由循环子密钥的K1的第3字节和第四字节(即K1[3]和K1[4])表示的数据。
重复执行上面所描述的步骤直到时间t8。用这种方式,连续地输出由循环子密钥K1的最低2个字节表示的数据,直到输出由所有128位表示的数据。
在时间t9和t10,为将下一个子循环的第1个字节表示的数据调整到最低字节,只执行2字节循环。
在时间t11,在内部寄存器10的每一个字节执行3位循环。因此,循环子密钥生成电路205准备输出一个循环子密钥K2。因此,输出由K2[1]和K2[2]表示的数据。
此后,2字节循环和3位循环用相似的方式完成。因此,能在不使用一个输出选择器的情况下获得由在循环子密钥K1到K17中所需的循环子密钥的所需的字节表示的数据。
为增加一个偏差值,用一个步骤从内部寄存器10输出2字节的数据,一个2字节偏差值是由在偏差表17中需要输出的一个子循环信号和一个字节信号确定的。
在输入一个192位加密密钥或一个256位加密密钥的情况下,用相似的过程来获得所需的循环子密钥的一个所需的字节。
(实施例6)图17是根据本发明的第六个实施例,说明与一个加密密钥生成电路一样的一个循环子密钥生成电路206的方框图。该循环子密钥生成电路206不能代替如图20所示的循环子密钥生成电路2以及用于完成SAFER+1加密。
循环子密钥生成电路206包括一个异或电路9、一个内部寄存器10、一个2字节/3位循环电路21、一个偏差表18和2个加法器15。在图17中,为了简洁起见,2个加法器15用一个加法器符号来表示。
循环子密钥生成电路206通过2字节/3位循环电路21在同一个循环过程中完成2字节循环和3位循环。因此,循环子密钥生成电路206缩短了过程时间因而具有一个减小后的大小。
如图18所示,2字节/3位循环电路21只在最低字节完成从右边移动到第2个框以及最低的第2字节移动到最右边的框的3位循环。由第(j+1)字节表示的数据移动到第(j-1)字节。3位循环只在第1字节完成从右边移动到第2个框以及在第2个字节移动到最右边的框。在没有3位循环的情况下,2字节/3位循环电路21可以将由最低第2字节表示的数据移动到最高字节。
除了图15B所示的字节循环电路20的结构外,2字节/3位循环电路21包括连线和选择器21a(由图18所示的长方形框表示),因此,必须执行在最低字节从右边移动到第2个框的3位循环,而且能选择是否在最低的第2个字节执行移动到最右边框的3位循环。选择器21a能选择是否在1个字节或2个字节执行3位循环。
为更好地理解信号流程,除了这些位外,图18只示出连线和选择器21a。实际上,2字节/3位循环电路21在每一条连线上包括一个用来选择需存储在内部寄存器10中的数据的一个选择器,即,2字节/3位循环(或位循环)处理数据或用其它过程处理数据。
循环子密钥生成电路206按如下所述来操作。尽管依照输入的加密密钥的位的数量,处理的方法有所不同,但基本的操作还是相似的。在这里,当输入一个128位加密密钥时,所执行的操作将参照图17和19来描述。
第六个实施例中的循环子密钥生成电路206删除了如图24所示的传统的循环子密钥生成电路2中的输出选择器15而且只有两个加法器而不是16个来减小电路的大小。相反,如图17所示,循环子密钥生成电路206包括2字节/3位循环电路21。循环子密钥生成电路206只输出内部寄存器10的最低2个字节,就象循环子密钥生成电路205一样。
图19是沿时间轴,循环子密钥生成电路206的内部寄存器10中的数据的状态的图解。在图19中,每一个方框表示存储在内部寄存器10中的1个字节。当输入加密密钥时,每一个方框中的数字表示在加密密钥中的各个字节的序号。Kj[i]表示包括16个字节(128位)的循环子密钥Kj的第i个字节。
在时间t1,内部寄存器10存储输入的128位加密密钥(16个字节)。在这一点上,异或OR电路9计算在所输入的加密密钥的所有16个字节中的相同的位置(也就是位)的数据的异或。结果值被定义为表示在第17个字节中各自位置的数据。然后,内部寄存器10将由最低2个字节表示的数据输出到加法器15。在时间t1,输出由循环子密钥K1的第1个字节和第2个字节(即K1[1]和K1[2])表示的数据。
下一步,在时间t2,2字节/3位循环电路21同时完成2位字节循环和3位循环(只在最低字节从右边移动到第2个框以及在最低的第2字节移动到最右边的框)。在其它的字节中,数据向右移动2字节。内部寄存器10将由最低2个字节表示的数据输出到加法器15。在时间t2,输出由一个循环子密钥的K1的最低2个字节(即K1[3]到K1[4])表示的数据。在图19中,循环子密钥的K1的处理过程中,在3位循环中完成的循环后的字节的数字是循环的。
重复执行上面所描述的步骤直到时间t8。用这种方式,连续地输出由循环子密钥K1的最低2个字节表示的数据,直到输出由所有128位表示的数据。
在时间t9和t10,为将下一个子循环的第1个字节表示的数据调整到最低字节,执行2字节循环和3位循环。应注意的是,在时间t10,当在最低的第2字节移动到最右边的框完成3位循环时,具有数字“1”的字节用至少两次3位循环来处理。为避免出现这样的问题,3位循环只用一个字节来执行,即,从右边移动到第2个框的最低字节。直到时间t10完成该过程时,内部寄存器10中所有字节的数字都是循环的。这表示在所有的字节执行3位循环以及循环子密钥生成电路206预备输出一个循环子密钥K2。然后,输出由K2[1]和K2[2]表示的数据。
此后,2字节循环和3位循环用相同的方法完成。因此,在不需要使用一个输出选择器的情况下,能获得由循环子密钥K1到K17中的一个所需的循环子密钥的一个所需的字节表示的数据。
偏差表18输出一个由一个子循环信号和一个字节信号确定的2字节偏差值。
在输入一个192位加密密钥或一个256位加密密钥的情况下,用相似的过程来获得所需的循环子密钥的一个所需的字节。
在第六个实施例中,3位循环与2字节循环同时完成。因此,通过用于一个步骤所要求的时间,缩短用于输出一个循环子密钥所要求的过程时间。在第五个实施例中需要169步的处理在第六个实施例中只要152来完成。
在第一到第六个实施例中,在8位单元、16位单元和128位单元中,输出由循环子密钥表示的数据。本发明并不局限于此而且适合用于在其他数目位(8×m,其中m是加密密钥的位的数目的一个字节表达式的一个除数)中的循环子密钥表示的数据。
如上所述,本发明并不同时计算所有的用于加密循环子密钥。相反,本发明计算子循环单元中的一个循环子密钥,或者计算一个字节或2个字节单元中的一个循环子密钥。在这种方式中,用于增加偏差值的加法器的数目能减小。提供一个用于循环字节的电路能删除在输出级的选择器。因此,能用相当小的规模生成一个用在一个加密算法SAFER+中用于生成一个循环子密钥的一个加密密钥生成电路。
对本领域的普通技术人员来说,在不背离本发明的范围和精神的前提下,各种其他的改变将会很清楚而且容易制造。相应地,并不打算将所附的权利要求的范围局限在这里所描述的,而且能广泛分析这些权利要求。
权利要求
1.一种用于从一个具有64×n位(2≤n≤4;其中n是一个整数)的加密密钥生成至少一个128位循环子密钥的加密密钥生成电路,该循环子密钥用在为了加密128位纯文本的至少一个子循环中,包括一个异或电路,用于计算包括在加密密钥的每一个字节中的8位数据中相同的位置的1位数据的异或,来生成1字节计算数据;一个寄存器,用于存储由具有8×n字节的加密密钥和1字节计算数据的和表示的(8×n+1)字节数据;一个字节循环电路,用于完成在至少一个子循环的每一个子循环中将该(8×n+1)字节数据循环1字节的字节循环;一个3位循环电路,用于完成在每一个子循环中在(8×n+1)字节数据的每一个字节中的各位循环3位的3位循环;16个加法器,用于从由该字节循环电路和3位循环电路处理的(8×n+1)字节数据的最低字节,将一个128位偏差值增加到(8×n)字节数据,来生成在每一个子循环中的至少一个128位循环子密钥中的一个。
2.一种用于从一个具有64×n位(2≤n≤4;其中n是一个整数)的加密密钥生成至少一个128位循环子密钥的加密密钥生成电路,该循环子密钥用在为了加密128位纯文本的至少一个子循环中,包括一个异或电路,用于计算包括在加密密钥的每一个字节中的8位数据中相同的位置的1位数据的异或,来生成1字节计算数据;一个寄存器,用于存储由具有8×n字节的加密密钥和1字节计算数据的和表示的(8×n+1)字节数据;一个字节/3位循环电路,用于完成在至少一个子循环的每一个循环中该(8×n+1)字节数据循环1字节的字节循环和在(8×n+1)字节数据的每一个字节中的各位循环3位的3位循环;以及16个加法器,用于从由该字节循环电路和3位循环电路处理的(8×n+1)字节数据的最低字节,将一个128位偏差值增加到(8×n)字节数据,来生成在每一个子循环中的至少一个128位循环子密钥中的一个。
3.一种用于从一个具有64×n位(2≤n≤4;其中n是一个整数)的加密密钥生成至少一个128位循环子密钥加密密钥生成电路,该循环子密钥用在为了加密128位纯文本的至少一个子循环中,包括一个异或电路,用于计算包括在加密密钥的每一个字节中的8位数据中相同的位置的1位数据的异或,来生成1字节计算数据;一个寄存器,用于存储由具有8×n字节的加密密钥和1字节计算数据的和表示的(8×n+1)字节数据;一个字节循环电路,用于完成在至少一个子循环的每一个循环中将该(8×n+1)字节数据循环m字节至少一次的m字节循环(其中m是8×n的一个除数);一个3位循环电路,用于完成在每一个子循环中将在(8×n+1)字节数据的每一个字节中的各位循环3位的3位循环;m数量的加法器,用于从由该m字节循环电路和3位循环电路处理的(8×n+1)字节数据的最低字节,将一个(8×m)位偏差值增加到在(8×n)字节数据中每一个(8×m)位数据单元,来生成在每一个子循环中的至少一个128位循环子密钥中的一个。
4.如权利要求3所述的加密密钥生成电路,其中m为1。
5.如权利要求3所述的加密密钥生成电路,其中m为2。
6.一种用于从一个具有64×n位(2≤n≤4;其中n是一个整数)的加密密钥生成至少一个128位循环子密钥的加密密钥生成电路,该循环子密钥用在为了加密128位纯文本的至少一个子循环中,包括一个异或电路,用于计算包括在加密密钥的每一个字节中的8位数据中相同的位置的1位数据的异或,来生成1字节计算数据;一个寄存器,用于存储由具有8×n字节的加密密钥和1字节计算数据的和表示的(8×n+1)字节数据;一个字节/3位循环电路,用于完成在至少一个子循环的每一个循环中将该(8×n+1)字节数据循环m字节至少一次的m字节循环(其中m是8×n的一个除数)和在每一个m字节循环中由3位在(8×n+1)字节数据中用m字节数据循环位的3位循环;以及m数量的加法器,用于从由该m字节循环电路和3位循环电路处理的(8×n+1)字节数据的最低字节,将一个(8×m)位偏差值增加到在(8×n)字节数据中每一个(8×m)位数据单元,来生成在每一个子循环中的至少一个128位循环子密钥中的一个。
7.如权利要求6所述的加密密钥生成电路,其中m为1。
8.如权利要求6所述的加密密钥生成电路,其中m为2。
全文摘要
一种用于从一个具有64×n位(2≤n≤4;其中n是一个整数)的加密密钥生成至少一个128位循环子密钥加密密钥生成电路,该循环子密钥用在为了加密128位纯文本的至少一个子循环中,包括一个用于完成由1字节循环(8×n+1)字节数据的字节循环的字节循环电路;一个用于完成由3位在(8×n+1)字节数据中的每一字节中循环位的3位循环的3位循环电路;以及用于从由该字节循环电路和3位循环电路处理的(8×n+1)字节数据的最低字节,将一个128位偏差值增加到(8×n)字节数据,来生成在每一个子循环中的至少一个128位循环子密钥中的一个的16个加法器。
文档编号G09C1/00GK1351435SQ0114317
公开日2002年5月29日 申请日期2001年10月31日 优先权日2000年10月31日
发明者江泽正幸 申请人:夏普公司

最新回复(0)