首页> 中国专利> 基于FPGA实现的超高吞吐量MD5暴力破解装置

基于FPGA实现的超高吞吐量MD5暴力破解装置

摘要

一种数字信息处理技术领域的基于FPGA实现的超高吞吐量MD5暴力破解装置,包括:FPGA内实现的输入接口模块、原始数据生成模块、MD5计算模块和输出接口模块,以及接入FPGA的键盘输入设备和显示接口设备,输入接口模块与键盘输入设备相连接并传输用户输入的目标MD5值以及控制运算信息,原始数据生成模块与输入接口模块及MD5计算模块相连接并在时钟信号的控制下传输512位的原始数据块信息给MD5计算模块,MD5计算模块与输入接口模块、原始数据生成模块和输出接口模块相连接并传输运算结果给输出接口模块,输出接口模块与显示接口设备相连接并传输运算的目标MD5值及运算结果。本发明通过FIFO存储器进行信息的存储以配合全流水线架构的运算,改进了运算效率。

著录项

  • 公开/公告号CN102156434A

    专利类型发明专利

  • 公开/公告日2011-08-17

    原文格式PDF

  • 申请/专利权人 上海交通大学;

    申请/专利号CN201110099441.8

  • 发明设计人 王臣;袁焱;

    申请日2011-04-20

  • 分类号G05B19/05(20060101);

  • 代理机构31201 上海交达专利事务所;

  • 代理人王锡麟;王桂忠

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2023-12-18 03:00:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-06-15

    未缴年费专利权终止 IPC(主分类):G05B19/05 授权公告日:20121128 终止日期:20150420 申请日:20110420

    专利权的终止

  • 2012-11-28

    授权

    授权

  • 2011-09-28

    实质审查的生效 IPC(主分类):G05B19/05 申请日:20110420

    实质审查的生效

  • 2011-08-17

    公开

    公开

说明书

技术领域

本发明涉及的是一种数字信息处理技术领域的装置,具体是一种基于FPGA实现的超高吞吐量MD5暴力破解装置。

背景技术

MD5即Message-Digest Algorithm 5(信息摘要算法5),是计算机及网络通信中广泛使用的摘要算法,用于确保信息传输的完整一致性,在网络通信中常用来防止原始数据被篡改、身份欺骗等攻击。理想的摘要算法,对于两组不同输入的数据,绝不会产生相同的签名,但是要想获得这种理论上的完美算法,需要和输入数据一样长的信息摘要。实际的信息摘要算法(例如MD5算法),使用一个适当大小的数字签名(例如用于MD5算法的128位)。信息发送方可以通过将发送信息的MD5值公布给接收方,接收方可以通过计算信息的MD5值与之对比,以验证信息是否完整,未被篡改。

MD5处理512位块中的数据来产生128位的摘要,当消息跨越多个块时,上一个块进行MD5计算所产生的摘要将作为下一个块进行MD5运算所需要的初始值,而第一个块的初始值由MD5标准给定。MD5摘要处理包括4大轮运算,每大轮包括16次计算迭代,总共即64轮运算,其软件模拟早有实现,但硬件实现在处理速度和消耗资源上具有极大的优越性,所以使用硬件实现更加理想。

FPGA即Field Programmable Gate Array(现场可编程逻辑门阵列),是一种含有可编程元件的半导体设备,是可供使用者现场程序化的逻辑门阵列元件。FPGA可以快速地进行算法及逻辑的设计、更改及验证,是现代集成电路设计的技术主流。相对于专用集成电路(ASIC)而言,其优点是方便、灵活,可快速重配置。

MD5的暴力破解,亦称字典攻击,是通过计算不同字母、数字、符号及其组合的MD5值进行穷举,已找出与目标MD5值相同的信息原文,从而间接破译原文的方法。MD5暴力破解需要大量不同信息的MD5计算,其破解所需的时间与原文的复杂度及破解装置计算MD5值的效率直接相关。当原文信息一定的时候,破解所需的时间则与破解装置计算MD5值的吞吐量成反比关系。所以,该类装置的设计中,MD5计算的吞吐量是其性能的关键。

