多链式哈希栈的硬件开销优化方法及系统与流程

文档序号:18901406发布日期:2019-10-18 21:59阅读:186来源:国知局
多链式哈希栈的硬件开销优化方法及系统与流程

本发明涉及计算机技术领域,更具体地,涉及一种多链式哈希栈的硬件开销优化方法及系统。



背景技术:

链式哈希栈是一种新型的保护函数返回地址的防御手段。它在硬件上添加了两个寄存器top和salt,top用来保存哈希值,salt用来保存哈希函数的密钥。当调用子函数时,把哈希值和返回地址依次压入栈中。然后把密钥、哈希值和返回地址一起做哈希运算,运算结果用来更新top寄存器的值。在函数返回时,把哈希值和返回地址一同弹出栈,并做哈希运算。运算结果与top寄存器中的值做对比。如果不同,则抛出一个异常;如果相同,则用栈中的哈希值更新top寄存器,返回到父函数中。

链式哈希栈的安全性极高,即使攻击者能任意读写内存地址空间,也无法绕过这种防御机制。然而,当哈希函数的运算周期增大时,它的性能损耗会急剧地加大。例如,当一次哈希运算需要80个时钟周期时,它的性能损耗大约为20%,限制了它的实用性。

为了减小性能损耗,现有技术提出了多链优化的技术方案,具体地,多链优化方案在硬件上使用n倍的哈希模块和top/salt寄存器。每当遇到哈希运算时,轮番使用第1,2…n个哈希模块。而哈希模块的top值输入,则根据该函数在函数调用栈中的深度除以n所得的余数m来选择第m个top寄存器的值。这种多链实现方式可以避免哈希运算周期较长引发的流水线停滞问题,减少性能损耗。但是,为了实现n链的优化方案需要增加n-1倍的哈希模块和top/salt寄存器,以及控制逻辑,这会对硬件造成较大的开销。



技术实现要素:

为了解决上述问题,本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的多链式哈希栈的硬件开销优化方法及系统。

根据本发明实施例的第一方面,提供一种多链式哈希栈的硬件开销优化方法,该方法包括:在硬件上添加发射队列;其中,发射队列包括顺序排列的多个项目,每一个项目代表一条链式哈希栈,每一条链式哈希栈用于存储一次哈希运算的输入及输出;当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态;当哈希模块结束计算状态后,查询发射队列中是否还存在处于排队计算状态的项目;若存在,则哈希模块根据排队顺序计算下一个项目中的哈希运算。

根据本发明实施例第二方面,提供了一种多链式哈希栈的硬件开销优化系统,该系统包括:添加模块,用于在硬件上添加发射队列;其中,发射队列包括顺序排列的多个项目,每一个项目代表一条链式哈希栈,每一条链式哈希栈用于存储一次哈希运算的输入及输出;排队模块,用于当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态;查询模块,用于当哈希模块结束计算状态后,查询发射队列中是否还存在处于排队计算状态的项目;若存在,则哈希模块根据排队顺序计算下一个项目中的哈希运算。

根据本发明实施例的第三方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的多链式哈希栈的硬件开销优化方法。

根据本发明实施例的第四方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的多链式哈希栈的硬件开销优化方法。

本发明实施例提供的多链式哈希栈的硬件开销优化方法及系统,通过在硬件上添加发射队列,且只使用一个哈希模块,当哈希模块处于计算状态时,后续获取的哈希运算就会加入到发射队列中等待计算;从而能够实现采用一个哈希模块依次对发射队列中每个项目的哈希运算进行计算,而不必停顿流水线,相比于现有技术中使用n倍哈希模块的技术方案减少了硬件开销的基础上,起到了多链和影子缓存的加速效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。

图1为本发明实施例提供的多链式哈希栈的硬件开销优化方法的流程示意图;

图2为本发明实施例提供的发射队列的结构示意图;

图3为本发明实施例提供的有限状态机的状态变化示意图;

图4为本发明实施例提供的多链式哈希栈的硬件开销优化系统的结构示意图;

图5为本发明实施例提供的电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种多链式哈希栈的硬件开销优化方法,参见图1,该方法包括但不限于如下步骤:

步骤101、在硬件上添加发射队列;其中,发射队列包括顺序排列的多个项目,每一个项目代表一条链式哈希栈,每一条链式哈希栈用于存储一次哈希运算的输入及输出。

具体地,由于现有技术的多链优化方案中使用n倍的哈希模块和top/salt寄存器,导致了硬件存在较大的开销。因此,本发明实施例中只使用一个哈希模块,但在硬件上添加了一个发射队列。该发射队列包括多个项目,参见图2,每一个项目为其中的一行,每一个项目代表一条链,用来保存哈希运算的输入及输出。

