一种基于FPGA的Keccak算法故障检测系统的制作方法

文档序号:17089669发布日期:2019-03-13 23:18阅读:238来源:国知局
一种基于FPGA的Keccak算法故障检测系统的制作方法

本发明涉及加密算法领域,具体涉及一种基于fpga的keccak算法故障检测系统。



背景技术:

hash算法广泛应用于数字签名、消息认证、密码协议等方面,在信息安全领域中扮演着极其重要的角色。自2004年我国学者王小云教授提出的模差分和消息修改的攻击方法以来,采用merkle-damgard结构的一系列hash函数md5、sha-1、sha-2被暴露出了严重的安全问题。因此,在2007年nist(美国国家标准与技术研究所)发起了在全球范围内征集新hash函数标准sha-3的计划,最终于2015年正式采用keccak算法为新的安全hash函数标准sha-3。

keccak算法的映射分布均匀性和sponge迭代结构,使得电路微小的故障都会导致输出的keccak值发生根本性的变化。而keccak算法的抗原像攻击性(单向性)导致无法只通过原码的keccak值来确认电路是否正常工作。因此在keccak算法电路中加入故障检测系统就非常必要。

目前业内对与keccak算法的故障检测方案,无论软硬件都是基于传统的时间冗余方案或结构冗余方案。前者会导致keccak算法的吞吐率减半并且无法检测永久性故障,后者会导致消耗两倍的硬件资源,且两种方案均无法检测硬件木马攻击导致的硬件故障。



技术实现要素:

本发明的目的是针对现有技术的不足,提供了一种基于fpga的keccak算法故障检测系统,使得在只降低极少吞吐率和增加极少电路资源的前提下,既可以检测临时性故障又可以检测永久性故障还可以抵御大部分的硬件木马攻击。

本发明的目的可以通过如下技术方案实现:

一种基于fpga的keccak算法故障检测系统,包括填充和冗余码生成模块、keccak函数运算模块和冗余码校验模块,填充和冗余码生成模块将原数据填充到指定比特数形成原码,存于寄存器中并生产对应比特数的时间冗余码和动态冗余校验码x,再由keccak函数运算模块中三级流水线同时运算该三个编码生成其对应的keccak值,最后由冗余码校验模块校验原码、时间冗余码和动态冗余校验码x的keccak值,输出校验结果。

进一步地,所述填充和冗余码生成模块按照keccak算法标准将原数据填充到指定比特数形成原码,在填充后一个周期产生时间冗余码,再下一个周期产生动态冗余校验码x,并于这三个周期分别将这三个编码传送给keccak函数运算模块。

进一步地,所述时间冗余码是与原码相同的编码,用于检测暂时性故障。

进一步地,动态冗余校验码成对存储于fpga中,由动态冗余校验码x和动态冗余校验码y组成,分别存储于填充和冗余码生成模块以及冗余码校验模块,动态冗余校验码y是已知正确的由动态冗余校验码x经keccak算法运算的keccak值;动态冗余校验码能够检测永久性故障,且随时间增加其故障覆盖率动态增加,还能够检测大部分硬件木马导致的故障。

进一步地,所述keccak函数运算模块按照keccak算法标准构建rtl电路,并由三级流水线组成,将原本keccak的sponge迭代结构拆分重组后在其中插入两级流水线,与原本的一级寄存器共同形成三级流水线。

进一步地,所述冗余码校验模块先将上述原码的keccak值与上述时间冗余码的keccak值比较,不匹配则输出暂时性故障,再将上述动态冗余校验码x的keccak值与上述动态冗余校验码y比较,不匹配则输出永久性故障,如果无故障,则输出原码的keccak值。

进一步地,所述系统的运作过程如下:

s1、将原数据在填充和冗余码生成模块填充到指定比特数形成原码,并于到填充完成的一个周期将数据传输给keccak函数运算模块,在下两个周期分别生成对应比特数的时间冗余码和动态冗余校验码x,并于这两个周期分别将时间冗余码和动态冗余校验码x传输给keccak函数运算模块;

s21、keccak函数运算模块将连续三个周期分别传输来的原码、时间冗余码和动态冗余效验码x经过第一级运算存储到流水线1中,然后分别经过第二级运算存储到流水线2中,再经过第三级运算存储到流水线3中,最后分别通过流水线3于三个周期进入下一轮迭代;

s22、数据在keccak函数运算模块经过24轮keccak轮函数算法迭代后,即完成keccak轮函数运算生成相应的keccak值,再将数据传输给冗余码校验模块;

s3、冗余码校验模块接收到数据后,第一个周期将原码的keccak值保存;第二个周期将原码的keccak值与时间冗余码的keccak值比较,如果不同则输出临时性故障;第三个周期将动态冗余效验码x的keccak值与动态冗余效验码y比较,如果不同则输出永久性故障,如果均无故障则输出原码的keccak值。

本发明与现有技术相比,具有如下优点和有益效果:

本发明提供的基于fpga的keccak算法故障检测系统,只在极少量降低吞吐率和增加资源使用率的情况下实现故障检测方案,并且双冗余码的方案保证了既能检测临时性故障也可以检测永久性故障还能够抵御大多数硬件木马的攻击。

附图说明

图1为本发明实施例基于fpga的keccak算法故障检测系统的数据流程示意图。