经过对现有技术的检索发现,MD5的FPGA实现有很多,其中2009年由Yuliang Wang,Qiuxia Zhao,Liehui Jiang,Yi Shao等人发表在High Performance Computing and Applications(高性能计算与应用)国际会议中的Ultra High Throughput Implementations for MD5 Hash Algorithm on FPGA(中文译名:超高吞吐量MD5算法的FPGA实现)一文,总结了大量前人在这一技术领域所做出的成果,并提出了当时达到最高吞吐量的实现方法。当时整个MD5运算模块使用了32级流水线,有着34个时钟周期的延迟,在Stratix II GXEP2SGX90FF1508C3芯片上可以运行在66.48MHz的频率下,这样使得整个运算模块的吞吐量达到了32.035Gbps。

但是该现有技术并没有完全针对MD5的运算规律进行设计,其32级流水线仅仅是在之前设计的4级流水线基础之上的扩展。由于MD5的核心运算包括64轮,在32级流水的情况下仍然需要迭代结构,这样也导致了更复杂的外部控制结构。

发明内容

本发明针对现有技术存在的上述不足,提供一种基于FPGA实现的超高吞吐量MD5暴力破解装置,其中的MD5核心运算部分针对MD5的运算规律,对整个流水线及其外部控制结构进行了重新设计,取消了迭代结构,加入了FIFO(First In,First Out)存储器进行信息的存储以配合全流水线架构的运算,改进了运算效率,使得其MD5运算延迟可以控制在与流水线级数相同的64个,并且由于外部控制结构的简化,整个模块所占用的FPGA资源大大降低,从而更有效地利用了FPGA中的逻辑资源。

本发明是通过以下技术方案实现的,本发明包括:FPGA内实现的输入接口模块、原始数据生成模块、MD5计算模块和输出接口模块,以及接入FPGA的键盘输入设备和显示接口设备,其中:输入接口模块与键盘输入设备相连接并传输用户输入的目标MD5值以及控制运算信息,原始数据生成模块与输入接口模块及MD5计算模块相连接并在时钟信号的控制下传输512位的原始数据块信息给MD5计算模块,MD5计算模块与输入接口模块、原始数据生成模块和输出接口模块相连接并传输运算结果给输出接口模块,输出接口模块与显示接口设备相连接并传输运算的目标MD5值及运算结果。

所述的输入接口模块包括:时钟分频单元、键盘检测单元和当前状态输出单元,其中:时钟分频单元将外部高速的时钟信号通过分频变成低速的时钟信号并输出至键盘检测单元,键盘检测单元在低速时钟信号的控制下检测键盘接口信号并输出键盘码至当前状态输出单元,当前状态输出单元根据键盘码判断用户输入的内容并将其信息归类后分别输出至输出接口模块和MD5计算模块。

所述的原始数据生成模块使用依次递增的方式,在ASCII码表的可见符号范围内依次产生原文数据并加入长度信息组成标准的待计算的512比特长度的消息块,该模块以高速时钟信号及启动运算信号作为输入,以512位原始数据块作为输出,受外部高速的时钟信号控制,在每个时钟的上升沿开始进行操作,改变输出值,即512位长的原始数据块。该原始数据块按照MD5标准的数据格式进行组织。

所述的MD5计算模块包括:FIFO存储单元、运算流水线单元和运算结果比较单元,其中:FIFO存储单元用于存储原始数据生成模块输入的512位长的原始数据块,并在每个时钟信号的下降沿进行数据的移入移出操作,将原始数据生成模块输入的512位长的原始数据块移入存储单元的最左侧,同时将存储单元的所有剩余数据块向右移动,最右侧的数据则被移出队列,被次右侧的数据覆盖,运算流水线单元对输入的消息块进行MD5信息摘要运算,运算结果比较单元接收输入接口模块输出的128位目标MD5摘要值,将其与运算流水线单元的输出进行对比。

