CN111913749A - 基于流水线的sm3算法fpga实现方法及系统 - Google Patents

基于流水线的sm3算法fpga实现方法及系统 Download PDF

Info

Publication number
CN111913749A
CN111913749A CN202010790357.XA CN202010790357A CN111913749A CN 111913749 A CN111913749 A CN 111913749A CN 202010790357 A CN202010790357 A CN 202010790357A CN 111913749 A CN111913749 A CN 111913749A
Authority
CN
China
Prior art keywords
data
round
algorithm
output
input
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010790357.XA
Other languages
English (en)
Inventor
杨宇涵
申兆岩
王新宇
鞠雷
魏普文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong University
Original Assignee
Shandong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong University filed Critical Shandong University
Priority to CN202010790357.XA priority Critical patent/CN111913749A/zh
Publication of CN111913749A publication Critical patent/CN111913749A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本公开提供了一种基于流水线的SM3算法FPGA实现方法及系统,对不同消息分别进行消息填充和数据分组;设计多级流水,将SM3算法中每一轮的迭代计算利用一级流水实现,每一轮迭代计算中的哈希值及后续内容分别进行存储;将SM3算法中的迭代压缩进行循环展开,将每一轮计算的输出作为下一轮的输入,继续计算,直到当前哈希值无剩下的内容需要继续计算,输出计算的最终哈希值;将存储的每一轮迭代计算中的哈希值及后续内容分别独立进行内容赋值填充并存储;本公开大大提高了SM3算法的吞吐率,尤其在需要计算大量不同哈希值的情况下,提升效果更为明显。

Description

