论文部分内容阅读
散列函数作为现代密码学的重要组成部分,为许多流行的互联网协议和安全应用提供了基础加密算法。因为结构独特、安全性高、软硬件实现性能强、兼容性好等优点,Keccak算法于2015年被美国国家标准与技术研究所(National Institute of Standards and Technology,NIST)正式采用为新的散列函数标准,即第三代安全散列算法(Secure Hash Algorithm-3,SHA-3)。考虑到集成电路和Keccak算法均对故障极为敏感,如何保障Keccak加密电路在运算过程中免受自然或人为的故障攻击,成为Keccak算法在实际应用中必须解决的问题之一。论文在充分研究Keccak算法的基础上,使用硬件语言完成对算法的高性能实现。并在时间冗余方案的基础上设计了双冗余码方案故障检测方案。相较于结构冗余方案,时间冗余方案不会导致电路资源的过多消耗,但是会有无法检测永久性故障和吞吐率大幅降低的缺点。本文针对Keccak算法特点提出了动态校验冗余码(Dynamic Redundancy Check,DRC)用于检测永久性故障,并采用流水线设计减少了本方案对时间资源的开销。另外,通过分析集成电路故障成因和其对门电路逻辑功能的影响,建立了门级故障模型,并利用后仿的网表文件组建了一套故障注错仿真系统。比起多数纯软件的算法节点模型仿真,该系统所仿真的故障更加具体,覆盖率数据也更加有效。Keccak算法及其故障检测方案使用工具Vivado 2016.2通过功能仿真,并在ISE平台完成FPGA综合和实现。故障覆盖率验证阶段,采用Tcl和NcVerilog搭建了故障仿真系统。其中,Tcl实现系统控制和故障注入的功能,NcVerilog实现对故障网表文件仿真并响应故障的功能。最后,通过评估本设计在Xilinx virtex5 FPGA上实现结果,表明本方案在只增加12.2%面积和降低13.4%吞吐率的情况下,可以做到近乎100%的故障覆盖率。其方案和硬件系统对控制故障检测系统硬件和时间资源的消耗、提高故障覆盖率等可提供重要的参考。