哈希值生成装置

申请号 CN201480009745.2 申请日 2014-02-17 公开(公告)号 CN105074799B 公开(公告)日 2017-12-01
申请人 佳能株式会社; 发明人 山田真也;
摘要 用于基于KECCAK 算法 来生成哈希值的哈希值生成装置包括用于进行KECCAK算法的轮处理中所包括的五个步骤θ、ρ、π、χ和ι的处理的θ处理单元、ρ处理单元、π处理单元、χ处理单元和ι处理单元。θ处理单元包括用于进行列总和计算处理的θ1处理单元和用于进行列总和相加处理的θ2处理单元。在轮处理中,在θ2处理单元和ρ处理单元进行处理之前,π处理单元进行处理,并且ρ处理单元在π处理单元所进行的重排处理之后对径进行处理。
权利要求

1.一种哈希值生成装置,包括:
θ处理部件,用于进行安全哈希算法3即SHA-3算法的轮处理中所包括的θ处理;
ρ处理部件,用于进行所述轮处理中所包括的ρ处理;
π处理部件,用于进行所述轮处理中所包括的π处理;
χ处理部件,用于进行所述轮处理中所包括的χ处理;以及
ι处理部件,用于进行所述轮处理中所包括的ι处理,
其特征在于,所述θ处理部件包括用于计算列总和的θ1处理部件和用于将所计算出的列总和与预定位相加的θ2处理部件,以及
在所述轮处理中,在所述θ2处理部件和所述ρ处理部件进行处理之前并且在所述θ1处理部件进行处理之后,所述π处理部件进行处理。
2.根据权利要求1所述的哈希值生成装置,其中,在保持部件保持25个径之后,所述π处理部件进行处理。
3.根据权利要求2所述的哈希值生成装置,其中,在所述保持部件保持所述径的时间段内,所述θ1处理部件进行处理。
4.根据权利要求1所述的哈希值生成装置,其中,所述θ2处理部件使用考虑到所述π处理部件所进行的处理而确定的表来进行处理。
5.根据权利要求1所述的哈希值生成装置,其中,所述ρ处理部件使用考虑到所述π处理部件所进行的处理而确定的表来进行处理。
6.根据权利要求1所述的哈希值生成装置,其中,所述θ1处理部件、所述θ2处理部件、所述ρ处理部件、所述χ处理部件和所述ι处理部件以径为单位进行处理。
7.根据权利要求1所述的哈希值生成装置,其中,在所述π处理部件进行处理之后,所述θ2处理部件和所述ρ处理部件进行处理。
8.根据权利要求1所述的哈希值生成装置,其中,还包括输出部件,所述输出部件用于输出通过使用所述θ处理部件、所述ρ处理部件、所述π处理部件、所述χ处理部件和所述ι处理部件进行所述轮处理所获得的哈希值。
9.根据权利要求1所述的哈希值生成装置,其中,所述θ处理部件计算沿x轴方向的位的总和,并且将所计算出的总和与预定位相加,
所述ρ处理部件使各位的值沿z轴方向发生移位,
所述π处理部件在x-y平面内重排各位的值,
所述χ处理部件使用沿x轴方向的直线上的位来对位进行转换,以及
所述ι处理部件将各位与预定值相加。
10.一种哈希值生成装置,用于进行哈希算法的轮处理,其中在所述轮处理中,对x轴方向上具有m位、y轴方向上具有n位并且z轴方向上具有s位的结构的数据段进行处理,所述哈希值生成装置包括:
第一处理部件,用于计算x轴方向上的位的总和,并且将所计算出的总和与预定位相加;
第二处理部件,用于使位沿z轴方向发生移位;
第三处理部件,用于在x-y平面内重排各位;
第四处理部件,用于使用沿x轴方向的直线上的位来对位进行转换;以及
第五处理部件,用于将各位与预定值相加,
其特征在于,所述第一处理部件包括用于计算x轴方向上的位的总和的第六处理部件和用于将所计算出的总和与所述预定位相加的第七处理部件,以及
在所述轮处理中,在所述第七处理部件和所述第二处理部件进行处理之前并且在所述第六处理部件进行处理之后,所述第三处理部件进行处理。
11.根据权利要求10所述的哈希值生成装置,其中,在保持部件保持x轴方向上具有1位、y轴方向上具有n位并且z轴方向上具有1位的结构的25个数据段之后,所述第三处理部件进行处理。
12.根据权利要求11所述的哈希值生成装置,其中,在所述保持部件保持x轴方向上具有1位、y轴方向上具有n位并且z轴方向上具有1位的结构的数据的时间段内,所述第六处理部件进行处理。
13.根据权利要求10所述的哈希值生成装置,其中,所述第七处理部件使用考虑到所述第三处理部件所进行的处理而确定的表来进行处理。
14.根据权利要求10所述的哈希值生成装置,其中,所述第二处理部件使用考虑到所述第三处理部件所进行的处理而确定的表来进行处理。
15.根据权利要求10所述的哈希值生成装置,其中,还包括输出部件,所述输出部件用于输出通过使用所述第一处理部件、所述第二处理部件、所述第三处理部件、所述第四处理部件和所述第五处理部件进行所述轮处理所获得的哈希值。