基于流水线的SM3算法FPGA实现方法及系统
技术领域
本公开属于通信密码算法硬件实现技术领域,涉及一种基于流水线的SM3算法FPGA实现方法及系统。
背景技术
本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
近年来国际通用密码算法频频传出被破解的消息,“芯片断供”等事件频发,国家和行业对技术自主、可控的需求上升到了新的台阶。国产密码算法是保障我国网络安全自主可控的重要基础。SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,在金融、区块链等领域得到了广泛的应用。使用SM3算法替代国际通用的杂凑算法,不仅提高了安全性,还实现了在核心技术上的自主可控的目的。
SM3算法的执行过程可以概括成三个步骤:消息填充、消息扩展、迭代压缩。但是SM3密码算法由于其运算的复杂性,如果在软件层面上进行实现,其性能难以满足大量告诉应用场景的需求,限制了国密算法的应用范围。
FPGA(Field Programmable Gate Array:现场可编程逻辑门阵列)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。通过硬件编程语言实现SM3算法,可以有效提高FPGA平台资源利用率和SM3算法运行速率。
然而仅使用硬件编程语言对该算法做简单的实现,平台资源的利用率与SM3算法的运行速率仍然存在着不小的提升空间;同时,Hash函数由于在计算过程中依赖性强,每一步的计算都需要依赖前一步的进行,很难做到多线程优化其效率。
发明内容
本公开为了解决上述问题,提出了一种基于流水线的SM3算法FPGA实现方法及系统,本公开结合流水线技术,使用硬件编程语言在FPGA平台上对SM3算法实现了快速实现;大大提高了SM3算法的吞吐率,尤其在需要计算大量不同哈希值的情况下,提升效果更为明显。
根据一些实施例,本公开采用如下技术方案:
一种基于流水线的SM3算法FPGA实现方法,包括以下步骤:
对不同消息分别进行消息填充和数据分组;
设计多级流水,将SM3算法中每一轮的迭代计算利用一级流水实现,每一轮迭代计算中的哈希值及后续内容分别进行存储;
将SM3算法中的迭代压缩进行循环展开,将每一轮计算的输出作为下一轮的输入,继续计算,直到当前哈希值无剩下的内容需要继续计算,输出计算的最终哈希值;
将存储的每一轮迭代计算中的哈希值及后续内容分别独立进行内容赋值填充并存储。
一种基于流水线的SM3算法FPGA实现系统,包括:
输入缓存模块,包括多个寄存器,用于接收sm3_data端口的数据,存储需要进行哈希计算的数据;
内容赋值缓存模块,包括多个子模块,用于接收输入缓存模块的输出,将接收的数据进行保存、运算,完成消息扩展;
数据生成模块,包括多个单轮数据生成模块,用于压缩函数中的多轮循环,将SM3算法中每一轮的迭代计算利用一级流水实现,将SM3算法中的迭代压缩进行循环展开,将每一轮计算的输出作为下一轮的输入,继续计算,直到当前哈希值无剩下的内容需要继续计算;
数据缓存模块,用于存储每一轮迭代计算中的哈希值及后续内容分别进行存储;
输出缓存模块,用于输出最终哈希值,与sm3_result端口连接。
作为可选择的实施方式,输入缓存模块包括64个多位寄存器,从sm3_data端口接收数据,把需要哈希计算的64个数据进行存储,其输出作为内容赋值缓存的输入。
作为可选择的实施方式,所述内容赋值缓存模块,包括16个子模块,每个子模块的输入均来自于输入缓存模块的寄存器输出,将接收的数据分别放到16个子模块作为W0,W1,…,W15,然后将其输入到运算电路中,重复进行运算,完成消息扩展,其输出作为数据生成模块的输入,每一个输出要经过一个数据分配器,该数据分配器用于决定把相应的值输送到第几个单轮数据生成器中。
作为可选择的实施方式,所述数据生成模块的第一个单轮数据生成模块配置初始值,将其输出作为下一个单轮数据生成模块的输入,每个单轮数据生成模块的输入,都是上一轮数据生成模块的输出,其输出作为下一轮的输入,以此类推,最后一个单轮数据生成模块的输出作为整个数据生成模块的输出。
作为可选择的实施方式,所述数据生成模块的各个单轮数据生成模块并行进行计算,每个单轮数据计算的时候,使用内容赋值模块提供的消息扩展后生成的消息字,经过数据选择器的选择后进行输送。
作为可选择的实施方式,最后一个单轮数据生成模块的输出与本次哈希计算使用的V(i)进行异或后,由数据缓存模块进行缓存,然后判断是否还有属于同一消息的剩余数据块需要进行哈希计算,如果有剩余内容,那么需要将该缓存内容作为下一次哈希计算的V(i +1),将其赋值给数据生成模块中存放初始值的寄存器,再次进入数据生成模块进行计算;如果没有剩余的消息,那么将该值作为整个消息的哈希值进行输出。
作为可选择的实施方式,所述数据缓存模块,被配置为将消息经过数据生成模块计算后的数据,即多轮压缩迭代后数据进行缓存,并且判断这些数据是不是整个需要哈希数据的最后一个数据块,如果是,则将该缓存的数据输入到输出缓存中,作为整个消息的哈希值;如果不是,则将其输入到数据生成模块中,作为输入,再次进行多轮迭代压缩。
一种计算机可读存储介质,其中存储有多条指令,所述指令适于由终端设备的处理器加载并执行所述的一种基于流水线的SM3算法FPGA实现方法。
一种终端设备,包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载并执行所述的一种基于流水线的SM3算法FPGA实现方法。
与现有技术相比,本公开的有益效果为:
本公开利用流水线技术,对国密算法SM3的FPGA实现做了优化,将SM3算法中规模较大,层次较多的迭代压缩函数进行分级,实现了多级流水,达到了最多可同时进行多个哈希计算的目的,有效提高了FPGA平台资源利用率和SM3算法运行速率。
附图说明
构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
图1是SM3整体结构图;
图2是SM3迭代压缩结构单轮计算示意图;
图3是本实施例流水结构整体示意图;
图4是本实施例数据生成模块示意图;
图5是本实施例输入缓存模块示意图;
图6是本实施例内容缓存赋值模块结构示意图。
具体实施方式:
下面结合附图与实施例对本公开作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
首先,为使得本领域技术人员更加清楚本实施例的技术方案,进行以下必要的技术方案陈述。
SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。该算法于2012年发布为密码行业标准(GM/T 0004-2012),2016年发布为国家密码杂凑算法标准(GB/T 32905-2016)。
SM3适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法,其安全性和SHA-256相当。SM3和MD5的迭代过程类似,也采用Merkle-Damgard结构。消息分组长度为512位,摘要值长度为256位。整个算法的执行过程可以概括成三个步骤:消息填充、消息扩展、迭代压缩。
具体的SM3算法介绍如下:
SM3的消息扩展步骤是以512位的数据分组作为输入的。因此,我们需要在一开始就把数据长度填充至512位的倍数。数据填充规则和MD5一样,具体步骤如下:
1、先填充一个“1”,后面加上k个“0”。其中k是满足(n+1+k)mod 512=448的最小正整数。
2、追加64位的数据长度(bit为单位,大端序存放。观察算法标准原文附录A运算示例可以推知。)
消息扩展
SM3的迭代压缩步骤没有直接使用数据分组进行运算,而是使用这个步骤产生的132个消息字。(一个消息字的长度为32位)概括来说,先将一个512位数据分组划分为16个消息字,并且作为生成的132个消息字的前16个。再用这16个消息字递推生成剩余的116个消息字。
在最终得到的132个消息字中,前68个消息字构成数列W,后64个消息字构成数列W’,其中下标j从0开始计数。
迭代压缩
在上文已经提过,SM3的迭代过程和MD5类似,也是Merkle-Damgard结构。但和MD5不同的是,SM3使用消息扩展得到的消息字进行运算。初值IV被放在A、B、C、D、E、F、G、H八个32位变量中。整个算法中最核心、也最复杂的地方就在于压缩函数。压缩函数将这八个变量进行64轮相同的计算,一轮的计算过程如图2所示。最后,再将计算完成的A、B、C、D、E、F、G、H和原来的A、B、C、D、E、F、G、H分别进行异或,就是压缩函数的输出。这个输出再作为下一次调用压缩函数时的初值。依次类推,直到用完最后一组132个消息字为止。
这样,在SM3算法中一个Hash值的计算结束。
本实施例结合流水线技术,使用硬件编程语言在FPGA平台上对SM3算法实现了快速实现。大大提高了SM3算法的吞吐率,尤其在需要计算大量不同哈希值的情况下,提升效果更为明显。
主要针对的是SM3算的数据压缩模块。对于之前的消息填充和分组模块,是SM3算法对要哈希的消息的简单处理,由于过程简单,我们就不再详述了。在迭代计算之前,我们已经按照SM3算法的正常步骤,不同消息分别完成了消息填充和数据分组这两个步骤。然后我们将在数据压缩模块进行流水。
本实施例的主要模块包括输入缓存、内容赋值缓存、数据生成模块,初始寄存器和数据缓存模块这几个模块。其中最主要的输入缓存,内容赋值缓存和数据生成模块,这里面的核心为数据生成模块。SM3算法中最重要的是64轮的迭代计算,这64轮迭代在数据生成模块中执行。我们将这64轮计算拆为64级流水,每一级流水的运算是独立的,只和之前的状态有关。所以我们就可以同时进行64次不同的哈希运算。这大大提高了SM3算法的执行效率。
为了更好的执行流水线,我们设置了输入缓存。输入缓存由64个512位的寄存器组成。因为在数据生成模块中最多同时进行64个不同哈希值的计算,所以需要保证每一个哈希值计算的后续内容都可以放在输入缓存中,所以有64个寄存器。而每一轮哈希的计算需要当前计算哈希内容的512位,所以每一个寄存器是512位。
由SM3算法可知,每轮哈希的计算时,需要哈希的内容需要赋值给填充字数组W和W’,然后参与计算哈希值。由于在数据生成模块内部,每一小轮的Hash计算都只需要填充字W和W’数组中的一个填充字,所以我们不必需要提前计算好所有的W和W’数组,可以在数据生成模块运行的时候一同计算。这时候就可以节约运算时间,增大算法的吞吐率。由于W和W’的数组之和数组的前16个填充字有关,所以我们只需要在每一组保留数组的16个位置即可。每一个填充字是32位,所以一组需要32*16=512位的空间,总共需要64组。由于在数据生成模块是流水线方式运行,所以每一组要输出的W和W’数组中的元素不会固定的输出到同一个位置,都会依次向下一个单轮数据生成模块递进。所以在内容赋值模块的每一组的输出都需要经过一个数据选择器,来将数据传递到所需要的位置。
当一轮Hash值计算完成之后,需要暂存起来。然后判断当前Hash值的计算是否还有剩下的内容需要继续计算。如果没有,那就直接输出Hash值,如果依然存在的话,那么就需要将暂存的值重新输入到第一轮的单轮数据生成模块,进行下一轮Hash值的计算。
根据上述的大体思路,我们设计了SM3算法的流水线实现方式,大大提高了SM3算法的吞吐率。
对每一部分详细解释如下:
本实施例根据SM3算法的特点,基于流水线设计的FPGA硬件实施方案的结构如附图1所示,主要包括:输入缓存模块、内容赋值缓存模块、数据生成模块、数据缓存模块、输出缓存模块。下面对此流水线设计方案进行详细的解释:
首先进行接口定义
在本实施例的SM3算法硬件设计方案当中,接口主要用于接收消息,输出压缩后的杂凑值,具体接口定义如表一所示。
表1控制器接口定义
Figure BDA0002623548850000101
Figure BDA0002623548850000111
所涉及的主要寄存器:
采用流水线设计,使得可以同时进行计算hash值的数据增多,因此需要将输入数据分配寄存器进行缓存;另外,还需要对一些中间数据进行缓存,经过一定判断后在进行下一步操作;再者,在SM3算法执行过程中存在着一些中间变量,需要对这些中间变量进行暂存,以便进行下一步计算。
Figure BDA0002623548850000112
Figure BDA0002623548850000121
输入缓存模块
本实施例在数据生成模块内部设计了64级流水,最多可以有64个消息杂凑值的计算在同时进行,在并行计算的过程中,每一个单轮数据生成模块都需要用到相应的消息扩展的结果W0,W1,…,W67,W0′,…,W63′,而消息扩展需要将512bit数据块B(i)按一定的方法生成132个字,因此,最多同时需要64个512bit的数据块,这就需要将可能用到的填充好的数据块进行存储,输入缓存模块就由64个512位的寄存器组成。该模块实现了,从sm3_data端口接收数据,把需要hash的64个512bit数据进行存储,其输出作为内容赋值缓存的输入。
内容赋值缓存模块
内容赋值缓存模块,如附图4所示,由16个子模块组成,每个子模块的输入均来自于输入缓存模块的512位输出,将接收的512位数据分别放到16个32位寄存器中作为W0,W1,…,W15,然后将其输入到运算电路中,运算电路的第一部分按照公式
Figure BDA0002623548850000122
Figure BDA0002623548850000131
进行实现,该电路重复执行62次,直至W16,W1,…,W67全部生成。再将生成的W16,W1,…,W67作为输入运算电路的第二部分的输入,运算电路的第二部分按照公式
Figure BDA0002623548850000132
实现,该部分电路重复该运算过程64次,直至W0′,…,W63′全部生成。至此,消息扩展完成。因为在内容赋值缓存模块的过程中,W与W’的计算,只需要保存前16个值的状态,所以需要16个32位寄存器。另外,其输出作为数据生成模块的输入,每一个输出要经过一个数据分配器,该数据分配器决定把值输送到第几个单轮数据生成器。
数据生成模块
数据生成模块对应SM3算法中的迭代压缩部分,本实施例把原本在一个模块中完成的迭代压缩,进行循环展开,如附图2所示,转化为64个单轮数据生成模块,每个单轮数据生成模块都对应着SM3中的单轮迭代压缩函数,其具体结构如附图6所示。
单轮实现细节
首先是单轮数据生成模块输入输出的确定,8个32bit寄存器ABCDEFGH作为整个数据生成模块的输入,8个寄存器的初始值由256bit初始值IV决定,经过第一个单轮数据生成模块后,将其输出作为下一个单轮数据生成模块的输入,每个单轮数据生成模块的输入,都是上一轮数据生成模块的输出,其输出作为下一轮的输入,以此类推,最后一个单轮数据生成模块的输出作为整个数据生成模块的输出。
在每个单轮数据计算的时候,需要用到消息扩展后生成的消息字,该部分由内容赋值模块,经过数据选择器的选择后进行输送。单轮数据生成模块的输入值由上一轮提供,输出值直接提供给下一轮,因此不需要寄存器将ABCDEFGH的中间值进行保存,只由数据运算电路和两个32bit字寄存器(存储中间变量SS1和SS2)构成,数据运算电路计算四个值,分别按照如下公式:
SS1←((A<<12)+E+(Tj<<j))<<7
Figure BDA0002623548850000141
TT1←FFj(A,B,C)+D+SS2+Wj
TT2←GGj(E,F,G)+H+SS1+Wj
进行实现,在SM3压缩函数的64轮迭代中,需要在最后对ABCDEFGH的值进行交换赋值,由于是结合了循环展开的硬件实现,我们可以省略交换赋值的过程,直接将输出值按照既定的规则作为下一轮的输入。
流水实现分析
数据生成模块由64个单轮数据生成模块组成,实现压缩函数中的64轮循环。第一个需要hash的数据,在第一轮数据数据生成模块计算完成后,进入第二个数据生成模块进行计算,此时,第一个数据生成模块并不需要进行等待,可以对第二个需要进行hash的数据进行计算,这样就可以实现第一个数据与第二个数据的计算在同时进行,以此类推,当第一个需要hash的数据的计算进入第64个单轮数据生成模块时,64个单轮数据生成模块在同时进行计算,有64个需要hash的数据在同时计算hash值。
最后一个单轮数据生成模块的输出与本次hash计算使用的V(i)进行异或后,由数据缓存模块进行缓存,然后判断是否还有属于同一消息的剩余数据块需要进行hash,如果有剩余内容,那么需要将该缓存内容作为下一次hash计算的V(i+1),将其赋值给数据生成模块8个存放初始值的32bit寄存器,再次进入数据生成模块进行计算;如果没有剩余的消息,那么将该值作为整个消息的256bit hash值进行输出。
结合对消息的缓存以及循环展开技术的应用,本实施例实现了64级流水线,最多可以实现64个消息hash值计算同时进行,SM3算法的运行速率与FPGA的资源利用率相较之前都有了极大的提升。
数据缓存模块
数据缓存模块将512bit消息经过数据生成模块计算后的数据,即64轮压缩迭代后数据进行缓存,并且判断这512bit数据是不是整个需要hash数据的最后一个数据块,如果是,则将该缓存的256bit数据输入到输出缓存中,作为整个消息的hash值;如果不是,则将其输入到数据生成模块的8个32bit寄存器ABCDEFDH中,作为数据生成模块的输入,再次进行64轮迭代压缩。
输出缓存模块
经过数据缓存模块后,被判断为最终hash值的256bit数据,作为输出缓存模块的输入,该模块将缓存的hash值输出到端口sm3_result。
综上,本实施例利用流水线技术,对国密算法SM3的FPGA实现做了优化,将SM3算法中规模较大,层次较多的迭代压缩函数进行分级,实现了64级流水,达到了最多可同时进行64个hash计算的目的,有效提高了FPGA平台资源利用率和SM3算法运行速率。
本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
上述虽然结合附图对本公开的具体实施方式进行了描述,但并非对本公开保护范围的限制,所属领域技术人员应该明白,在本公开的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本公开的保护范围以内。