图2(a)为无故障检测的keccak模块所消耗的时间成本示意图,图2(b)为无流水线结构的keccak故障检测方案所消耗的时间成本示意图,图2(c)为流水线结构的keccak故障检测方案所消耗的时间成本示意图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例:

本实施例提供了一种基于fpga的keccak算法故障检测系统,包括填充和冗余码生成模块、keccak函数运算模块和冗余码校验模块,填充和冗余码生成模块将原数据填充到指定比特数形成原码,存于寄存器中并生产对应比特数的时间冗余码和动态冗余校验码x,再由keccak函数运算模块中三级流水线同时运算该三个编码生成其对应的keccak值,最后由冗余码校验模块校验原码、时间冗余码和动态冗余校验码x的keccak值,输出校验结果;

所述填充和冗余码生成模块按照keccak算法标准将原数据填充到指定比特数形成原码,在填充后一个周期生产时间冗余码,再下一个周期产生动态冗余校验码x,并于这三个周期分别将这三个编码传送给keccak函数运算模块;

填充和冗余码生成模块以及冗余码校验模块分别生成动态冗余校验码x和动态冗余校验码y,用于解决传统时间冗余方案无法检测永久性故障和硬件木马故障的问题。动态冗余校验码是存储在电路中、可以动态存取的编码对,每对动态冗余效验码是由动态冗余校验码x和动态冗余校验码y组成的,动态冗余校验码y是已知正确的由动态冗余校验码x经keccak算法运算的keccak值。当动态冗余校验码x经过被测keccak运算电路之后,将计算后的动态冗余校验码x的keccak值与冗余码校验模块的动态冗余校验码y比较,如果相同则表明没有永久性故障和木马攻击故障。且由于其为动态码,校验码组越多则故障覆盖率越高。

所述冗余码校验模块先将上述原码的keccak值与上述时间冗余码的keccak值比较,不同则输出暂时性故障,再将上述动态冗余校验码x的keccak值与上述动态冗余校验码y比较,不匹配则输出永久性故障,如果无故障,则输出原码的keccak值。

具体地,所述keccak函数运算模块按照keccak算法标准构建rtl电路,并由三级流水线组成,将原本keccak的sponge迭代结构拆分重组后在其中插入两级流水线,与原本的一级寄存器共同形成三级流水线。三级流水线方案用于解决传统时间冗余方案中吞吐率减半(由于本系统是双冗余码方案,实际上如果不采用流水线将会使吞吐率变为之前的三分之一)的问题。如图2(a)为无故障检测的keccak模块所消耗的时间,图2(b)为无流水线结构的keccak故障检测方案,如图所示该方案完成一次运算的时间成本是无故障检测的3倍,图2(c)为带流水线结构的keccak故障检测方案,通过三级流水线设计避免了多余的时间成本,如图所示该方案完成一次运算时间与无故障检测的keccak模块所消耗的时间一致。原码、时间冗余码和动态冗余效验码分别随时间周期流过三级流水线的每一级,保证了三种编码的同时运算又互不干扰。

具体地,所述系统的数据流程示意图如图1所示,运作过程如下:

s1、将原数据在填充和冗余码生成模块填充到1088bits形成原码,并于到填充完成的一个周期将数据传输给keccak函数运算模块,在下两个周期分别生成1088bits的时间冗余码和动态冗余校验码x,并于这两个周期分别将时间冗余码和动态冗余校验码x传输给keccak函数运算模块;

s21、keccak函数运算模块将连续三个周期分别传输来的原码、时间冗余码和动态冗余效验码x经过第一级运算存储到流水线1中,然后分别经过第二级运算存储到流水线2中,再经过第三级运算存储到流水线3中,最后分别通过流水线3于三个周期进入下一轮迭代;

s22、数据在keccak函数运算模块经过24轮keccak轮函数算法迭代后,即完成keccak轮函数运算生成相应的keccak值,再将数据传输给冗余码校验模块;

s3、冗余码校验模块接收到数据后,第一个周期将原码的keccak值保存;第二个周期将原码的keccak值与时间冗余码的keccak值比较,如果不同则输出临时性故障;第三个周期将动态冗余效验码x的keccak值与动态冗余效验码y比较,如果不同则输出永久性故障,如果均无故障则输出原码的keccak值。

由上述步骤可以完成临时性故障和永久性故障检测并输出原码的keccak值,原本要72个周期完成的工作变为只要24个周期,并在未使电路翻倍的情况下检测到了永久性故障和木马故障。

根据本发明的实施例,使用veriloghdl语言完成所述基于fpga的keccak算法故障检测系统设计,并采用vivado进行仿真综合最后上板验证。通过验证与标准输出一致,并可以检测临时性和永久性故障。

本设计在xilinxxc7a100tcsg324器件上运行最高频率可以达到360mhz;吞吐率可以达到15.667gbps。对比只有keccak算法功能而无故障检测系统的设计,吞吐率只降低了13%,资源只多使用了12%,相较于原本吞吐率降低50%或资源多使用100%的传统方案是一个巨大的提示。

以上所述,仅为本发明专利较佳的实施例,但本发明专利的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明专利所公开的范围内,根据本发明专利的技术方案及其发明专利构思加以等同替换或改变,都属于本发明专利的保护范围。

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