步骤102、当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态。

具体地,在步骤101中添加了发射队列后,即使单独的一个哈希模块处于计算状态,只要发射队列没有满,后续的新获取的哈希运算就会加入到发射队列中等待计算(即项目进入排队计算状态),而不必停顿流水线。

步骤103、当哈希模块结束计算状态后,查询发射队列中是否还存在处于排队计算状态的项目;若存在,则哈希模块根据排队顺序计算下一个项目中的哈希运算。

具体地,在每一次哈希模块结束一次哈希运算后,可继续查询发射队列中是否还存在排队中的计算(即处于排队计算状态的项目),如果有,则哈希模块继续计算下一个项目中的哈希运算;如果没有,则哈希模块可停止计算。

其中,在步骤103前还可添加有限状态机来控制发射队列的计算过程。有限状态机的状态变化可参见附图3,状态机只有两个状态,查询或计算。状态机处于查询状态时,如果存在等待计算的发射项(即处于排队计算状态的项目),则进入计算状态。计算完成后,状态机回到查询状态,根据是否还存在处于排队计算状态的项目的情况,选择继续处理等待计算的项或者保持在查询状态。

本发明实施例提供的多链式哈希栈的硬件开销优化方法,通过在硬件上添加发射队列,且只使用一个哈希模块,当哈希模块处于计算状态时,后续获取的哈希运算就会加入到发射队列中等待计算;从而能够实现采用一个哈希模块依次对发射队列中每个项目的哈希运算进行计算,而不必停顿流水线,相比于现有技术中使用n倍哈希模块的技术方案减少了硬件开销的基础上,起到了多链和影子缓存的加速效果。

基于上述实施例的内容,作为一种可选实施例,参见图2,每一个项目包括:queue位、callret位、ret_addr位、old_hash位和new_hash位;

其中,queue位用于指示项目是否处于排队计算状态;queue为一个比特位,queue位中不同的赋值可代表项目是否处于排队计算状态。

其中,callret位用于指示项目中哈希运算的类型,哈希运算的类型包括哈希值更新运算或者哈希值校验运算;callret位为一个比特位,callret位中不同的赋值可代表不同的哈希运算类型;例如callret=1时,表示返回地址入栈时的哈希值更新运算;callret=0时,表示返回地址出栈时的哈希值校验运算。

其中,ret_addr位用于存储返回地址。

其中,old_hash位用于存储原始哈希值。

其中,new_hash位用于存储对原始哈希值进行哈希值更新运算后获得的新的哈希值。

基于上述实施例的内容,作为一种可选实施例,发射队列包括:head指针和calculating指针;

其中,head指针用于指向下一次哈希运算所要存储的一个项目;函数调用时,head指针+1;函数返回时,head指针-1。换言之,head用来指向下一次哈希运算要存储的位置,指向对应的链式哈希栈。

其中,calculating指针用于指向当前正在进行哈希运算的一个项目。

基于上述实施例的内容,作为一种可选实施例,提供一种当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态的方法,包括但不限于如下步骤:

步骤1、将函数头部的哈希值更新运算的输入送入发射队列中的一个项目中,并将项目的queue位置为项目处于排队计算状态的值,不停顿流水线继续执行。

具体地,在发射队列满之前,函数头部的哈希值更新运算把输入送到发射队列后,将该项目的queue位置为1,不停顿流水线继续执行。

步骤2、在哈希值更新运算结束后,将获得的新的哈希值保存至new_hash位中。

基于上述实施例的内容,作为一种可选实施例,在硬件上添加发射队列之后,还包括:

在哈希模块进行函数尾部的哈希值校验运算时,若callret位指示项目进行哈希运算的类型为哈希值更新运算,则匹配链式哈希栈中返回地址及哈希值与发射队列中存储的输入是否相同;

若相同,则将queue位置为指示项目不处于排队计算状态的值,并不排队计算项目,将old_hash位中的值赋给new_hash位;若不同,则抛出异常。

具体地,当哈希模块遇到函数尾部的哈希值校验运算时,如果callret位为1,则直接匹配栈中的返回地址及哈希值与发射队列里存储的输入是否相同(可利用影子缓存的方式,本发明实施例对此不作限定)。如果相同,则该项的queue位置为0,不再排队计算,并将old_hash的值赋给new_hash;如果不同,则抛出异常。如果callret位为0,则将待校验的哈希运算的输入送入所述发射队列中对应的项目时,将该项的queue位置为1,不停顿流水线继续执行。在所述哈希值校验运算结束后,与所述项目的new_hash进行对比,如果相同,则用所述项目的old_hash更新new_hash,queue位置为0;如果不同,则报错。