Claims (10)

1.一种基于流水线的SM3算法FPGA实现方法,其特征是:包括以下步骤:
对不同消息分别进行消息填充和数据分组;
设计多级流水,将SM3算法中每一轮的迭代计算利用一级流水实现,每一轮迭代计算中的哈希值及后续内容分别进行存储;
将SM3算法中的迭代压缩进行循环展开,将每一轮计算的输出作为下一轮的输入,继续计算,直到当前哈希值无剩下的内容需要继续计算,输出计算的最终哈希值;
将存储的每一轮迭代计算中的哈希值及后续内容分别独立进行内容赋值填充并存储。
2.一种基于流水线的SM3算法FPGA实现系统,其特征是:包括:
输入缓存模块,包括多个寄存器,用于接收sm3_data端口的数据,存储需要进行哈希计算的数据;
内容赋值缓存模块,包括多个子模块,用于接收输入缓存模块的输出,将接收的数据进行保存、运算,完成消息扩展;
数据生成模块,包括多个单轮数据生成模块,用于压缩函数中的多轮循环,将SM3算法中每一轮的迭代计算利用一级流水实现,将SM3算法中的迭代压缩进行循环展开,将每一轮计算的输出作为下一轮的输入,继续计算,直到当前哈希值无剩下的内容需要继续计算;
数据缓存模块,用于存储每一轮迭代计算中的哈希值及后续内容分别进行存储;
输出缓存模块,用于输出最终哈希值,与sm3_result端口连接。
3.如权利要求2所述的一种基于流水线的SM3算法FPGA实现系统,其特征是:输入缓存模块包括64个多位寄存器,从sm3_data端口接收数据,把需要哈希计算的64个数据进行存储,其输出作为内容赋值缓存的输入。
4.如权利要求2所述的一种基于流水线的SM3算法FPGA实现系统,其特征是:所述内容赋值缓存模块,包括16个子模块,每个子模块的输入均来自于输入缓存模块的寄存器输出,将接收的数据分别放到16个子模块作为W0,W1,…,W15,然后将其输入到运算电路中,重复进行运算,完成消息扩展,其输出作为数据生成模块的输入,每一个输出要经过一个数据分配器,该数据分配器用于决定把相应的值输送到第几个单轮数据生成器中。
5.如权利要求2所述的一种基于流水线的SM3算法FPGA实现系统,其特征是:所述数据生成模块的第一个单轮数据生成模块配置初始值,将其输出作为下一个单轮数据生成模块的输入,每个单轮数据生成模块的输入,都是上一轮数据生成模块的输出,其输出作为下一轮的输入,以此类推,最后一个单轮数据生成模块的输出作为整个数据生成模块的输出。
6.如权利要求2所述的一种基于流水线的SM3算法FPGA实现系统,其特征是:所述数据生成模块的各个单轮数据生成模块并行进行计算,每个单轮数据计算的时候,使用内容赋值模块提供的消息扩展后生成的消息字,经过数据选择器的选择后进行输送。
7.如权利要求6所述的一种基于流水线的SM3算法FPGA实现系统,其特征是:最后一个单轮数据生成模块的输出与本次哈希计算使用的V(i)进行异或后,由数据缓存模块进行缓存,然后判断是否还有属于同一消息的剩余数据块需要进行哈希计算,如果有剩余内容,那么需要将该缓存内容作为下一次哈希计算的V(i+1),将其赋值给数据生成模块中存放初始值的寄存器,再次进入数据生成模块进行计算;如果没有剩余的消息,那么将该值作为整个消息的哈希值进行输出。
8.如权利要求2所述的一种基于流水线的SM3算法FPGA实现系统,其特征是:所述数据缓存模块,被配置为将消息经过数据生成模块计算后的数据,即多轮压缩迭代后数据进行缓存,并且判断这些数据是不是整个需要哈希数据的最后一个数据块,如果是,则将该缓存的数据输入到输出缓存中,作为整个消息的哈希值;如果不是,则将其输入到数据生成模块中,作为输入,再次进行多轮迭代压缩。
9.一种计算机可读存储介质,其特征是:其中存储有多条指令,所述指令适于由终端设备的处理器加载并执行权利要求1所述的一种基于流水线的SM3算法FPGA实现方法。
10.一种终端设备,其特征是:包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载并执行权利要求1所述的一种基于流水线的SM3算法FPGA实现方法。
CN202010790357.XA 2020-08-07 2020-08-07 基于流水线的sm3算法fpga实现方法及系统 Pending CN111913749A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010790357.XA CN111913749A (zh) 2020-08-07 2020-08-07 基于流水线的sm3算法fpga实现方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010790357.XA CN111913749A (zh) 2020-08-07 2020-08-07 基于流水线的sm3算法fpga实现方法及系统

