首页 / 专利库 / 资料储存系统 / 根哈希 / 哈希值计算装置及其方法

哈希值计算装置及其方法

阅读:513发布:2020-05-12

专利汇可以提供哈希值计算装置及其方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及一种哈希值计算装置及其方法。哈希值计算装置计算消息的哈希值,该哈希值计算装置包括:输入单元,其适于输入根据要处理的消息获得的扩展 块 ;哈希值计算单元,其适于执行所输入的块的哈希值计算并输出哈希中间值;多个中间值存储单元,其适于针对所述要处理的消息存储由所述哈希值计算单元输出的所述哈希中间值;输出单元,其适于将与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值输出;以及哈希值计算控制单元,其适于通过切换用于存储从所述哈希值计算单元输出的所述哈希中间值的所述中间值存储单元来控制针对多个消息的哈希值计算。,下面是哈希值计算装置及其方法专利的具体信息内容。

1.一种哈希值计算装置,其计算消息的哈希值,该哈希值计算装置包括:
输入单元,其适于输入根据要处理的消息获得的
哈希值计算单元,其适于针对各块执行所输入的块的哈希值计算并输出哈希中间值;
多个中间值存储单元,其适于针对所述要处理的消息存储由所述哈希值计算单元输出的所述哈希中间值;
输出单元,其适于将与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值输出;以及
哈希值计算控制单元,其适于通过切换用于存储从所述哈希值计算单元输出的所述哈希中间值的所述中间值存储单元来控制针对多个消息的哈希值计算,
其中针对哈希算法规定了代表块的位数。
2.根据权利要求1所述的哈希值计算装置,其中,在使用针对第一消息的第一中间值存储单元执行处理期间,输入优先级比所述第一消息高的第二消息的情况下,所述哈希值计算控制单元进行控制,以中断针对所述第一消息的处理,并使用第二中间值存储单元开始针对所述第二消息的处理,并且在针对所述第二消息的处理完成后,使用存储在所述第一中间值存储单元中的中间值重新开始针对所述第一消息的处理。
3.根据权利要求2所述的哈希值计算装置,该哈希值计算装置还包括:扩展处理单元,其适于针对要处理的消息的块执行扩展处理;分步处理单元,其适于针对输入数据执行分步处理,并将经过所述分步处理的所述输入数据作为内部状态值输出,多个所述扩展处理单元和多个所述分步处理单元与不同的哈希算法对应地配置,
其中,所述输入单元输入经过所述扩展处理单元进行的所述扩展处理的块作为扩展块,
所述哈希值计算单元使用所述内部状态值执行所述哈希值计算,并且
所述哈希值计算装置还包括切换单元,该切换单元适于根据要使用的哈希算法来切换要启动的所述扩展处理单元和所述分步处理单元。
4.根据权利要求3所述的哈希值计算装置,其中,所述第一中间值存储单元和所述第二中间值存储单元被配置成存储来自所述多个分步处理单元的输出数据中的具有最大位宽的输出数据。
5.一种哈希值计算装置,其计算消息的哈希值,该哈希值计算装置包括:
输入单元,其适于输入根据要处理的消息获得的块;
多个哈希值计算单元,其适于针对各块执行所输入的块的哈希值计算并输出哈希中间值,所述多个哈希值计算单元与不同的哈希算法对应地配置;
切换单元,其适于根据要使用的哈希算法来切换要启动的所述哈希值计算单元;
中间值存储单元,其适于与要处理的消息关联地存储从所启动的哈希值计算单元输出的哈希中间值;以及
输出单元,其适于将与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值输出,
其中针对哈希算法规定了代表块的位数。
6.根据权利要求5所述的哈希值计算装置,其中,所述中间值存储单元被配置成存储所述多个哈希值计算单元的输出数据中的具有最大位宽的输出数据。
7.一种用于哈希值计算装置的哈希值计算方法,所述哈希值计算装置计算消息的哈希值,该哈希值计算方法包括:
输入步骤,输入根据要处理的消息获得的块;
哈希值计算步骤,针对各块执行所输入的块的哈希值计算并输出哈希中间值;
存储步骤,针对所述要处理的消息在多个中间值存储单元的一个中存储在所述哈希值计算步骤中输出的所述哈希中间值;
输出步骤,输出与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值;以及
哈希值计算控制步骤,通过切换用于存储在所述哈希值计算步骤中输出的所述哈希中间值的所述中间值存储单元来控制针对多个消息的哈希值计算,
其中针对哈希算法规定了代表块的位数。
8.一种用于哈希值计算装置的哈希值计算方法,所述哈希值计算装置计算消息的哈希值,该哈希值计算方法包括:
输入步骤,输入根据要处理的消息获得的块;
哈希值计算步骤,在与不同的哈希算法对应地配置的多个哈希值计算单元的一个中,针对各块执行所输入的块的哈希值计算并输出哈希中间值;
切换步骤,根据要使用的哈希算法来切换要启动的所述哈希值计算单元;
中间值存储步骤,在存储单元中,与要处理的消息关联地存储在所启动的哈希值计算单元中输出的哈希中间值;以及
输出步骤,输出与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值,
其中针对哈希算法规定了代表块的位数。

说明书全文

哈希值计算装置及其方法

技术领域

[0001] 本发明涉及一种哈希(hash)值计算装置及其方法。

背景技术

[0002] (关于哈希函数)
[0003] 近年来,由于例如普通家庭用户能够以低成本连接光纤网络,因此支持因特网的基础设施投入使用,并且通信速度迅速加快。各种数字设备可以连接到网络,并且在数字设备间经由因特网频繁进行通信。
[0004] 在这种数字设备间的通信中,作为必不可少的功能,除了对要交换的消息进行加密以外,还需要对通信伙伴和消息进行认证。在这种在数字设备间对通信伙伴和消息进行认证时,通常使用称作哈希函数的算法
[0005] 哈希函数是一种输入任意位长的消息并输出固定位长的哈希值的算法(函数)。该哈希函数通过以下处理来计算哈希值。
[0006] 1)将预定数据附加到任意位长的输入消息的最末位置,以使该消息成为在算法中指定的位长的整数倍(填充(padding)处理)。
[0007] 2)针对各块扩展经过填充处理的消息,以生成扩展消息(消息扩展处理)。
[0008] 3)将使用与块对应的扩展消息(扩展块)、从初始值改变内部状态值的处理重复在算法中指定的次数。注意,作为内部状态值的初始值,针对第一个块使用在算法中指定的预定固定值(以下称作哈希初始值)。针对第二个块及随后的块,使用针对紧接在关注的块之前的块的哈希中间值(稍后描述)(分步处理)。
[0009] 4)将进行了预定次数的分步处理后的内部状态值与针对紧接的前一个块的该加法处理结果(以下称作哈希中间值)相加,以计算新的哈希中间值。注意,针对第一个块,将进行了预定次数的分步处理后的内部状态值与哈希初始值相加,以计算哈希中间值(加法处理)。
[0010] 5)针对所有块依次执行处理2)到4)。将在完成对所有扩展消息的处理时得到的哈希中间值作为哈希值输出。
[0011] 将哈希函数的处理1)到5)的组合称作哈希值计算。注意,如果哈希初始值可用于第一个块,或者如果紧接的前一个块的哈希中间值可用于第二个块及随后的块,则能够执行针对某个块的哈希函数的处理3)和4)。因此,在计算从第一个块到某个块的哈希中间值时,哈希值计算中断,可以使用该哈希中间值从下一个块重新开始处理。
[0012] 哈希函数具有以下三个主要特征。作为第一个特征,可以根据消息来计算哈希值,但是实际上不可能根据输出哈希值反过来计算输入消息(单向)。作为第二个特征,在给定某个消息的哈希值时,找出具有该哈希值的另一个消息非常困难(弱抗冲突性)。作为第三个特征,发现哈希值匹配的两个不同的消息非常困难(强抗冲突性)。
[0013] 在例如SSL/TLS和IPSec的各种通信协议中使用具有这种性质的哈希函数。针对各个通信协议,通过规格(specification)来确定可以使用的哈希函数算法。在数字设备间进行通信时,从数字设备采用的通信协议可以使用的哈希算法中选择在两个数字设备中安装的哈希算法,并且在进行认证处理时使用。
[0014] 由于通信速度加快,所以在加密通信中保证通信速度的需要增加,并且所需的响应时间根据要处理的数据而不同。例如,对于进行修改检测的大容量图像数据,允许一定程度的哈希值计算的长响应时间。但是,对于进行个人认证所需的短的密码,期望非常短的哈希值计算的响应时间。因此,还要求哈希值计算加速处理并尽可能地缩短对具有高优先级的数据的响应时间。通过硬件来实现处理以加速哈希值计算是必不可少的。在硬件实现的情况下,由于电路规模直接涉及成本,因此每个系统准备一个例如实现哈希值计算的哈希值计算电路的硬件资源,并通过共享该一个硬件资源来实现针对多个消息的哈希值计算。
[0015] 如上所述,哈希值计算将任意位长的消息分割成各自具有固定位长的块,并处理这些块。在完成针对所有块的哈希值计算时,能够获得针对该消息的哈希值。
[0016] (要处理的消息的切换)
[0017] 下面,分析以下情况:在使用一个硬件资源执行针对多个消息的哈希值计算的条件下,在针对非常长的消息的哈希值计算开始后,接收针对具有高优先级的短消息的哈希处理请求。在这种情况下,针对第一个消息的哈希值计算需要很长时间,无法保证与针对具有高优先级的短消息的哈希值计算关联的给定响应时间。因此,为了保证给定响应时间,需要加速哈希值计算本身、对要处理的消息分配优先等级、并先处理具有高优先级的消息的机制。例如,需要以下机制。即,临时中断先输入的长消息的哈希值计算,先执行针对具有高优先级的短消息的哈希值计算,在完成对该短消息的处理后,重新开始对长消息的哈希值计算。
[0018] 传统上,已知一种加密处理装置,其能够与各种加密算法差异和加密处理模式差异无关地有效中断和重新开始例如哈希值计算的加密处理(日本特开2006-39000号公报)。在这种配置中,DMA控制器的描述符包括指令中断和重新开始哈希值计算的格式。在传输附加有中断信息的消息时,将作为直到消息中间的某个块的哈希值计算的计算结果而存储的内部状态值写出到外部存储器中。另一方面,在传输附加有重新开始信息的消息时,读出存储在外部存储器中的内部状态值,并且从消息中的下一个块开始重新开始哈希值计算。
[0019] (多个哈希函数的支持)
[0020] 另一方面,分别规定了在加密通信协议中能够使用的哈希算法。在数字设备间的通信中,从安装在各个通信设备中的哈希算法中选择两个通信设备能够共同执行的哈希算法。对方通信设备能够执行的哈希算法经常可能不同,需要与许多通信设备进行加密通信的设备不得不执行许多不同的哈希算法。
[0021] 此外,近年来,指出了广泛用作哈希算法的标准的SHA-1和MD5的脆弱性,并且推荐转变到总称为SHA-2的具有更高安全性的哈希算法。即使在标准加密通信协议中,也想定在不远的将来采用例如SHA-2的具有多位长度的哈希算法。然而,新产品能够采用新的哈希算法,但是存在许多数字设备只支持旧的哈希算法,这些数字设备难以进行运行改变。因此,必须支持传统上用作标准的旧的哈希算法和具有高安全性的新的哈希算法两者,以与不同的数字设备进行安全的通信。日本特开2004-53716号公报公开了一种作为硬件来实现多个哈希函数的哈希函数处理电路。
[0022] 在哈希值计算电路依次针对各个消息执行哈希值计算的情况下,在针对某个消息的哈希值计算开始时,针对另一个消息的哈希值计算必须等待完成该哈希值计算。在当前处理的消息非常长,而另一个等待的消息非常短时,不能保证针对所有消息的在预定响应时间内的处理性能。为了解决这种问题,期望提供一种能够在一个消息的处理期间同时处理另一个消息的机制。
[0023] (关于要处理的消息的切换的问题)
[0024] 然而,在日本特开2006-39000号公报的配置中,作为哈希值计算的中间运算结果存储的数据是加法处理之前的内部状态值,而不存储重新开始哈希值计算所需的加法处理后的哈希中间值。因此,仅这种配置实际上不能重新开始哈希值计算。为了中断并重新开始哈希值计算,除了上述配置以外,必须另外存储紧接的前一个块的哈希中间值。作为替选方案,为了生成紧接的前一个块的哈希中间值,必须另外存储紧接的前一个块之前的块的哈希中间值,并必须将其与存储在外部存储器中的内部状态值相加。以这种方式,在传统配置的框架下,要存储的数据量增加,并且有关加法处理的时间开销也增加。
[0025] 利用通过对日本特开2006-39000号公报的配置添加哈希中间值存储或生成装置的配置,可以通过在处理中间切换多个消息来执行哈希值计算。但是,利用这种配置,将形成消息的多个块中的、直到中间块的哈希值计算中间值写出到外部存储器中以中断处理,并在重新开始处理时从外部存储器读出该哈希值计算中间值。由于该原因,需要额外的时间,来从存储器读取哈希值计算中间值/将哈希值计算中间值写入到存储器中。
[0026] 例如,哈希中间值的位长,对于SHA-1总计为160位,对于SHA-256总计为256位,对于SHA-512总计为512位。通常以32位或64位单位进行存储器读/写访问,并且将哈希值计算的中间运算结果写入到存储器或从存储器读出需要几到几十个循环。由于数据的存储器读/写访问还需要例如确保总线权所需的等待时间的额外时间,因此基于上述相关技术中断和重新开始哈希值计算,需要除了哈希值计算本身之外的大的时间开销。
[0027] 在上述配置中在处理中间切换针对多个消息的哈希值计算时,必须将作为针对一个消息的哈希值计算中的直到中间块的哈希值计算结果而获得的内部状态值写入到与总线连接的外部存储器中。但是,在哈希值计算器外部泄漏内部状态值意味着被盗的险增加,从而引起安全问题。
[0028] 在中断和重新开始哈希值计算时,期望不仅减少哈希值计算的中间运算结果的读/写开销,而且减少消息本身在外部存储器上的读/写开销。例如,在SHA-1的情况下,作为消息的处理单位的块的位长为512位,以32位或64位单位进行存储器读/写访问需要16或8个循环。在对新消息的块的数据或临时放弃的消息的块应用哈希值计算时,从外部存储器读出消息的块所需的时间对哈希值计算施加大的开销。
[0029] 如日本特开2006-39000号公报所描述的,设置能够给出中断和重新开始哈希值计算的指令的DMA控制器的描述符格式,以消除在进行中断/重新开始控制时进行条件确定所需的软件的干扰,从而有效地中断和重新开始哈希值计算。但是,日本特开2006-39000号公报仅公开了以下技术:在数据传输到哈希值计算器之前、CPU预先识别消息中要中断和重新开始的一部分数值之后,CPU将该数据与表示有无中断/重新开始的信息一起传输给哈希值计算器。即,该参考文献没有公开针对在向哈希值计算器临时发出对消息的数据的哈希处理请求后,对消息进行中断和重新开始处理的任何技术。
[0030] (关于多个哈希函数的支持的问题)
[0031] 在用硬件实现加速哈希值计算的情况下,不仅需要哈希算法电路,还需要分别存储经过消息扩展处理的数据、经过分步处理的数据和经过加法处理的数据的存储单元。在分别配置处理许多不同的哈希算法和具有高安全性的新的哈希算法的硬件部件时,电路规模增大。尤其是,由于具有高安全性的新的哈希算法的哈希值的位长大,因此具有高安全性的新的哈希算法需要较大容量的存储单元。但是,一般需要尽量抑制硬件的电路规模以实现功率和成本节省。
[0032] 传统的哈希装置包括处理不同的哈希算法的多个专用电路以及由该多个专用电路共同使用的存储单元,并且传统的哈希装置通过选择哈希算法中的一个来执行哈希值计算。在这种情况下,由于多个哈希算法共同使用存储单元,因此不能针对多个消息同时执行哈希值计算,从而不能保证针对所有消息的在预定响应时间内的处理性能。
[0033] 如在日本特开2004-53716号公报中所描述的配置中,配置了处理不同的哈希算法的多个专用电路,而仅与所请求的哈希算法对应的专用电路工作。但是,在这种情况下,不仅电路规模显著增加,而且整个哈希值计算装置的功耗的变化变大。因此,在外部通过功率分析来分析电路的内部信息变得容易。由于该原因,在防篡改性(安全性)方面,也不优选这种配置。

发明内容

[0034] 首先,本发明旨在提供一种能够在处理中间切换针对多个消息的哈希值计算而不会使任何处理性能降低,并且能够确保较高安全性的哈希值计算技术。
[0035] 另外,本发明旨在提供一种允许同时执行多个哈希算法,并且能够确保小电路规模和高安全性的哈希值计算技术。
[0036] 根据本发明的一个方面,提供一种哈希值计算装置,其计算消息的哈希值,该哈希值计算装置包括:
[0037] 输入单元,其适于输入根据要处理的消息获得的扩展块;
[0038] 哈希值计算单元,其适于执行所输入的块的哈希值计算并输出哈希中间值;
[0039] 多个中间值存储单元,其适于针对所述要处理的消息存储由所述哈希值计算单元输出的所述哈希中间值;
[0040] 输出单元,其适于将与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值输出;以及
[0041] 哈希值计算控制单元,其适于通过切换用于存储从所述哈希值计算单元输出的所述哈希中间值的所述中间值存储单元来控制针对多个消息的哈希值计算。
[0042] 根据本发明的另一个方面,提供一种哈希值计算装置,其计算消息的哈希值,该哈希值计算装置包括:
[0043] 输入单元,其适于输入根据要处理的消息获得的扩展块;
[0044] 多个哈希值计算单元,其适于执行所输入的块的哈希值计算并输出哈希中间值,所述多个哈希值计算单元与不同的哈希算法对应地配置;
[0045] 切换单元,其适于根据要使用的哈希算法来切换要启动的所述哈希值计算单元;
[0046] 中间值存储单元,其适于与要处理的消息关联地存储从所启动的哈希值计算单元输出的哈希中间值;以及
[0047] 输出单元,其适于将与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值输出。
[0048] 根据本发明的再一个方面,提供一种用于哈希值计算装置的哈希值计算方法,所述哈希值计算装置计算消息的哈希值,该哈希值计算方法包括:
[0049] 输入步骤,输入根据要处理的消息获得的扩展块;
[0050] 哈希值计算步骤,执行所输入的块的哈希值计算并输出哈希中间值;
[0051] 存储步骤,针对所述要处理的消息在多个中间值存储单元的一个中存储在所述哈希值计算步骤中输出的所述哈希中间值;
[0052] 输出步骤,输出与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值;以及
[0053] 哈希值计算控制步骤,通过切换用于存储在所述哈希值计算步骤中输出的所述哈希中间值的所述中间值存储单元来控制针对多个消息的哈希值计算。
[0054] 根据本发明的又一个方面,提供一种用于哈希值计算装置的哈希值计算方法,所述哈希值计算装置计算消息的哈希值,该哈希值计算方法包括:
[0055] 输入步骤,输入根据要处理的消息获得的扩展块;
[0056] 哈希值计算步骤,在与不同的哈希算法对应地配置的多个哈希值计算单元的一个中,执行所输入的块的哈希值计算并输出哈希中间值;
[0057] 切换步骤,根据要使用的哈希算法来切换要启动的所述哈希值计算单元;
[0058] 中间值存储步骤,在存储单元中,与要处理的消息关联地存储在所启动的哈希值计算单元中输出的哈希中间值;以及
[0059] 输出步骤,输出与所述要处理的消息的所有块关联的哈希中间值作为所述消息的哈希值。
[0060] 从以下参照附图对示例性实施例的描述,本发明的其它特征将变得清楚。

附图说明

[0061] 图1是示出哈希值计算电路的内部配置的框图
[0062] 图2是示出操作哈希值计算电路所需的系统配置的主要部分的框图;
[0063] 图3是示出哈希值计算系统中的针对各消息的哈希值计算的操作序列的流程图
[0064] 图4是示出哈希值计算电路中的寄存器的内部结构的图;
[0065] 图5是示出消息A和消息B的块结构的图;
[0066] 图6是示出消息A和消息B的块的传输顺序的图;
[0067] 图7是示出哈希值计算系统中的针对多个消息的哈希值计算的操作序列的流程图;
[0068] 图8A至图8E是示出针对各个步骤的哈希值计算的时序图;
[0069] 图9A至图9E是示出针对各个步骤的哈希值计算的时序图;
[0070] 图10A至图10E是示出针对各个步骤的哈希值计算的时序图;
[0071] 图11A和图11B是示出针对各个块的哈希值计算的时序图;
[0072] 图12是示出哈希值计算电路的内部配置的框图;
[0073] 图13是示出哈希值计算电路中的寄存器的内部结构的图;
[0074] 图14A和图14B是示出哈希值计算系统中的针对多个消息的哈希值计算的操作序列的流程图;
[0075] 图15A至图15E是示出针对各个步骤的哈希值计算的时序图;
[0076] 图16A至图16E是示出针对各个步骤的哈希值计算的时序图;
[0077] 图17A和图17B是示出针对各个块的哈希值计算的时序图;
[0078] 图18是示出哈希值计算电路的内部配置的框图;
[0079] 图19是示出哈希值计算电路中的寄存器的内部结构的图;
[0080] 图20A、图20B和图20C是示出哈希值计算系统中的针对多个消息的哈希值计算的操作序列的流程图;
[0081] 图21A至图21G是示出针对各个步骤的哈希值计算的时序图;
[0082] 图22A至图22F是示出针对各个步骤的哈希值计算的时序图;
[0083] 图23A至图23F是示出针对各个步骤的哈希值计算的时序图;
[0084] 图24A和图24B是示出针对各个块的哈希值计算的时序图;
[0085] 图25是示出哈希值计算电路的配置的框图;
[0086] 图26是示出控制器的内部配置的示例的框图;
[0087] 图27是示出寄存器的规格的示例的图;
[0088] 图28是示出操作哈希值计算电路所需的系统的配置的示例的框图;
[0089] 图29A至图29C是示出哈希值计算系统中的针对各消息接收的CPU的操作序列的流程图;
[0090] 图30A和图30B是示出哈希值计算系统中的哈希电路的操作序列的流程图;
[0091] 图31是示出要进行哈希值计算的消息的示例的图;
[0092] 图32A至图32H是示出哈希值计算的详细情况的示例的时序图;
[0093] 图33A至图33H是示出哈希值计算的详细情况的示例的时序图;
[0094] 图34A和图34B是示出基于接口信号的操作的示例的时序图;
[0095] 图35是示出数据ExMSG_0和ExMSG_1的选择策略的示例的图;
[0096] 图36是示出扩展消息存储单元的内部配置的示例的图;
[0097] 图37是示出数据ExMSG_N[31:0]和ExMSG_N[63:32]的选择策略的示例的图;
[0098] 图38是示出数据TEMP_0和TEMP_1的选择策略的示例的图;
[0099] 图39是示出数据TEMP_N[255:0]和TEMP_N[511:256]的选择策略的示例的图;
[0100] 图40是示出数据IHASH_0和IHASH_1的选择策略的示例的图;以及
[0101] 图41是示出数据IHASH_N[255:0]和IHASH_N[511:256]的选择策略的示例的图。

具体实施方式