所述的FIFO存储单元存储容量为512×64比特且使用先进先出的策略,在FIFO存储单元中,每一个存储的512位长的原始数据块都对相应的运算流水线单元上的MD5单步运算核心处理子单元进行数据输出,这样整个FIFO存储单元一共有64个输出接口。

所述的运算流水线单元由64个MD5单步运算的核心处理子单元组成,核心处理子单元之间通过存储了中间运算结果的128位寄存器进行串接相连,其中:

第n个MD5单步运算核心处理子单元,1≤n≤64,将第n-1轮运算结果的寄存器内的值作为输入,如第5个MD5单步运算核心处理子单元将第4轮运算结果的寄存器内的值作为输入,而当n=1时,则取MD5标准中定义的初始值作为输入;

同时,第n个MD5单步运算核心处理子单元,1≤n≤64,也将第n个FIFO存储单元的输出接口输出的值作为输入;

最后一级的核心处理子单元,即第64个核心处理子单元,可以在原来核心处理子单元结构的基础上增设4个硬件加法器以执行64轮运算之后的加法运算操作,每个硬件加法器均输出32比特的数据,共128比特的数据,作为最终的MD5运算结果并输出。

所述的运算结果比较单元采用128位比较器实现,运算结果比较单元接收FIFO存储单元最右侧数据的输入并判断当存在信号置高时,输出当前FIFO存储单元的最右侧数据,否则输出高阻态,即无输出。

所述的输出接口模块包括:显示信息预处理单元和显示接口单元,其中:显示信息预处理单元负责输入信息的组织,提供显示信息给显示接口单元,显示接口单元与显示接口设备相连,负责将信息转换成符合显示接口设备标准的信号,进行信息输出。

本系统在FPGA开发平台DE2上进行了具体实现,使用的FPGA芯片为Altera公司出品的Cyclone II系列中的芯片EP2C35F672C6,键盘使用PS2接口的标准101电脑键盘,显示接口设备为VGA接口显示器,受硬件水平的限制,MD5核心运算模块的系统时钟为50MHz,因而整个系统的MD5运算吞吐量被限制在了25.6Gbps,若使用更高速的FPGA,系统时钟可以进一步提高,并且,若使用逻辑资源更多的FPGA,甚至使用ASIC实现,可以使用多个MD5运算核心进行并行计算,则可以将运算的吞吐性能再提升几个数量级。总的来说,本发明的全流水线架构MD5运算核心所达到的数据吞吐性能已经遥遥领先于已公开的MD5算法的硬件实现的架构。

附图说明

图1为本发明结构示意图。

图2为MD5暴力破解装置中FPGA芯片内部的输入接口模块的结构图。

图3为MD5暴力破解装置中FPGA芯片内部的原始数据生成模块生成的512位原始数据块序列的示意图。

图4为MD5运算过程示意图。

图5是MD5运算中单步运算的方框图。

图6为实施例1中FPGA芯片内部的MD5计算模块的结构图。

图7为MD5计算模块中的MD5单步运算的核心处理子单元通用结构的示意图。

图8为实施例2中的全流水线架构的MD5计算模块的结构图。

具体实施方式

下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

实施例1

如图1所示,本实施例包括:FPGA内实现的输入接口模块、原始数据生成模块、MD5计算模块和输出接口模块,以及接入FPGA的键盘输入设备和显示接口设备,其中:输入接口模块与键盘输入设备相连接并传输用户输入的目标MD5值以及控制运算信息,原始数据生成模块与输入接口模块及MD5计算模块相连接并在时钟信号的控制下传输512位的原始数据块信息给MD5计算模块,MD5计算模块与输入接口模块、原始数据生成模块和输出接口模块相连接并传输运算结果给输出接口模块,输出接口模块与显示接口设备相连接并传输运算的目标MD5值及运算结果。