基于上述实施例的内容,作为一种可选实施例,若相同,则将queue位置为指示项目不处于排队计算状态的值,并不排队计算项目,将old_hash位中的值赋给new_hash位,还包括:若哈希模块正在对项目进行计算,则终止哈希模块的计算。

基于上述实施例的内容,作为一种可选实施例,在硬件上添加发射队列之后,还包括:

若全部的项目的哈希运算的类型为哈希值更新运算,或者全部的项目的哈希运算的类型为哈希值校验运算,则与哈希运算的类型相同的后续哈希运算需等待最早进入排队项目的哈希运算完成后进入发射队列;和/或,

若哈希模块正在进行哈希值校验运算,且后续哈希运算的类型为哈希值更新运算,则后续哈希运算需等待哈希值校验运算结束后进入发射队列。

具体地,需要停顿流水线的情况有上述两种情况。针对上述第一种情况,当所有项的queue位均为1时,表明此时全部都是哈希值更新或者全部都是哈希值校验计算,此时同样的运算需要等待算完某一项后才能进入发射队列。针对上述第二种情况,当正在进行哈希值的校验运算时,如果此时遇到下一条哈希值更新运算,需等待哈希值校验结束后才能进入发射队列。

基于上述实施例的内容,本发明实施例提供了一种多链式哈希栈的硬件开销优化系统,该多链式哈希栈的硬件开销优化系统用于执行上述方法实施例中的多链式哈希栈的硬件开销优化方法。参见图4,该系统包括:添加模块301、排队模块302和查询模块303;其中,添加模块301,用于在硬件上添加发射队列;其中,发射队列包括顺序排列的多个项目,每一个项目代表一条链式哈希栈,每一条链式哈希栈用于存储一次哈希运算的输入及输出;排队模块302,用于当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态;查询模块303,用于当哈希模块结束计算状态后,查询发射队列中是否还存在处于排队计算状态的项目;若存在,则哈希模块根据排队顺序计算下一个项目中的哈希运算。

具体地,本发明实施例中只使用一个哈希模块,但添加模块301在硬件上添加了一个发射队列。该发射队列包括多个项目,参见图2,每一个项目为其中的一行,每一个项目代表一条链,用来保存哈希运算的输入及输出。即使单独的一个哈希模块处于计算状态,只要发射队列没有满,后续的新获取的哈希运算就会被排队模块302加入到发射队列中等待计算(即项目进入排队计算状态),而不必停顿流水线。在每一次哈希模块结束一次哈希运算后,查询模块303可继续查询发射队列中是否还存在排队中的计算(即处于排队计算状态的项目),如果有,则哈希模块继续计算下一个项目中的哈希运算;如果没有,则哈希模块可停止计算。

本发明实施例提供的多链式哈希栈的硬件开销优化系统,通过在硬件上添加发射队列,且只使用一个哈希模块,当哈希模块处于计算状态时,后续获取的哈希运算就会加入到发射队列中等待计算;从而能够实现采用一个哈希模块依次对发射队列中每个项目的哈希运算进行计算,而不必停顿流水线,相比于现有技术中使用n倍哈希模块的技术方案减少了硬件开销的基础上,同时起到了多链和影子缓存的加速效果。

本发明实施例提供了一种电子设备,如图5所示,该设备包括:处理器(processor)501、通信接口(communicationsinterface)502、存储器(memory)503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信。处理器501可以调用存储器503上并可在处理器501上运行的计算机程序,以执行上述各实施例提供的多链式哈希栈的硬件开销优化方法,例如包括:在硬件上添加发射队列;其中,发射队列包括顺序排列的多个项目,每一个项目代表一条链式哈希栈,每一条链式哈希栈用于存储一次哈希运算的输入及输出;当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态;当哈希模块结束计算状态后,查询发射队列中是否还存在处于排队计算状态的项目;若存在,则哈希模块根据排队顺序计算下一个项目中的哈希运算。

此外,上述的存储器503中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的多链式哈希栈的硬件开销优化方法,例如包括:在硬件上添加发射队列;其中,发射队列包括顺序排列的多个项目,每一个项目代表一条链式哈希栈,每一条链式哈希栈用于存储一次哈希运算的输入及输出;当哈希运算的输入送入发射队列中对应的项目时,将项目置为排队计算状态;当哈希模块结束计算状态后,查询发射队列中是否还存在处于排队计算状态的项目;若存在,则哈希模块根据排队顺序计算下一个项目中的哈希运算。

以上所描述的电子设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1