[0102] 下面,参考附图详细说明根据本发明的实施例。但是,在这些实施例中描述的部件仅是示例,其不限制本发明的范围。在这些实施例中描述的特征的所有组合对于本发明的解决手段不始终是必不可少的。
[0103] <<第一实施例>>
[0104] 本实施例例示应用SHA-1作为用于计算哈希值的哈希函数的配置。在SHA-1中,针对各个512位的块处理消息,将160位的哈希值作为哈希值计算的最终结果输出。SHA-1的哈希值计算包括如下一系列处理。
[0105] ·将消息分割为512位的块,并将预定数据添加到消息的最末位置,以使最后的块具有512位(以下称作填充处理)。
[0106] ·对各512位的块应用稍后描述的消息扩展处理、80个步骤的分步处理和加法处理,以生成哈希中间值。
[0107] 消息扩展处理根据512位的块数据生成80个32位的扩展消息(扩展块)。按原样使用源512位的块数据作为第0到第15个扩展消息。至于第16个及随后的扩展消息,对第(n-16)到第(n-1)个消息应用预定运算处理,以生成第n个扩展消息。
[0108] 分步处理针对包括5个32位的数据的预定内部状态值的初始值(哈希初始值),通过针对80个步骤中的各个步骤使用80个扩展消息应用预定运算操作,来依次更新内部状态值。在最初的第0个步骤(以下称作步骤0)中,使用第0个扩展消息对哈希初始值应用预定运算处理,以更新内部状态值。在其余79个步骤中的各个(以下称作步骤n)中,使用第n个扩展消息对步骤(n-1)的内部状态值应用预定运算处理,从而更新内部状态值。
[0109] 加法处理将作为关注的块的第80个步骤的分步处理结果的内部状态值与从第一个块到紧接的前一个块的哈希中间值相加。
[0110] 从消息的第一个块到某个块的哈希值计算结果是哈希中间值,从第一个块到最后的块的哈希中间值是整个消息的哈希值。
[0111] (哈希值计算电路的配置)
[0112] 图1是示出根据本发明第一实施例的哈希值计算电路的配置的框图。
[0113] 附图标记100表示哈希值计算电路。附图标记101表示临时存储由稍后描述的外部DMA控制器(以下称作DMAC)从外部存储器DMA传输到哈希值计算电路100的消息的消息存储单元。
[0114] 附图标记102表示临时存储扩展消息的扩展消息存储单元。附图标记103表示输入临时存储在扩展消息存储单元102中的扩展消息并执行消息扩展处理的消息扩展处理器。
[0115] 附图标记104表示针对输入消息的各块针对各步骤依次执行步骤0到步骤79的分步处理的分步处理器。附图标记105表示选择要由分步处理器104处理的内部状态值的选择器。
[0116] 附图标记106表示临时存储作为来自分步处理器104的输出的内部状态值的内部状态值存储单元。附图标记107表示对完成所有步骤的处理后的内部状态值和到紧接的前一个块的哈希中间值执行加法处理的加法处理器。
[0117] 附图标记108表示选择要输入到加法处理器107的哈希中间值的选择器。附图标记109和110表示存储作为来自加法处理器107的输出的哈希中间值的哈希中间值存储单元(第一和第二中间值存储单元)。附图标记111表示选择存储在哈希中间值存储单元109和110中的哈希中间值中的一个的选择器。
[0118] 附图标记112表示选择作为到紧接的前一个块的哈希值计算结果的哈希中间值和哈希初始值中的一个的选择器。附图标记113表示生成控制外部DMAC和CPU之间的数据交换和哈希值计算所需要的各种信号的哈希值计算控制器。
[0119] 附图标记114表示针对消息的各分割将32位的假数据(dummy data)附加到160位的哈希值以获得3个64位的数据,并通过DMA传输将这些数据传送到哈希值计算电路100外部的哈希值输出单元。附图标记116表示存储由哈希值计算电路100外部的CPU设置的哈希值计算电路100的操作参数的寄存器。
[0120] 附图标记117表示包括用于向寄存器116输入数据/从寄存器116输出数据的地址信号、数据信号和控制信号的总线信号。附图标记118表示要与DMAC交换的DMA数据/控制信号,包括DMA输入数据、DMA输出数据、DMA请求信号和DMA确认信号(稍后描述)。
[0121] 附图标记119表示由选择器111选择的哈希中间值。附图标记120表示要从DMAC输出到哈希值计算电路100的DMA输入数据。消息存储单元101存储该DMA输入数据。
[0122] 附图标记121表示要从哈希值计算电路100输出到DMAC的DMA输出数据。哈希值输出单元114输出哈希值或哈希中间值作为该DMA输出数据。附图标记122表示要从哈希值计算电路100输出到DMAC的DMA请求信号。哈希值计算控制器113在发出输入数据的读取请求和输出数据的写入请求时分别断言(assert)DMA读取请求信号和DMA写入请求信号。
[0123] 附图标记123表示要从DMAC输出到哈希值计算电路100的DMA确认信号。即,DMAC响应于输入数据的读取请求断言DMA读取确认信号并输出输入数据,并响应于输出数据的写入请求断言DMA写入确认信号并取出输出数据。注意,DMA请求信号122和DMA确认信号123一起包括读/写信号。
[0124] 附图标记124表示从哈希值计算控制器113输出的、用于在针对各块的哈希值计算开始时将存储在消息存储单元101中的扩展消息加载到扩展消息存储单元102中的块加载信号。附图标记125表示从哈希值计算控制器113输出的作为选择器105的控制信号的哈希中间值选择信号。
[0125] 附图标记126表示在寄存器116中设置的表示哈希值计算的初始值的信号,即,要从哈希值计算控制器113输出到选择器112的哈希初始值。附图标记127表示从哈希值计算控制器113输出的作为选择器112的控制信号的哈希初始值选择信号X。
[0126] 附图标记128表示从哈希值计算控制器113输出的作为选择器108的控制信号的哈希初始值选择信号Y。附图标记129表示从哈希值计算控制器113输出的作为哈希中间值存储单元A 109中的哈希中间值A 135的加载信号的哈希中间值A加载信号。
[0127] 附图标记130表示从哈希值计算控制器113输出的作为哈希中间值存储单元B110中的哈希中间值B 136的加载信号的哈希中间值B加载信号。附图标记131表示从哈希值计算控制器113输出的作为选择器111的控制信号的消息A选择信号。
[0128] 附图标记132表示从消息存储单元101输出到扩展消息存储单元102的消息。附图标记133表示从扩展消息存储单元102输出到消息扩展处理器103的扩展消息。
[0129] 附图标记134表示作为来自内部状态值存储单元106的输出的内部状态值。附图标记135表示作为来自哈希中间值存储单元A 109的输出的哈希中间值A。附图标记136表示作为来自哈希中间值存储单元B 110的输出的哈希中间值B。
[0130] 附图标记137表示对要针对各消息处理的块的数量进行计数的块计数器,其在针对形成消息的预定数量的块的哈希值计算完成时清零。附图标记138表示对要针对消息的各块处理的步骤的数量进行计数的步骤计数器,其在对预定数量的步骤进行计数后清零。
[0131] 注意,在本实施例中,块计数器137的计数器值针对第n(n=0、…)个块处理指示值(n+1)。步骤计数器138的计数器值针对第n(n=0、…、79)个分步处理指示值(n+1)。
[0132] 在本实施例中,哈希值计算电路100执行除填充处理外的哈希值计算的消息扩展处理、分步处理和加法处理。稍后描述的哈希值计算系统200中的除哈希值计算电路100以外的部件、即稍后描述的CPU 201和存储器202执行填充处理。
[0133] (哈希值计算系统的配置)
[0134] 图2是示出操作哈希值计算电路100所需的系统的配置的示例的框图。附图标记200表示哈希值计算系统。附图标记201表示控制哈希值计算系统200的操作的CPU。附图标记202表示用于存储要进行哈希值计算的消息和哈希值等的存储器。
[0135] 附图标记203表示将消息从存储器202传输到哈希值计算电路100以及将哈希值从哈希值计算电路100传输到存储器202的直接存储存取控制器(DMAC,direct memory access controller)。附图标记204表示控制哈希值计算系统200的中断信号的中断控制器。附图标记205表示连接哈希值计算电路100、CPU 201、存储器202、DMAC 203和中断控制器204的总线,其包括地址信号、数据信号和控制信号。
[0136] 附图标记206表示从DMAC 203到中断控制器204的中断信号。在本实施例中,在DMAC 203将哈希值从哈希值计算电路100传输到存储器202后,DMAC 203使用中断信号206将来自DMAC 203的中断通知给中断控制器204。中断控制器204使用中断信号(未示出)将哈希值的存储通知给CPU 201。
[0137] (哈希值计算的概要)
[0138] 图3是示出本实施例的哈希值计算系统中的针对各消息的哈希值计算的操作序列的流程图。
[0139] 在ST001中,CPU 201经由总线信号117在哈希值计算电路100的寄存器116中设置针对关注的消息的哈希值计算的操作参数。
[0140] 在ST002中,哈希值计算电路100通过DMA读传输来读取消息的数据,针对各块执行哈希值计算,并生成直到最后的块的哈希值。
[0141] 在ST003中,哈希值计算电路100通过DMA写传输来输出关注的消息的哈希值。
[0142] (寄存器的存储内容)
[0143] 图4是示出本实施例的哈希值计算电路100中的寄存器116存储的信息的图。
[0144] 寄存器116具有作业开始信息、消息标识符信息、块的数量信息、哈希初始值信息和处理继续信息的存储区域。“作业开始”区域中的信息表示是否根据在“消息标识符”、“块的数量”、“哈希初始值”和“处理继续”区域中设置的信息“开始哈希值计算”或者“不开始哈希值计算”。可以通过相应区域中的预定位的“1”或“0”来表示是否开始哈希值计算。以下将在预定位中设置“1”或“0”称作“设置标志”或“清除标志”。
[0145] CPU 201在哈希值计算电路100的寄存器116中的“作业开始”区域中设置预定标志,以针对与一个消息对应的各个哈希处理请求指示“开始哈希值计算”。当在对应的区域中设置预定标志、并完成针对紧接的前一个消息的哈希值计算时,哈希值计算电路100开始哈希值计算。接着,在针对要处理的消息的哈希值计算完成时,哈希值计算电路100清除标志以指示“不开始哈希值计算”。
[0146] “消息标识符”区域中的信息是用于通过区域中的多个预定位来识别处理请求中的目标消息的标识符。例如,在消息的类型的数量为2时,如果预定位是“1”,则其指示“处理消息A”;如果预定位是“0”,则其指示“处理消息B”。
[0147] “块的数量”区域中的信息通过预定位来指示处理请求中的块的数量。例如,在预定位指示的值指示要处理的块的数量时,如果预定位的值是“0x004”,则要处理的块的数量为4。
[0148] “哈希初始值”区域中的信息指示处理请求中的内部状态值的初始值(哈希初始值)。在SHA-1的情况下,由于内部状态值包括5个32位的数据,因此该区域中的预定160位指示哈希初始值。注意,CPU 201可以将SHA-1算法的内部状态值的初始值写入到“哈希初始值”区域,或者可以写入与哈希中间值对应的值,以重新开始并处理中断的哈希值计算。
[0149] “处理继续”区域中的信息通过该区域中的预定位的“1”或“0”指示将使用哪个值作为处理请求中的在哈希值计算中所使用的内部状态值的初始值:
[0150] ·存储在“哈希初始值”区域中的“使用内部状态值的初始值”;或[0151] ·存储在哈希值计算电路100的哈希中间值存储单元中的“使用哈希中间值”。
[0152] 注意,CPU 201针对与一个消息对应的各个哈希处理请求在“消息标识符”、“块的数量”、“哈希初始值”和“处理继续”区域中写入预定值。
[0153] (消息示例)
[0154] 图5示出了在本实施例中进行哈希值计算的两个消息,即消息A(第一消息)和消息B(第二消息)。在SHA-1中,针对各个512位的块进行哈希值计算。在这种情况下,将消息A从其头位置开始分割为512位的块A0、A1、A2、…、A51、A52、A53、A54、…、A93、A94和A95。对于最后的块A95,对少于512位的部分附加填充数据。同样地,将消息B从其头位置开始分割为512位的块B0、B1、B2和B3,并将填充数据附加到块B3。这些消息存储在存储器202中。
[0155] (消息传输的概要)
[0156] 图6示出在本实施例中进行哈希值计算的消息A和消息B从存储器202传输到哈希值计算电路100时的传输顺序。本实施例将例示CPU 201控制哈希值计算电路100在消息A的中间优先处理消息B的情况。即,DMAC 203将形成消息A的块A0、A1、A2、…、A51和A52依次传输到哈希值计算电路100,接着将形成消息B的块B0、B1、B2和B3依次传输到哈希值计算电路100。之后,DMAC 203将形成消息A的块A53、A54、…、A93、A94和A95传输到哈希值计算电路100。
[0157] 在本实施例中,预先决定CPU 201发出中断消息A的哈希值计算并开始消息B的哈希值计算的处理请求。此外,CPU 201向哈希值计算电路100发出作为两个消息、即包括块A0到A52的消息和包括块A53到A95的消息的消息A的处理请求。
[0158] (哈希值计算)
[0159] 在本实施例中,哈希值计算电路100根据图3所示的序列,针对具有在ST001中由CPU 201在寄存器116中设置的块的数量的消息,在ST002中执行块的数量的哈希值计算,而不中断这些哈希值计算。在ST003中,哈希值计算电路100输出哈希值计算结果的哈希值。在完成针对该消息的哈希值计算时,在CPU 201在哈希值计算电路100的寄存器116中设置了针对下一个消息的处理请求时,哈希值计算电路100执行针对下一个消息的在寄存器116中设置的块的数量的哈希值计算。
[0160] 图7是示出在以图6所示的顺序输入三个消息(A0到A52、B0到B3以及A53到A95)时,本实施例的哈希值计算的操作序列的流程图。根据图3中的ST001和ST002中的操作序列,依次针对各消息执行哈希值计算。
[0161] 在ST101中,CPU 201在哈希值计算电路100的寄存器116中设置针对第一消息(A0到A52)的处理请求。
[0162] 在ST102中,哈希值计算电路100通过向DMAC 203发出读取请求来读取第一消息(A0到A52)的数据,并执行针对该消息的哈希值计算。
[0163] 在ST103中,哈希值计算电路100通过向DMAC 203发出写入请求来输出针对第一消息(A0到A52)的哈希值。
[0164] 在ST104中,CPU 201在哈希值计算电路100的寄存器116中设置针对第二消息(B0到B3)的处理请求。
[0165] 在ST105中,哈希值计算电路100通过向DMAC 203发出读取请求来读取第二消息(B0到B3)的数据,并执行针对该消息的哈希值计算。
[0166] 在ST106中,哈希值计算电路100通过向DMAC 203发出写入请求来输出针对第二消息(B0到B3)的哈希值。
[0167] 在ST107中,CPU 201在哈希值计算电路100的寄存器116中设置针对第三消息(A53到A95)的处理请求。
[0168] 在ST108中,哈希值计算电路100通过向DMAC 203发出读取请求来读取第三消息(A53到A95)的数据,并执行针对该消息的哈希值计算。
[0169] 在ST109中,哈希值计算电路100通过向DMAC 203发出写入请求来输出针对第三消息(A53到A95)的哈希值。
[0170] (哈希值计算的详细情况)
[0171] 图8A至图10E是示出针对各个步骤的哈希值计算的操作的时序图。注意,TXXX代表基于作为分步处理和DMA传输处理的基本单位的操作时钟周期T的时间段。在本实施例中,根据具有周期T的操作时钟同步设计哈希值计算电路100。例如,消息A的每个512位的块的数据对应于16个、即第0到第15个32位的扩展消息W0到W15。例如,将消息A的第0个块描述为A0,将块A0的第0个和第1个32位的数据描述为A0_W00-W01,将块A0的最初的16个扩展消息描述为EA0_W00-W15。同样地,将块A0的第0个步骤的内部状态值描述为SA_000,将块A0的哈希中间值描述为HA0。以下将描述针对各个单位时间段的各个单元的操作。
[0172] 在T000中,哈希值计算控制器113将DMA写入请求信号122断言到DMAC 203以写入数据。在T001中,DMAC 203返回DMA写入确认信号123,并将从哈希值输出单元114作为DMA输出数据116输出的哈希值(在这种情况下为HAX)的最初的64位传输到存储器202。之后,从T002到T005,DMAC 203将哈希值HAX传输到存储器202。在该区间期间,哈希值计算控制器113对DMAC 203断言DMA写入确认信号123的次数进行计数。在这种情况下,哈希值计算控制器113确认在T005以前断言了DMA写入确认信号123三次,并在T006中取消断言(deassert)DMA写入请求信号122。
[0173] 在T006和T007中,CPU 201经由总线205和总线信号117设置寄存器116。在这种情况下,CPU 201在图4中的寄存器116的“作业开始”区域中设置“开始哈希值计算”的标志,并且在“处理继续”区域中设置“使用内部状态值的初始值”的标志。另外,CPU 201在“消息标识符”区域中设置“处理消息A”的标志,在“块的数量”区域中设置“针对53个块进行处理”的标志,并且在“哈希初始值”区域中设置“SHA-1算法的初始值”。
[0174] 在T008中,响应于在寄存器116的“作业开始”区域中设置“开始哈希值计算”的标志,哈希值计算控制器113将DMA读取请求信号122断言到DMAC 203以读取数据。在T009中,DMAC 203返回DMA读取确认信号123。同时,DMAC 203将存储在存储器202中的消息A的第一个块A0的最初的64位(A0_W00-W01)传输到哈希值计算电路100。
[0175] 在T010中,消息存储单元101存储64位的数据A0_W00-W01。之后,从T011到T023,DMAC 203将块A0从存储器202传输到哈希值计算电路100。在该区间期间,哈希值计算控制器113对DMAC 203断言DMA确认信号123的次数进行计数。哈希值计算控制器113确认在T023以前断言了DMA确认信号123八次,并在T024中取消断言DMA读取请求信号122。在寄存器116的“作业开始”区域中设置了“开始哈希值计算”的标志的状态下,块计数器137根据DMA读取请求信号122的取消断言的次数对要处理的块的数量进行计数。
设块计数器137的计数器值为BC,在这种情况下BC=1。此外,在T024中,消息存储单元
101存储块A0。
[0176] 在T025中,哈希值计算控制器113断言块加载信号124。
[0177] 在T026中,扩展消息存储单元102检测块加载信号124的断言,并加载存储在消息存储单元101中的块A0。此时,扩展消息存储单元102通过将块A0分割为16个32位的数据EA0_W00到EA0_W15来存储块A0。在块加载信号124的断言后,步骤计数器138使用针对各个基本处理时间段T的时钟(未示出)来对步骤的数量进行计数。设步骤计数器138的计数器值为SC,在这种情况下SC=1。之后,步骤计数器138针对作为一个分步处理的单位的基本处理时间段T的各时钟进行向上计数,直到计数器值SC达到80。响应于将存储在消息存储单元101中的数据加载到扩展消息存储单元102,哈希值计算控制器113断言DMA读取请求信号122以读取下一个块的数据。
[0178] 在T026中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA0_W00到EA0_W15),并计算32位的数据EA0_W16。
[0179] 在T026中,哈希值计算控制器113响应于在寄存器116的“处理继续”区域中设置的“使用内部状态值的初始值”的标志和步骤计数器138的计数器值=1,断言哈希初始值选择信号X 127。在T026中,哈希值计算控制器113响应于步骤计数器138的计数器值=1来断言哈希中间值选择信号125。
[0180] 在T026中,由于断言了哈希初始值选择信号X 127,因此选择器112输出作为其自身的输入的哈希中间值119和哈希初始值126中的哈希初始值126。选择器105响应于哈希中间值选择信号125的断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的来自选择器112的输出。结果,选择器105输出哈希初始值126。
[0181] 在T026中,分步处理器104输入存储在扩展消息存储单元102中的数据EA0_W00和哈希初始值126,并通过对它们应用SHA-1的步骤0的处理来计算内部状态值SA0_00。
[0182] 在T027中,步骤计数器138将其计数器值SC向上计数到2。
[0183] 在T027中,扩展消息存储单元102存储数据EA0_W01到EA0_W15,和在T026中消息扩展处理器103计算的数据EA0_W16。
[0184] 在T027中,内部状态值存储单元106存储在T026中计算的内部状态值SA0_00。
[0185] 在T027中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA0_W01到EA0_W16),并计算32位的数据EA0_W17。
[0186] 在T027中,哈希值计算控制器113响应于步骤计数器138的计数器值≠1,取消断言哈希初始值选择信号X 127和哈希中间值选择信号125。
[0187] 在T027中,选择器105响应于哈希中间值选择信号125的取消断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的内部状态值134。结果,选择器105输出内部状态值SA000。
[0188] 在T027中,分步处理器104输入扩展消息EA0_W01和内部状态值SA0_00,并通过对它们应用SHA-1的步骤1的处理来计算内部状态值SA0_01。
[0189] 在T027中,DMAC 203返回DMA读取确认信号123,并将64位的数据A1_W00-W01从存储器202传输到哈希值计算电路100。
[0190] 在T028中,步骤计数器138将其计数器值SC向上计数到3。
[0191] 在T028中,扩展消息存储单元102存储数据EA0_W02到EA0_W16和在T027中消息扩展处理器103计算的数据EA0_W17。
[0192] 在T028中,内部状态值存储单元106存储在T027中计算的内部状态值SA0_01。
[0193] 在T028中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA0_W02到EA0_W17),并计算32位的数据EA0_W18。
[0194] 在T028中,选择器105响应于哈希中间值选择信号125的取消断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的内部状态值134。结果,选择器105输出内部状态值SA0_01。
[0195] 在T028中,分步处理器104输入存储在扩展消息存储单元102中的数据EA0_W02和内部状态值SA0_01,并通过对它们应用SHA-1的步骤2的处理来计算内部状态值SA0_02。
[0196] 在T028中,消息存储单元101存储64位的数据A1_W00-W01。
[0197] 之后,从T029到T041,DMAC 203将块A1从存储器202 DMA传输到哈希值计算电路100。在该区间期间,哈希值计算控制器113对DMAC203断言DMA读取确认信号123的次数进行计数。哈希值计算控制器113确认在T041以前DMAC 203断言了DMA确认信号123八次,并在T042中取消断言DMA读取请求信号122。在T042中,消息存储单元101存储块A1。响应于DMA读取请求信号122的取消断言,块计数器137将其计数器值BC向上计数到2。
[0198] 在从T029到T105的区间期间,哈希值计算电路100执行SHA-1的步骤2到步骤79的处理。在该区间期间,步骤计数器138将计数器值SC从3向上计数到80。结果,在T106中,内部状态值存储单元106存储内部状态值SA0_79作为SHA-1的步骤79的处理结果。
[0199] 由于在T105之前计数了预定80个步骤,因此在T106中步骤计数器138将计数器值SC清空为0。
[0200] 在T106中,哈希值计算控制器113响应于以下内容,来断言哈希初始值选择信号Y 128:
[0201] ·在寄存器116的“处理继续”区域中设置“使用内部状态值的初始值”的标志;以及
[0202] ·在T105中,步骤计数器138的计数器值SC=80。
[0203] 在T106中,选择器108响应于哈希初始值选择信号Y 128的断言,输出作为其自身的输入的哈希初始值126和哈希中间值119中的哈希初始值126。
[0204] 在T106中,加法处理器107输入内部状态值134(SA0_79)和哈希初始值126,并计算哈希中间值HA0。
[0205] 在T106中,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言哈希中间值A加载信号129。此外,哈希值计算控制器113断言块加载信号124。
[0206] 哈希中间值存储单元A 109检测哈希中间值A加载信号129的断言,并在T107中存储哈希中间值HA0。在T107中,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言消息A选择信号131。接着,选择器111将来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元A 109的输出(HA0)输出到哈希值输出单元114。
[0207] 扩展消息存储单元102检测块加载信号124的断言,并在T107中加载存储在消息存储单元101中的块A1。此时,扩展消息存储单元102通过将块A1分割为16个32位的数据EA1_W00到EA1_W15来存储块A1。哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的数据的存储,断言DMA读取请求信号122以读取下一个块的数据。
[0208] 在T107中,哈希值计算控制器113响应于块A0的哈希值计算的完成,取消断言哈希初始值选择信号Y 128。
[0209] 在T107中,步骤计数器138响应于块加载信号124的断言,开始将其计数器值SC向上计数到1。
[0210] 在T107中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA1_W00到EA1_W15),并计算32位的数据EA1_W16。
[0211] 由于正在进行块A1的处理,因此在T107中哈希值计算控制器113不断言哈希初始值选择信号X 127。
[0212] 在T107中,选择器112响应于哈希初始值选择信号X 127的取消断言,输出作为其自身的输入的哈希中间值119和哈希初始值126中的哈希中间值119(HA0)。此外,选择器105响应于哈希中间值选择信号125的断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的来自选择器112的输出。结果,选择器105输出哈希中间值119(HA0)。
[0213] 在T107中,分步处理器104输入存储在扩展消息存储单元102中的数据EA1_W00和哈希中间值119(HA0),并通过对它们应用SHA-1的步骤0的处理来计算内部状态值SA1_00。
[0214] 之后,与从T027到T041的块A1的DMA传输相同,从T108到T122,DMA传输块A2。在T123中,哈希值计算控制器113取消断言针对块A1的DMA读取请求信号122。响应于DMA读取请求信号122的取消断言,块计数器137将其计数器值BC向上计数到3。与从T027到T105的针对块A0的SHA-1的步骤1到步骤79的处理相同,从T108到T186,对块A1应用SHA-1的步骤1到步骤79的处理。在该区间期间,步骤计数器138将计数器值SC从2向上计数到80。结果,在T187中,内部状态值存储单元106存储内部状态值SA1_79作为SHA-1的步骤79的处理结果。
[0215] 在T187中,由于正在进行块A1的处理,因此哈希值计算控制器113不断言哈希初始值选择信号Y 128。
[0216] 在T187中,选择器108响应于哈希初始值选择信号Y 128的取消断言,输出作为其自身的输入的哈希初始值126和哈希中间值119(HA0)中的哈希中间值119(HA0)。
[0217] 在T187中,加法处理器107输入内部状态值134(SA1_79)和哈希中间值119(HA0),并计算哈希中间值HA1。
[0218] 在T187中,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言哈希中间值A加载信号129。哈希中间值存储单元A 109检测哈希中间值A加载信号129的断言,并在T188中存储哈希中间值HA1。在这种情况下,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言消息A选择信号131。接着,选择器111将来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元A 109的输出(HA1)输出到哈希值输出单元114。
[0219] 之后,响应于寄存器116的“消息标识符”区域指示“处理消息A”并且“块的数量”区域指示“针对53个块进行处理”,DMA传输块A3到A52。此外,针对块A2到A52执行哈希值计算。
[0220] (以块为单位的操作)
[0221] 图11A和图11B(以下总称为图11)是示出根据本实施例的针对各个块的哈希值计算的操作的时序图。注意,TBXXX代表针对81个时间段T的时间段,每个时间段用作块处理的基本单位。上述T026到T106与TB0对应,T107到T187与TB1对应。但是,与执行针对各消息的哈希值计算的完成时的DMA写传输和下一个消息的最初的块的DMA读传输的时间段对应的TB53和TB58中的各个与针对26个时间段T的时间段对应。A0(t)表示输入消息A0_W00至A0_W15,EA0(t)表示扩展消息EA0_W00到EA0_W79,SA0(t)表示内部状态值SA0_00到SA0_79。注意,t代表步骤的数量,XX(t)的值根据步骤的数量t而变化。
[0222] 以下将描述各个块处理时间段的各个单元的操作。注意,还将描述一些分步处理时间段的详细操作。
[0223] 如上所述,在TB0中,DMAC 203将块A1从存储器202 DMA传输到哈希值计算电路100。在块A1的DMA传输完成时,块计数器137将其计数器值BC向上计数到2。在TB1中,DMAC 203将块A2从存储器202DMA传输到哈希值计算电路100。在块A2的DMA传输完成时,块计数器137将其计数器值BC向上计数到3。
[0224] 如上所述,在TB0中,哈希值计算电路100输入块A0作为消息A的第一个块,并计算扩展消息EA0(t)和内部状态值SA0(t)。在更新SA(t)的分步处理中,针对各步骤t使用第t个扩展消息和第(t-1)个内部状态值来更新内部状态值,并在步骤79中计算内部状态值SA0_79。最终,将内部状态值SA0_79与哈希初始值相加,以计算哈希中间值HA0。在TB1中,哈希中间值存储单元A 109存储哈希中间值HA0。哈希值计算电路100输入块A1,计算扩展消息EA1(t)和内部状态值SA1(t),并在步骤79中计算内部状态值SA1_79。最终,将内部状态值SA1_79与哈希中间值HA0相加,以计算哈希中间值HA1。
[0225] 之后,在TB2到TB51中,DMAC 203将块A3到A52从存储器202DMA传输到哈希值计算电路100。此时,将块计数器137的值从4向上计数到53。在TB2到TB52中,哈希值计算电路100执行块A2到A52的哈希值计算。结果,在TB53中,哈希中间值存储单元A 109保持哈希中间值HA52,并且哈希值输出单元114输出哈希中间值HA52。
[0226] 在这种情况下,满足存储在寄存器116的“消息标识符”区域和“块的数量”区域中的“处理消息A”和“针对53个块进行处理”的要求。因此,在TB53中,哈希值计算控制器113清除存储在寄存器116的“作业开始”区域中的“开始哈希值计算”的标志和存储在“处理继续”区域中的“使用内部状态值的初始值”的标志。此外,在TB53中,哈希值计算控制器113将DMA写入请求信号122断言到DMAC 203。DMAC 203返回DMA写入确认信号123,并将从哈希值输出单元114输出的哈希中间值HA52传输到存储器202。哈希值计算控制器
113对DMAC 203断言DMA写入确认信号123的次数进行计数。哈希值计算控制器113确认DMAC 203断言了DMA写入确认信号123三次,并取消断言DMA写入请求信号122。
[0227] 在TB53中,DMAC 203检测来自哈希值计算电路100的DMA写入请求信号122的取消断言,并断言中断信号206,以将中断通知给中断控制器204。中断控制器204使用中断信号(未示出)将哈希中间值HA52在存储器202中的存储通知给CPU 201。
[0228] 在TB53中,CPU 201根据来自DMAC 203的中断,检测到“从消息的头开始”“针对53个块”对“消息A”的处理完成。接着,CPU 201经由总线205和总线信号117设置寄存器116。在这种情况下,CPU 201在图4所示的寄存器116的“作业开始”区域中设置“开始哈希值计算”的标志,还在“处理继续”区域中设置“使用内部状态值的初始值”的标志。另外,CPU 201在“消息标识符”区域中设置“处理消息B”的标志,在“块的数量”区域中设置“针对4个块进行处理”的标志,并且在“哈希初始值”区域中设置“SHA-1算法的初始值”。
[0229] 响应于在寄存器116的“作业开始”区域中设置的“开始哈希值计算”的标志,在TB53中哈希值计算控制器113将DMA读取请求信号122断言到DMAC 203,以读取数据。DMAC 203返回DMA读取确认信号123,并将消息B的第一个块B0 DMA传输到哈希值计算电路100。接着,消息存储单元101存储块B0。块计数器137将其计数器值BC向上计数到1。
[0230] 在TB54中,DMA传输块B1,并针对块B0执行哈希值计算。以下将描述详细情况。
[0231] 在T4344中,哈希值计算控制器113断言块加载信号124。在T4345中,扩展消息存储单元102检测块加载信号124的断言,并加载存储在消息存储单元101中的块B0。此时,扩展消息存储单元102通过将块B0分割为16个32位的数据EB0_W00到EB0_W15来存储块B0。步骤计数器138开始将其计数器值SC向上计数到1。哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的数据的存储,断言DMA读取请求信号122,以读取下一个块的数据。
[0232] 在T4345中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EB0_W00到EB0_W15),并计算32位的数据EB0_W16。
[0233] 在T4345中,哈希值计算控制器113响应于以下内容,断言哈希初始值选择信号X127和哈希中间值选择信号125:
[0234] ·在寄存器116的“处理继续”区域中设置的“使用内部状态值的初始值”的标志;和
[0235] ·步骤计数器138的计数器值SC=1。
[0236] 在T4345中,选择器112响应于哈希初始值选择信号X 127的断言,输出作为其自身的输入的哈希中间值119和哈希初始值126中的哈希初始值126。此外,选择器105响应于哈希中间值选择信号125的断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的来自选择器112的输出。结果,选择器105输出哈希初始值126。
[0237] 在T4345中,分步处理器104输入存储在扩展消息存储单元102中的数据EB0_W00和哈希初始值126,并通过对它们应用SHA-1的步骤0的处理来计算内部状态值SB0_00。
[0238] 在T4346中,步骤计数器138将其计数器值SC向上计数到2。
[0239] 在T4346中,扩展消息存储单元102存储数据EB0_W01到EB0_W15,和消息扩展处理器103计算的数据EB0_W16。
[0240] 在T4346中,内部状态值存储单元106存储内部状态值SB0_00。
[0241] 在T4346中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EB0_W01到EB0_W16),并计算32位的数据EB0_W17。
[0242] 在T4346中,哈希值计算控制器113响应于步骤计数器138的计数器值SC≠1,取消断言哈希初始值选择信号X 127和哈希中间值选择信号125。
[0243] 在T4346中,选择器105响应于哈希中间值选择信号125的取消断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的内部状态值134。结果,选择器105输出内部状态值SB000。
[0244] 在T4346中,分步处理器104输入扩展消息EB0_W01和内部状态值SB0_00,并通过对它们应用SHA-1的步骤1的处理来计算内部状态值SB0_01。接着,哈希值计算控制器113将步骤计数器138向上计数。此时,步骤计数器138的值为2。
[0245] 在T4346中,DMAC 203返回DMA读取确认信号123,并将64位的数据B1_W00-W01从存储器202传输到哈希值计算电路100。
[0246] 在T4347中,步骤计数器138将其计数器值SC向上计数到3。
[0247] 在T4347中,扩展消息存储单元102存储数据EB0_W02到EB0_W16和消息扩展处理器103计算的数据EB0_W17。
[0248] 在T4347中,内部状态值存储单元106存储内部状态值SB0_01。
[0249] 在T4347中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EB0_W02到EB0_W17),并计算32位的数据EB0_W18。
[0250] 在T4347中,选择器105响应于哈希中间值选择信号125的取消断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的内部状态值134。结果,选择器105输出内部状态值SB0_01。
[0251] 在T4347中,分步处理器104输入扩展消息EB0_W02和内部状态值SB0_01,并通过对它们应用SHA-1的步骤2的处理来计算内部状态值SB0_02。
[0252] 在T4347中,消息存储单元101存储DMAC 203 DMA传输的64位的数据B1_W00-W01。
[0253] 之后,从T4348到T4360,DMAC 203连续执行块B1的从存储器202到哈希值计算电路100的DMA传输。在该区间期间,哈希值计算控制器113对DMAC 203断言DMA读取确认信号123的次数进行计数。在哈希值计算控制器113确认DMAC 203断言了DMA确认信号123八次后,其取消断言DMA读取请求信号122。接着,消息存储单元101存储块B1。块计数器137将其计数器值BC向上计数到2。
[0254] 从T4348到T4424,哈希值计算电路100执行SHA-1的步骤3到步骤79的处理。在该区间期间,步骤计数器138在各个分步处理的开始从4向上计数到80。结果,在T4425中,内部状态值存储单元106存储内部状态值SB0_79作为SHA-1的步骤79的处理结果。
[0255] 在T4425中,哈希值计算控制器113响应于以下内容,断言哈希初始值选择信号Y128:
[0256] ·在寄存器116的“处理继续”区域中设置的“使用内部状态值的初始值”的标志;和
[0257] ·在T4424中,步骤计数器138的计数器值SC=80。
[0258] 在T4425中,选择器108响应于哈希初始值选择信号Y 128的断言,输出作为其自身的输入的哈希初始值126和哈希中间值119中的哈希初始值126。
[0259] 在T4425中,加法处理器107输入内部状态值134(SB0_79)和哈希初始值126,并计算哈希中间值HB0。
[0260] 在T4425中,由于寄存器116的“消息标识符”区域指示“处理消息B”,因此哈希值计算控制器113断言哈希中间值B加载信号130。哈希值计算控制器113还断言块加载信号124。在TB55时间段期间的T4426中,哈希中间值存储单元B 110存储哈希中间值HB0。此外,由于寄存器116的“消息标识符”区域指示“处理消息B”,因此哈希值计算控制器113不断言消息A选择信号131。接着,选择器111将来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元B 110的输出(HB0)输出到哈希值输出单元114。
[0261] 在T4426中,扩展消息存储单元102检测块加载信号124的断言,并加载存储在消息存储单元101中的块B1。此时,扩展消息存储单元102通过将块B1分割为16个32位的数据EB1_W00到EB1_W15来存储块B1。哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的数据的存储,断言DMA读取请求信号122,以读取下一个块的数据。
[0262] 在T4426中,哈希值计算控制器113响应于块B0的哈希值计算的完成,取消断言哈希初始值选择信号Y 128。
[0263] 如上所述,在TB55中,哈希中间值存储单元A 109存储哈希中间值HA52,并且哈希中间值存储单元B 110存储哈希中间值HB0。
[0264] 使用在TB55中存储在哈希中间值存储单元B 110中的哈希中间值HB0来进行针对块B1的哈希值计算。
[0265] 之后,在TB55和TB56中,DMAC 203将块B2和B3从存储器202DMA传输到哈希值计算电路100。此时,块计数器137将计数器值BC从3向上计数到4。在TB55到TB57中,哈希值计算电路100执行针对块B1到B3的哈希值计算。在该区间期间,由于寄存器116的“消息标识符”区域指示“处理消息B”,因此哈希值计算控制器113不断言哈希中间值A加载信号129,而根据需要断言哈希中间值B加载信号130。由于该原因,哈希中间值存储单元A 109不存储消息B的任何哈希中间值,而哈希中间值存储单元B 110存储消息B的哈希中间值。由于寄存器116的“消息标识符”区域指示“处理消息B”,因此哈希值计算控制器113不断言消息A选择信号131。由于该原因,选择器111输出来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元B110的输出。其它处理与针对块A1到A3的处理相同。
[0266] 结果,在TB55到TB57中,计算哈希中间值HB1到HB3。在TB58中,哈希中间值存储单元A 109存储针对消息A的块A0到A52的哈希中间值HA52,并且哈希中间值存储单元B 110存储针对消息B的块B0到B3的哈希中间值HB3。如图5所示,由于消息B包括块B0到B3,因此输出哈希中间值HB3作为消息B的哈希值HB。在TB58中,由于寄存器116的“消息标识符”区域指示“处理消息B”,因此哈希值计算控制器113不断言消息A选择信号131。由于该原因,选择器111将作为其自身的输入的来自哈希中间值存储单元A 109的输出(HA52)和来自哈希中间值存储单元B 110的输出(HB)中的来自哈希中间值存储单元B
110的输出(HB)输出到哈希值输出单元114。
[0267] 在这种状态下,满足存储在寄存器116的“消息标识符”和“块的数量”区域中的“处理消息B”和“针对4个块进行处理”的要求。接着,在TB58中,哈希值计算控制器113清除存储在寄存器116的“作业开始”区域中的“开始哈希值计算”的标志和存储在“处理继续”区域中的“使用内部状态值的初始值”的标志。此外,在TB58中,哈希值计算控制器113将DMA写入请求信号122断言到DMAC 203。DMAC 203返回DMA写入确认信号123,并将来自哈希值输出单元114的哈希值HB传输到存储器202。哈希值计算控制器113对DMAC
203断言DMA写入确认信号123的次数进行计数。哈希值计算控制器113确认DMAC 203断言了DMA写入确认信号123三次,并取消断言DMA写入请求信号122。
[0268] 在TB58中,DMAC 203检测哈希值计算电路100对DMA写入请求信号122的取消断言,断言中断信号206,并将中断通知给中断控制器204。接着,中断控制器204使用中断信号(未示出)将哈希值HB在存储器202中的存储通知给CPU 201。
[0269] 在TB58中,CPU 201根据来自DMAC 203的中断,检测到“使用内部状态值的初始值”“针对4个块”对“消息B”对处理完成。接着,CPU201经由总线205和总线信号117设置寄存器116。在这种情况下,CPU 201在图4所示的寄存器116的“作业开始”区域中设置“开始哈希值计算”的标志,并且在“处理继续”区域中设置“使用哈希中间值”的标志。另外,CPU 201在“消息标识符”区域中设置“处理消息A”的标志,并且在“块的数量”区域中设置“针对43个块进行处理”的标志。此时,哈希值计算控制器113将块计数器137清零。
[0270] 响应于在寄存器116的“作业开始”区域中设置的“开始哈希值计算”的标志,在TB58中,哈希值计算控制器113将DMA读取请求信号122断言到DMAC 203,以读取数据。DMAC 203返回DMA读取确认信号123,并将消息A的块A53 DMA传输到哈希值计算电路100。
消息存储单元101存储块A53。接着,块计数器137将其计数器值BC向上计数到1。
[0271] 在TB59中,DMA传输块A54,并针对块A53执行哈希值计算。以下将描述详细情况。
[0272] 在T4694中,哈希值计算控制器113断言块加载信号124。在T4695中,扩展消息存储单元102检测块加载信号124的断言,并加载存储在消息存储单元101中的块A53。此时,扩展消息存储单元102通过将块A53分割为16个32位的数据EA53_W00到EA53_W15来存储块A53。哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的数据的存储,断言DMA读取请求信号122,以读取下一个块的数据。
[0273] 在T4695中,步骤计数器138将其计数器值SC向上计数到1。
[0274] 在T4695中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA53_W00到EA53_W15),并计算32位的数据EA53_W16。
[0275] 哈希值计算控制器113响应于在寄存器116的“处理继续”区域中设置的“使用哈希中间值”的标志,取消断言哈希初始值选择信号X 127。
[0276] 在T4695中,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言消息A选择信号131。由此,选择器111输出作为其自身的输入的来自哈希中间值存储单元A 109的输出(HA52)和来自哈希中间值存储单元B 110的输出(HB)中的来自哈希中间值存储单元A 109的输出(HA52)。选择器112响应于哈希初始值选择信号X 127的取消断言,输出作为其自身的输入的哈希中间值119(HA52)和哈希初始值126中的哈希中间值119(HA52)。选择器105响应于哈希中间值选择信号125的断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的来自选择器112的输出。结果,选择器105输出哈希中间值119(HA52)。
[0277] 在T4695中,分步处理器104输入存储在扩展消息存储单元102中的数据EA53_W00和哈希中间值HA52,并通过对它们应用SHA-1的步骤0的处理来计算内部状态值SA53_00。
[0278] 在T4696中,步骤计数器138将其计数器值SC向上计数到2。
[0279] 在T4696中,扩展消息存储单元102存储数据EA53_W01到EA53_W15,和消息扩展处理器103计算的数据EA53_W16。
[0280] 在T4696中,内部状态值存储单元106存储内部状态值SA53_00。
[0281] 在T4696中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA53_W01到EA53_W16),并计算32位的数据EA53_W17。
[0282] 在T4696中,由于正在进行SHA-1的步骤1的处理,因此哈希值计算控制器113取消断言哈希初始值选择信号X 127。
[0283] 在T4696中,选择器105响应于哈希中间值选择信号125的取消断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的内部状态值134。结果,选择器105输出内部状态值SA53_00。
[0284] 在T4696中,分步处理器104输入扩展消息EA53_W01和内部状态值SA53_00,并通过对它们应用SHA-1的步骤1的处理来计算内部状态值SA53_01。
[0285] 在T4696中,DMAC 203返回DMA读取确认信号123,并将64位的数据A54_W00-W01从存储器202传输到哈希值计算电路100。在T4697中,步骤计数器138将其计数器值SC向上计数到3。
[0286] 在T4697中,扩展消息存储单元102存储数据EA53_W02到EA53_W16和消息扩展处理器103计算的数据EA53_W17。
[0287] 在T4697中,内部状态值存储单元106存储内部状态值SA53_01。
[0288] 在T4697中,消息扩展处理器103输入存储在扩展消息存储单元102中的扩展消息133(EA53_W02到EA53_W17),并计算32位的数据EA53_W18。
[0289] 在T4697中,选择器105响应于哈希中间值选择信号125的取消断言,输出作为其自身的输入的来自选择器112的输出和内部状态值134中的内部状态值134。结果,选择器105输出内部状态值SA53_01。
[0290] 在T4697中,分步处理器104输入扩展消息EA53_W02和内部状态值SA53_01,并通过对它们应用SHA-1的步骤2的处理来计算内部状态值SA53_02。
[0291] 在T4697中,消息存储单元101存储64位的数据A54_W00-W01。
[0292] 之后,从T4698到T4710,DMAC 203连续执行块A54的从存储器202到哈希值计算电路100的DMA传输。在该区间期间,哈希值计算控制器113对DMAC 203断言DMA读取确认信号123的次数进行计数。在T4711中,在哈希值计算控制器113确认DMAC 203断言了DMA确认信号123八次后,其取消断言DMA读取请求信号122。接着,消息存储单元101存储块A54。块计数器137将其计数器值BC向上计数到2。
[0293] 从T4697到T4774,哈希值计算电路100执行SHA-1的步骤2到步骤79的处理。在该区间期间,在各个分步处理开始时,步骤计数器138将其计数器值SC从3向上计数到
80。结果,在T4775中,内部状态值存储单元106存储内部状态值SA53_79作为SHA-1的步骤79的处理结果。
[0294] 在T4775中,哈希值计算控制器113响应于在寄存器116的“处理继续”区域中设置的“使用哈希中间值”的标志,取消断言哈希初始值选择信号Y 128。
[0295] 在T4775中,选择器108响应于哈希初始值选择信号Y 128的取消断言,输出作为其自身的输入的哈希初始值126和哈希中间值119中的哈希中间值119。
[0296] 在T4775中,加法处理器107输入内部状态值134(SA53_79)和哈希中间值119(HA52),并计算哈希中间值HA53。
[0297] 在T4775中,哈希值计算控制器113断言块加载信号124。
[0298] 在T4775中,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言哈希中间值A加载信号129。在TB60时间段期间的T4776中,哈希中间值存储单元A 109存储哈希中间值HA53。此外,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言消息A选择信号131。接着,选择器111将来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B110的输出中的来自哈希中间值存储单元A 109的输出(HA53)输出到哈希值输出单元114。
[0299] 在T4776中,扩展消息存储单元102检测到块加载信号124的断言,并加载存储在消息存储单元101中的块A54。此时,扩展消息存储单元102通过将块A54分割为16个32位的数据EA54_W00到EA54_W15来存储块A54。哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的数据的存储,断言DMA读取请求信号122,以读取下一个块的数据。
[0300] 在T4776中,哈希值计算控制器113响应于块A53的哈希值计算的完成,取消断言哈希初始值选择信号Y 128。
[0301] 如上所述,在TB60中,哈希中间值存储单元A 109存储哈希中间值HA53,并且哈希中间值存储单元B 110存储哈希值HB。
[0302] 之后,从TB60到TB100,DMAC 203将块A55到A95从存储器202DMA传输到哈希值计算电路100。此时,块计数器137将计数器值BC从3向上计数到43。从TB60到TB101,哈希值计算电路100执行针对块A54到A95的哈希值计算。在该区间期间,由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113不断言哈希中间值B加载信号130,而根据需要断言哈希中间值A加载信号129。由于该原因,哈希中间值存储单元B 110不存储消息A的任何哈希中间值,而哈希中间值存储单元A 109存储消息A的哈希中间值。由于寄存器116的“消息标识符”区域指示“处理消息A”,因此哈希值计算控制器113断言消息A选择信号131。由于该原因,选择器111输出来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元A109的输出。其它处理与针对其它块的处理相同。
[0303] 结果,在TB102中,哈希中间值存储单元A 109针对消息A的块A0到A95存储哈希中间值HA95。如图5所示,由于消息A包括块A0到A95,因此输出哈希中间值HA95作为消息A的哈希值HA。在TB 102中,哈希值计算控制器113断言消息A选择信号131。由此,选择器111将作为其自身的输入的来自哈希中间值存储单元A 109的输出(HA)和来自哈希中间值存储单元B 110的输出(HB)中的来自哈希中间值存储单元A 109的输出(HA)输出到哈希值输出单元114。
[0304] 在这种状态下,满足存储在寄存器116的“消息标识符”和“块的数量”区域中的“处理消息A”和“针对43个块进行处理”的要求。因此,在TB102中,哈希值计算控制器113清除存储在寄存器116的“作业开始”区域中的“开始哈希值计算”的标志和存储在“处理继续”区域中的“使用哈希中间值”的标志。此外,在TB102中,哈希值计算控制器113将DMA写入请求信号122断言到DMAC 203。DMAC 203返回DMA写入确认信号123,并将哈希值HA从哈希值输出单元114传输到存储器202。哈希值计算控制器113对DMAC 203断言DMA写入确认信号123的次数进行计数。哈希值计算控制器113确认DMAC 203断言了DMA写入确认信号123三次,并取消断言DMA写入请求信号122。
[0305] 在TB102中,DMAC 203检测到哈希值计算电路100进行的DMA写入请求信号122的取消断言,断言中断信号206,并将中断通知给中断控制器204。接着,中断控制器204使用中断信号(未示出)将哈希值HA在存储器202中的存储通知给CPU 201。
[0306] 如上所述,根据本实施例,CPU依次请求哈希值计算电路执行针对第一、第二和第三消息的哈希值计算,使得在消息A的中间先处理消息B。注意,第一消息包括块A0到A52,第二消息包括块B0到B3,第三消息包括块A53到A95。接着,将作为针对第一消息的哈希值计算结果的哈希中间值存储到哈希值计算电路中。在第二消息的哈希值计算完成后,使用所存储的第一消息的哈希中间值来执行针对第三消息的哈希值计算。结果,与将哈希中间值临时写出到外部存储器并重新加载的传统配置相比,能够减少与外部存储器交换哈希中间值所需的时间开销,并能够实现以高响应速度进行高效率的哈希值计算。
[0307] 在本实施例中,由于将消息的一个块的数据存储在哈希值计算电路中,因此能够消除从外部存储器传输消息的各块数据所需的开销时间的需要。由于该原因,能够实现更高效率的哈希值计算。
[0308] 在本实施例中,在完成针对紧接的前一个块的哈希值计算时,将存储在电路中的一个块的数据加载到扩展处理器,接着发出从外部存储器传输下一个块的数据传输请求。但是,本发明不限于此。例如,在完成针对该块的哈希值计算之前将加载的该块的数据存储在存储单元中,接着可以发出针对下一个块的数据传输请求。即使在处理中间针对关注的块的哈希值计算异常中断时,由于在电路中存储了关注的块的数据,因此也能够获得减少从外部存储器重新加载该数据所需的开销的效果。
[0309] 本实施例例示了将SHA-1用作哈希函数。但是,哈希函数可以使用例如MD5和SHA-256的其它算法。
[0310] 在本实施例中,针对各步骤依次生成扩展消息。但是,可以在最初同时生成扩展消息。
[0311] 在本实施例的配置中,能够存储针对两个不同的消息的哈希中间值。通过配置三个或更多个哈希中间值存储单元,能够中断和重新开始针对三个或更多个不同的消息的哈希值计算。
[0312] 在本实施例的配置中,配置了各自具有能够存储一个哈希中间值的哈希中间值存储区域的多个哈希中间值存储单元。但是,本发明不限于这种特定配置。例如,可以配置各自具有能够存储多个哈希中间值的哈希中间值存储区域的一个或多个哈希中间值存储单元。
[0313] 在本实施例中,各个消息的哈希中间值和哈希中间值存储单元之间的对应关系是固定的,如消息A的哈希中间值存储在哈希中间值存储单元A中,消息B的哈希中间值存储在哈希中间值存储单元B中。但是,例如,可以配置存储表示哈希中间值存储区域和消息的哈希中间值之间的对应关系的对应关系信息的对应关系信息存储单元,可以根据存储在对应关系信息存储单元中的对应关系信息来决定哈希中间值存储区域。
[0314] 在本实施例中,CPU在哈希电路外部对哈希值计算的填充处理进行处理。但是,也可以在哈希电路内部对填充处理进行处理。
[0315] 在本实施例中,DMAC用作用于在哈希值计算电路和外部存储器之间交换消息和哈希值的设备。但是,可以使用其它传输设备。
[0316] 在本实施例的示例中,DMA输入/输出数据的位宽(bit width)为64位。但是,可以使用其它位数。
[0317] 在本实施例中,哈希值计算的各步骤的处理的基本处理时间段T等于DMA传输处理的基本处理时间段T。但是,分步处理和DMA传输处理的基本处理时间段可以不同。
[0318] 在本实施例的示例中,CPU在哈希值计算电路的寄存器中设置消息的块的数量,哈希值计算电路通过对DMA确认信号进行计数来检测具有CPU设置的块的数量的消息的供应。但是,可以使用其它方法。例如,CPU可以通过在寄存器中设置消息传输完成,来通知完成消息传输。
[0319] 注意,本发明的实施例不限于上述配置,可以进行各种变型。
[0320] <<第二实施例>>
[0321] 在第一实施例中,CPU 201针对各消息在哈希值计算电路100的寄存器中设置处理继续信息和消息标识符信息等。第二实施例将说明作为与消息的数据同步的边带信号的输入数据属性信号包括处理继续信息和消息标识符信息等的情况。
[0322] (哈希值计算电路的配置)
[0323] 图12是示出根据第二实施例的哈希值计算电路的配置的框图。下面,参照图12仅描述与第一实施例的不同之处。
[0324] 附图标记137表示对哈希值计算电路100接收的第一消息(以下称作消息A)的块的数量进行计数的块计数器。附图标记140表示对哈希值计算电路100接收的第二消息(以下称作消息B)的块的数量进行计数的块计数器X。在针对形成消息的给定数量的块的哈希值计算完成时,哈希值计算控制器113将块计数器137或块计数器X 140的计数器值清零。附图标记139表示与DMA输入数据120同步地从DMAC 203输出到哈希值计算电路100的输入数据属性信号。输入数据属性信号的内容包括消息标识符信息和处理继续信息。
[0325] (寄存器的存储内容)
[0326] 图13是示出存储在本实施例的哈希值计算电路100内的寄存器116中的信息的图。以下仅描述与第一实施例的不同之处。
[0327] 寄存器116具有针对各个消息类型的作业开始信息、块的数量信息和哈希初始值信息的存储区域。
[0328] 在本实施例中,在哈希值计算电路100开始作业之前,CPU 201将针对要处理的多个消息的作业开始信息、块的数量信息和哈希初始值信息的设置写入寄存器116中。
[0329] 在第一实施例中,CPU 201预先决定发出处理请求以中断针对消息A的哈希值计算,并执行针对消息B的哈希值计算。即,CPU 201决定向哈希值计算电路100发出针对作为两个消息、即包括块A0到A52的消息和包括块A53到A95的消息的消息A的处理请求。在本实施例中,CPU 201首先在哈希值计算电路100的寄存器中设置针对要进行哈希值计算的多个消息的信息。即,CPU 201在寄存器116的预定区域中设置包括96个块的消息A的信息和包括4个块的消息B的信息。在CPU 201设置寄存器并且哈希值计算电路100开始针对对应的处理请求的哈希值计算后,CPU 201决定中断消息A的哈希值计算。此外,CPU
201控制DMAC 203,从消息A的块A52开始,从块B0开始将消息B的数据依次传输到哈希值计算电路。
[0330] 哈希值计算电路100针对在寄存器中设置的多个消息,根据包括在输入数据属性信号139中的消息标识符信息和处理继续信息,确定各消息类型和处理继续的存在/不存在。此外,哈希值计算电路100针对各消息,根据需要执行哈希值计算。
[0331] 哈希值计算电路100根据以下内容,检测到在接收到消息A的在寄存器中设置的96个块的数据之前,接收到消息B的块数据:
[0332] ·对传输的各消息的块的数量进行计数的块计数器137的计数器值BC;和[0333] ·包括在属性信息中的消息标识符。
[0334] 接着,哈希值计算电路100确定中断消息A的哈希值计算。
[0335] (哈希值计算)
[0336] 图14A和图14B是示出在以图6所示的顺序输入两个消息(块A0到A95及块B0到B3)时,本实施例的哈希值计算的操作序列的流程图。
[0337] 在ST201中,CPU 201在哈希值计算电路100的寄存器116中设置针对第一消息(A0到A95)的处理请求。
[0338] 在ST202中,CPU 201在哈希值计算电路100的寄存器116中设置针对第二消息(B0到B3)的处理请求。
[0339] 在ST203中,哈希值计算电路100向DMAC 203发出读取请求,以读取消息的一个块的数据。
[0340] 在ST204中,哈希值计算电路100根据属性信号的消息标识符,确定读取块数据的消息。如果消息标识符指示消息A,则处理进行到ST205;如果消息标识符指示消息B,则处理进行到ST209。
[0341] 在ST205中,哈希值计算电路100确定是否正在进行针对紧接的前一个块的哈希值计算。如果正在进行哈希值计算,则处理等待,直到完成该块的哈希值计算为止;如果哈希值计算完成,则处理进行到ST206。
[0342] 在ST206中,哈希值计算电路100执行针对第一消息(A0到A95)的一个块的哈希值计算。
[0343] 在ST207中,哈希值计算电路100确定针对包括总数=96的块的第一消息(A0到A95)的哈希值计算是否完成。如果哈希值计算完成,则处理进行到ST208;否则,处理返回到ST203。
[0344] 在ST208中,哈希值计算电路100向DMAC 203发出写入请求,以输出针对第一消息(A0到A95)的哈希值。
[0345] 在ST209中,哈希值计算电路100确定是否正在进行针对紧接的前一个块的哈希值计算。如果正在进行哈希值计算,则处理等待,直到完成该块的哈希值计算为止;如果哈希值计算完成,则处理进行到ST210。
[0346] 在ST210中,哈希值计算电路100执行针对第二消息(B0到B3)的一个块的哈希值计算。
[0347] 在ST211中,哈希值计算电路100确定针对包括总数=4的块的第二消息(B0到B3)的哈希值计算是否完成。如果哈希值计算完成,则处理进行到ST212;否则,处理返回到ST203。
[0348] 在ST212中,哈希值计算电路100向DMAC 203发出写入请求,以输出针对第二消息(B0到B3)的哈希值。
[0349] 在ST213中,哈希值计算电路100确定其它消息的处理是否完成。如果处理完成,则结束处理;否则,处理返回到ST203。
[0350] 在本实施例中,与在第一实施例中相同,在T006和T007(未示出)中,CPU 201经由总线205和总线信号117设置寄存器116。在这种情况下,CPU 201在图12所示的寄存器116的用于消息A的“作业开始”区域中设置“开始哈希值计算”的标志。另外,CPU 201在“块的数量”区域中设置“针对96个块进行处理”的标志,并且在“哈希初始值”区域中设置“SHA-1算法的初始值”。同样地,CPU 201在用于消息B的“作业开始”区域中设置“开始哈希值计算”的标志,在“块的数量”区域中设置“针对4个块进行处理”的标志,并且在“哈希初始值”区域中设置“SHA-1算法的初始值”。
[0351] 之后,哈希值计算电路100接收DMAC 203从存储器传输的消息的DMA输入数据120和输入数据属性信号139。哈希值计算电路100根据包括在输入数据属性信号139中的消息标识符和处理继续信息,以及针对各消息存储在寄存器中的块的总数和DMA传输块的数量,执行针对各消息的哈希值计算。
[0352] (哈希值计算的详细情况)
[0353] 图15A至图16E是示出针对各个步骤的哈希值计算的操作的时序图。图15A至图16E分别示出将消息A切换到消息B时的操作以及将消息B切换到消息A时的操作。以下仅描述与第一实施例的不同之处。
[0354] 从T000到T4237的处理与第一实施例中的处理相同。在T4237中,加法处理器107输入内部状态值SA51_79和哈希中间值HA50以执行加法处理,并输出哈希中间值HA51。在T4238中,哈希中间值存储单元A 109存储哈希中间值HA51。
[0355] 在T4237中,哈希值计算控制器113断言块加载信号124。在T4238中,扩展消息存储单元102检测到块加载信号124的断言,并加载存储在消息存储单元101中的块A52。
[0356] 假定CPU 201控制DMAC 203,以在块A52的传输完成后,开始从存储器202向哈希值计算电路100传输消息B。在T4238中,哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的块A52的数据的存储,断言DMA读取请求信号122,以读取下一个块的数据。
[0357] 从T4238到T4318,执行针对块A52的哈希值计算。
[0358] 另一方面,从T4239到T4253,DMAC 203返回DMA数据读取确认信号123,同时将块B0从存储器202传输到哈希值计算电路100。在T4254中,消息存储单元101存储块B0。哈希值计算控制器113与块B0的加载同时地,加载输入数据属性信号139,以识别指示“消息B”的信息和指示“使用内部状态值的初始值”的信息。设块计数器X 140的计数器值为BCX,块计数器X 140将与消息B的块B0对应的计数器值BCX向上计数到1。块计数器137存储“53”作为与消息A的块A52对应的计数器值BC。
[0359] 在T4319中,哈希中间值存储单元A 109存储哈希中间值HA52。由于仅完成了针对包括总数=96的块的消息A中的从第一个块开始的53个块的哈希值计算,因此在T4319中,哈希值计算控制器113不断言DMA写入请求信号122。此外,DMAC 203不将哈希中间值HA52从哈希值计算电路100 DMA传输到存储器202。
[0360] (以块为单位的操作)
[0361] 图17A和图17B(以下总称为图17)是示出根据本实施例的针对各个块的哈希值计算的操作的时序图。注意,还描述一些分步处理时间段的详细操作。
[0362] 在TB52中,哈希值计算控制器113将DMA读取请求信号122断言到DMAC 203以读取数据。DMAC 203返回DMA读取确认信号123,并将消息B的第一个块B0 DMA传输到哈希值计算电路100。消息存储单元101存储块B0。
[0363] 在TB53中,DMA传输块B1,并执行针对块B0的哈希值计算。在TB54中,由于哈希值计算控制器113断言哈希中间值B加载信号130,因此哈希中间值存储单元B 110存储在TB53中计算的哈希中间值HB0。哈希值计算控制器113取消断言消息A选择信号131。接着,选择器111将来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元B 110的输出(HB0)输出到哈希值输出单元114。
[0364] 以这种方式,在TB54中,哈希中间值存储单元A 109存储哈希中间值HA52,并且哈希中间值存储单元B 110存储哈希中间值HB0。
[0365] 在TB54中,使用存储在哈希中间值存储单元B 110中的哈希中间值HB0来执行针对块B1的哈希值计算。
[0366] 之后,在TB54和TB55中,DMAC 203将块B2和B3从存储器202DMA传输到哈希值计算电路100。
[0367] 假定CPU 201控制DMAC 203,在块B3的传输完成后,重新开始将消息A的其余数据从存储器202传输到哈希值计算电路100。接着,在TB56中,DMAC 203将形成消息A的块A53从存储器202 DMA传输到哈希值计算电路100。此时,DMAC 203传送指示“使用哈希中间值”的值作为针对消息A的输入数据属性信号139中的处理继续信息。在DMAC 203完成块A53的传输并且哈希值计算电路100存储块A53的数据后,哈希值计算控制器113加载输入数据属性信号139。接着,哈希值计算控制器113识别指示“消息A”的信息和指示“使用哈希中间值”的信息。块计数器X 140存储“4”作为计数器值BCX。块计数器139与消息A的块A53对应地将计数器值BC向上计数到54。注意,在第一实施例中,在消息B的哈希值计算完成时进行针对消息A的块A53到A95的寄存器设置后,传输块A53。对比而言,在本实施例中,能够在消息B的哈希值计算完成前,传输块A53。
[0368] 在TB54到TB56中,哈希值计算电路100执行针对块B1到B3的哈希值计算。在该区间期间,哈希值计算控制器113不断言哈希中间值A加载信号129,而根据需要断言哈希中间值B加载信号130。由于该原因,哈希中间值存储单元A 109不存储消息B的任何哈希中间值,而哈希中间值存储单元B 110存储消息B的哈希中间值。此外,哈希值计算控制器113取消断言消息A选择信号131。因此,选择器111输出来自哈希中间值存储单元A109的输出和来自哈希中间值存储单元B 110的输出中的来自哈希中间值存储单元B 110的输出。其它处理与针对块A1到A3的处理相同。
[0369] 结果,在TB54到TB56中,哈希值计算电路100计算哈希中间值HB1到HB3。
[0370] 在TB57中,哈希中间值存储单元A 109存储针对消息A的块A0到A52的哈希中间值HA52,并且哈希中间值存储单元B 110存储针对消息B的块B0到B3的哈希中间值HB3。如图5所示,由于消息B包括块B0到B3,因此输出哈希中间值HB3作为消息B的哈希值HB。
在TB57中,哈希值计算控制器113取消断言消息A选择信号131。由于该原因,选择器111将作为其自身的输入的来自哈希中间值存储单元A 109的输出(HA52)和来自哈希中间值存储单元B 110的输出(HB)中的来自哈希中间值存储单元B 110的输出(HB)输出到哈希值输出单元114。
[0371] 此时,满足存储在寄存器116的用于消息B的“块的数量”区域中的“针对4个块进行处理”的要求。由此,在TB57中,哈希值计算控制器113清除存储在寄存器116的“作业开始”区域中的“开始哈希值计算”的标志。此外,哈希值计算控制器113清除块计数器X 140的计数器值BCX。在TB57中,哈希值计算控制器113将DMA写入请求信号122断言到DMAC 203。DMAC 203返回DMA写入确认信号123,并将来自哈希值输出单元114的哈希值HB传输到存储器202。哈希值计算控制器113对DMAC 203断言DMA写入确认信号123的次数进行计数。哈希值计算控制器113确认DMAC 203断言了DMA写入确认信号123三次,接着取消断言DMA写入请求信号122。
[0372] 在TB57中,DMAC 203检测到哈希值计算电路100进行的DMA写入请求信号122的取消断言,断言中断信号206,并将中断通知给中断控制器204。接着,中断控制器204使用中断信号(未示出)将哈希值HB在存储器202中的存储通知给CPU 201。
[0373] 在TB57中,CPU 201根据来自DMAC 203的中断,检测到“使用内部状态值的初始值”“针对4个块”对“消息B”的处理完成。
[0374] 在TB57中,DMA传输块A54,并执行针对块A53的哈希值计算。之后,在TB58到TB98中,DMAC 203将块A55到A95从存储器202DMA传输到哈希值计算电路100。在TB58到TB99中,哈希值计算电路100执行针对块A54到A95的哈希值计算。在该区间期间,哈希值计算控制器113不断言哈希中间值B加载信号130,而根据需要断言哈希中间值A加载信号129。由于该原因,哈希中间值存储单元B 110不存储消息A的任何哈希中间值,而哈希中间值存储单元A 109存储消息A的哈希中间值。哈希值计算控制器113断言消息A选择信号131。由于该原因,选择器111输出来自哈希中间值存储单元A 109的输出和来自哈希中间值存储单元B110的输出中的来自哈希中间值存储单元A 109的输出。其它处理与针对其它块的处理相同。
[0375] 结果,在TB100中,哈希中间值存储单元A 109存储针对块A0到A95的哈希中间值HA95。如图5所示,由于消息A包括块A0到A95,因此输出哈希中间值HA95作为消息A的哈希值HA。在TB100中,哈希值计算控制器113断言消息A选择信号131。由于该原因,选择器111将作为其自身的输入的来自哈希中间值存储单元A 109的输出(HA)和来自哈希中间值存储单元B 110的输出(HB)中的来自哈希中间值存储单元A109的输出(HA)输出到哈希值输出单元114。
[0376] 此时,满足存储在寄存器116的用于消息A的“块的数量”区域中的“针对96个块进行处理”的要求。接着,在TB100中,哈希值计算控制器113清除存储在寄存器116的“作业开始”区域中的“开始哈希值计算”的标志。此外,哈希值计算控制器113清除块计数器137的计数器值BC。
[0377] 在TB100中,哈希值计算控制器113将DMA写入请求信号122断言到DMAC 203。DMAC 203返回DMA写入确认信号123,并将来自哈希值输出单元114的哈希值HA传输到存储器202。哈希值计算控制器113对DMAC 203断言DMA写入确认信号123的次数进行计数。哈希值计算控制器113确认DMAC 203断言了DMA写入确认信号123三次,接着取消断言DMA写入请求信号122。
[0378] 在TB100中,DMAC 203检测到哈希值计算电路100进行的DMA写入请求信号122的取消断言,断言中断信号206,并将中断通知给中断控制器204。接着,中断控制器204使用中断信号(未示出)将哈希值HA在存储器202中的存储通知给CPU 201。
[0379] 在TB 100中,CPU 201根据来自DMAC 203的中断检测到“使用内部状态值的初始值”“针对96个块”对“消息A”的处理完成。
[0380] 如上所述,根据本实施例,从附加到消息的数据的输入数据属性信号中提取消息标识符和处理继续信息,并进行识别。接着,在处理中间中断针对第一消息的哈希值计算,并且首先执行针对另外的第二消息的哈希值计算时,与第一实施例相比,能够进一步缩短哈希值计算时间段。即,能够减少在直到第一消息的中间块的哈希值计算之后将哈希值计算结果(哈希中间值)DMA传输到存储器所需的时间,和在针对各消息的哈希值计算开始时进行针对消息的寄存器设置所需的时间。此外,能够更早完成针对第二消息的哈希值计算。
[0381] 更具体而言,在示出第一实施例中的各个步骤的哈希值计算的时序图的图9A至图9E中,在TB58内的T4669的定时,输出消息B的哈希值。对比而言,在示出第二实施例中的各个步骤的哈希值计算的时序图的图16A至图16E中,在TB57内的T4643的定时,输出消息B的哈希值HB。
[0382] 在第二实施例中,与第一实施例相比,哈希值计算时间段缩短了与第一实施例中的TB53的时间段对应的26个基本处理时间段。能够将第一消息的未处理部分的第一个块的DMA传输时间段隐藏在第二消息的哈希值计算时间段中,并且能够比第一实施例更早地重新开始第一消息的哈希值计算。更具体而言,在图11A和图11B中,在TB60内的T4776的定时,输出第一实施例中的针对消息A的第一个块到块A53的哈希中间值HA53。相比而言,在图16A到图16E中,在TB58内的T4724的定时,输出第二实施例中的针对消息A的第一个块到块A53的哈希中间值HA53。与第一实施例相比,在第二实施例中,哈希值计算时间段缩短了与第一实施例的TB53和TB58的时间段的和对应的52个基本处理时间段。
[0383] 在本实施例中,在完成针对紧接的前一个块的哈希值计算时,将存储在电路中的一个块的数据加载到扩展处理器,并且在加载后发出从外部存储器传输下一个块的数据传输请求。虽然处理时间段延长,但是可以在完成针对一个加载的块的哈希值计算之前将该块的数据存储在存储单元中,之后,可以发出针对下一个块的数据传输请求。此时,即使在处理中间针对关注的块的哈希值计算异常中断,由于关注的块的数据存储在电路中,因此也能够获得减少从外部存储器重新加载该数据所需的开销的效果。
[0384] 本实施例例示了SHA-1用作哈希函数。但是,哈希函数可以使用例如MD5和SHA-256的其它算法。
[0385] 在本实施例中,针对各步骤依次生成扩展消息。但是,可以在最初同时生成扩展消息。
[0386] 在本实施例的配置中,能够存储针对两个不同的消息的哈希中间值。但是,本发明不限于这种特定配置。例如,通过配置三个或者更多个哈希中间值存储单元、块计数器和寄存器设置区域等,能够中断和重新开始针对三个或者更多个不同的消息的哈希值计算。
[0387] 在本实施例的配置中,配置了各自具有能够存储一个哈希中间值的哈希中间值存储区域的多个哈希中间值存储单元。但是,本发明不限于这种特定配置。例如,可以配置各自具有能够存储多个哈希中间值的哈希中间值存储区域的一个或多个哈希中间值存储单元。
[0388] 在本实施例中,各个消息的哈希中间值和哈希中间值存储单元之间的对应关系是固定的,如消息A的哈希中间值存储在哈希中间值存储单元A中,消息B的哈希中间值存储在哈希中间值存储单元B中。但是,例如,可以配置存储表示哈希中间值存储区域和消息的哈希中间值之间的对应关系的对应关系信息的哈希中间值存储信息存储单元,可以根据存储在哈希中间值存储信息存储单元中的对应关系信息来决定哈希中间值存储区域。
[0389] 在本实施例中,CPU在哈希电路的外部对哈希值计算的填充处理进行处理。但是,也可以在哈希电路内部对填充处理进行处理。
[0390] 在本实施例中,DMAC用作用于在哈希值计算电路和外部存储器之间交换消息和哈希值的设备。但是,也可以使用其它传输设备。
[0391] 在本实施例的示例中,DMA输入/输出数据的位宽为64位。但是,可以使用其它位数。
[0392] 在本实施例中,哈希值计算的各步骤的处理的基本处理时间段T等于DMA传输处理的基本处理时间段T。但是,分步处理和DMA传输处理的基本处理时间段可以不同。
[0393] 在本实施例中,输入数据属性信号包括消息标识符信息和处理继续信息,并且将其数据宽度定义为8位。但是,输入数据属性信号还可以包括例如消息优先级信息的其它信息,并可以根据信息来改变信号的数据宽度。
[0394] 在本实施例中,哈希值计算电路通过对各消息的输入块的数量进行计数来识别输入消息的块编号。可替换地,输入数据属性信号还可以包括块编号。
[0395] 在本实施例中,CPU在哈希值计算电路的寄存器中设置消息的块的数量,哈希值计算电路通过对DMA确认信号进行计数,来检测具有CPU设置的块的数量的消息的供应。但是,可以使用其它方法。例如,CPU可以通过在寄存器中设置消息传输完成来通知消息传输的完成。
[0396] 在本实施例中,最初在寄存器中设置关于进行哈希值计算的消息A和B的设置,并根据输入消息针对消息A或B执行哈希值计算。但是,在需要在针对消息A或B的哈希值计算中间开始针对消息C的哈希值计算时,可以在处理中间增加针对消息C的哈希处理请求的寄存器设置。在这种情况下,能够根据输入消息来执行针对消息A、B和C的哈希值计算。
[0397] 注意,本发明的实施例不限于上述配置,可以进行各种变型。
[0398] <<第三实施例>>
[0399] 在第二实施例中,CPU预先在哈希值计算电路内的寄存器中设置作业开始信息、块的数量信息和哈希初始值信息,来作为与各消息关联的处理请求的信息。在第三实施例中,除了上述信息之外,CPU还预先在哈希值计算电路内的寄存器中设置消息优先级信息。
[0400] (哈希值计算电路的配置)
[0401] 图18是示出根据本实施例的哈希值计算电路的配置的框图。下面,参照图18仅描述与第二实施例的不同。
[0402] 附图标记141表示存储块数据的消息存储单元X。在满足以下所有条件的情况下,消息存储单元X 141在哈希值计算完成时对存储在消息存储单元101中的数据进行存储。
[0403] ·存储在消息存储单元101中的块数据的消息的优先级低。
[0404] ·正在进行哈希值计算的块的消息的优先级低。
[0405] ·正在进行哈希值计算的块存储在其自身中。
[0406] 附图标记142表示块加载信号X,该块加载信号X从哈希值计算控制器113输出,以将存储在消息存储单元101中的消息的数据加载到消息存储单元X。附图标记143表示从消息存储单元X 141输出到稍后描述的选择器144的消息X。附图标记144表示选择消息132和消息X 143中的一个、并将所选择的信息输出到扩展消息存储单元102的选择器。附图标记145表示作为选择器144的控制信号而从哈希值计算控制器113输出的消息X选择信号。
[0407] (寄存器的存储内容)
[0408] 图19是示出存储在哈希值计算电路100内的寄存器116中的信息的图。以下仅描述与第二实施例的不同之处。
[0409] 寄存器116具有针对各个消息类型的作业开始信息、块的数量信息、哈希初始值信息和消息优先级信息的存储区域。
[0410] 在本实施例中,在T006和T007中,与在第二实施例中相同,CPU 201经由总线205和总线信号117设置寄存器116。在这种情况下,CPU 201在图19所示的寄存器116的用于消息A的“作业开始”区域中设置“开始哈希值计算”的标志。此外,CPU 201在“块的数量”区域中设置“针对96个块进行处理”的标志,在“哈希初始值”区域中设置“SHA-1算法的初始值”,并且在“消息优先级”区域中设置“低优先级”的标志。同样地,CPU 201在用于消息B的“作业开始”区域中设置“开始哈希值计算”的标志。此外,CPU 201在“块的数量”区域中设置“针对4个块进行处理”的标志,在“哈希初始值”区域中设置“SHA-1算法的初始值”,并且在“消息优先级”区域中设置“高优先级”的标志。
[0411] 之后,哈希值计算电路100接收DMAC 203从存储器传输的消息的DMA输入数据120和输入数据属性信号139。哈希值计算电路100根据包括在输入数据属性信号139中的消息标识符信息和处理继续信息,以及针对各消息存储在寄存器中的预定区域中的块的总数和DMA传输块的数量,执行针对各消息的哈希值计算。
[0412] (哈希值计算)
[0413] 图20A、图20B和图20C是示出在以图6所示的顺序输入两个消息(块A0到A95及块B0到B3)时,根据本实施例的哈希值计算的操作序列的流程图。
[0414] 在ST301中,CPU 201在哈希值计算电路100的寄存器116中设置针对第一消息(A0到A95)的处理请求。
[0415] 在ST302中,CPU 201在哈希值计算电路100的寄存器116中设置针对第二消息(B0到B3)的处理请求。
[0416] 在ST303中,哈希值计算电路100向DMAC 203发出读取请求,以读取消息的一个块的数据。
[0417] 在ST304中,哈希值计算电路100根据属性信号的消息标识符来确定读取的块数据的消息。如果消息标识符信息指示消息A,则处理进行到ST305;如果消息标识符信息指示消息B,则处理进行到ST312。
[0418] 在ST305中,哈希值计算电路100确定是否正在进行针对紧接的前一个块的哈希值计算。如果正在进行哈希值计算,则处理等待,直到完成该块的哈希值计算为止;如果哈希值计算完成,则处理进行到ST306。
[0419] 在ST306中,哈希值计算电路100确定消息存储单元X 141是否存储具有低优先级的第一消息的放弃块。如果消息存储单元X存储第一消息的放弃块的数据,则处理进行到ST307;否则,处理跳至ST309。
[0420] 在ST307中,哈希值计算电路100执行针对具有低优先级的第一消息的放弃的块的哈希值计算。
[0421] 在ST308中,哈希值计算电路100确定针对包括总数=96的块的第一消息(A0到A95)的哈希值计算是否完成。如果哈希值计算完成,则处理跳至ST311;否则,处理进行到ST309。
[0422] 在ST309中,哈希值计算电路100执行针对第一消息(A0到A95)的一个块的哈希值计算。
[0423] 在ST310中,哈希值计算电路100确定针对包括总数=96的块的第一消息(A0到A95)的哈希值计算是否完成。如果哈希值计算完成,则处理进行到ST311;否则,处理返回到ST303。
[0424] 在ST311中,哈希值计算电路100向DMAC 203发出写入请求,以输出针对第一消息(A0到A95)的哈希值。
[0425] 在ST312中,哈希值计算电路100确定紧接的前一个块是否为具有高优先级的第二消息的块。如果紧接的前一个块是具有高优先级的第二消息的块,则处理进行到ST313;如果紧接的前一个块是具有低优先级的第一消息的块,则处理跳至ST314。
[0426] 在ST313中,哈希值计算电路100确定是否正在进行针对紧接的前一个块的哈希值计算。如果正在进行哈希值计算,则处理等待,直到完成该块的哈希值计算为止;如果哈希值计算完成,则处理进行到ST314。
[0427] 在ST314中,哈希值计算电路100执行针对第二消息(B0到B3)的一个块的哈希值计算。
[0428] 在ST315中,哈希值计算电路100确定针对包括总数=4的块的第二消息(B0到B3)的哈希值计算是否完成。如果哈希值计算完成,则处理进行到ST316;否则,处理返回到ST303。
[0429] 在ST316中,哈希值计算电路100向DMAC 203发出写入请求,以输出针对第二消息(B0到B3)的哈希值。
[0430] 在ST317中,哈希值计算电路100确定其它消息的处理是否完成。如果处理完成,则结束处理;否则,处理返回到ST303。
[0431] (哈希值计算的详细情况)
[0432] 图21A至图23F是示出根据本实施例的各个步骤的哈希值计算的操作的时序图。图21A至图23F分别示出消息A的开始步骤的操作、将消息A切换到消息B时的操作、和将消息B切换到消息A时的操作。以下仅描述与第二实施例的不同之处。
[0433] 从T000到T024的处理与第二实施例中的处理相同。在T025中,哈希值计算控制器113断言块加载信号124。由于存储在消息存储单元中的消息A具有低优先级,因此哈希值计算控制器113断言块加载信号124和块加载信号X 142。消息存储单元X 141检测到块加载信号X 142的断言,并在T026中加载存储在消息存储单元101中的块A0。此外,扩展消息存储单元102检测到块加载信号124的断言,并在T026中加载来自选择器144的输出。此时,由于哈希值计算控制器113不断言消息X选择信号145,因此选择器144输出消息132和消息X 143中的消息132。
[0434] 从T000到T4237,执行与第二实施例基本相同的处理。但是,在本实施例中,消息存储单元X 141根据消息的优先级来存储消息132,并且选择器144选择来自消息存储单元101的输出和来自消息存储单元X 141的输出中的一个,并将所选择的消息输出到扩展消息存储单元102。
[0435] 在T4237中,哈希值计算控制器113断言块加载信号124。扩展消息存储单元102检测到块加载信号124的断言,并在T4238中加载存储在消息存储单元101中的块A52作为从选择器144的输出。此时,扩展消息存储单元102通过将块A52分割为16个32位的数据EA52_W00到EA52_W15来存储块A52。在从T4238到T4255中,哈希值计算电路100执行针对消息A的块A52的步骤0到步骤17的处理。
[0436] 在T4238中,哈希值计算控制器113响应于扩展消息存储单元102对存储在消息存储单元101中的数据的存储,断言DMA读取请求信号122,以读取下一个块的数据。从T4238到T4253,哈希值计算电路100经由DMA传输来加载块B0,并且在T4254中,消息存储单元101存储块B0。
[0437] 在T4255中,哈希值计算控制器113根据输入数据属性信号139中的消息标识符信息,检测到消息B。此外,哈希值计算控制器113根据寄存器116的“消息优先级”区域中的信息,检测到消息B具有“高优先级”。接着,哈希值计算控制器113断言块加载信号124,以放弃针对在T4255以前处理的消息A的块A52的分步处理,并先执行具有高优先级的消息B的哈希值计算。扩展消息存储单元102检测到块加载信号124的断言,并在T4256中加载作为来自选择器144的输出的存储在消息存储单元101中的块B0。此时,由于在T4255中,哈希值计算控制器113不断言块加载信号X 142,因此消息存储单元X 141不加载作为来自消息存储单元101的输出的消息132(块B0)。
[0438] 之后,从T4256到T4579,哈希值计算电路100执行针对消息B的哈希值计算,从T4580到T4585,DMAC 203输出消息B的哈希值HB。
[0439] 在T4499中,哈希值计算控制器113响应于将存储在消息存储单元101中的消息B的最后的块B3加载到扩展消息存储单元102,断言DMA读取请求信号122。接着,读取下一个消息的数据。从T4500到T4514,DMAC 203 DMA传输消息A的块A53。在T4515中,消息存储单元101存储块A53。此时,虽然存储在消息存储单元101中的消息A具有低优先级,但由于存储在消息存储单元X 141中的数据的哈希值计算尚未完成,因此哈希值计算控制器113不断言块加载信号X 142。因此,消息存储单元X 141不加载作为来自消息存储单元101的输出的消息132(块A53)。
[0440] 在T4500中,哈希值计算控制器113加载输入数据属性信号139并检测到重新开始了消息A的加载。因此,在T4501中,哈希值计算控制器113断言消息X选择信号145。接着,选择器144输出消息132和消息X 143中的消息X 143。在T4579中,哈希值计算控制器113断言块加载信号124。在T4580中,扩展消息存储单元102检测到块加载信号124的断言,并加载作为选择器144的输出的消息X 143(A52)。哈希值计算控制器113在T4580中取消断言消息X选择信号145。从T4580开始,重新开始之前在处理中间放弃的块A52的处理。
[0441] (以块为单位的操作)
[0442] 图24A和图24B(以下总称为图24)是示出根据本实施例的针对各个块的哈希值计算的操作的时序图。
[0443] 与第二实施例中相同,在TB52中,DMAC 203将块B0 DMA传输到哈希值计算电路100。但是,在TB56内的T4580的定时,DMAC 203从哈希值计算电路100传输消息B的哈希值HB。在第二实施例中,在TB57内的T4643的定时,哈希值计算电路100输出哈希值HB。
因此,在第三实施例中,与第二实施例相比,消息B的哈希值的输出开始定时缩短了63个基本处理时间段。注意,通过从一个块的81个基本处理时间段中减去存储消息B的块B0的数据所需的18个基本处理时间段,来计算63个基本处理时间段。这18个基本处理时间段也是执行在处理中间放弃的哈希中间值A52的哈希值计算的时间段。
[0444] 另一方面,在本实施例中,在TB58内的T4742的定时,哈希值计算单元100输出哈希中间值HA53。在第二实施例中,在TB58内的T4724定时,哈希值计算单元100输出哈希中间值HA53。因此,在第三实施例中,与第二实施例相比,消息A的哈希值的输出开始定时延迟了18个基本处理时间段。
[0445] 在本实施例中,消息B的消息优先级高,但是本发明并不限于此。当消息B的消息优先级与消息A同样低时,与在第二实施例中相同,哈希值计算单元100不在处理中间放弃块52的哈希值计算。换言之,在块A52的哈希中间值的生成之后,哈希值计算单元100执行针对块B0的哈希值计算。
[0446] 如上所述,根据本实施例,通过从附加到该消息的数据的输入数据属性信号中提取目标消息来识别目标消息,并且增加了进一步对存储在消息存储单元中的消息进行存储的第二消息存储单元。例如,下面分析在处理中间中断针对第一消息的哈希值计算,并首先执行针对另外的第二消息的哈希值计算的情况。根据本实施例的配置,在存储第二消息的数据之前,放弃针对正在处理的第一消息的某个块的哈希值计算,并能够优先处理第二消息的第一个块。因此,更早完成针对第二消息的哈希值计算。
[0447] 本实施例例示了SHA-1用作哈希函数。但是,哈希函数可以使用例如MD5和SHA-256的其它算法。
[0448] 在本实施例中,针对各步骤依次生成扩展消息。但是,也可以在最初同时生成扩展消息。
[0449] 在本实施例的配置中,能够存储针对两个不同消息的哈希中间值。但是,本发明不限于这种特定配置。例如,通过配置三个或更多个哈希中间值存储单元、块计数器和寄存器设置区域等,能够中断和重新开始针对三个或更多个不同的消息的哈希值计算。在本实施例的配置中,配置各自具有能够存储一个哈希中间值的哈希中间值存储区域的多个哈希中间值存储单元。但是本发明不限于这种特定配置。例如,可以配置各自具有能够存储多个哈希中间值的哈希中间值存储区域的一个或多个哈希中间值存储单元。
[0450] 在上述描述中,各个消息的哈希中间值和哈希中间值存储单元之间的对应关系是固定的,如消息A和B的哈希中间值分别存储在哈希中间值存储单元A和B中。但是,本发明不限于此。例如,可以配置存储表示哈希中间值存储区域和消息的哈希中间值之间的对应关系的对应关系信息的哈希中间值存储信息存储单元,并可以根据存储在哈希中间值存储信息存储单元中的对应关系信息来决定哈希中间值存储区域。
[0451] 在本实施例中,消息优先级包括两个等级,即高优先级和低优先级。可替换的,消息优先级可以包括三个以上等级,并可以优先执行针对具有较高优先级的消息的哈希值计算。
[0452] 在本实施例中,配置进一步对存储在第一消息存储单元中的消息进行存储的另一个消息存储单元。然而,本发明不限于此。例如,除了第一消息存储单元外,可以根据优先级等级数和哈希中间值存储单元的数量,配置两个或更多个消息存储单元。
[0453] 在本实施例中,CPU在哈希电路的外部对哈希值计算的填充处理进行处理。但是,也可以在哈希电路内部对填充处理进行处理。
[0454] 在本实施例中,DMAC用作用于在哈希值计算电路和外部存储器之间交换消息和哈希值的设备。但是,也可以使用其它传输设备。
[0455] 在本实施例中,DMA输入/输出数据的位宽为64位。但是,可以使用其它位数。
[0456] 在本实施例中,哈希值计算的各步骤的处理的基本处理时间段T等于DMA传输处理的基本处理时间段T。但是,分步处理和DMA传输处理的基本处理时间段可以不同。
[0457] 本实施例中,CPU预先在寄存器的预定区域中设置消息优先级作为处理请求的信息。可替换地,输入数据属性信号可以包括消息优先级。
[0458] 在本实施例中,输入数据属性信号包括消息标识符信息和处理继续信息,并且数据宽度为8位。但是,本发明不限于此。例如,输入数据属性信号还可以包括例如消息优先级信息、块标识符等的其它信息,并可以根据包括的信息来改变信号的数据宽度。
[0459] 在本实施例中,哈希值计算电路通过对各消息的输入块的数量进行计数来识别输入消息的块编号。可替换地,输入数据属性信号还可以包括块编号。
[0460] 在本实施例中,CPU在哈希值计算电路的寄存器中设置消息的块的数量,哈希值计算电路通过对DMA确认信号进行计数来识别具有CPU设置的块的数量的消息的供应。但是,可以使用其它方法。例如,CPU可以通过在寄存器中设置消息传输完成来通知消息传输的完成。
[0461] 在本实施例中,在处理中间根据存储在寄存器的预定区域中的消息优先级的信息,放弃针对具有低优先级的消息的块的哈希值计算。然而,本发明不限于此。例如,属性信号中的消息标识符还可以表示消息优先级,或者可以输入其它处理中断指令信号,从而通过优先执行针对具有高优先级的消息的哈希值计算,来确定放弃针对正在进行计算的消息的哈希值计算。
[0462] 在本实施例的描述中,最初在寄存器中设置关于作为进行哈希值计算的消息的消息A和B的设置,接着根据输入消息来执行针对消息A或B的哈希值计算。但是,本发明不限于此。例如,下面分析需要在针对消息A或B的哈希值计算的中间开始针对消息C的哈希值计算的情况。在这种情况下,在处理中间增加针对消息C的哈希处理请求的寄存器设置时,能够根据输入消息来执行针对消息A、B和C的哈希值计算。
[0463] 注意,本发明的实施例不限于上述配置,可以进行各种变型。
[0464] 如上所述,根据第一到第三实施例的配置,能够减少通过针对各个块选择要处理的消息来执行哈希值计算时的开销,并能够保持哈希值计算的安全性。
[0465] <<第四实施例>>
[0466] 本实施例将说明支持MD5、SHA1和SHA512作为哈希算法,并且并行处理最多两个消息的哈希值计算装置。以下将并行执行的两个处理称作处理A和处理B。
[0467] 哈希值计算针对包括16个字(word)的各块,对消息进行处理,并输出N个字的哈希值作为其最终结果。该哈希值计算包括如下一系列处理。
[0468] ·将消息分割为各自包括16个字的块,并将预定数据添加到消息的最末位置,使得最后的块也包括16个字(以下称作填充处理)。
[0469] ·针对各个包括16个字的块执行稍后描述的消息扩展处理、分步处理和加法处理,从而生成哈希中间值。
[0470] 消息扩展处理是使用16个字的数据生成1个字的扩展消息的运算处理。按原样使用最初输入的消息作为第1到第16个扩展消息。对于第17及随后的扩展消息,使用16个字的第(n-16)到第(n-1)个扩展消息生成1个字的第n个扩展消息。重复该生成,直到生成第N个扩展消息为止。假定N为在算法中规定的预定步骤数量。
[0471] 各分步处理是使用包括W个字(W是由哈希算法规定的整数)的预定内部状态值和1个字的扩展消息来生成下一个内部状态值的运算处理。使用哈希初始值和第一扩展消息来生成第一内部状态值。使用第(n-1)个内部状态值和第n个扩展消息来生成第n个内部状态值。重复该生成,直到生成第N个内部状态值为止。
[0472] 加法处理是将从第一个块到紧接的前一个块的哈希中间值和关注的块的第N个内部状态值相加的运算处理。通过将哈希初始值和第一个块的第N个内部状态值相加来生成第一个块的哈希中间值。输出针对最后一个块获得哈希中间值,作为针对整个消息的哈希值。
[0473] 针对各个哈希算法,规定了定义1个字的位数:针对MD5为32位,针对SHA-1为32位,针对SHA512为64位。
[0474] 针对各个哈希算法,规定了内部状态值和哈希值的字的数量:针对MD5为4个字(128位),针对SHA-1为5个字(160位),针对SHA512为8个字(256位)。
[0475] 针对各个哈希算法,规定了预定步骤数量N:针对MD5为N=64,针对SHA-1为N=80,针对SHA512为N=80。
[0476] (哈希值计算电路)
[0477] 图25是示出根据本实施例的哈希值计算电路配置的框图。附图标记100表示哈希值计算电路。
[0478] 附图标记101表示控制处理A和B的哈希值计算的哈希值计算控制器,其包括用于控制哈希值计算的寄存器。在哈希值计算电路100的外部配置的CPU能够经由系统总线102访问寄存器。
[0479] 哈希值计算控制器101生成以下信号:
[0480] ·指示正在进行处理A的信号A_EXE;
[0481] ·指示处理A正在执行的哈希算法的信号A_ALG;
[0482] ·指示处理A正在执行的步骤的数量的信号A_STP_CNT;
[0483] ·指示处理A正在执行的块的数量的信号A_BLK_CNT;以及
[0484] ·指示在处理A中使用的哈希初始值的信号A_IV。
[0485] 在信号A_EXE为“1”时,信号A_EXE指示正在进行处理A,信号A_ALG指示MD5、SHA-1和SHA512的一个。在A_EXE=“1”时,信号A_STP_CNT重置为0,并在响应于输入消息的输入传输请求接收到第一确认时,开始计数。信号A_STP_CNT针对各时钟周期从0向上计数到N+1,接着返回到0。在信号A_STP_CNT为0到N-1时,消息扩展处理执行第1到第N个处理,并且在信号A_STP_CNT为0到N时,分步处理执行第1到第N个处理。在信号A_STP_CNT为2到N+1时,加法处理执行第1到第N个处理。在A_EXE=“1”时,信号A_BLK_CNT重置为0,并在信号A_STP_CNT达到N+1时向上计数+1。信号A_BLK_CNT向上计数,直到输入消息的块的数量-1为止,接着返回到0。
[0486] 哈希值计算控制器101生成信号A_DMA_REQ作为到DMA控制器(以下称作DMAC)A的数据传输请求,DMAC A配置在哈希值计算电路100的外部,并传输处理A使用的输入/输出数据。接着,哈希值计算控制器101从DMAC A接收确认信号A_DMA_ACK。信号A_DMA_REQ和信号A_DMA_ACK分别是2位的信号。假定信号A_DMA_REQ[0]/A_DMA_ACK[0]是用于输入作为要处理的数据的输入消息的输入传输信号,并且信号A_DMA_REQ[1]/A_DMA_ACK[1]是用于输出作为哈希值计算结果而获得的哈希值的输出传输信号。
[0487] 此外,哈希值计算控制器101生成以下的信号:
[0488] ·指示正在进行处理B的信号B_EXE;
[0489] ·指示处理B正在执行的哈希算法的信号B_ALG;
[0490] ·指示处理B正在执行的步骤的数量的信号B_STP_CNT;
[0491] ·指示处理B正在执行的块的数量的信号B_BLK_CNT;以及
[0492] ·指示在处理B中使用的哈希初始值的信号B_IV。
[0493] 在信号B_EXE为“1”时,信号B_EXE指示正在进行处理B,信号B_ALG指示MD5、SHA-1和SHA512的一个。在B_EXE=“1”时,信号B_STP_CNT重置为0,并在响应于输入消息的输入传输请求接收到第一确认时,开始计数。信号B_STP_CNT针对各时钟周期从0向上计数到N+1,接着返回到0。在信号B_STP_CNT为0到N-1时,消息扩展处理执行第1到第N个处理,在信号B_STP_CNT为0到N时,分步处理执行第1到第N个处理。在信号B_STP_CNT为2到N+1时,加法处理执行第1到第N个处理。在B_EXE=“1”时,信号B_BLK_CNT重置为0,并在信号B_STP_CNT达到N+1时向上计数+1。信号B_BLK_CNT向上计数,直到输入消息的块的数量-1为止,接着返回到0。
[0494] 哈希值计算控制器101生成信号B_DMA_REQ作为到DMAC B的数据传输请求,DMAC B配置在哈希值计算电路100的外部,并传输处理B使用的输入/输出数据。接着,哈希值计算控制器101从DMAC B接收确认信号B_DMA_ACK。信号B_DMA_REQ和信号B_DMA_ACK分别是2位的信号。假定信号B_DMA_REQ[0]/B_DMA_ACK[0]是用于输入作为要处理的数据的输入消息的输入传输信号,并且信号B_DMA_REQ[1]/B_DMA_ACK[1]是用于输出作为哈希值计算结果而获得的哈希值的输出传输信号。
[0495] 附图标记103表示作为与配置在哈希值计算电路100的外部的DMAC的接口的DMA IF单元。附图标记104表示与传输处理A的输入/输出数据的DMAC A的接口信号。输入数据总线A_DMA_IDATA具有64位的宽度,以64位为单位来传输作为要处理的数据的输入消息,并且输出64位的输入消息A_MSG。输出数据总线A_DMA_ODATA具有64位的宽度,并且以64位为单位来传输作为哈希值计算结果而获得的哈希值。附图标记105表示与传输处理B的输入/输出数据的DMAC B的接口信号。输入数据总线B_DMA_IDATA具有64位的宽度,以64位为单位来传输作为要处理的数据的输入消息,并输出64位的输入消息B_MSG。输出数据总线B_DMA_ODATA具有64位的宽度,并且以64位为单位来传输作为哈希值计算结果而获得的哈希值。
[0496] (接口信号)
[0497] 图34A和图34B是示出基于接口信号104和105的操作的示例的时序图。
[0498] T100到T105指示信号104的输入传输,T107到T110指示信号104的输出传输。在输入传输中,在T100中,DMAIF单元103将输入传输请求信号A_DMA_REQ[0]断言到DMAC A。
[0499] 在T101中,DMAC A将第一输入数据DI0传输到DMA IF单元103,并断言确认信号A_DMA_ACK[0]。响应于T102中的时钟前沿,同时断言信号A_DMA_REQ[0]和信号A_DMA_ACK[0],以完成数据DI0的输入传输,并且DMAC A传输第二输入数据DI1。在输出传输中,在T107中,DMA IF单元103将第一输出数据DO0输出到DMAC A,同时断言输出传输请求信号A_DMA_REQ[1]。在T108中,DMAC A将确认信号A_DMA_ACK[1]断言到DMA IF单元103,并接收输出数据。
[0500] 响应于T109中的时钟前沿,断言信号A_DMA_REQ[1]和信号A_DMA_ACK[1],以完成数据DO0的输出传输,并且DMA IF单元103传输第二输出数据DO1。在本实施例中,确定与处理A的一个传输请求对应的数据量,并且一旦DMAC A断言确认信号,则DMAC A连续传输确定的数据量。假定输入传输针对一个块连续传输1个字的数据。在1个字少于64位的输入数据总线宽度时,通过向低位填充数据来传输该字。假定输出传输与哈希值的字的数量对应地连续传输一个字的数据。在1个字少于64位的输入数据总线宽度时,通过向低位填充数据来传输该数据。由于MD5、SHA1和SHA512要求每个时钟16个字,因此连续传输16次数据。输出传输将哈希值分割为各自具有64位的宽度的数据,并连续传输分割的数据。由于MD5的哈希值需要128位,因此连续传输两次数据。由于SHA1的哈希值需要160位,因此连续传输3次数据。由于SHA512的哈希值需要512位,因此连续传输8次数据。
[0501] T111到T116指示信号105的输入传输,T118到T122指示信号105的输出传输。在输入传输中,在T111中,DMAIF单元103将输入传输请求信号B_DMA_REQ[0]断言到DMAC B。
[0502] 在T112中,DMAC B将第一输入数据DI0传输到DMA IF单元103,并断言确认信号B_DMA_ACK[0]。响应于T113中的时钟前沿,同时断言信号B_DMA_REQ[0]和信号B_DMA_ACK[0],以完成数据DI0的输入传输,并且DMAC B传输第二输入数据DI1。在输出传输中,在T118中,DMA IF单元103将第一输出数据DO0输出到DMAC B,同时断言输出传输请求信号B_DMA_REQ[1]。在T119中,DMAC B将确认信号B_DMA_ACK[1]断言到DMAIF单元103,并接收输出数据。
[0503] 响应于T120中的时钟前沿,断言信号B_DMA_REQ[1]和信号B_DMA_ACK[1],以完成数据DO0的输出传输,并且DMA IF单元103传输第二输出数据DO1。在本实施例中,预先确定与处理B的一个传输请求对应的数据量,并且一旦DMAC B断言确认信号,则DMAC B连续传输所确定的数据量。假定输入传输针对一个块连续传输1个字的数据。在1个字少于64位的输入数据总线宽度时,通过向低位填充数据来传输该字。由于MD5、SHA1和SHA512要求每个时钟16个字,因此连续传输16次数据。假定输出传输将哈希值分割为各自具有64位的宽度的数据,并连续传输分割的数据。由于MD5的哈希值需要128位,因此连续传输两次数据。由于SHA1的哈希值需要160位,因此连续传输3次数据。由于SHA512的哈希值需要512位,因此连续传输8次数据。
[0504] 附图标记106表示扩展消息选择器。扩展消息选择器106根据信号A_EXE、A_ALG、A_STP_CNT、B_EXE、B_ALG以及B_STP_CNT,来选择从外部输入的消息A_MSG和B_MSG以及扩展消息ExMSG_N。接着,扩展消息选择器106输出32位的数据ExMSG_0和ExMSG_1。在扩展消息存储单元107(稍后描述)的区域0中存储数据ExMSG_0,并在扩展消息存储单元107的区域1中存储数据ExMSG_1。
[0505] (数据ExMSG_0和ExMSG_1的选择)
[0506] 图35是示出数据ExMSG_0和ExMSG_1的选择策略的示例的图。附图标记1001表示数据ExMSG_0的数据选择策略。
[0507] ·附图标记1001-a表示正在进行处理A的MD5哈希值计算,并且要执行第1至第16个消息扩展处理(A_EXE=1、A_ALG=MD5且A_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC_A的传输数据的低32位A_MSG[31:0]。
[0508] ·附图标记1001-b表示正在进行处理A的SHA512哈希值计算,并且要执行第1至第16个消息扩展处理(A_EXE=1、A_ALG=SHA512且A_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC A的传输数据的低32位A_MSG[31:0]。
[0509] ·附图标记1001-c表示正在进行处理B的MD5哈希值计算,并且要执行第1至第16个消息扩展处理(B_EXE=1、B_ALG=MD5且B_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC B的传输数据的低32位B_MSG[31:0]。
[0510] ·附图标记1001-d表示正在进行处理B的SHA512哈希值计算,并且要执行第1至第16个消息扩展处理(B_EXE=1、B_ALG=SHA512且B_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC B的传输数据的低32位B_MSG[31:0]。
[0511] ·附图标记1001-e表示上述情况以外的情况。在这种情况下,选择稍后描述的扩展消息的低32位ExMSG_N[31:0]。
[0512] 附图标记1002表示数据ExMSG_1的数据选择策略。
[0513] ·附图标记1002-a表示正在进行处理A的MD5哈希值计算,并且要执行第1至第16个消息扩展处理(A_EXE=1、A_ALG=MD5且A_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC A的传输数据的低32位A_MSG[31:0]。
[0514] ·附图标记1002-b表示正在进行处理A的SHA512哈希值计算,并且要执行第1至第16个消息扩展处理(A_EXE=1、A_ALG=SHA512且A_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC A的传输数据的高32位A_MSG[63:32]。
[0515] ·附图标记1002-c表示正在进行处理B的MD5哈希值计算,并且要执行第1至第16个消息扩展处理(B_EXE=1、B_ALG=MD5且B_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC B的传输数据的低32位B_MSG[31:0]。
[0516] ·附图标记1002-d表示正在进行处理B的SHA512哈希值计算,并且要执行第1至第16个消息扩展处理(B_EXE=1、B_ALG=SHA512且B_STP_CNT=0到15)的情况。在这种情况下,选择来自DMAC B的传输数据的高32位B_MSG[63:32]。
[0517] ·附图标记1002-e表示上述情况以外的情况。在这种情况下,选择稍后描述的扩展消息的高32位ExMSG_N[63:32]。
[0518] 根据图35所示的选择策略,在正在进行处理A或B的哈希值计算时,选择在处理中使用的数据;在未正在进行哈希值计算时,输出扩展消息ExMSG_N,并将其存储在扩展消息存储单元107中。
[0519] 附图标记107表示存储来自扩展消息选择器106的输出数据的扩展消息存储单元107。扩展消息存储单元107包括1024位的触发器,其中第0到第511位形成区域0,第512位到第1023位形成区域1。将来自1024位的触发器的输出信号设为ExMSG[1023:0]。
[0520] (扩展消息存储单元)
[0521] 图36是示出扩展消息存储单元107的内部配置的示例的图。附图标记1101表示区域0的触发器。触发器1101针对各时钟将所存储的数据向LSB移位32位,并在最高的32位ExMSG[511:480]中存储32位的数据ExMSG_0。附图标记1102表示区域1的触发器。
触发器1102针对各时钟将所存储的数据向LSB移位32位,并在最高的32位ExMSG[1023:
992]中存储32位的数据ExMSG_1。
[0522] 附图标记108-1、108-2和108-3表示执行对应的哈希函数的消息扩展处理的消息扩展处理器。由于消息扩展处理对应于哈希算法而不同,因此配置与各个哈希算法对应的消息扩展处理器。消息扩展处理器108-1对应于MD5。消息扩展处理器108-2对应于SHA1。消息扩展处理器108-3对应于SHA512。预先确定存储消息扩展处理器108-1、108-2和108-3要处理的数据的扩展消息存储单元107的区域。
[0523] MD5消息扩展处理器108-1使用区域0作为要处理的数据的存储区域。消息扩展处理器108-1输入区域0的数据ExMSG[511:0],并输出一个字(32位)的扩展消息MD5_ExMSG[31:0]。
[0524] SHA1消息扩展处理器108-2使用区域1作为要处理的数据的存储区域。消息扩展处理器108-2输入区域1的数据ExMSG[1023:512],并输出一个字(32位)的扩展消息SHA1_ExMSG[31:0]。
[0525] SHA512消息扩展处理器108-3使用区域0和1作为要处理的数据的存储区域。将SHA512的一个字定义为64位,在区域0中存储一个字的低32位数据,在区域1中存储一个字的高32位数据。消息扩展处理器108-3输入区域0和1的数据ExMSG[1023:0],并输出一个字(64位)的扩展消息SHA512_ExMSG[63:0]。
[0526] 预先确定存储消息扩展处理器108-1、108-2和108-3要处理的数据的扩展消息存储单元107的区域,并连接扩展消息存储单元107作为到消息扩展处理器108-1、108-2和108-3的输入。由于该原因,消息扩展处理器108-1、108-2和108-3始终以扩展消息存储单元107的确定区域中的数据作为输入,来执行消息扩展处理。
[0527] 附图标记109表示消息扩展处理结果选择器。消息扩展处理结果选择器109根据信号A_EXE、A_ALG、B_EXE和B_ALG选择:
[0528] ·来自MD5消息扩展处理器108-1的输出数据MD5_ExMSG;
[0529] ·来自SHA1消息扩展处理器108-2的输出数据SHA1_ExMSG;或
[0530] ·来自SHA512消息扩展处理器108-3的输出数据SHA512_ExMSG,并输出所选择的数据作为64位数据的扩展消息ExMSG_N。注意,ExMSG_N[31:0]是存储在扩展消息存储单元107的区域0中的扩展消息,ExMSG_N[63:32]是存储在扩展消息存储单元107的区域1中的扩展消息。
[0531] (数据ExMSG_N[31:0]和ExMSG_N[63:32]的选择)
[0532] 图37是示出数据ExMSG_N[31:0]和ExMSG_N[63:32]的选择策略的示例的图。附图标记1201表示数据ExMSG_N[31:0]的数据选择策略。
[0533] ·附图标记1201-a表示正在进行处理A的MD5哈希值计算(A_EXE=1且A_ALG=MD5)的情况。在这种情况下,选择消息扩展处理器108-1的输出数据MD5_ExMSG[31:0]。
[0534] ·附图标记1201-b表示正在进行处理B的MD5哈希值计算(B_EXE=1且B_ALG=MD5)的情况。在这种情况下,选择消息扩展处理器108-1的输出数据MD5_ExMSG[31:0]。
[0535] ·附图标记1201-c表示上述情况以外的情况。在这种情况下,选择SHA512消息扩展处理器108-3的输出数据SHA512_ExMSG的低32位SHA512_ExMSG[31:0]。
[0536] 附图标记1202表示数据ExMSG_N[63:32]的数据选择策略。
[0537] ·附图标记1202-a表示正在进行处理A的SHA1哈希值计算(A_EXE=1且A_ALG=SHA1)的情况。在这种情况下,选择消息扩展处理器108-2的输出数据SHA1_ExMSG[31:0]。
[0538] ·附图标记1202-b表示正在进行处理B的SHA1哈希值计算(B_EXE=1且B_ALG=SHA1)的情况。在这种情况下,选择消息扩展处理器108-2的输出数据SHA1_ExMSG[31:0]。
[0539] ·附图标记1202-c表示上述情况以外的情况。在这种情况下,选择SHA512消息扩展处理器108-3的输出数据SHA512_ExMSG的高32位SHA512_ExMSG[63:32]。
[0540] 根据图37所示的选择策略,在正在进行处理A或B的哈希值计算时,选择在处理中使用的来自消息扩展处理器108-1或108-2的输出;在未正在进行哈希值计算时,输出SHA512消息扩展处理器108-3的输出数据SHA512_ExMSG,并将其存储在扩展消息存储单元107中。
[0541] 附图标记110表示内部状态值存储数据选择器。内部状态值存储数据选择器110根据信号A_EXE、A_ALG、A_STP_CNT、A_BLK_CNT、B_EXE、B_ALG、B_STP_CNT以及B_BLK_CNT选择:
[0542] ·哈希初始值A_IV和B_IV;
[0543] ·分步处理结果TEMP_N;或
[0544] ·哈希中间值存储数据IHASH,
[0545] 并输出256位的数据TEMP_0和TEMP_1。
[0546] 数据TEMP_0存储在内部状态值存储单元111(稍后描述)的区域0中,数据TEMP_1存储在内部状态值存储单元111的区域1中。
[0547] (数据TEMP_0和TEMP_1的选择)
[0548] 图38是示出数据TEMP_0和TEMP_1的数据选择策略的示例的图。附图标记1301表示数据TEMP_0的数据选择策略。
[0549] ·附图标记1301-a表示正在进行处理A的MD5哈希值计算、直到第一个块中的第一分步处理(A_EXE=1、A_ALG=MD5、A_BLK_CNT=0且A_STP_CNT=0)的情况。在这种情况下,选择处理A哈希初始值的低256位A_IV[255:0]。
[0550] ·附图标记1301-b表示正在进行处理A的SHA512哈希值计算、直到第一个块中的第一分步处理(A_EXE=1、A_ALG=SHA512、A_BLK_CNT=0且A_STP_CNT=0)的情况。在这种情况下,选择处理A哈希初始值的低256位A_IV[255:0]。
[0551] ·附图标记1301-c表示正在进行处理A的MD5哈希值计算、直到从第一个块开始的块中的第一分步处理(A_EXE=1、A_ALG=MD5、A_BLK_CNT≠0且A_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值存储数据的低256位IHASH[255:0]。
[0552] ·附图标记1301-d表示正在进行处理A的SHA512哈希值计算、直到从第一个块开始的块中的第一分步处理(A_EXE=1、A_ALG=SHA512、A_BLK_CNT≠0且A_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的低
256位IHASH[255:0]。
[0553] ·附图标记1301-e表示正在进行处理B的MD5哈希值计算、直到第一个块中的第一分步处理(B_EXE=1、B_ALG=MD5、B_BLK_CNT=0且B_STP_CNT=0)的情况。在这种情况下,选择处理B哈希初始值的低256位B_IV[255:0]。
[0554] ·附图标记1301-f表示正在进行处理B的SHA512哈希值计算、直到第一个块中的第一分步处理(B_EXE=1、B_ALG=SHA512、B_BLK_CNT=0且B_STP_CNT=0)的情况。在这种情况下,选择处理B哈希初始值的低256位B_IV[255:0]。
[0555] ·附图标记1301-g表示正在进行处理B的MD5哈希值计算、直到从第一个块开始的块中的第一分步处理(B_EXE=1、B_ALG=MD5、B_BLK_CNT≠0且B_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的低256位IHASH[255:0]。
[0556] ·附图标记1301-h表示正在进行处理B的SHA512哈希值计算、直到从第一个块开始的块中的第一分步处理(B_EXE=1、B_ALG=SHA512、B_BLK_CNT≠0且B_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的低
256位IHASH[255:0]。
[0557] ·附图标记1301-i表示上述情况以外的情况。在这种情况下,选择稍后描述的内部状态值数据的低256位TEMP_N[255:0]。
[0558] 附图标记1302表示数据TEMP_1的数据选择策略。
[0559] ·附图标记1302-a表示正在进行处理A的MD5哈希值计算、直到第一个块中的第一分步处理(A_EXE=1、A_ALG=MD5、A_BLK_CNT=0且A_STP_CNT=0)的情况。在这种情况下,选择处理A哈希初始值的低256位A_IV[255:0]。
[0560] ·附图标记1302-b表示正在进行处理A的SHA512哈希值计算、直到第一个块中的第一分步处理(A_EXE=1、A_ALG=SHA512、A_BLK_CNT=0且A_STP_CNT=0)的情况。在这种情况下,选择处理A哈希初始值的高256位A_IV[511:256]。
[0561] ·附图标记1302-c表示正在进行处理A的MD5哈希值计算、直到从第一个块开始的块中的第一分步处理(A_EXE=1、A_ALG=MD5、A_BLK_CNT≠0且A_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的高256位IHASH[511:256]。
[0562] ·附图标记1302-d表示正在进行处理A的SHA512哈希值计算、直到从第一个块开始的块中的第一分步处理(A_EXE=1、A_ALG=SHA512、A_BLK_CNT≠0且A_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的高
256位IHASH[511:256]。
[0563] ·附图标记1302-e表示正在进行处理B的MD5哈希值计算、直到第一个块中的第一分步处理(B_EXE=1、B_ALG=MD5、B_BLK_CNT=0且B_STP_CNT=0)的情况。在这种情况下,选择处理B哈希初始值的低256位B_IV[255:0]。
[0564] ·附图标记1302-f表示正在进行处理B的SHA512哈希值计算、直到第一个块中的第一分步处理为止的情况(B_EXE=1、B_ALG=SHA512、B_BLK_CNT=0且B_STP_CNT=0)。在这种情况下,选择处理B哈希初始值的高256位B_IV[511:256]。
[0565] ·附图标记1302-g表示正在进行处理B的MD5哈希值计算、直到从第一个块开始的块中的第一分步处理(B_EXE=1、B_ALG=MD5、B_BLK_CNT≠0且B_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的高256位IHASH[511:256]。
[0566] ·附图标记1302-h表示正在进行处理B的SHA512哈希值计算、直到从第一个块开始的块中的第一分步处理(B_EXE=1、B_ALG=SHA512、B_BLK_CNT≠0且B_STP_CNT=0)的情况。在这种情况下,选择通过紧接的前一个块的处理而获得的哈希中间值数据的高
256位IHASH[511:256]。
[0567] ·附图标记1302-i表示上述情况以外的情况。在这种情况下,选择稍后描述的内部状态值数据的高256位TEMP_N[511:256]。
[0568] 根据图38所示的选择策略,在正在进行处理A或B的哈希值计算时,选择在处理中使用的数据;在未正在进行哈希值计算时,输出内部状态值TEMP_N,并将其存储在内部状态值存储单元111中。
[0569] 附图标记111表示存储来自内部状态值存储数据选择器109的输出数据的内部状态值存储单元。内部状态值存储单元111包括512位的触发器,第0位到第255位形成区域0,第256位到第511位形成区域1。将来自512位的触发器的输出信号设为TEMP[511:0]。区域0存储数据TEMP_0,区域1存储数据TEMP_1。
[0570] 附图标记112-1、112-2和112-3表示执行分步处理的分步处理器。由于分步处理对应于哈希算法而不同,因此配置与各个哈希算法对应的分步处理器。分步处理器112-1对应于MD5。分步处理器112-2对应于SHA-1。分步处理器112-3对应于SHA512。预先确定存储分步处理器112-1、112-2和112-3要处理的数据的内部状态值存储单元111的区域。
[0571] MD5分步处理器112-1使用区域0作为要处理的数据的存储区域。分步处理器112-1输入区域0的数据TEMP[127:0]和来自扩展消息存储单元107的输出数据ExMSG[511:480],并输出128位的内部状态值MD5_TEMP[127:0]。
[0572] SHA1分步处理器112-2使用区域1作为要处理的数据的存储区域。分步处理器112-2输入区域1的数据TEMP[255:128]和来自扩展消息存储单元107的输出数据ExMSG[1023:992],并输出160位的内部状态值SHA1_TEMP[159:0]。
[0573] SHA512分步处理器112-3使用区域0和1作为要处理的数据的存储区域。分步处理器112-3输入区域0和1的数据TEMP[511:0]以及来自扩展消息存储单元107的输出数据ExMSG[511:480]和ExMSG[1023:992],并输出512位的内部状态值SHA512_TEMP[511:0]。
[0574] 预先确定分别存储分步处理器112-1、112-2和112-3要处理的数据的内部状态值存储单元111的区域,并连接内部状态值存储单元111作为分步处理器的输入。由于该原因,分步处理器112-1、112-2和112-3始终以内部状态值存储单元111的确定区域中的数据作为输入,来执行分步处理。
[0575] 附图标记113表示分步处理结果选择器。
[0576] 分步处理结果选择器113根据信号A_EXE、A_ALG、B_EXE和B_ALG选择:
[0577] ·来自MD5分步处理器112-1的输出数据MD5_TEMP;
[0578] ·来自SHA1分步处理器112-2的输出数据SHA1_TEMP;或
[0579] ·来自SHA512分步处理器112-3的输出数据SHA512_TEMP,并输出所选择的数据作为数据TEMP_N。数据TEMP_N[255:0]是存储在内部状态值存储单元111的区域0中的内部状态值数据,数据TEMP_N[511:256]是存储在内部状态值存储单元111的区域1中的内部状态值数据。
[0580] (数据TEMP_N[255:0]和TEMP_N[511:256]的选择)
[0581] 图39是示出数据TEMP_N[255:0]和TEMP_N[511:256]的选择策略的示例的图。
[0582] 附图标记1401表示数据TEMP_N[255:0]的数据选择策略。
[0583] ·附图标记1401-a表示正在进行处理A的MD5哈希值计算(A_EXE=1且A_ALG=MD5)的情况。在这种情况下,选择MD5分步处理器112-1的输出数据MD5_TEMP[127:0]作为低128位。
[0584] ·附图标记1401-b表示正在进行处理B的MD5哈希值计算(B_EXE=1且B_ALG=MD5)的情况。在这种情况下,选择MD5分步处理器112-1的输出数据MD5_TEMP[127:0]作为低128位。
[0585] ·附图标记1401-c表示上述情况以外的情况。在这种情况下,选择SHA512分步处理器112-3的输出数据SHA512_TEMP[127:0]。始终输出数据SHA512_TEMP[255:128],作为数据TEMP_N[255:128]。
[0586] 附图标记1402表示数据TEMP_N[511:256]的数据选择策略。
[0587] ·附图标记1402-a表示正在进行处理A的SHA1哈希值计算(A_EXE=1且A_ALG=SHA1)的情况。在这种情况下,选择SHA1分步处理器112-2的输出数据SHA1_TEMP[159:0]作为低160位。
[0588] ·附图标记1402-b表示正在进行处理B的SHA1哈希值计算(B_EXE=1且B_ALG=SHA1)的情况。在这种情况下,选择SHA1分步处理器112-2的输出数据SHA1_TEMP[159:0]作为低160位。
[0589] ·附图标记1401-c表示上述情况以外的情况。在这种情况下,选择SHA512分步处理器112-3的输出数据SHA512_TEMP[511:256]。
[0590] 始终输出数据SHA512_TEMP[511:256],作为数据TEMP_N[511:256]。
[0591] 根据图39所示的选择策略,在正在进行处理A或B的哈希值计算时,选择在对应的处理中使用的来自分步处理器的输出;在未正在进行哈希值计算时,输出SHA512分步处理器112-3的输出数据SHA512_TEMP,并将其存储在内部状态值存储单元111中。
[0592] 附图标记114表示哈希中间值存储数据选择器。哈希中间值存储数据选择器114根据信号A_EXE、A_ALG、A_BLK_CNT、A_STP_CNT、B_STP_CNT、B_ALG以及B_BLK_CNT选择哈希初始值A_IV和B_IV以及哈希中间值结果IHASH_N。接着,哈希中间值存储数据选择器114输出256位的数据IHASH_0和IHASH_1。
[0593] 数据IHASH_0存储在哈希中间值存储单元115(稍后描述)的区域0中,数据IHASH_1存储在哈希中间值存储单元115的区域1中。
[0594] (数据IHASH_0和IHASH_1的选择)
[0595] 图40是示出数据IHASH_0和IHASH_1的数据选择策略的示例的图。
[0596] 附图标记1501表示数据IHASH_0的数据选择策略。
[0597] ·附图标记1501-a表示正在进行处理A的MD5哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(A_EXE=1、A_ALG=MD5、A_BLK_CNT=0且A_STP_CNT≠65)的情况。在这种情况下,选择处理A哈希初始值的低256位A_IV[255:0]。
[0598] ·附图标记1501-b表示正在进行处理A的SHA512哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(A_EXE=1、A_ALG=SHA512、A_BLK_CNT=0且A_STP_CNT≠81)的情况。在这种情况下,选择处理A哈希初始值的低256位A_IV[255:0]。
[0599] ·附图标记1501-c表示正在进行处理B的MD5哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(B_EXE=1、B_ALG=MD5、B_BLK_CNT=0且B_STP_CNT≠65)的情况。在这种情况下,选择处理B哈希初始值的低256位B_IV[255:0]。
[0600] ·附图标记1501-d表示正在进行处理B的SHA512哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(B_EXE=1、B_ALG=SHA512、B_BLK_CNT=0且B_STP_CNT≠81)的情况。在这种情况下,选择处理B哈希初始值的低256位B_IV[255:0]。
[0601] ·附图标记1501-e表示上述情况以外的情况。在这种情况下,选择哈希中间值数据(稍后描述)的低256位IHASH_N[255:0]。
[0602] 附图标记1502表示数据IHASH_1的数据选择策略。
[0603] ·附图标记1502-a表示正在进行处理A的MD5哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(A_EXE=1、A_ALG=MD5、A_BLK_CNT=0且A_STP_CNT≠65)的情况。在这种情况下,选择处理A哈希初始值的低256位A_IV[255:0]。
[0604] ·附图标记1502-b表示正在进行处理A的SHA512哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(A_EXE=1、A_ALG=SHA512、A_BLK_CNT=0且A_STP_CNT≠81)的情况。在这种情况下,选择处理A哈希初始值的高256位A_IV[511:256]。
[0605] ·附图标记1502-c表示正在进行处理B的MD5哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(B_EXE=1、B_ALG=MD5、B_BLK_CNT=0且B_STP_CNT≠65)的情况。在这种情况下,选择处理B哈希初始值的低256位B_IV[255:0]。
[0606] ·附图标记1502-d表示正在进行处理B的SHA512哈希值计算,并且要执行第一个块中的第N个加法处理以外的加法处理(B_EXE=1、B_ALG=SHA512、B_BLK_CNT=0且B_STP_CNT≠81)的情况。在这种情况下,选择处理B哈希初始值的高256位B_IV[511:256]。
[0607] ·附图标记1502-e表示上述情况以外的情况。在这种情况下,选择哈希中间值数据(稍后描述)的高256位IHASH_N[511:256]。
[0608] 根据图40所示的选择策略,在正在进行处理A或B的哈希值计算时,选择在处理中使用的数据;否则,输出哈希中间值IHASH_N。
[0609] 附图标记115表示存储来自哈希中间值存储数据选择器114的输出数据的哈希中间值存储单元。哈希中间值存储单元115包括512位的触发器,第0位到第255位形成区域0,第256位到第511位形成区域1。将来自512位的触发器的输出信号设为IHASH[511:0]。区域0存储数据IHASH_0,区域1存储数据IHASH_1。
[0610] 如上所述,加法处理将预定次数的分步处理后的内部状态值相加,以获得作为新的哈希中间值的结果。在本实施例中,针对各周期将值与各第1到第N个分步处理后的内部状态值相加。但是,哈希中间值存储单元仅存储与第N个分步处理后的内部状态值相加的值。
[0611] 数据IHASH_0的存储条件为:
[0612] ·在正在进行处理A的MD5或SHA512哈希值计算并且要执行处理开始时的加法处理或第N个加法处理时;以及
[0613] ·在正在进行处理B的MD5或SHA512哈希值计算并且要执行处理开始时的加法处理或第N个加法处理时。
[0614] 数据IHASH_1的存储条件为:
[0615] ·在正在进行处理A的SHA1或SHA512哈希值计算并且要执行处理开始时的加法处理或第N个加法处理时;以及
[0616] ·在正在进行处理B的SHA1或SHA512哈希值计算并且要执行处理开始时的加法处理或第N个加法处理时。
[0617] 附图标记116-1、116-2和116-3表示加法处理器,各加法处理器将分步处理器112-1、112-2和112-3生成并存储在内部状态值存储单元111中的数据,与来自哈希中间值存储单元115的输出相加,以生成下一个的哈希中间值。由于加法处理器根据哈希算法而需要不同的位宽,因此配置与各个哈希算法对应的加法处理器。加法处理器116-1对应于MD5。加法处理器116-2对应于SHA1。加法处理器116-3对应于SHA512。预先确定存储加法处理器116-1、116-2和116-3要处理的数据的哈希中间值存储单元115的区域和内部状态值存储单元111的区域。
[0618] 假定MD5加法处理器116-1包括四个32位的加法器,并在哈希中间值存储单元115的区域0中存储要处理的数据。加法处理器116-1将哈希中间值存储单元115的区域
0中的数据IHASH[127:0]和内部状态值存储单元111的输出数据TEMP[127:0]相加,并输出128位的哈希中间值MD5_IHASH[127:0]。
[0619] 假定SHA1加法处理器116-2包括五个32位的加法器,并在哈希中间值存储单元115的区域1中存储要处理的数据。加法处理器116-2将哈希中间值存储单元115的区域
1中的数据IHASH[511:256]和内部状态值存储单元111的输出数据TEMP[511:256]相加,并输出160位的哈希中间值SHA1_IHASH[159:0]。
[0620] 假定SHA512加法处理器116-3包括八个64位的加法器,并在哈希中间值存储单元115的区域0和1中存储要处理的数据。加法处理器116-3将哈希中间值存储单元115的区域0和1中的数据IHASH[511:0]和内部状态值存储单元111的输出数据TEMP[511:0]相加,并输出512位的哈希中间值SHA512_IHASH[255:0]。
[0621] 加法处理器116-1、116-2和116-3确定存储它们要处理的数据的内部状态值存储单元111的区域,并连接内部状态值存储单元111作为它们的输入。由于该原因,加法处理器116-1、116-2和116-3始终以内部状态值存储单元111的确定区域中的数据作为输入,来执行加法处理。
[0622] 附图标记117表示哈希中间值结果选择器。哈希中间值结果选择器117根据信号A_EXE、A_ALG、B_EXE和B_ALG选择:
[0623] ·MD5加法处理器116-1的输出数据MD5_IHASH;
[0624] ·SHA1加法处理器116-2的输出数据SHA1_IHASH;或
[0625] ·SHA512加法处理器116-3的输出数据SHA512_IHASH,并输出所选择的数据作为数据IHASH_N。数据IHASH_N[255:0]是存储在哈希中间值存储单元115的区域0中的哈希中间值数据,数据IHASH_N[511:256]是存储在哈希中间值存储单元115的区域1中的哈希中间值数据。
[0626] (数据IHASH_N[255:0]和IHASH_N[511:256]的选择)
[0627] 图41是示出数据IHASH_N[255:0]和IHASH_N[511:256]的数据选择策略的示例的图。
[0628] 附图标记1601表示数据IHASH_N[255:0]的数据选择策略。
[0629] ·附图标记1601-a表示正在进行处理A的MD5哈希值计算(A_EXE=1且A_ALG=MD5)的情况。在这种情况下,选择MD5加法处理器116-1的输出数据MD5_IHASH[127:0]作为低128位。
[0630] ·附图标记1601-b表示正在进行处理B的MD5哈希值计算(B_EXE=1且B_ALG=MD5)的情况。在这种情况下,选择MD5加法处理器116-1的输出数据MD5_IHASH[127:0]作为低128位。
[0631] ·附图标记1601-c表示上述情况以外的情况。在这种情况下,选择SHA512加法处理器116-3的输出数据SHA512_IHASH[255:0]。
[0632] 始终输出数据SHA512_IHASH[255:128],作为数据IHASH_N[255:128]。
[0633] 附图标记1602表示数据IHASH_N[511:256]的数据选择策略。
[0634] ·附图标记1602-a表示正在进行处理A的SHA1哈希值计算(A_EXE=1且A_ALG=SHA1)的情况。在这种情况下,选择SHA1加法处理器116-2的输出数据SHA1_IHASH[159:0]作为低160位。
[0635] ·附图标记1602-b表示正在进行处理B的SHA1哈希值计算(B_EXE=1且B_ALG=SHA1)的情况。在这种情况下,选择SHA1加法处理器116-2的输出数据SHA1_IHASH[159:0]作为低160位。
[0636] ·附图标记1602-c表示上述情况以外的情况。在这种情况下,选择SHA512加法处理器116-3的输出数据SHA512_IHASH[511:256]。始终输出数据SHA512_IHASH[511:416],作为数据IHASH_N[511:416]。
[0637] 根据图41的选择策略,在正在进行处理A或B的哈希值计算时,选择在处理中使用的来自分步处理器的输出。在未正在进行哈希值计算时,输出SHA512加法处理器116-3的输出数据SHA512_IHASH,并将其存储在哈希中间值存储单元115中。
[0638] (控制器的内部配置)
[0639] 图26是示出控制器101的内部配置的示例的框图。参照图26,附图标记201表示控制处理A的处理A控制器。处理A控制器201包括用于设置哈希值计算所需的参数的处理A寄存器组202、对正在执行的块的数量进行计数的块计数器A 203以及对正在执行的步骤的数量进行计数的步骤计数器A204。
[0640] 图27是示出寄存器的规格的图。图27中的附图标记301到304表示包括在处理器A寄存器组202中的寄存器的规格。
[0641] 附图标记301表示用于设置处理A的哈希值计算的开始请求的寄存器A_ENB。当在该寄存器中设置“1”时,寄存器发出开始哈希值计算的指令。在完成哈希值计算时,该寄存器自动清零。附图标记302表示用于设置哈希算法的寄存器A_ALG。在该寄存器中,通过设置“00”来选择MD5,通过设置“01”来选择SHA1,并通过设置“10”来选择SHA512。附图标记303表示用于设置进行哈希值计算的消息的块的数量的寄存器A_BLK。在该寄存器中设置进行哈希值计算的消息的块的数量-1的值。附图标记304表示用于设置哈希值计算中使用的初始值的寄存器。初始值由各哈希算法规定。
[0642] 当在寄存器A_ENB 301中设置“1”以请求开始哈希值计算时,处理A控制器201向共享资源管理器209(稍后描述)发出执行在寄存器A_ALG中设置的哈希值计算所需的以下内容的使用请求:
[0643] ·扩展消息存储单元的区域;
[0644] ·内部状态值存储单元的区域;
[0645] ·消息扩展处理器;
[0646] ·分步处理器;以及
[0647] ·加法处理器
[0648] (下文将这些处理器总称为处理引擎)。更具体而言,处理A控制器201发出扩展消息存储单元的特定区域的使用请求信号A_ExMSG_REQ,并从共享资源管理器209接收使用许可信号A_ExMSG_ACK。处理A控制器201发出内部状态值存储单元的特定区域的使用请求信号A_TEMP_REQ,并从共享资源管理器209接收使用许可信号A_TEMP_ACK。处理A控制器201发出特定哈希算法的处理引擎的使用请求信号A_ENG_REQ,并从共享资源管理器209接收使用许可信号A_ENG_ACK。
[0649] 附图标记205表示控制处理B的处理B控制器。与在处理A控制器201中相同,处理B控制器205包括处理B寄存器组206、块计数器B 207以及步骤计数器B 208。图27中的附图标记305到308表示包括在处理B寄存器组206中的寄存器规格。
[0650] 附图标记305表示用于设置处理B的哈希值计算的开始请求的寄存器。附图标记306表示用于设置哈希算法的寄存器。附图标记307表示用于设置进行哈希值计算的消息的块的数量的寄存器。该寄存器307设置进行哈希值计算的消息的块的数量-1的值。附图标记308表示用于设置在哈希值计算中使用的初始值的寄存器。寄存器的规格与包括在处理A寄存器组202中的寄存器301到304的规格相同。
[0651] 当在寄存器B_ENB 305中设置“1”以请求开始哈希值计算时,处理B控制器205向共享资源管理器209发出执行在寄存器B_ALG中设置的哈希值计算所需的以下内容的使用请求:
[0652] ·扩展消息存储单元的区域;
[0653] ·内部状态值存储单元的区域;以及
[0654] ·处理引擎。
[0655] 更具体而言,处理B控制器205发出扩展消息存储单元的特定区域的使用请求信号B_ExMSG_REQ,并从共享资源管理器209接收使用许可信号B_ExMSG_ACK。处理B控制器205发出内部状态值存储单元的特定区域的使用请求信号B_TEMP_REQ,并从共享资源管理器209接收使用许可信号B_TEMP_ACK。处理B控制器205发出特定哈希算法的处理引擎的使用请求信号B_ENG_REQ,并从共享资源管理器209接收使用许可信号B_ENG_ACK。
[0656] 附图标记209表示管理处理A和B共享的资源的共享资源管理器。处理A和B共享的资源包括:
[0657] ·扩展消息存储单元107;
[0658] ·内部状态值存储单元111;
[0659] ·哈希中间值存储单元115;
[0660] ·消息扩展处理器108-1、108-2和108-3;
[0661] ·分步处理器112-1、112-2和112-3;以及
[0662] ·加法处理器116-1,116-2和116-3。
[0663] 附图标记210表示管理扩展消息存储单元107的使用区域的扩展消息存储区域仲裁器。当处理A和B发出同一区域的使用请求时,扩展消息存储区域仲裁器210对这些请求进行仲裁,并给予使用许可。
[0664] 附图标记211表示内部状态值存储区域仲裁器。当处理A和B发出同一区域的使用请求时,内部状态值存储区域仲裁器211对这些请求进行仲裁,并给予使用许可。将哈希中间值存储单元115分割成具有与内部状态值存储单元111的区域相同的区域,在给予内部状态值寄存器单元111的给定区域的使用许可时,同时给予哈希中间值存储单元115的相同区域的使用许可。
[0665] 附图标记212表示管理消息扩展处理器108-1、108-2和108-3的使用的处理引擎仲裁器。当处理A和B发出同一哈希算法的消息扩展处理器的使用请求时,处理引擎仲裁器212对这些请求进行仲裁,并给予使用许可。在给予消息扩展处理器的使用许可时,也给予同一哈希算法的分步处理器和加法处理器的使用许可。
[0666] 附图标记213表示指示处理A的执行状态的A_EXE。在A_EXE=1时,其指示“正在执行”的状态。在给予扩展消息存储单元的使用许可A_ExMSG_ACK、内部状态值存储区域的使用许可A_TEMP_ACK和处理引擎的使用许可A_ENG_ACK时,设置A_EXE=1(正在执行)。
[0667] 附图标记214表示指示处理B的执行状态的门B_EXE。在B_EXE=1时,其指示“正在执行”的状态。在给予扩展消息存储单元的使用许可B_ExMSG_ACK、内部状态值存储区域的使用许可B_TEMP_ACK和处理引擎的使用许可B_ENG_ACK时,设置B_EXE=1(正在执行)。
[0668] (系统配置示例)
[0669] 图28是示出操作哈希值计算电路100的系统的配置示例的框图。
[0670] 附图标记400表示哈希值计算系统。附图标记401表示控制哈希值计算系统400的操作的CPU。附图标记402表示存储进行哈希值计算的消息和哈希值等的存储器。附图标记403表示将处理A的输入消息从存储器402传输到哈希值计算电路100,并将处理A的哈希值计算结果从哈希值计算电路100传输到存储器402的DMAC A。附图标记404表示将处理B的输入消息从存储器402传输到哈希值计算电路100,并将处理B的哈希值计算结果从哈希值计算电路100传输到存储器402的DMAC B。附图标记405表示控制哈希值计算系统400的中断信号的中断控制器。
[0671] 附图标记406表示连接哈希值计算电路100、CPU 401、存储器402、DMAC A 403、DMAC B 404和中断控制器405的总线,其包括地址信号、数据信号和控制信号等。附图标记407表示从DMAC A 403到中断控制器405的中断信号。在将处理A的哈希值计算结果从哈希值计算电路100传输到存储器402以后,DMAC A 403生成中断信号以将传输完成通知给中断控制器405。附图标记408表示从DMAC B 404到中断控制器405的中断信号。在将处理B的哈希值计算结果从哈希值计算电路100传输到存储器402以后,DMAC B 404生成中断信号以将传输完成通知给中断控制器405。中断控制器405使用中断信号(未示出)将哈希值计算结果的存储通知给CPU 401。
[0672] (CPU的操作)
[0673] 图29A、图29B和图29C是示出本实施例的哈希值计算系统中的针对各消息接收的CPU的操作序列的流程图。附图标记501表示接收消息时的序列。在CPU接收消息时,在ST001中CPU决定处理A还是B对所接收的消息进行处理。CPU 401包括指示处理A和B的处理状态的处理状态表。处理状态表指示“繁忙”或“空闲”。CPU决定“空闲”的处理A或B作为用于处理消息的处理。假定在处理A和B都“空闲”时,处理A具有更高优先级。如果处理A和B都“繁忙”时,CPU等待,直到它们中的一个变成“空闲”为止。如果CPU决定处理A,则在ST002中CPU将处理状态表中的处理A的状态更新为“繁忙”,并启动处理A线程。如果CPU决定处理B,则在ST003中CPU将处理状态表中的处理B的状态更新为“繁忙”,并启动处理B线程。
[0674] 附图标记502表示在启动线程A时执行的序列。在启动处理A线程时,在ST004中,CPU在DMAC A的寄存器中进行用于将消息从存储器402传输到哈希值计算电路100的输入传输设置和用于将哈希值从哈希值计算电路100传输到存储器402的输出传输设置,并启动处理A线程。在ST005中,CPU进行用于哈希值计算电路100的处理A寄存器组中的哈希值计算的设置,并发出处理开始请求。CPU等待DMAC A的数据输出传输的完成(ST006),并结束处理A线程。
[0675] 附图标记503表示在启动线程B时执行的序列。在启动处理B线程时,在ST009中,CPU在DMAC B的寄存器中进行用于将消息从存储器402传输到哈希值计算电路100的输入传输设置和用于将哈希值从哈希值计算电路100传输到存储器402的输出传输设置,并启动处理B线程。在ST010中,CPU进行用于哈希值计算电路100的处理B寄存器组中的哈希值计算的设置,并发出处理开始请求。CPU等待DMAC B的数据输出传输的完成(ST011),并结束处理B线程。
[0676] 附图标记504表示在接收处理A线程结束通知时的序列。在ST014中,CPU将处理状态表中的处理A的状态更新为“空闲”。附图标记505表示在接收处理B线程结束通知时的序列。在ST015中,CPU将处理状态表中的处理B的状态更新为“空闲”。
[0677] (哈希值计算电路的操作)
[0678] 图30A和图30B是示出本实施例的哈希值计算系统中的哈希值计算电路100的操作序列的流程图。
[0679] 附图标记600表示接收处理A开始请求时的序列。当CPU在处理A作业开始设置寄存器301中设置“1”时,接收处理A开始请求。在接收处理A开始请求时,处理A控制器201根据处理A哈希算法设置寄存器302中的值A_ALG发出共享资源使用请求A_ExMSG_REQ、A_TEMP_REQ和A_ENG_REQ(ST101-A)。
[0680] 处理A控制器201等待共享资源管理器209给予许可(确认)A_ExMSG_ACK、A_TEMP_ACK和A_ENG_ACK(ST102-A)。在给予许可A_ExMSG_ACK、A_TEMP_ACK和A_ENG_ACK后,处理A控制器201向DMAC A发出数据输入传输请求(ST103-A)。在ST102-A中接收到确认时,处理A控制器201开始处理,并更新步骤计数器A_STP_CNT+1(ST105-A)。在ST106-A中,处理A控制器201确定在哈希算法中规定的针对一个块的数据传输是否完成。如果数据传输尚未完成,则处理返回到ST103-A以重新发出数据输入传输请求。如果数据传输完成,则数据输入传输完成,处理进行到ST107-A。在ST107-A中,处理A控制器201更新步骤计数器+1。
[0681] 在ST108-A中,处理A控制器201确定A_STP_CNT是否超过在哈希算法中规定的值+1。处理A控制器201重复ST107-A,直到超过规定值+1。如果超过规定值+1,则处理A控制器201将步骤计数器清零,并更新块计数器A_BLK_CNT+1(ST109-A)。在ST110-A中,处理A控制器201确定A_BLK_CNT是否超过在处理A块计数设置寄存器303中设置的值A_BLK-1。处理A控制器201输入数据并执行哈希值计算,直到超过A_BLK-1。如果A_BLK_CNT超过A_BLK-1,则处理A控制器201将块计数器清零(ST111-A)。为了输出哈希值,在ST112-A中,处理A控制器201向DMAC A发出数据输出传输请求,并在ST113-A中等待确认。处理A控制器201重复ST112-A和ST113-A,直到针对哈希值的数据传输完成。
[0682] 如果针对哈希值的数据传输完成,则处理A控制器201将处理A作业开始设置寄存器301清零(ST115-A),并拒绝共享资源使用请求A_ExMSG_REQ、A_TEMP_REQ和A_ENG_REQ(ST116-A),从而结束该处理。
[0683] 附图标记601表示接收处理B开始请求时的序列。当CPU在处理B作业开始设置寄存器305中设置“1”时,接收处理B开始请求。在接收处理B开始请求时,处理B控制器205根据处理B哈希算法设置寄存器306中的值B_ALG,发出共享资源使用请求B_ExMSG_REQ、B_TEMP_REQ和B_ENG_REQ(ST101-B)。处理B控制器205等待共享资源管理器209给予许可(确认)B_ExMSG_ACK、B_TEMP_ACK和B_ENG_ACK(ST102-B)。在给予许可B_ExMSG_ACK、B_TEMP_ACK和B_ENG_ACK后,处理B控制器205向DMAC B发出数据输入传输请求(ST103-B)。在ST102-B中接收到确认时,处理B控制器205开始处理,并更新步骤计数器B_STP_CNT+1(ST105-B)。
[0684] 在ST106-B中,处理B控制器205确定在哈希算法中规定的针对一个块的数据传输是否完成。如果数据传输尚未完成,则处理返回到ST103-B,以重新发出数据输入传输请求。如果数据传输完成,则数据输入传输完成,处理进行到ST107-B。在ST107-B中,处理B控制器205更新步骤计数器+1。在ST108-B中,处理B控制器205确定B_STP_CNT是否超过在哈希算法中规定的值+1。处理B控制器205重复ST107-B,直到超过规定值+1。如果超过规定值+1,则处理B控制器205将步骤计数器清零,并更新块计数器B_BLK_CNT+1(ST109-B)。在ST110-B中,处理B控制器205确定B_BLK_CNT是否超过在处理B块计数设置寄存器307中设置的值B_BLK-1。处理B控制器205输入数据并执行哈希值计算,直到超过B_BLK-1。如果B_BLK_CNT超过B_BLK-1,则处理B控制器205将块计数器清零(ST111-B)。为了输出哈希值,在ST112-B中,处理B控制器205向DMAC B发出数据输出传输请求,并在ST113-B中等待确认。处理B控制器205重复ST112-B和ST113-B,直到针对哈希值的数据传输完成。如果针对哈希值的数据传输完成,则处理B控制器205将处理B作业开始设置寄存器305清零(ST115-B),并拒绝共享资源使用请求B_ExMSG_REQ、B_TEMP_REQ和B_ENG_REQ(ST116-B),从而结束该处理。
[0685] (消息示例)
[0686] 图31是示出作为在本实施例中进行哈希值计算的三个消息的消息A、消息B和消息C的示例的图。假定消息A包括使用哈希算法MD5执行哈希值计算的请求。消息A包括各自包含16个字(512位)的共计两个块。消息B包括使用哈希算法SHA1执行哈希值计算的请求。消息B包括包含16个字(512位)的共计一个块。消息C包括使用哈希算法SHA512执行哈希值计算的请求。消息C包括各自包含16个字(1024位)的共计八个块。
[0687] (处理的详细情况)
[0688] 图32A至图33H是CPU 401以指定的顺序接收消息A、消息B和消息C时的时序图。
[0689] 假定在T00前接收了消息A。在接收到消息A时,CPU 401根据图29A、29B和29C所示的CPU操作序列进行操作,在ST001中决定要在哈希值计算中使用处理A。在ST005中,CPU 401设置哈希值计算电路100中的处理A寄存器组。CPU 401在寄存器A_ALG(302)中设置指示MD5的“00”,在寄存器A_BLK(303)中设置“1”,在寄存器A_IV(304)中设置在MD5算法中规定的值,在寄存器A_ENG(301)中设置“1”,并发出哈希值计算开始请求。在接收到处理A开始请求时,哈希值计算电路100根据图30A所示的哈希值计算电路的操作序列进行操作,并且在ST101-A中,哈希值计算电路100(或控制器101)向共享资源管理器209发出MD5哈希值计算所需的以下使用请求:
[0690] ·扩展消息存储单元107的区域0的使用请求;
[0691] ·内部状态值存储单元111的区域0的使用请求;以及
[0692] ·MD5处理引擎的使用请求。
[0693] 由于处理B不使用这些资源,因此共享资源管理器209给予使用许可A_ExMSG_ACK、A_TEMP_ACK和A_ENG_ACK,从而开始处理。在给予许可A_ExMSG_ACK、A_TEMP_ACK和A_ENG_ACK时,设置A_EXE=1(T00)。
[0694] 在T00中,A_EXE=“1”,并且A_ALG=MD5。由于该原因,消息扩展处理结果选择器109选择MD5消息扩展处理器108-1的处理结果MD5_ExMSG[31:0]作为输出ExMSG_N[31:
0]。接着,分步处理结果选择器113选择MD5分步处理器112-1的处理结果MD5_TEMP[127:
0]作为输出TEMP_N[127:0]。此外,加法处理结果选择器117选择MD5加法处理器116-1的处理结果MD5_IHASH[127:0]作为输出IHASH_N[127:0]。控制器101向DMAC A发出数据输入传输请求A_DMA_REQ[0]。
[0695] 在T01中,在断言信号A_DMA_ACK[0]时,控制器101从下一个时钟的前沿开始更新步骤计数器A_STP_CNT。计数器A_STP_CNT针对各时钟周期通过+1来进行更新,并在计数器A_STP_CNT计数到65时,将其清除为零。
[0696] 在区间T01-T06中,传输第一个块的输入消息的16个字,DMA IF单元103输出数据A_DMA_IDATA[63:0]作为数据A_MSG[63:0]。扩展消息存储数据选择器106选择输入消息数据A_MSG[31:0]作为输出ExMSG_0[31:0]。
[0697] 在区间T01-T06中,MD5消息扩展处理器108-1使用扩展消息存储单元107的区域0作为要处理的数据来执行处理。但是,由于扩展消息存储数据选择器106未选择处理结果ExMSG_N[31:0],因此其不在扩展消息存储单元107中存储任何数据。在区间T02-T07中,扩展消息存储单元107存储第1到第16个扩展消息(输入消息)。
[0698] 在区间T02-T07中,MD5分步处理器112-1使用存储在扩展消息存储单元107中的第1到第16个扩展消息作为要处理的数据来执行处理,并生成第1到第16个内部状态值。在区间T03-T08中,将处理结果存储到内部状态值存储单元111中。在区间T0-T1中,内部状态值存储数据选择器110输出哈希初始值A_IV[255:0]作为输出TEMP_0[255:0],并从T02开始通过选择MD5分步处理结果来输出值TEMP_N[255:0]。因此,在T02中,MD5分步处理器112-1使用哈希初始值和第一输入消息来生成第一内部状态值。在区间T03-T08中,MD5分步处理器112-1使用第(n-1)个内部状态值和第n个输入消息来生成第n个内部状态值(n=2到16)。
[0699] 在区间T03-T08中,MD5加法处理器116-1使用存储在内部状态值存储单元111中的第1到第16个分步处理数据作为要处理的数据,来执行针对第1到第16个内部状态值的加法处理。但是,由于哈希中间值存储数据选择器114未选择处理结果IHASH_N[255:0],因此其不在哈希中间值存储单元115中存储任何数据。
[0700] 在区间T07-T17中,扩展消息存储数据选择器106选择作为MD5消息扩展处理器108-1的处理结果的数据ExMSG[31:0]作为输出ExMSG_0[31:0]。
[0701] 在区间T07-T17中,MD5消息扩展处理器108-1使用存储在扩展消息存储单元107的区域0中的16个字的数据作为要处理的数据,来生成第17个到第64个扩展消息。在区间T08-T20中,将处理结果存储到扩展消息存储单元107中。扩展消息存储数据选择器106通过选择MD5扩展处理结果来输出数据ExMSG_N[31:0]。接着,MD5消息扩展处理器108-1使用16个字的第(n-16)到第(n-1)个扩展消息来生成第n个扩展消息(n=17到64)。
[0702] 在区间T08-T18中,MD5分步处理器112-1使用存储在扩展消息存储单元107中的第17到第64个扩展消息作为要处理的数据来执行处理,并生成第17到第64个内部状态值。在区间T09-T19中,将处理结果存储到内部状态值存储单元111中。内部状态值存储数据选择器110通过选择MD5分步处理结果来输出值TEMP_N[255:0]。因此,在区间T08-T18中,MD5分步处理器112-1使用第(n-1)个内部状态值和第n个输入消息生成第n个内部状态值(n=17到64)。
[0703] 在区间T09-T19中,MD5加法处理器116-1使用存储在内部状态值存储单元111中的第17到第64个分步处理数据作为要处理的数据,来执行针对第17到第64个内部状态值的加法处理。针对在T19中生成的第64个内部状态值的加法处理结果是第一个块的哈希中间值。在区间T0-T18中,哈希中间值存储数据选择器114输出哈希初始值A_IV[255:0],并从T19开始输出值IHASH_N[255:0]。因此,在T19中,MD5加法处理器116-1执行哈希初始值和第64个内部状态值的加法处理,并在T20中将处理结果存储到哈希中间值存储单元115中。
[0704] 在T20中,将步骤计数器A_STP_CNT清除为零,块计数器A_BLK_CNT向上计数到1。由于A_BLK_CNT没有超过A_BLK值“1”,因此控制器101向DMAC A发出下一个块的数据输入传输请求A_DMA_REQ[0]。
[0705] 在T21中断言信号A_DMA_ACK[0]时,控制器101从下一个时钟的前沿开始更新步骤计数器A_STP_CNT。计数器A_STP_CNT针对各时钟周期通过+1来进行更新,并在计数器A_STP_CNT计数到65时,将其清除为零。
[0706] 在区间T21-T26中,传输第二个块的输入消息的16个字,DMA IF单元103输出数据A_DMA_IDATA[63:0]作为数据A_MSG[63:0]。扩展消息存储数据选择器106选择输入消息数据A_MSG[31:0]作为输出ExMSG_0[31:0]。
[0707] 在区间T21-T26中,MD5消息扩展处理器108-1使用扩展消息存储单元107的区域0作为要处理的数据来执行处理。但是,由于扩展消息存储数据选择器106未选择处理结果ExMSG_N[31:0],因此其不在扩展消息存储单元107中存储任何数据。在区间T22-T27中,扩展消息存储单元107存储第1到第16个扩展消息(输入消息)。
[0708] 在区间T22-T27中,MD5分步处理器112-1使用存储在扩展消息存储单元107中的第1到第16个扩展消息作为要处理的数据来执行处理,并生成第1到第16个内部状态值。在区间T23-T28中,将处理结果存储到内部状态值存储单元111中。在区间T20-T21中,内部状态值存储数据选择器110输出值IHASH[255:0]作为输出TEMP_0[255:0],并从T22开始通过选择MD5分步处理结果来输出值TEMP_N[255:0]。因此,在T22中,MD5分步处理器112-1使用前一个块的哈希中间值和第一输入消息来生成第一内部状态值。在区间T23-T28中,MD5分步处理器112-1使用第(n-1)个内部状态值和第n个输入消息生成第n个内部状态值(n=2到16)。
[0709] 在区间T23-T28中,MD5加法处理器116-1使用存储在内部状态值存储单元111中的第1到第16个分步处理数据作为要处理的数据,来执行针对第1到第16个内部状态值的加法处理。但是,由于不满足哈希中间值存储单元115的存储条件,因此不存储处理结果。
[0710] 在区间T27-T42中,扩展消息存储数据选择器106选择作为MD5消息扩展处理器108-1的处理结果的数据ExMSG[31:0]作为输出ExMSG_0[31:0]。
[0711] 在区间T27-T42中,MD5消息扩展处理器108-1使用存储在扩展消息存储单元107的区域0中的16个字的数据作为要处理的数据来生成第17个到第64个扩展消息。在区间T28-T43中,将处理结果存储到扩展消息存储单元107中。扩展消息存储数据选择器106通过选择MD5扩展处理结果来输出数据ExMSG_N[31:0]。接着,MD5消息扩展处理器108-1使用16个字的第(n-16)到第(n-1)个扩展消息来生成第n个扩展消息(n=17到64)。
[0712] 在区间T28-T43中,MD5分步处理器112-1使用存储在扩展消息存储单元107中的第17到第64个扩展消息作为要处理的数据来执行处理,并生成第17到第64个内部状态值。在区间T29-T44中,将处理结果存储到内部状态值存储单元111中。内部状态值存储数据选择器110通过选择MD5分步处理结果来输出值TEMP_N[255:0]。因此,在区间T28-T43中,MD5分步处理器112-1使用第(n-1)个内部状态值和第n个输入消息,来生成第n个内部状态值(n=17到64)。
[0713] 在区间T29-T44中,MD5加法处理器116-1使用存储在内部状态值存储单元111中的第17到第64个分步处理数据作为要处理的数据,来执行针对第17到第64个内部状态值的加法处理。针对在T4中生成的第64个内部状态值的加法处理结果是第二个块的哈希中间值。由于哈希中间值存储单元115存储前一个块的哈希中间值,因此执行前一个块的哈希中间值和第64个内部状态值的加法处理,并在T45中将处理结果存储到哈希中间值存储单元115中。
[0714] 在T45中,将步骤计数器A_STP_CNT清除为零,块计数器A_BLK_CNT向上计数到2。由于A_BLK_CNT超过A_BLK值“1”,因此控制器101将块计数器A_BLK_CNT清零并向DMAC_A发出哈希值的数据输出传输请求A_DMA_REQ[1]。
[0715] 在区间T46-T47中,断言信号A_DMA_ACK[1],并进行128位的MD5哈希值的输出传输。
[0716] 哈希值计算电路100根据图30A所示的哈希值计算电路100的操作序列进行操作,并在ST116-A中拒绝执行MD5哈希值计算所需的以下使用请求:
[0717] ·扩展消息存储单元107的区域0的使用请求;
[0718] ·内部状态值存储单元111的区域0的使用请求;以及
[0719] ·MD5处理引擎108-1、112-1和116-1的使用请求。接着哈希值计算电路100完成消息A的哈希值计算。由于拒绝了使用请求,因此也拒绝了使用许可A_ExMSG_ACK、A_TEMP_ACK和A_ENG_ACK,从而设置A_EXE=1(T48)。
[0720] 另一方面,假定在T05中接收了消息B。在接收到消息B时,CPU 401根据图29A、29B和29C所示的CPU操作序列进行操作。在ST001中,由于处理A正在处理消息,因此CPU决定将在哈希值计算中使用处理B。在ST011中,CPU 401设置哈希值计算电路100的处理B寄存器组。CPU401在寄存器B_ALG(306)中设置指示SHA1的“01”,在寄存器B_BLK(307)中设置“0”,在寄存器B_IV(308)中设置在SHA1算法中规定的值,在寄存器B_ENB(305)中设置“1”,并发出哈希值计算开始请求。在接收到处理B开始请求时,哈希值计算电路100根据图30B所示的哈希值计算电路的操作序列进行操作,在ST101-B中哈希值计算电路
100(或控制器101)向共享资源管理器209发出SHA1哈希值计算所需的以下使用请求:
[0721] ·扩展消息存储单元107的区域1的使用请求;
[0722] ·内部状态值存储单元111的区域1的使用请求;以及
[0723] ·SHA1处理引擎的使用请求。
[0724] 由于处理A不使用这些资源,因此共享资源管理器209给予使用许可B_ExMSG_ACK、B_TEMP_ACK和B_ENG_ACK从而开始处理。在给予许可B_ExMSG_ACK、B_TEMP_ACK和B_ENG_ACK时,设置B_EXE=1(T06)。
[0725] 在T06中,B_EXE=“1”并且B_ALG=SHA1。响应于此,消息扩展处理结果选择器109选择SHA1消息扩展处理器108-2的处理结果SHA1_ExMSG[31:0]作为输出ExMSG_N[63:32]。接着,分步处理结果选择器113选择SHA1分步处理器112-2的处理结果SHA1_TEMP[127:0]作为输出TEMP_N[255:128]。此外,加法处理结果选择器117选择SHA1加法处理器116-2的处理结果SHA1_IHASH[159:0]作为输出IHASH_N[511:256]。控制器101向DMAC B发出数据输入传输请求B_DMA_REQ[0]。
[0726] 在T07中,在断言信号B_DMA_ACK[0]时,控制器101从下一个时钟的前沿开始更新步骤计数器B_STP_CNT。计数器B_STP_CNT针对各时钟周期通过+1进行更新,并在计数器B_STP_CNT计数到81时,将其清除为零。
[0727] 在区间T06-T12中,传输第一个块的输入消息的16个字,并且DMAIF单元103输出数据B_DMA_IDATA[63:0]作为数据B_MSG[63:0]。扩展消息存储数据选择器106选择输入消息数据B_MSG[31:0]作为输出ExMSG_1[31:0]。
[0728] 在区间T06-T12中,SHA1消息扩展处理器108-2使用扩展消息存储单元107的区域1作为要处理的数据来执行处理。但是,由于扩展消息存储数据选择器106未选择处理结果ExMSG_N[63:32],因此其不在扩展消息存储单元107中存储任何数据。在区间T07-T13中,扩展消息存储单元107存储第1到第16个扩展消息(输入消息)。
[0729] 在区间T07-T13中,SHA1分步处理器112-2使用存储在扩展消息存储单元107中的第1到第16个扩展消息作为要处理的数据来执行处理,并生成第1到第16个内部状态值。在区间T08-T14中,将处理结果存储到内部状态值存储单元111中。在区间T06-T07中,内部状态值存储数据选择器110输出哈希初始值B_IV[255:0]作为输出TEMP_1[255:0],并从T08开始通过选择SHA1分步处理结果来输出值TEMP_N[511:256]。因此,在T08中,SHA1分步处理器112-2使用哈希初始值和第一输入消息来生成第一内部状态值。在区间T09-T13中,SHA1分步处理器112-2使用第(n-1)个内部状态值和第n个输入消息,来生成第n个内部状态值(n=2到16)。
[0730] 在区间T08-T14中,SHA1加法处理器116-2使用存储在内部状态值存储单元111中的第1到第16个分步处理数据作为要处理的数据,来执行针对第1到第16个内部状态值的加法处理。但是,由于哈希中间值存储数据选择器114未选择处理结果IHASH_N[511:256],因此其不在哈希中间值存储单元115中存储任何数据。
[0731] 在区间T13-T32中,扩展消息存储数据选择器106选择作为SHA1消息扩展处理器108-2的处理结果的数据ExMSG[63:32]作为输出ExMSG_1[31:0]。
[0732] 在区间T13-T32中,SHA1消息扩展处理器108-2使用存储在扩展消息存储单元107的区域1中的16个字的数据作为要处理的数据,来生成第17个到第80个扩展消息。
在区间T14-T33中将处理结果存储到扩展消息存储单元107中。扩展消息存储数据选择器
106通过选择SHA1扩展处理结果来输出数据ExMSG_N[31:0]。接着,SHA1消息扩展处理器
108-2使用16个字的第(n-16)到第(n-1)个扩展消息,来生成第n个扩展消息(n=17到
80)。
[0733] 在区间T14-T33中,SHA1分步处理器112-2使用存储在扩展消息存储单元107中的第17到第80个扩展消息作为要处理的数据来执行处理,并生成第17到第80个内部状态值。在区间T15-T34中,将处理结果存储到内部状态值存储单元111中。内部状态值存储数据选择器110通过选择SHA1分步处理结果来输出值TEMP_N[511:256]。因此,在区间T14-T33中,SHA1分步处理器112-2使用第(n-1)个内部状态值和第n个输入消息,来生成第n个内部状态值(n=17到80)。
[0734] 在区间T15-T34中,SHA1加法处理器116-2使用存储在内部状态值存储单元111中的第17到第80个分步处理数据作为要处理的数据,来执行针对第17到第80个内部状态值的加法处理。针对在T34中生成的第80个内部状态值的加法处理结果是第一个块的哈希中间值。在区间T06-T33中,哈希中间值存储数据选择器114输出哈希初始值B_IV[255:0],并从T34开始输出值IHASH_N[255:0]。因此,在T34中SHA1加法处理器116-2执行哈希初始值和第80个内部状态值的加法处理,并在T35中将处理结果存储到哈希中间值存储单元115中。
[0735] 在T35中,将步骤计数器B_STP_CNT清除为零,块计数器B_BLK_CNT向上计数到1。由于B_BLK_CNT超过B_BLK值“0”,因此控制器101将块计数器B_BLK_CNT清零,并向DMAC B发出哈希值的数据输出传输请求B_DMA_REQ[1]。
[0736] 在区间T36-T38中,断言信号B_DMA_ACK[1],并进行160位的SHA1哈希值的输出传输。哈希值计算电路100根据图30B所示的哈希值计算电路100的操作序列进行操作,并在ST116-B中拒绝执行SHA1哈希值计算所需的以下使用请求:
[0737] ·扩展消息存储单元107的区域1的使用请求;
[0738] ·内部状态值存储单元111的区域1的使用请求;以及
[0739] ·SHA1处理引擎108-2、112-2和116-2的使用请求。
[0740] 接着哈希值计算电路100完成消息B的哈希值计算。在拒绝使用许可B_ExMSG_ACK、B_TEMP_ACK和B_ENG_ACK时,设置B_EXE=0(T39)。
[0741] 此外,假定在消息B的哈希值计算完成后、在消息A的哈希值计算完成前接收了消息C。在接收到消息C时,CPU 401根据图29A、29B和29C所示的CPU操作序列进行操作。在ST001中,由于处理A正在处理消息,因此CPU决定在哈希值计算中使用处理B。在ST011中,CPU 401设置哈希值计算电路100的处理B寄存器组。CPU 401在寄存器B_ALG(306)中设置指示SHA512的“10”,在寄存器B_BLK(307)中设置“7”,在寄存器B_IV(308)中设置在SHA512算法中规定的值,在寄存器B_ENB(305)中设置“1”,并发出哈希值计算开始请求。
[0742] 在接收到处理B开始请求时,哈希值计算电路100根据图30B所示的哈希值计算电路的操作序列进行操作,并且在ST101-B中哈希值计算电路100(或控制器101)向共享资源管理器209发出SHA512哈希值计算所需的以下使用请求:
[0743] ·扩展消息存储单元107的区域0和区域1的使用请求;
[0744] ·内部状态值存储单元111的区域0和区域1的使用请求;以及
[0745] ·SHA512处理引擎的使用请求。
[0746] 由于处理A使用扩展消息存储单元107的区域0和内部状态值存储单元111的区域0,因此共享资源管理器209不给予使用许可B_ExMSG_ACK和B_TEMP_ACK。此外,由于处理A不使用引擎108-3、112-3和116-3,因此共享资源管理器209给予许可B_ENG_ACK。控制器101不开始处理,直到共享资源管理器209给予许可B_ExMSG_ACK和B_TEMP_ACK为止。
[0747] 在T48中,在处理A完成消息A的哈希值计算并拒绝扩展消息存储单元107的区域0和内部状态值存储单元111的区域0的使用请求时,给予许可B_ExMSG_ACK和B_TEMP_ACK,并设置B_EXE=1。
[0748] 在T48中,B_EXE=“1”并且B_ALG=SHA512。因此,消息扩展处理结果选择器109选择SHA512消息扩展处理器108-3的处理结果SHA512_ExMSG[63:0]作为输出ExMSG_N[63:0]。接着,分步处理结果选择器113选择SHA512分步处理器112-3的处理结果SHA512_TEMP[511:0]作为输出TEMP_N[511:0]。此外,加法处理结果选择器117选择SHA512加法处理器116-3的处理结果SHA512_IHASH[511:0]作为输出IHASH_N[511:0]。在T48中,控制器101向DMAC B发出数据输入传输请求B_DMA_REQ[0]。
[0749] 在T49中,在断言信号B_DMA_ACK[0]时,控制器101从下一个时钟的前沿开始更新步骤计数器B_STP_CNT。计数器B_STP_CNT针对各时钟周期通过+1进行更新,并在计数器B_STP_CNT计数到81时,将其清除为零。
[0750] 在区间T49-T54中,传输第一个块的输入消息的16个字,并且DMAIF单元103输出数据B_DMA_IDATA[63:0]作为数据B_MSG[63:0]。扩展消息存储数据选择器106选择输入消息数据B_MSG[31:0]作为输出ExMSG_0[31:0],并选择输入消息数据B_MSG[63:32]作为输出ExMSG_1[31:0]。
[0751] 在区间T49-T54中,SHA512消息扩展处理器108-3使用扩展消息存储单元107的区域0和区域1作为要处理的数据来执行处理。但是,由于扩展消息存储数据选择器106未选择处理结果ExMSG_N[63:0],因此其不在扩展消息存储单元107中存储任何数据。在区间T50-T55中,扩展消息存储单元107存储第1到第16个扩展消息(输入消息)。
[0752] 在区间T50-T55中,SHA512分步处理器112-3使用存储在扩展消息存储单元107中的第1到第16个扩展消息作为要处理的数据来执行处理,并生成第1到第16个内部状态值。在区间T51-T56中,将处理结果存储到内部状态值存储单元111中。在区间T48-T49中,内部状态值存储数据选择器110输出哈希初始值的低256位B_IV[255:0]作为输出TEMP_0[255:0]。此外,内部状态值存储数据选择器110输出高256位B_IV[511:256]作为输出TEMP_1[255:0]。从T50开始,内部状态值存储数据选择器110通过选择SHA512分步处理结果的低256位来输出值TEMP_N[255:0]作为输出TEMP_0[255:0]。此外,内部状态值存储数据选择器110通过选择SHA512分步处理结果的高256位来输出值TEMP_N[511:256]作为输出TEMP_1[255:0]。因此,在T50中,SHA512分步处理器112-3使用哈希初始值和第一输入消息,来生成第一内部状态值。在区间T51-T55中,SHA512分步处理器112-3使用第(n-1)个内部状态值和第n个输入消息来生成第n个内部状态值(n=2到16)。
[0753] 在区间T51-T56中,SHA512加法处理器116-3使用存储在内部状态值存储单元111中的第1到第16个分步处理数据作为要处理的数据,来执行针对第1到第16个内部状态值的加法处理。但是,由于哈希中间值存储数据选择器114未选择处理结果IHASH_N[511:0],因此其不在哈希中间值存储单元115中存储任何数据。
[0754] 在区间T55-T60中,扩展消息存储数据选择器106输出作为SHA512消息扩展处理器108-3的处理结果的高位的数据ExMSG_N[31:0],来作为输出ExMSG_0[31:0]。此外,扩展消息存储数据选择器106输出作为SHA512消息扩展处理器108-3的处理结果的低位的数据ExMSG_N[63:32],作为输出ExMSG_1[31:0]。
[0755] 在区间T55-T60中,SHA512消息扩展处理器108-3使用存储在扩展消息存储单元107的区域0和区域1中的16个字的数据作为要处理的数据,来生成第17个到第80个扩展消息。在区间T56-T61中,将处理结果存储到扩展消息存储单元107中。扩展消息存储数据选择器106输出作为SHA512消息扩展处理器108-3的处理结果的高位的数据ExMSG_N[31:
0],来作为输出ExMSG_0[31:0]。此外,扩展消息存储数据选择器106输出作为SHA512消息扩展处理器108-3的处理结果的低位的数据ExMSG_N[63:32],来作为输出ExMSG_1[31:
0]。接着,SHA512消息扩展处理器108-3使用16个字的第(n-16)到第(n-1)个扩展消息,来生成第n个扩展消息(n=17到80)。
[0756] 在区间T56-T61中,SHA512分步处理器112-3使用存储在扩展消息存储单元107中的第17到第80个扩展消息作为要处理的数据来执行处理,并生成第17到第80个内部状态值。在区间T57-T62中,将处理结果存储到内部状态值存储单元111中。内部状态值存储数据选择器110通过选择SHA512分步处理结果来输出值TEMP_N[511:0]的低256位TEMP_N[255:0],来作为输出TEMP_0[255:0]。此外,内部状态值存储数据选择器110输出高256位TEMP_N[511:256]来作为输出TEMP_1[255:0]。因此,在区间T56-T61中,SHA512分步处理器112-3使用第(n-1)个内部状态值和第n个输入消息,来生成第n个内部状态值(n=17到80)。
[0757] 在区间T57-T62中,SHA512加法处理器116-3使用存储在内部状态值存储单元111中的第17到第80个分步处理数据作为要处理的数据,来执行针对第17到第80个内部状态值的加法处理。针对在T62中生成的第80个内部状态值的加法处理结果是第一个块的哈希中间值。在区间T48-T61中,哈希中间值存储数据选择器114输出哈希初始值的低256位B_IV[255:0]来作为输出IHASH_0[255:0],并选择高256位B_IV[[511:256]来作为输出IHASH_1[511:256]。从T62开始,哈希中间值存储数据选择器114输出值IHASH_N[255:0]作为输出IHASH_0[255:0],并输出值IHASH_N[511:256]作为输出IHASH_1[511:
256]。因此,在T62中SHA512加法处理器116-3执行哈希初始值和第80个内部状态值的加法处理,并在T63中将处理结果存储到哈希中间值存储单元115中。
[0758] 在T63中,将步骤计数器B_STP_CNT清除为零,块计数器B_BLK_CNT向上计数到1。由于B_BLK_CNT不超过B_BLK值“7”,因此控制器101向DMAC B发出下一个块的数据输入传输请求B_DMA_REQ[0]。
[0759] 类似地,控制器101针对该数量或者更多的块,重复进行处理。
[0760] 在T66中,获得针对最后一个块的第80个内部状态值的加法处理结果。在T67中,将处理结果存储到哈希中间值存储单元115中。
[0761] 在T67中,将步骤计数器B_STP_CNT清除为零,块计数器B_BLK_CNT向上计数到8。由于B_BLK_CNT超过B_BLK值“7”,因此控制器101将块计数器B_BLK_CNT清零,并向DMAC B发出哈希值的数据输出传输请求B_DMA_REQ[1]。
[0762] 在区间T81-T88中,断言信号B_DMA_ACK[1],并进行512位的SHA512哈希值的输出传输。哈希值计算电路100根据图30B所示的哈希值计算电路100的操作序列进行操作,并在ST116-B中拒绝执行SHA512哈希值计算所需的以下使用请求:
[0763] ·扩展消息存储单元107的区域0和区域1的使用请求;
[0764] ·内部状态值存储单元111的区域0和区域1的使用请求;以及
[0765] ·SHA512处理引擎108-3、112-3和116-3的使用请求。
[0766] 接着哈希值计算电路100完成消息C的哈希值计算。在拒绝使用许可B_ExMSG_ACK、B_TEMP_ACK和B_ENG_ACK时,设置B_EXE=0(T89)。
[0767] 如上所述,上述配置能够处理多个哈希算法、即MD5、SHA1和SHA512的消息。由于扩展消息存储单元、内部状态值存储单元和哈希中间值存储单元在使用时不会被各个哈希算法占用,因此能够抑制电路规模的增加。
[0768] 此外,能够并行进行消息A和消息B的处理,能够在消息C之前正在进行处理的消息A的处理完成时,开始和执行由于其它处理使用共享资源而无法并行处理的消息C的哈希值计算。
[0769] 即使在不执行消息处理时,处理引擎也始终针对要处理的数据区域执行处理,并始终更新要处理的数据的区域。由于该原因,当请求并执行特定哈希算法处理时,能够提供能够抑制功耗的变化并能够确保高抗篡改性和高安全性的哈希值计算装置。
[0770] 根据上述配置,能够在抑制电路规模增加的同时执行多个不同的哈希算法的哈希值计算,能够在更少的限制条件下同时执行针对多个消息的哈希值计算。此外,能够提供能够与选择的哈希算法无关地抑制功耗变化并能够确保高抗篡改性和高安全性的哈希值计算装置。
[0771] 中间值存储器单元能够存储来自多个哈希值计算单元中的输出数据中的具有最大位宽的输出数据。也就是说,根据最大位宽来实现上述配置。由于该原因,能够使所处理的哈希算法难以指定。另外,在处理不需要最大位宽的哈希算法时,能够通过使用未使用的位区域来减少哈希值计算的中断和重新开始的时间开销,并通过超前存储处理输入块来加速处理。
[0772] 根据本发明,能够提供能够在处理中间切换针对多个消息的哈希值计算而不降低任何处理性能,并且能够确保高安全性的哈希值计算技术。此外,根据本发明,能够提供能够同时执行多个哈希算法,并能够确保小的电路规模和高安全性的哈希值计算技术。
[0773] 其它实施例
[0774] 本发明的各方面还可以通过读出并执行记录在存储装置上的用于执行上述实施例的功能的程序的系统或设备的计算机(或诸如CPU或MPU的装置)、以及由系统或设备的计算机例如读出并执行记录在存储装置上的用于执行上述实施例的功能的程序来执行步骤的方法来实现。鉴于此,例如经由网络或者从用作存储装置的各种类型的记录介质(例如计算机可读介质)向计算机提供程序。
[0775] 虽然参照示例性实施例对本发明进行了描述,但是应当理解,本发明不限于所公开的示例性实施例。所附权利要求的范围符合最宽的解释,以覆盖所有变型、等同结构和功能。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