说明书全文

哈希值生成装置

技术领域

[0001] 本发明涉及用于生成哈希(hash)值的技术。

背景技术

[0002] 利用通过使用加密哈希算法所计算出的哈希值来检查数据变更。已经证实,作为加密哈希算法(加密哈希)的安全哈希算法1(SHA-1)不能确保安全性。已经指出,SHA-2族(SHA-224、SHA-256、SHA-384和SHA-512)可能缺乏安全性。因此,国家标准与技术研究院(NIST)要求公众提出用以建立下一代的加密哈希算法(SHA-3)的新的算法。之后,在2012年12月指定了KECCAK算法(“The KECCAK reference”,版本3.0,2011年1月14日(http://keccak.noekeon.org/Keccak-reference-3.0.pdf))作为SHA-3。
[0003] SHA-3根据任意长度的输入消息(数据)输出固定长度的加密哈希值。在KECCAK算法中,使用置换函数,并且在该置换函数中,重复24次五个顺次步骤(θ、ρ、π、χ和ι)的轮(round)处理。该轮处理是对长度为1600位的被称为“状态(state)”数据段的数据进行的。
[0004] 在轮处理的五个步骤中,必须将先前处理的大量结果一起存储在存储器中,以供θ处理和π处理所用。因此,在按步骤θ、ρ、π、χ和ι的顺序进行轮处理的情况下,在进行一次轮处理内必须两次将先前处理的大量结果一起存储在存储器中,因此难以进行加速

发明内容

[0005] 本发明涉及用以提高生成哈希值的吞吐量的技术。
[0006] 根据本发明的方面,用于基于KECCAK算法来生成哈希值的哈希值生成装置包括用于进行KECCAK算法的轮处理中所包括的五个步骤θ、ρ、π、χ和ι的处理的θ处理部件、ρ处理部件、π处理部件、χ处理部件和ι处理部件;θ处理部件包括用于进行列总和计算处理的θ1处理部件和用于进行列总和相加处理的θ2处理部件;在轮处理中,在θ2处理部件和ρ处理部件进行处理之前,π处理部件进行处理,并且ρ处理部件对π处理部件进行了重排处理的径进行处理。
[0007] 通过以下参考附图对典型实施例的说明,本发明的其它特征将变得明显。

附图说明

[0008] 图1A、1B和1C是说明KECCAK算法的图。
[0009] 图2A、2B、2C、2D、2E和2F是说明数据结构的图。
[0010] 图3A和3B是说明步骤θ的处理的图。
[0011] 图4A、4B和4C是说明步骤ρ的处理的图。
[0012] 图5A和5B是说明步骤π的处理的图。
[0013] 图6是说明步骤χ的处理的图。
[0014] 图7是说明步骤ι的处理的图。
[0015] 图8是说明步骤ι中的轮常数的图。
[0016] 图9A和9B是说明轮处理R’的概述的图。
[0017] 图10A、10B和10C是说明步骤ρ’的处理的图。
[0018] 图11是说明步骤θ1的处理的图。
[0019] 图12A、12B和12C是说明步骤θ2的处理的图。
[0020] 图13是示出根据第一典型实施例的KECCAK算法的实现示例的示意结构的图。
[0021] 图14A和14B是输出时序图。
[0022] 图15是示出在利用KECCAK算法来以径(lane)作为单位进行处理的情况下的实现示例的示意结构的图。

具体实施方式

[0023] 以下将参考附图来详细说明本发明的各种典型实施例、特征和方面。
[0024] 作为根据本发明的典型实施例的哈希值生成装置,以下将说明被配置为生成SHA-3(KECCAK算法)的哈希值的装置作为示例。在以下的说明中,可以提供具体的数据长度或具体的位值,但本发明不限于该具体的长度或值。
[0025] 首先,将说明KECCAK算法。注意,可以在“The KECCAK reference”,版本3.0,2011年1月14日(http://keccak.noekeon.org/Keccak-reference-3.0.pdf)中发现更多详情说明。
[0026] 图1A是说明KECCAK算法整体的图。在图1A中,示出消息101(m1~mt)。消息块101(m1~mt)是通过将作为生成哈希值的对象的输入消息分割成1024位的块单位所生成的。
[0027] 如图1A所示,在本典型实施例中,初始值102和103的所有位都为0。这里,说明了初始值的所有位都为0的例子作为示例,但本发明不限于该示例。初始值102的长度是与上述的消息块的长度相同的1024位,并且初始值102和103的总长度为1600位。还示出按位异或(XOR)运算部104。也就是说,XOR运算部104针对两个1024位的输入数据段的各位计算异或,并且输出作为1024位的数据段的结果。
[0028] 作为置换函数的KECCAK-f 105接收两个输入数据段并且输出两个数据段。以下将参考图1B来说明KECCAK-f 105的详情。截取部106从1024位的数据段中截取所需大小并且输出所截取出的数据。加密哈希值(即,哈希值)107是该算法的计算结果。
[0029] 图1B是说明作为置换函数的KECCAK-f 105的概述的图。进行24次轮处理R 201。以下将说明轮处理R的详情。示出输入数据段202和203。输入数据段202的长度为1024位。输入数据段202和203的总长度为1600位。使这两个输入数据段202和203结合然后输入至轮处理R 201。示出输出数据段204和205。输出数据段204的长度为1024位。输出数据段204和205的总长度为1600位。
[0030] 图1C是说明轮处理R 201的概述的图。如上所述,对于轮处理R 201,输入数据段和输出数据段的长度都为1600位。在轮处理R 201中,对输入数据段顺次进行以下要说明的五个步骤的处理(θ处理单元301、ρ处理单元302、π处理单元303、χ处理单元304和ι处理单元305)以生成输出数据段。
[0031] 以下将详细说明在KECCAK算法的轮处理中所使用的数据结构和上述的五个步骤。
[0032] 图2A是说明作为在轮处理R 201的输入和输出时的数据结构的“状态”的图。如上所述,输入数据段和输出数据段这两者都具有1600位的长度。将这些1600位的数据段各自表示为三维排列中宽度(x轴方向)为5位、高度(y轴方向)为5位且深度(z轴方向)为64位的长方体。将该长方体的数据结构称为“状态”。将1600位的数据段按z轴方向、x轴方向和y轴方向的顺序分配至表示为长方体的状态结构。以下将参考图2F来说明该详情。
[0033] 图2B是说明数据结构“面(plane)”的图。将该面结构表示为平行于x-z平面且宽度为5位、高度为1位和深度为64位的平面结构。也就是说,可以将上述的“状态”结构视为沿y轴方向堆叠的5个面结构。
[0034] 图2C是说明数据结构“片(sheet)”的图。将片结构表示为平行于y-z平面且宽度为1位、高度为5位和深度为64位的平面结构。也就是说,可以将上述的“状态”结构视为沿x轴方向平排成直线的5个片结构。
[0035] 图2D是说明数据结构“径”的图。将该数据结构表示为平行于z轴且宽度为1位、高度为1位和深度为64位的线性结构。也就是说,可以将上述的“状态”结构视为沿着x-y平面聚集到一起的25个径结构。图2F是说明一个状态结构中所包括的25个径的顺序的图。
[0036] 图2E是说明数据结构“列(column)”的图。将该列结构表示为平行于y轴且宽度为1位、高度为5位和深度为1位的线性结构。也就是说,可以将上述的“片”结构视为沿z轴方向排成直线的64个列结构。
[0037] 在第一典型实施例中,说明了输入数据段为1600位的情况,但本发明不限于该情况。另外,说明了将状态结构的数据作为宽度(x轴方向)为5位、高度(y轴方向)为5位且深度(z轴方向)为64位的长方体来进行处理的示例,但本发明不限于该示例。例如,输入数据段可以具有800位,并且可以将状态结构的数据作为宽度为5位、高度为5位且深度为32位的长方体数据结构来进行处理。
[0038] 此外,可以根据状态结构的宽度(x轴方向)、高度(y轴方向)和深度(z轴方向)的各位数来改变面结构、片结构、径结构和列结构。更具体地,在状态结构的数据在x轴方向上具有m位、在y轴方向上具有n位并且在z轴方向上具有s位的情况下,面结构是在x轴方向上具有m位、在y轴方向上具有1位并且在z轴方向上具有s位的平面结构。片结构是在x轴方向上具有1位、在y轴方向上具有n位并且在z轴方向上具有s位的平面结构。径结构是x轴方向上具有1位、在y轴方向上具有1位并且在z轴方向上具有s位的线性结构。列结构是x轴方向上具有1位、在y轴方向上具有n位并且在z轴方向上具有1位的线性结构。
[0039] 接着,将说明用于根据已输入至KECCAK-f 105的输入数据段202和203来形成第1次轮处理R 201所用的输入数据段的方法。首先,按顺序使输入数据段202和203结合以形成1600位的数据块。接着,将该1600位的数据块分割成64位的块单位以形成25个径。最后,沿着x-y平面按图2F所示的顺序排列这25个径以构成一个状态。将如此生成的状态结构输入至轮处理R 201。用于根据第24次轮处理R 201的输出数据段来形成输出数据段204和205的方法是相同的,因而这里不提供针对该方法的说明。
[0040] 接着,将说明轮处理R 201中所包括的5个步骤(步骤θ、ρ、π、χ和ι)。在各个步骤中,输入数据段和输出数据段的数据结构均是状态结构。
[0041] 图3A是说明步骤θ的处理(θ处理单元301)的图。步骤θ是向各位加上与该位邻接的两个列的总和的处理。更具体地,θ处理单元如下所述计算输出状态的各位。也就是说,计算各位作为从输入状态所获得的如下三个值的总和:“相同位置处的位的值”、“x轴方向上的-1位置处的列的位的总和”;“x轴方向上的+1位置处和z轴方向上的-1位置处的列的位的总和”。这里,总和表示GF(2)上的总和,并且其结果将与异或运算的结果相同。可以通过以下的表达式来表示该处理。
[0042]
[0043] 在该表达式中,x为0~4,y为0~4,z为0~63。
[0044] 图3B是说明在计算端部(例如,x=0)的位时的步骤θ的处理的图。为了计算x=0处的位,“x轴方向上的-1位置处的列”与状态中的相反侧的列、也就是说“x=4的位置处的列”相对应。如上所述,超出状态的坐标被视为状态中的相反侧的位置。也就是说,坐标值在同一状态中发生循环移位。该规则同样适用于x坐标、y坐标和z坐标以及其它四个步骤。
[0045] 图4A、4B和4C是说明步骤ρ的处理(ρ处理单元302)的图。步骤ρ是使各位的值沿z轴方向发生移位的处理。更具体地,ρ处理单元302如图4A所示使状态的各径内的值按所指定的位数沿z轴方向发生循环移位,并且输出移位后的值。预先将在各径中值被移位的位数确定为图4B所示的数字。注意,为了进行ρ处理,保持部预先保持如图4C所示的列出移位量的表,并且ρ处理单元302使用所保持的表来进行ρ处理。
[0046] 图5A和5B是说明步骤π的处理(π处理单元303)的图。步骤π是重排x-y平面(还称为“切片(slice)”)内的各位的处理、也就是说重排同一状态内的25个径的处理。更具体地,在如图5A的上部所示对输入状态中的各径进行编号的情况下,输出状态如图5A的下部所示。注意,为了进行π处理,保持部预先保持如图5B所示的列出重排目的地的表,并且π处理单元
303使用所保持的表来进行π处理。
[0047] 图6是说明步骤χ的处理(χ处理单元304)的图。步骤χ是使用x轴方向上的直线(也称为“行”)上的位来对位进行转换的处理,并且基于同一输入行中的三位推导出输出行中的各位。更具体地,进行设置,以使得在相对于输入行的各位x轴方向上的+1位置处的位为0、并且相对于该位x轴方向上的+2位置处的位为1的情况下,χ处理单元304反转输出行的各相应位的值。
[0048] 图7是说明步骤ι的处理(ι处理单元305)的图。步骤ι是向各位加上轮常数的处理。图8是说明步骤ι中所使用的轮常数的图。在步骤ι中,ι处理单元305对x=y=0处的径的位行进行与针对各轮所预先确定的轮常数(64位值)的异或(XOR)。更具体地,ι处理单元305计算x=y=0处的径的64位值(在z=63处的位是MSB并且z=0处的位是LSB的情况下)和图8所示的轮常数的按位异或。然后,ι处理单元305将该结果设置为输出状态中的x=y=0处的径的位行。
[0049] 根据上述各步骤(步骤θ、ρ、π、χ和ι)的处理内容,可以理解,关于各步骤的处理的开始,存在以下限制。
[0050] ·在步骤θ中,θ处理单元301使用x轴方向上的-1处的片数据段和+1处的片数据段来计算状态内的各径。因此,在最初的三个片完成的情况下、也就是说在θ处理单元301从前一阶段接收到25个径中的23个径的情况下,θ处理单元301可以开始步骤θ的处理。
[0051] ·步骤ρ是针对各个径彼此独立的计算。因此,在输出前一阶段(步骤θ)的计算结果中的一个径的情况下,ρ处理单元302可以开始步骤ρ的处理。
[0052] ·在步骤π中,重排状态内的各个径。因此,在输出前一阶段(步骤ρ)的计算结果中的一个状态整体的情况下、也就是说在输出25个径的情况下,π处理单元303可以开始步骤π的处理。
[0053] ·在步骤χ中,在计算状态内的各径时,χ处理单元304使用x轴方向上的+1处的径和x轴方向上的+2处的径。因此,在接收到三个径数据段时,χ处理单元304可以开始步骤χ的处理。
[0054] ·步骤ι是针对各个径彼此独立的计算。因此,在输出前一阶段(步骤χ)的计算结果中的一个径的情况下,ι处理单元305可以开始步骤ι的处理。
[0055] 换句话说,在步骤θ、π和χ中,处理的开始必须等待,直到各自的前一阶段的步骤分别输出23个径、25个径和3个径的计算结果为止。如上所述,特别地,两个步骤θ和π的处理可以在这两个步骤的前一阶段的处理开始之后经过了长时间的情况下开始。
[0056] 这意味着在可以加快步骤θ或步骤π的开始时间的情况下,能够提高吞吐量。然而,KECCAK算法的规定的运算顺序不允许吞吐量的提高。因而,运算顺序必须不同于KECCAK算法的运算顺序以提高吞吐量。
[0057] 接着,将说明轮处理R’901。轮处理R’901是本典型实施例中所使用的处理并且被设计成其结果与轮处理R 201的结果相同。然而,轮处理R’901的处理内容不同于KECCAK算法的规定。
[0058] 图9A是说明轮处理R’901的概述的图。轮处理R’901被设计成其处理结果与轮处理R 201的结果相同。在轮处理R’901中,(利用θ1处理单元902、π处理单元903、θ2处理单元904、ρ’处理单元905、χ处理单元906和ι处理单元907)对输入数据段进行六个步骤的处理以生成输出数据段。
[0059] 注意,π处理单元903、χ处理单元906和ι处理单元907进行与轮处理R 201的π处理单元303、χ处理单元304和ι处理单元305所进行的处理相同的处理。ρ’处理单元905以轮处理R 201中的ρ处理单元302相同的方式进行使各位的值沿z轴方向发生移位的处理,但值发生移位的位数是不同的。θ1处理单元902和θ2处理单元904是通过分割轮处理R 201中的θ处理单元301所获得的。
[0060] 由于轮处理R’901中的π处理、χ处理和ι处理与轮处理R 201中的这些处理相同,因此没有提供针对这些处理的说明。以下将说明ρ’处理、θ1处理和θ2处理。
[0061] 图10A是说明步骤ρ’的处理(ρ’处理单元905)的图。在步骤ρ’中,与步骤ρ相同,ρ’处理单元905进行使各位的值沿z轴方向发生循环移位的处理。然而,在各径内值被循环移位的位数不同于步骤ρ的位数,并且在图10B中示出这些位数。注意,为了进行ρ’处理,保持部预先保持如图10C所示的列出移位量的表,并且ρ’处理单元905使用所保持的表来进行ρ’处理。该表是考虑到π处理所确定的。以下将说明其详情。
[0062] 为了说明轮处理R’901的处理结果和轮处理R 201的处理结果相同,首先将说明轮处理R 201的处理结果和轮处理R”911的处理结果相同。
[0063] 图9B是轮处理R”911的图。在轮处理R”911中,(利用θ处理单元912、π处理单元913、ρ’处理单元915、χ处理单元916和ι处理单元917)对输入数据段进行五个步骤的处理以生成输出数据段。这里,θ处理单元912、π处理单元913、χ处理单元916和ι处理单元917分别与轮处理R 201的θ处理单元301、π处理单元303、χ处理单元304和ι处理单元305相同。ρ’处理单元915与轮处理R’901的ρ’处理单元905相同。
[0064] 在将轮处理R 201与轮处理R”911进行比较的情况下,不同之处在于:在轮处理R”911中,π处理单元913和ρ’处理单元915按该顺序依次进行处理,而在轮处理R 201中,ρ处理单元302和π处理单元303按该顺序依次进行处理。
[0065] 这里,在轮处理R 201的步骤ρ中,ρ处理单元302根据针对各径所确定的规则使值沿z轴方向移位,并且π处理单元303重排各个径。另一方面,在轮处理R”911中,π处理单元913重排各个径(步骤π的处理),之后ρ’处理单元915考虑到重排处理(步骤ρ’的处理),根据针对各个径所确定的规则来使值沿z轴方向移位。更具体地,在轮处理R”911中,在步骤ρ’之前进行步骤π,但考虑到步骤π的处理,改变利用ρ’处理单元915使值沿z轴方向发生移位的移位量,由此轮处理R”911的处理结果变得与轮处理R 201的处理结果相同。
[0066] 图10C是列出步骤ρ’中所使用的针对各个径的移位量的表。
[0067] 将具体说明生成图10C所示的表的方法。首先,将考虑轮处理R 201。在轮处理R 201中,ρ处理单元302和π处理单元303按该顺序依次进行处理。图4B中的数字是步骤ρ中的移位量。例如,针对x=0且y=4的位置处的径的移位量为18位。接着,使用图5A和5B来确认利用π处理的径重排。可以看出,π处理单元303使x=0且y=4的位置处的径移动至x=4、y=
2的位置。
[0068] 接着,将考虑轮处理R”911。在轮处理R”911中,π处理单元913和ρ’处理单元915按该顺序依次进行处理。由于在ρ’处理之前进行π处理,因此ρ’处理单元915应使值移位18位的径是x=4、y=2的位置处的径。因此,图10B中的x=4、y=2的位置处的数字为18。可以同样地获得其它径的移位量为图10B中的其它数字。
[0069] 也就是说,图10C所示的列出步骤ρ’中所使用的针对各个径的移位量的表是考虑到π处理的重排处理所确定的表。
[0070] 接着,将说明轮处理R”911的处理结果与轮处理R’901的处理结果相同。
[0071] 注意,π处理单元903、ρ’处理单元905、χ处理单元906和ι处理单元907分别进行与轮处理R”911的π处理单元913、ρ’处理单元915、χ处理单元916和ι处理单元917相同的处理。θ1处理单元902和θ2处理单元904是通过分割θ处理单元912所获得的。
[0072] 在将轮处理R”911与轮处理R’901进行比较的情况下,不同之处在于:在轮处理R”911中,θ处理单元912和π处理单元913按该顺序依次进行处理,而在轮处理R’901中,θ1处理单元902、π处理单元903和θ2处理单元904按该顺序依次进行处理。
[0073] 这里,在轮处理R”911中,步骤θ是向各位添加与该位邻接的两个列的总和的步骤,并且步骤π是重排各个径的步骤。另一方面,在轮处理R’901中,θ1处理单元902计算与各位邻接两个列的总和(步骤θ1)。然后,π处理单元903重排各个径(步骤π),并且θ2处理单元904考虑到各个径的重排来将这些列的总和与位相加(步骤θ2)。
[0074] 图11是说明步骤θ1的处理的图。步骤θ1与步骤θ的前半部分的运算相对应并且是进行列总和计算处理的步骤。更具体地,该处理用于针对各列计算如下两个值的总和(将称为θ中间值):“x轴方向上的-1位置处的列中的位的总和”和“x轴方向上的+1位置处和z轴方向上的-1位置处的列中的位的总和”。在接收到25个径的数据段之后,θ1处理单元902输出总计达到5×64位的θ中间值的、针对各列的1位的θ中间值。将所有的θ中间值的结构表示为平行于x-z平面且宽度为5位、高度为1位和深度为64位的平面结构。
[0075] 图12A是说明步骤θ2的处理的图。步骤θ2与步骤θ的后半部分的运算相对应并且是进行列总和相加处理的步骤。也就是说,步骤θ2是将步骤θ1中所计算出的θ中间值与各位相加的步骤。
[0076] 然而,应当注意,在步骤θ2之前已进行了步骤π。更具体地,在轮处理R”911的步骤θ(即,轮处理R 201中的步骤θ)中,各位的x坐标和该位的计算所使用的θ中间值的x坐标相同。然而,在轮处理R’901的步骤θ2中,各位的x坐标和该位的计算所使用的θ中间值的x坐标不同,并且考虑到步骤π中的各个径的重排来确定x坐标。图12B示出各位的计算所使用的θ中间值的x坐标。注意,保持部预先保持图12C中的提供θ2处理中的各位的计算所使用的θ中间值的x坐标的表,并且θ2处理单元904使用所保持的表来进行θ2处理。
[0077] 将具体说明生成图12C所示的表的方法。首先,将考虑轮处理R”911。在步骤θ中计算各位所需的θ中间值的x坐标与各位的x坐标相同。例如,在步骤θ中,使用x=0的位置处的θ中间值来计算x=0、y=4的位置处的位。接着,使用图5A和5B来确认步骤π中的径重排。可以看出,π处理单元913使x=0、y=4的位置处的位移动至x=4、y=2的位置。
[0078] 接着,将考虑轮处理R’901。由于在θ2处理单元904进行步骤θ2的情况下π处理单元903已进行了步骤π,因此可以看出在步骤θ2中计算x=4、y=2的位置处的位所需的θ中间值的x坐标是x=0。因此,图12B所提供的数字中的x=4、y=2的位置处的数字变为0。可以同样地获得针对其它位的θ中间值的x坐标为图12B中的其它数字。
[0079] 也就是说,图12C中的提供在θ2处理单元904进行步骤θ2时的θ中间值的x坐标的表是考虑到π处理的重排处理所确定的表。
[0080] 如上所述,轮处理R 201的处理结果和轮处理R”911的处理结果相同。另外,轮处理R”911的处理结果和轮处理R’901的处理结果相同。因此,轮处理R’901的处理结果和轮处理R 201的处理结果相同。
[0081] 根据上述各个步骤(步骤θ1、θ2和ρ’)的处理内容,可以理解,关于各个步骤的处理的开始,存在以下限制。
[0082] ·在步骤θ1中,θ1处理单元902计算总和,因此每次输入状态内的各径时,θ1处理单元902更新计算过程中的θ中间值。因此,在前一阶段输出一个径数据段的计算结果时,θ1处理单元902可以开始步骤θ1的处理。
[0083] ·在步骤θ2中,θ2处理单元904在状态内的各径的计算中加上步骤θ1中所计算出的θ中间值。由于在开始步骤θ2时步骤θ1已完成,因此在前一阶段(步骤π)输出一个径数据段的计算结果时,θ2处理单元904可以开始输出步骤θ2的处理结果。
[0084] ·步骤ρ’是针对各个径彼此独立的计算。因此,在θ2处理单元904输出一个径数据段的前一阶段(步骤θ2)的计算结果时,ρ’处理单元905可以开始步骤ρ’的处理。
[0085] 也就是说,在步骤θ1、θ2和ρ’中,在输出前一阶段的步骤的计算结果中的一个径数据段时,可以开始处理。
[0086] 另外,根据步骤π、χ和ι的处理内容,关于各个步骤的处理的开始,存在以下限制。
[0087] ·在步骤π中,重排状态中的各个径。因此,在前一阶段(步骤θ1)输出计算结果的一个状态整体、即25个径时,π处理单元903可以开始步骤π的处理。
[0088] ·在步骤χ中,在状态内的各径的计算中,χ处理单元906使用x轴方向上+1处的径和+2处的径。因此,在接收到第三个径数据段时,χ处理单元906可以开始步骤χ的处理。
[0089] ·步骤ι是针对各个径彼此独立的计算。因此,在输出前一阶段(步骤χ)的计算结果中的一个径时,ι处理单元907可以开始步骤ι的处理。
[0090] 换句话说,在步骤π中,处理的开始必须等待,直到前一阶段的步骤输出计算结果的25个数据段为止。然而,在步骤χ和ι中,在前一阶段的步骤分别输出计算结果中的三个径数据段和一个径数据段时,可以开始处理。
[0091] 也就是说,在除步骤π以外的步骤中,在这些步骤的前一阶段的处理开始之后,可以在无需等待长时间的情况下开始处理。
[0092] 因而,代替轮处理R 201,可以通过使用轮处理R’901来提高提供吞吐量。以下将说明轮处理R’901的结构。
[0093] 图13是示出根据第一典型实施例的KECCAK算法的实现示例的示意结构的图。在图13中,示出输入数据段2101。这里,将输入数据段2101中的径数据段作为单位进行输入。异或(XOR)运算部2102在每次进行24次轮处理时,计算消息块和内部数据的异或。寄存器2103保持表示为状态数据段的内部数据整体。
[0094] 电路(θ1电路)2104进行步骤θ1的处理。在本典型实施例中,电路2104在每次输入径时进行列的相加,并且在作为结果接收到25个径的输入之后输出5×64位的θ中间值。
[0095] 电路(π电路)2105进行步骤π的处理。π电路2105在寄存器2103保持25个径即一个状态之后进行处理。输入和输出时的数据宽度为1600位。
[0096] 电路(θ2电路)2106进行步骤θ2的处理。电路(ρ’电路)2107进行步骤ρ’的处理。电路(χ电路)2108进行步骤χ的处理。电路(ι电路)2109进行步骤ι的处理。θ2电路2106、ρ’电路2107和ι电路2109分别以径为单位进行处理,因而在每次输入径时进行处理。χ电路2108在输入三个径的情况下进行处理,但χ电路2108在每次从第四个径起输入径的情况下进行处理。
[0097] 图14A是根据第一典型实施例的实现示例的各个模块的输出时序图。图14A示出在进行两次轮处理R’901的情况下的输出时序图。一次轮处理平均需要28个时钟。
[0098] 在下文,为了与上述第一典型实施例的实现示例进行比较,将说明利用根据规定的算法以一个径数据段为单位进行处理的实现示例。
[0099] 图15是示出在利用根据规定的KECCAK算法以径为单位进行处理时的实现示例的示意结构的图。五个步骤的处理(θ、ρ、π、χ和ι)与上述处理相同,因而不提供针对该处理的说明。
[0100] KECCAK-f 105按照每个时钟从输入数据段1801接收一个径数据段(长度为64位的数据)。KECCAK-f 105按图2F所示的顺序接收一个状态数据段中径数据段。
[0101] 异或处理单元1802是在每次进行24次轮处理时计算消息块和内部数据段的异或的运算部。
[0102] 寄存器1803保持表示为状态数据段的内部数据整体。处理块(π电路)1804进行步骤π。然而,如上所述,仅在完成步骤ρ的处理之后才可以进行步骤π的处理。处理块(θ电路)1805进行步骤θ,并且处理块(ρ电路)1806进行步骤ρ。
[0103] 处理块(χ电路)1807进行步骤χ处理,并且处理块(ι电路)1808进行步骤ι。多路复用器1809在轮处理的前半部分中输出从处理块1806已输入的数据并且在轮处理的后半部分中输出来自处理块1808的数据。在计算完成时,KECCAK-f输出一个径的输出数据段1810。
[0104] 图14B是在利用根据规定的算法以径为单位进行处理时的各个模块的输出时序图。一对θ电路1805和ρ电路1806以及一对χ电路1807和ι电路1808在不同的时间段内进行工作而不是同时进行工作。一次轮处理需要51个时钟。
[0105] 如通过图14A和图14B的比较可以看出,可以通过使用根据第一典型实施例的实现示例的结构来提高处理的吞吐量。
[0106] 更具体地,可以得出以下结论。
[0107] ·除π电路2404外的所有处理电路并行进行工作,因而可以提高电路的利用效率。
[0108] ·可以在更小的时钟数(更少的时间)内进行一次轮处理。
[0109] 如上所述,在进行θ2处理和ρ处理之前进行π处理,并且在进行θ1处理期间保持π处理所用的数据。因而,缩短了与传统技术相同的用于保持数据的时间。顺便提及,图13示出在θ2处理之后进行ρ处理的示例,但即使在进行θ2处理之前进行ρ处理的情况下也可以获得相同的效果。在θ2处理之前进行ρ处理的情况下,应考虑到进行了ρ处理这一事实来确定在θ2处理中要进行相加的位。
[0110] 根据上述的典型实施例,可以提供能够提高生成哈希值时的吞吐量的技术。
[0111] 本发明的实施例还可以通过读出并执行记录在存储介质(例如,非瞬态计算机可读存储介质)上的计算机可执行指令以进行本发明的一个或多个上述实施例的功能的系统或设备的计算机以及以下方法来实现,其中系统或设备的计算机通过例如读出和执行来自存储介质的计算机可执行指令以进行一个或多个上述实施例的功能来进行该方法。计算机可以包括中央处理器(CPU)、微处理器(MPU)或其它电路中的一个或多个,并且可以包括单独的计算机或者单独的计算机处理器的网络。计算机可执行指令例如可以通过网络或者存储介质提供给计算机。存储介质可以例如包括硬盘随机存取存储器(RAM)、只读存储器(ROM)、分布式计算机系统的存储器、光盘(诸如致密盘(CD)、数字通用光盘(DVD)或蓝光盘(BD)TM等)、闪速存储装置和存储卡等中的一个或多个。
[0112] 尽管已经参考典型实施例说明了本发明,但是应该理解,本发明不限于所公开的典型实施例。所附权利要求书的范围符合最宽的解释,以包含所有这类修改、等同结构和功能。
[0113] 本申请要求2013年2月21日提交的日本专利申请2013-032036和2014年1月31日提交的日本专利申请2014-017414的优先权,这两个申请的全部内容通过引用包含于此。
QQ群二维码
意见反馈