如图2所示,本实施例中FPGA内部的输入接口模块包括时钟分频单元、键盘检测单元和当前状态输出单元。时钟分频单元以时钟信号和重置信号为输入,将50MHz时钟信号进行1024倍分频,输出低速时钟信号。键盘检测单元以键盘信号、低速时钟信号和重置信号为输入,当键盘信号有输入时,检测其信号的变化,并提取出其代表的键盘码,输出键盘码给当前状态输出单元。当前状态输出单元根据输入的键盘码,整理出128位目标MD5摘要信号进行输出,当键盘码为“回车”按键时,则将启动运算信号置高。

如图3所示,原始信息生成模块生成的512位原始数据块内容的变化规律为:原始信息生成模块内置计数器,将依次输出图中的信息,直至遍历全部的数据块。其中W00、W01......W14、W15为16个32比特长的数据,之间通过串接组成了512位长的数据块。根据MD5标准,W14、W15共64比特数据,代表着信息原文的比特长度,因此其值会根据W00、W01......W13中的数据长度进行变化。而W00、W01......W13中的数据,则根据ASCII码表中的可见字符部分,进行不断的枚举。由于可见字符为0x20至0x7E,其计数至7E时会重置为20并向前进一位。另外MD5标准规定了原文后要补上100...00的比特序列,则每个序列前有0x80的字节,这是由于W00、W01......W14、W15为高位字节在前排列的结果。

如图4所示,MD5运算中数据处理的步骤如下:

首先,若原始信息的长度b不能满足b≡448 mod 512,则将会在b后进行附加填充位操作,以扩展原始信息的长度使其满足b≡448 mod 512。具体的实施方式是在原始信息的尾部附加“1000...0”比特串,即以比特1为开头,后面全部为比特0。

然后,在后面附加上长度64比特的长度信息,其单位为比特。若原始信息的长度超过了264比特,则取其长度二进制表示的后64位作为长度信息。

最后,经过预处理的信息将被分割成512比特长度的块,分别进行MD5运算。本发明中,MD5计算模块以初始值或上一个MD5运算的结果,以及相应的512比特信息块作为计算输入,而计算输出128位MD5值,或给下一个MD5运算模块进行运算的初始值。

图5描述了MD5运算中的单步运算过程。MD5运算中共包括64轮如图5所示的运算。该过程主要包括了逻辑运算,加法运算以及移位运算三种类型的运算,在MD5标准中进行了详细说明。计算定义了四个4字节长度的初始值A0、B0、C0、D0,其十六进制表示为(低位字节在前):

A0=01 23 45 67,

B0=89 ab cd ef,

C0=fe dc ba 98,

D0=76 54 32 10,

同时,定义了四个辅助函数,每个函数作为图中的“F”逻辑运算,使用16轮。其运算将B、C、D作为输入量,可以分别表示为:

F(B,C,D)=(B and C)or((not B)and D)        (1~16轮使用)

G(B,C,D)=(B and D)or(C and(not D))        (17~32轮使用)

H(B,C,D)=B xor C xor D                    (33~48轮使用)

I(B,C,D)=C xor(B or(not D))               (49~64轮使用)

还有,对于输入的512比特信息块,将其分成16个32比特的数据块,以字节为单位,即四字节块。默认低位字节在前,高位字节在后,则得到数据X[0],X[1],...,X[15]一共16个32位长的16进制数据。而对于每一步的n(0≤n≤63),只有一个X[m](0≤m≤15)参与运算,其中m与n满足如下阶段线性关系:

m=n                 0≤n≤15,

m=(5×n+1)mod 16    16≤n≤31,

m=(3×n+5)mod 16    32≤n≤47,

m=7×n mod 16       48≤n≤63,

另外,定义了常数序列K[n],源自正弦函数,其伪代码为:

K[n]=floor(abs(sin(n+1))×2^32)    0≤n≤63

其中floor代表取整。