Publications (1)

Publication Number Publication Date
CN111913749A true CN111913749A (zh) 2020-11-10

Family

ID=73283277

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010790357.XA Pending CN111913749A (zh) 2020-08-07 2020-08-07 基于流水线的sm3算法fpga实现方法及系统

Country Status (1)

Country Link
CN (1) CN111913749A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113300831A (zh) * 2021-07-26 2021-08-24 苏州浪潮智能科技有限公司 一种安全散列算法的实现方法、系统、介质及设备
CN113794552A (zh) * 2021-09-14 2021-12-14 山东省计算中心(国家超级计算济南中心) 一种基于simd的sm3并行数据加密运算方法及系统
TWI775514B (zh) * 2020-11-23 2022-08-21 大陸商深圳比特微電子科技有限公司 運算核、計算晶片和數據處理設備
CN115664849A (zh) * 2022-12-13 2023-01-31 苏州浪潮智能科技有限公司 Bmc及其加密数据生成系统、方法、设备及存储介质
CN115664640A (zh) * 2022-12-23 2023-01-31 苏州浪潮智能科技有限公司 Sha-3算法的硬件实现方法、系统、存储介质及设备
CN115967493A (zh) * 2021-10-12 2023-04-14 北京航空航天大学 基于国密sm3的哈希原像零知识证明电路生成方法及装置
CN116775544A (zh) * 2023-08-23 2023-09-19 上海芯联芯智能科技有限公司 一种协处理器和计算机设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760784A (zh) * 2016-02-22 2016-07-13 清华大学无锡应用技术研究院 多元化配置信息压缩方法及装置
US20170141914A1 (en) * 2015-11-12 2017-05-18 Intel Corporation Hybrid sm3 and sha acceleration processors
CN109274480A (zh) * 2017-07-17 2019-01-25 科大国盾量子技术股份有限公司 基于hmac-sm3算法的数据认证方法及量子密钥分发系统
CN110086602A (zh) * 2019-04-16 2019-08-02 上海交通大学 基于gpu的sm3密码散列算法的快速实现方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170141914A1 (en) * 2015-11-12 2017-05-18 Intel Corporation Hybrid sm3 and sha acceleration processors
CN105760784A (zh) * 2016-02-22 2016-07-13 清华大学无锡应用技术研究院 多元化配置信息压缩方法及装置
CN109274480A (zh) * 2017-07-17 2019-01-25 科大国盾量子技术股份有限公司 基于hmac-sm3算法的数据认证方法及量子密钥分发系统
CN110086602A (zh) * 2019-04-16 2019-08-02 上海交通大学 基于gpu的sm3密码散列算法的快速实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
方轶;丛林虎;邓建球;陈泽宇;: "基于FPGA的SM3算法快速实现方案", 计算机应用与软件, no. 06 *
蔡冰清;白国强;: "SM3杂凑算法的流水线结构硬件实现", 微电子学与计算机, no. 01 *
陈博宇 等: "基于FPGA的SM3算法的优化实现", 信息技术, pages 143 - 147 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI775514B (zh) * 2020-11-23 2022-08-21 大陸商深圳比特微電子科技有限公司 運算核、計算晶片和數據處理設備
CN113300831A (zh) * 2021-07-26 2021-08-24 苏州浪潮智能科技有限公司 一种安全散列算法的实现方法、系统、介质及设备
CN113794552A (zh) * 2021-09-14 2021-12-14 山东省计算中心(国家超级计算济南中心) 一种基于simd的sm3并行数据加密运算方法及系统
CN113794552B (zh) * 2021-09-14 2023-07-07 山东省计算中心(国家超级计算济南中心) 一种基于simd的sm3并行数据加密运算方法及系统
CN115967493A (zh) * 2021-10-12 2023-04-14 北京航空航天大学 基于国密sm3的哈希原像零知识证明电路生成方法及装置
CN115967493B (zh) * 2021-10-12 2024-05-24 北京航空航天大学 基于国密sm3的哈希原像零知识证明电路生成方法及装置
CN115664849A (zh) * 2022-12-13 2023-01-31 苏州浪潮智能科技有限公司 Bmc及其加密数据生成系统、方法、设备及存储介质
WO2024125187A1 (zh) * 2022-12-13 2024-06-20 苏州元脑智能科技有限公司 Bmc及其加密数据生成系统、方法、设备及存储介质
CN115664640A (zh) * 2022-12-23 2023-01-31 苏州浪潮智能科技有限公司 Sha-3算法的硬件实现方法、系统、存储介质及设备
CN115664640B (zh) * 2022-12-23 2023-03-21 苏州浪潮智能科技有限公司 Sha-3算法的硬件实现方法、系统、存储介质及设备
CN116775544A (zh) * 2023-08-23 2023-09-19 上海芯联芯智能科技有限公司 一种协处理器和计算机设备
CN116775544B (zh) * 2023-08-23 2023-11-28 上海芯联芯智能科技有限公司 一种协处理器和计算机设备