接下来定义了用于移位的常数序列R[n](0≤n≤63),具体为:

R[0..15]={7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22}

R[16..31]={5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20}

R[32..47]={4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23}

R[48..63]={6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21}

图5中的“∑”代表着将四个输入相加,“<<”代表着循环左移运算,“+”代表着加法运算,将逻辑运算用“FF(Bn,Cn,Dn)”通用表示,则整个MD5运算的64步,用n作为步数指示(0≤n≤63),可以表示为:

An+1=Dn

Bn+1=Bn+(An+FF(Bn,Cn,Dn)+X[m]+K[n])<<R[n]

Cn+1=Bn

Dn+1=Cn

当n=0时,其A0、B0、C0、D0的值即前文中四个四字节长度的初始值。可以注意到,所有的运算都是32位长的运算,对于每一步n,参与运算的512比特信息块中只有32比特参与了运算。在64步运算结束后,输出值A64、B64、C64、D64将与初始值A0、B0、C0、D0相加,作为输出。即输出值为:

Aout=A64+A0

Bout=B64+B0

Cout=C64+C0

Dout=D64+D0

图6描述了作为本装置核心的MD5计算模块的结构组成。整个MD5计算模块使用FIFO(First In First Out,先进先出)结构的存储装置,用于存储运算中的512比特信息块。信息块中的每个512比特数据在每个时钟的下降沿开始进行移动,并且同时输出对应于X[m]部分的32位信息块的数据,提供给下方的MD5核心运算子单元Pn进行相应步n的运算。而Pn则同样受时钟信号控制,在时钟的上升沿开始执行第n+1轮运算(0≤n≤63),并输出运算结果至Pn+1与Pn之间的32位寄存器An+1、Bn+1、Cn+1、Dn+1。这样可以看出,在每个时钟的上升沿,运算的中间结果An+1、Bn+1、Cn+1、Dn+1都会被更新,而在每个时钟的下降沿,待运算的消息块都会被置入FIFO中,并在之后的每个时钟的下降沿开始在FIFO中进行流动,直至其MD5运算完成。最后,同样使用时钟,将最后一步输出值A64、B64、C64、D64将与初始值A0、B0、C0、D0相加进行控制,完成输出。在此结构中,使用了寄存器来存储中间变量,使用时钟控制数据流动和运算,充分利用了时钟的上升沿和下降沿,使整个MD5核心运算需要65个时钟周期即可完成。

图7描述了附图6中作为核心运算子单元的Pn的内部通用结构,其将An、Bn、Cn、Dn,以及X[m]作为输入数据,An+1、Bn+1、Cn+1、Dn+1作为输出数据,同时还有时钟信号和复位信号控制。其内部完全使用组合逻辑器件与结构,没有复杂的时序控制。另外由于对每一步给定的n,K[n]为常数,“F”的运算方式固定,这些都可以固化在每个Pn中。同时,对于移位后加法的操作,可以使用位映射的方式,直接进行加法。即将映射前的加法器的输出位中的高R[n]位接入映射后的加法器的输入的低R[n]位,同时加法器的低(32-R[n])位接入映射后的加法器的输入的高(32-R[n])位。整个装置共使用4个32位加法器,无复杂时序逻辑,可以在单个时钟周期内完成全部运算,满足了系统需求。

此外,实施例中的输出接口模块,由128位目标MD5摘要、“找到”信号和对应的原文作为输入,负责将所有输入的信息转换成能够驱动外部的VGA接口芯片的信号,进行信息的输出显示。

实施例2

图8描述了一种改进结构的用于本实施例的MD5计算模块中有关运算流水线单元和FIFO存储单元的组成结构。其在最后一级流水线的运算核心子单元P63进行了一定的改进(即再加入了一级加法器,整合到一起),在图中用Q表示。这样可使得整个架构进行一次MD5运算所需时钟周期减少到64个。

本实施例中的其它部分的组成与结构,以及各部分结构之间的连接同实施例1。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号