Similar Documents

Publication Publication Date Title
CN111913749A (zh) 基于流水线的sm3算法fpga实现方法及系统
CN111464308B (zh) 一种实现多种哈希算法可重构的方法和系统
CN107135078B (zh) Pbkdf2密码算法加速方法及所用装置
CN108959168B (zh) 基于片上内存的sha512全流水电路及其实现方法
CN112367158A (zh) 一种加速sm3算法的方法、处理器、芯片及电子设备
CN108768656B (zh) 一种基于哈希算法的数据校验方法
CN107154836A (zh) 一种基于fpga的并行循环冗余crc校验方法
CN104092534A (zh) 实现sm3密码杂凑算法中的迭代压缩的方法
CN108959128B (zh) Crypt-SHA512加密算法的加速装置与方法
CN109190413B (zh) 一种基于fpga和md5加密的串行通信系统
US8370411B2 (en) Generating unique random numbers for multiple instantiations
CN108183790B (zh) 一种aes加密装置、芯片及系统
EP1766854A1 (en) Apparatus and method for performing md5 digesting
Kahri et al. Efficient FPGA hardware implementation of secure hash function SHA-256/Blake-256
CN112084534A (zh) 一种哈希算法的实现方法及装置
CN116186747A (zh) 自适应哈希加密方法、非易失性可读存储介质及电子设备
Chaves et al. Secure hashing: Sha-1, sha-2, and sha-3
CN112152784A (zh) 用于基于散列的签名算法的并行处理技术
CN101399667A (zh) 产生快速安全哈希函数的步函数装置和消息扩展方法
Atiwa et al. Accelerated hardware implementation of blake2 cryptographic hash for blockchain
CN106850189A (zh) 一种减少sm3密码杂凑算法中运算量的方法及装置
US11539509B2 (en) Memory optimization for nested hash operations
CN111914307B (zh) 基于高层次综合的国密算法sm4加速处理方法及系统
CN116318660B (zh) 一种消息扩展与压缩方法及相关装置
CN110569021A (zh) 一种抗asic挖矿的工作量证明方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination