基于CPU-GPU架构的彩虹链表的处理方法及系统与流程

文档序号:14444802阅读:877来源:国知局
基于CPU-GPU架构的彩虹链表的处理方法及系统与流程

本公开涉及计算机技术领域,尤其涉及一种基于cpu-gpu架构的彩虹链表的处理方法及系统。



背景技术:

网络安全非常重要。当前,网络已经成为人类生活不可或缺的重要组成部分。据统计,人均每天有超过4小时在上网,有超过95%的企业和部门通过网络发布和获取信息。密码技术作为一种重要的、行之有效的安全防护手段,发挥着不可替代的作用。密码的加密算法和强度,在很大程度上关乎信息系统的安全。

网络常用的身份认证类密码,是进行网络和信息系统防护的重要方法,其验证和存储通常采用散列(hash)运算或其他类似散列的单向加密技术。散列运算是通过某种散列函数将目标任意长度的字符串对应到固定位值中的一种算法。常用的散列函数有md(messagedigest,消息提取)(如md4、md5等)系列、sha(securehashalgorithm,安全哈希算法)(如sha-1、sha-256、sha-512等)系列、des(dataencryptionstandard,数据加密标准)以及aes(advancedencryptionstandard,高级加密标准)等。

由于散列运算具有单向性,逆计算非常困难,所以散列函数的解算主要包括以下几种方法:

(1)穷尽搜索法,就是尝试明文或者密钥空间内可能的组合。但是如果明文空间很大,加密过程复杂,那么所需要的解算时间则会很长。如95字符集的10位空间穷尽(以常用的md5散列为例),即使使用当前运算速度最快的“太湖之光”来进行解算,也需要大约900小时才能完成。使用采用cpu(centralprocessingunit,中央处理器)-4gpu(graphicsprocessingunit,图形处理器)结构的通用服务器穷尽95字符8位的空间就需要超过7500小时才能完成,这显然是一个不能容忍的数字。

(2)预计算查表法,是预先将明文或密钥和对应计算好的散列值成对保存。破解时只需要查找跟目标散列相同的值,则对应的明文就是所求的结果。但该方法在很多情况下是不可行的,如md5理论的明文空间为2^128,这显然是一个天文数字。

(3)字典攻击法,就是将一些常用的明文或者密钥存放于某个文件中,然后通过计算进行逐一比对破解。但其缺陷是字典一般只是全部空间的一小部分,可能会遗漏大量的结果。

(4)彩虹链表法,就是基于计算和预计算折衷的方法,也一种预计算查表方法。不同之处在于彩虹链表并不是将所有明文或者密钥空间以及散列值进行保存,而是只保存开始数据和结束数据(称之为链头和链尾)。当进行匹配时重新在该彩虹链表中进行计算,从而利用了计算机计算性能的同时节省了存储空间,很好地结合了穷举搜索法和预计算查表法各自的优势。采用彩虹链表法,在通用服务器上,可以在1000小时以内完成95字符8位空间的口令的解算(本公开中的技术指标均采用md5散列函数的解算时间)。

虽然在通用服务器中采用方法(4)可以在1000小时内实现95字符8位口令的解算,具有一定的实用性,但采用该方法仍然将至少耗费用户42天左右的时间,无法满足用户的实际需求。



技术实现要素:

有鉴于此,本公开提出了一种基于cpu-gpu架构的彩虹链表的处理方法及系统。

根据本公开的第一方面,提出了一种基于cpu-gpu架构的彩虹链表的生成方法,包括:

多个gpu从cpu接收彩虹链表的各链首;

各gpu根据收到的链首生成对应的链尾;

各gpu将各链尾及其对应的链首组成彩虹链;

各gpu将各彩虹链发送至cpu。

根据本公开的另一方面,提供了一种基于cpu-gpu架构的彩虹链表的查找方法,还包括:

多个gpu从cpu获取多个哈希值;

gpu根据多个哈希值,计算得到各哈希值对应的所有的待查链尾;

gpu按照每次计算过程中所用的哈希函数和规约函数,对各待查链尾进行分类存储;

gpu将分类存储后的文件发送到cpu,由cpu将收到的各文件存储到存储空间;

cpu根据收到的文件在预存的文件存储结构中,查找各待查链尾对应的链首,再根据查找到的链首、所用的哈希函数和规约函数计算各哈希值对应的明文。

根据本公开的另一方面,提供了一种基于cpu-gpu架构的彩虹链表的生成系统,包括:

cpu,用于向多个gpu发送彩虹链表的各链首;

多个gpu,每个gpu用于根据从cpu收到的链首生成对应的链尾,将各链尾及其对应的链首组成彩虹链,并将各彩虹链发送至cpu。

根据本公开的另一方面,提供了一种基于cpu-gpu架构的彩虹链表的查找系统,包括:

cpu,用于向多个gpu发送多个哈希值;

多个gpu,每个gpu用于根据从cpu收到的各哈希值,计算得到各哈希值对应的所有的待查链尾;按照每次计算过程中所用的哈希函数和规约函数,对各待查链尾进行分类存储;将分类存储后的文件发送到cpu;

所述cpu还用于将从gpu收到的各文件存储到存储空间;根据收到的文件在预存的文件存储结构中,查找各待查链尾对应的链首,再根据查找到的链首、所用的哈希函数和规约函数计算各哈希值对应的明文。

根据本公开的另一方面,提供了一种基于cpu-gpu架构的彩虹链表的生成装置,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为:

执行本公开实施例的基于cpu-gpu架构的彩虹链表的生成方法。

根据本公开的另一方面,提供了一种基于cpu-gpu架构的彩虹链表的查找装置,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为:

执行本公开实施例的基于cpu-gpu架构的彩虹链表的查找方法。

根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。

本公开通过多个gpu根据从cpu接收彩虹链表的各链首生成对应的链尾,并将各链尾及其对应的链首组成彩虹链发送至cpu。充分利用了gpu的计算能力和cpu多进程的控制能力,在同样开支的条件下能够得到更强大的计算资源。

根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。

图1是根据一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的生成方法的流程图。

图2是根据另一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的查找方法的流程图。

图3是根据另一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的处理方法的示意图。

图4是相关技术中生成彩虹链表的示意图。

图5是本公开中cpu、gpu协同生成彩虹链表的示意图。

图6是相关技术中采用规约函数生成彩虹链的示意图。

图7是本公开中采用循环规约函数生成彩虹链的示意图。

图8是本公开中彩虹链表去重方法的证明示意图。

图9是本公开中彩虹链表的存储地址示意图。

图10是相关技术中彩虹链表的查表方法示意图。

图11是本公开中彩虹链表查表方法的示意图。

图12是本公开中cpu、gpu协同实现大批量口令的查表方法示意图。

图13是根据一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的处理方法的装置的框图。

具体实施方式

以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。

在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。

另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。

图1是根据一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的生成方法的流程图,如图1所示,该方法包括:步骤s101至步骤s104。

在步骤s101中,多个gpu从cpu接收彩虹链表的各链首。

在步骤s102中,各gpu根据收到的链首生成对应的链尾。

在步骤s103中,各gpu将各链尾及其对应的链首组成彩虹链。

在步骤s104中,各gpu将各彩虹链发送至cpu。

在一种可能的实现方式中,cpu可以根据所有gpu可同时并发执行的线程总数确定生成链首的个数,从而最大化利用gpu的计算资源。例如,在cpu-4gpu架构中每块gpu均拥有1024个可同时并发执行的线程,4块gpu拥有的线程总数为4096个,则cpu可以相应的生成4096个链首(也可以称为链头)。

在一种可能的实现方式中,在各gpu均已生成链尾的情况下,各gpu通过通信总线同时向cpu发送各链尾,可以尽量减少gpu与cpu通信的次数,从而在确保最大化利用gpu计算资源的前提下,减少gpu与cpu通信对系统造成的影响。

需要说明的是,本领域技术人员可以根据需要在cpu-gpu架构中设置合适数量的gpu,在此不做限定。

本实施例通过多个gpu从cpu接收彩虹链表的各链首,各gpu根据收到的链首生成对应的链尾,各gpu将各链尾及其对应的链首组成彩虹链,各gpu将各彩虹链发送至cpu。在生成链首时,充分利用了gpu的计算能力和cpu多进程的控制能力,在同样开支的条件下能够得到更强大的计算资源。

作为本实施例的一个示例,各gpu根据收到的链首生成对应的链尾,包括:各gpu根据收到的链首、预设的哈希函数和循环规约函数生成对应的链尾。

其中,各gpu根据收到的链首、预设的哈希函数和循环规约函数生成对应的链尾可以包括,各gpu在由彩虹链的链首至链尾的计算中,采用预设的一组r函数循环计算,而不是采用一组完全不同的r函数。

作为本实施例的一个示例,所述方法还包括:cpu对各所述彩虹链进行去重处理,具体包括:

在两条彩虹链的链尾相同的情况下,cpu根据所述两条彩虹链的链首、预设的哈希函数和循环规约函数分别计算得到对应的两条彩虹链的各个节点。

如果所述两条彩虹链中具有相同的节点,则保留两条彩虹链中不同节点数量较多的一条。

采用上述方式进行去重处理,能够最大限度的去除重复的彩虹链,减少后续需要存储的彩虹链的数据量,节约了存储资源。

作为本实施例的一个示例,所述方法还包括:cpu对各所述彩虹链进行分类存储,具体包括:

根据ascii可显示字符生成具有多级目录的文件存储结构,其中,所述多级目录是根据随机获取的三个ascii可显示字符的值来生成的。

根据所述彩虹链的链尾的前三位字符的ascii值查找文件存储结构中对应的文件,其中,所述彩虹链的链尾在前链首在后。

将所述彩虹链的第一剩余字符存储在查找到的对应的文件中,所述第一剩余字符为所述彩虹链去除了前三位字符之后的字符。

其中,采用三个ascii值产生的存储结构的层次以及具有存储结构中每个层次的文件数量是比较合适的。比较而言,采用少于三个ascii值将会导致每个文件中存储的彩虹链数量过大。采用多于三个ascii值将会导致文件总数过多。因此,优选采用三个ascii值作为存储地址。

采用上述方式对彩虹链进行优化存储,能够进一步减少彩虹链的储存空间,有利于提升彩虹链表的查表解算速度。

图2是根据另一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的查找方法的流程图,如图2所述,该方法包括步骤s201至步骤s205。

步骤s201中,多个gpu从cpu获取多个哈希值。

步骤s202中,gpu根据多个哈希值,计算得到各哈希值对应的所有的待查链尾。

步骤s203中,gpu按照每次计算过程中所用的哈希函数和规约函数,对各待查链尾进行分类存储。

步骤s204中,gpu将分类存储后的文件发送到cpu,由cpu将收到的各文件存储到存储空间。

步骤s205中,cpu根据收到的文件在预存的文件存储结构中,查找各待查链尾对应的链首,再根据查找到的链首、所用的哈希函数和规约函数计算各哈希值对应的明文。

本示例在根据哈希值、哈希函数以及规约函数计算哈希值对应的待查链尾时,充分利用了gpu的计算能力和cpu多进程的控制能力,在同样开支的条件下能够得到更强大的计算资源。

作为本实施例的一个示例,cpu根据收到的文件在预存的文件存储结构中,查找各待查链尾对应的链首,具体包括:

cpu根据各待查链尾中前三位字符的ascii值在预存的文件存储结构中查找对应的文件。

cpu按照所述待查链尾的第二剩余字符,在查找到的对应的文件中,查找匹配的彩虹链,所述第二剩余字符为所述待查链尾去除了前三位字符之后的字符。

cpu根据匹配的彩虹链确定对应的链首。

本示例对根据待查链尾的前3个字符ascii值预存的文件存储结构中查找对应的文件并根据待查链尾去除了前三位字符之后的字符查找到该对应的文件中匹配的彩虹链链首,无需搜索全部的预存文件,极大的节约了查表时间,提升了查表速度。

下面以明文空间95个ascii可显示字符,8位密码位为例,介绍基于cpu-gpu架构的彩虹链表的处理方法的应用示例:

第一应用示例:一种基于cpu-gpu架构(集群)的彩虹链表的生成、存储和查找方法概述。如图3所示,该方法包括以下步骤:

(1)彩虹链表的生成方法(如图3中的造表):cpu负责批量生成链首,并将任务并行分配到各gpu。各gpu根据接受到的任务,采用哈希函数和循环规约函数(例如,该循环规约函数中规约函数的数量为相关技术中计算彩虹链的所有规约函数数量的1/5)并行实现彩虹链表的生成。cpu-gpu协同将生成的彩虹链表进行去重。

(2)彩虹链表存储方法(如图3中的存储):cpu在存储设备上构建多级目录。例如,从95个ascii可显示字符中任取3个字符构建具有多级目录的文件结构。第一级目录有95个文件夹。每个第一级目录之下的第二级目录分别有95个文件夹。每个第二级目录之下分别建立95个文件。因此,共有95*95*95个文件。然后,cpu根据彩虹链链尾前三位字符的ascii值查找文件存储结构中对应的文件,同时删除掉链尾的前三位字符,将链尾删除前三位字符之后的第一剩余的字符存入所述对应的文件中。并对每个文件内的各第一剩余字符进行排序。

(3)彩虹链表的查找(如图3中的查表):cpu负责分配待查链尾的计算任务。各gpu对接受的任务,按照集中计算待查链尾、集中查表、集中还原的过程循环处理,直到数据分析完成。

本示例适应cpu-gpu架构,充分利用了gpu强大的计算能力和cpu多进程的控制能力,能够在保证彩虹链表覆盖率的前提下,减少彩虹链表的存储空间,同时大幅提升彩虹链表的查询效率。

第二应用示例:cpu、gpu协同生成彩虹链表。

相关技术中,彩虹链的生成过程如图4所示:从链首sp开始,通过一系列散列(哈希)-规约运算(即图3中的hr(),h代表散列运算和r代表规约运算),产生一系列中间节点p,直到链尾ep。结果只保留sp和ep,即链首和链尾。其中,sp可以有多个,如图3中的sp1至spk。对应于多个sp可以得到多个ep,如图3中的ep1至epk,k为正整数。

图4中的彩虹链表由多条链长相同的彩虹链构成。在计算彩虹链的各个节点的过程中,用到了散列函数与规约函数这两类关键函数。hash(p)=h为目标的哈希函数hash(),输入口令p,输出为散列值h。reduce(h)=p1为自定义还原函数reduce(),输入为散列值h,输出为映射到口令空间的p1。(需要注意的是:reduce函数还原后得到的口令p1并不是哈希函数的原始口令p,另外由于哈希函数的空间远大于口令空间,因此存在多个哈希函数还原回同一口令的情况)。

彩虹链表的生成过程中,链与链之间相互独立。每条彩虹链的计算过程一致,区别仅在于链首的不同。因此,彩虹表的生成是一种具有先天并行性的单指令多数据任务,又由于其需要特别大的计算量,所以特别适合于利用gpu进行加速。

相关技术中,利用cpu进行彩虹链表生成时,cpu需要生成链首,逐次串行地计算每一条彩虹链得到链尾,然后将链首与链尾写入文件。

本公开利用gpu加速彩虹表的生成,链首的生成由cpu进行控制。如图5所示:在cpu端,cpu根据gpu中线程数,随机生成一批链首(s301)。将该批链首同步传递给gpu(s302)(其中,一批链首可以一次传递)。gpu收到来自cpu的各链首(s303)后,gpu的各线程可以分别得到不同的链首(s304),每个gpu线程分别负责一条彩虹链的计算。线程对得到的链首进行多次散列(哈希)和规约运算,直至算至链尾(s305)。各gpu将各链尾及其对应的链首组成彩虹链(例如各彩虹链中链尾在前,链首在后),通过pci-e总线将各彩虹链传输至cpu(s306),cpu继续负责将各彩虹链去重并分类写入文件(s307)。

第三应用示例:在gpu上采用循环规约函数生成彩虹链的方法。

在前文的描述中,可以知道彩虹链生成过程为交替的h(散列)函数和r(规约)函数的计算过程,h函数为固定的散列函数。相关技术中,生成彩虹链所采用的r函数为一组互不相同的规约函数序列,如图6所示,由彩虹链的链首至链尾的计算中,r函数的具体形态分别为r0、r1、r2、r3……rk,其中,k为正整数,r0、r1、r2、r3……rk互不相同。

本公开在gpu进行彩虹链计算时,采用的是一组循环的规约函数。具体来说,在由彩虹链的链首至链尾的计算中,采用一组r函数循环计算,而不是采用一组完全不同的r函数。如图7所示,循环的规约函数的具体形态可以为r0、r1、r2……rk,即由彩虹链首至彩虹链尾的计算中,循环使用规约函数组r0、r1、r2……rk进行计算。

通过该方法,减少了计算彩虹链所使用的归约函数,彩虹链的生成过程仍沿用原来的算法,只需使用重新定义的循环规约函数,节省了彩虹链表的查表时间。

第四应用示例:彩虹链表的去重方法。

在前文的描述中,因为在彩虹链的计算采用了循环规约函数,会导致整个彩虹链表中的重复信息增多。假设在两个不同链的同一位置计算出相同的散列值或明文时,则后续的散列和归约计算均得到相同的值。最终这两条彩虹链将变成两个链尾相同但链首不同的彩虹链,进而导致计算中误警概率的增加并产生严重的数据冗余。因此,需要对彩虹链表进行去重并保留有效的结果。

对于相关技术中彩虹链表,对所有最后一个节点相同的数据链,仅保留其中一条。这样,在最终的彩虹链表中,所有数据链最后一个节点都是唯一的。

但是,相关技术中的去重方法并不能完全解决采用循环归约函数的计算方法带来的信息重复问题。这是因为,采用归约函数循环计算彩虹链的情况下,同一归约函数为多个位置所共享,且这些位置的下一节点同样共享相同的归约函数。如果同一散列值或明文虽然处于两条链的不同位置,但这些位置对应的归约函数是相同的,则后续的散列和归约计算同样得到重复的数据,直到其中一条链到达最后一个节点。

为了避免这种类型的数据重复,确保链上所有归约函数相同的位置具有不同的散列值和明文,本公开采用如下方法进行彩虹链表数据去重:检查所有彩虹链的链尾。若其中一条彩虹链a的链尾与另一条彩虹链b的链尾相同,则根据该链尾查找到对应的链首,并利用之前的哈希函数和循环规约函数重新计算出彩虹链a和彩虹链b的各节点。如果比较出彩虹链b中的一个节点与彩虹链a中的一个或多个节点相同(例如某一节点的内容以及该节点之后计算所用的规约函数均相同),则确定彩虹链a与彩虹链b重复。如果彩虹链a中互不相同的节点数量多于彩虹链b中互不相同的节点数量,保留彩虹链a,删除彩虹链b。通常认为,彩虹链a的节点包含了彩虹链b的节点。

上述去重方法的证明过程如下:(以两个彩虹链为例)

如图8所示,记两个彩虹链l1和l2的链头分别为p1,0和p2,0,对应的链尾分别为p1,m和p2,m,根据彩虹链头生成原则,p1,0≠p2,0。

定义彩虹链的散列函数为h,循环规约函数为r0,r1,λ,rk,k为循环周期。

比较链尾p1,m和p2,m,则存在以下几种情况,①p1,m≠p2,m,则表示彩虹链l1和l2为两个不冲突彩虹链,在生成彩虹链表时,保留这两个链。②p1,m=p2,m,则表示彩虹链l1和l2为冲突链,根据循环规约函数的构造方法,分以下几种情况,其一,p1,m只与p2,m相等,而与其它使用相同规约函数位置的p2,i均不等,这时两个彩虹链互不相同,保留这两个彩虹链。其二,p1,m与使用相同规约函数位置的p2,k,p2,2k,p2,3k,λ中的某个值相等,例如与p2,jk相等,则这时可以将彩虹链l1看成是l2的一个子链,因为l1中生成的每一个p1,i都会在l2中出现,因此保留彩虹链l2,删除彩虹链l1。

对于给定的明文空间,生成的彩虹表容量越大,则数据链之间发生冲突的可能性越大,剔除的数据链越多,使用的空间就越少,但生成的时间将越长。设在相同的条件下,对于相关技术中的彩虹链表数据链之间发生重复的概率为p,则对于本公开采用循环规约函数生成的彩虹链,数据链之间发生重复的概率为1-(1-p)t/r,这一值将随归约函数数量的减少而加大。例如,当循环规约函数中规约函数的种类为相关技术中算法中规约函数种类的1/5时,造表时间增加1倍(增加的时间主要是用于重复链的剔除),生成的表空间大小为大约为原来的75.4%。在本公开中,采用的是gpu进行彩虹链的生成,而且彩虹链是一次生成,多次使用,以计算为主。gpu的计算能力是cpu计算能力的30倍以上,所以造表时间的增加是可以接受的。

采用上述方法生成彩虹链,在通用服务器(1个cpu、4个型号为c2050的gpu)上,针对加密算法为md5、95字符8位口令的解算工作,相关技术中彩虹链表的生成时间为1823小时,而本公开彩虹链表生成时间为3598小时。在空间上,相关技术中的彩虹链表为986gb,而本公开方法产生的彩虹链表为743gb。

第五应用示例:彩虹链表的存储

本应用示例中,对上述示例中产生的彩虹链表进行优化存储,以进一步减少彩虹链表的储存空间,提升彩虹链表的查表解算速度。

(1)生成存放彩虹链表的空文件

从95个ascii可显示字符中,任意选择3个字符,以对应的ascii码值,构建空目录结构和文件,形成具有多级目录的文件存储结构。例如,目录结构如图9所示:

20/20/20、20/20/21、……、20/20/7e、20/7e/20、……、20/7e/7e、……、7e/7e/7e。总文件个数为95*95*95=857375。

(2)将去重后的彩虹链放存放的对应的文件中。

每个彩虹链由链头和链尾组成,以95字符8位口令的解算为例,其链首与链尾合并时的格式形如asd00fqe12345678,前8位为链尾(即asd00fqe),后8位为链头(即12345678),每个文件由若干个这样的数据组成。

本公开在存储彩虹链时,做如下工作:

首先,提取前3位数据(即asd)的ascii值(61、73、64),从图9中找到对应的存储位置,即将数据写入到存储位置为61/73/64的文件中。具体而言,可以先在第一级目录中查到a对应的文件夹61,再查到文件夹61的s对应的文件夹73,然后在61/73中查找到d对应的文件64。

然后,cpu在向61/73/64的文件中写入时,删除数据的前3位(即asd),只存储00fqe12345678(即第一剩余字符)。

最后,当所有彩虹链的第一剩余字符写入到对应的文件中后,按照各第一剩余字符的前5位(即00fqe)进行排序。

所有工作完成后,彩虹链表中数据具有如下的特点:一是彩虹链链尾前3位相同的数据存放在同一个文件中,二是同一个文件中的数据是有序排列的。

彩虹链表空间占用情况,相关技术中彩虹链存储为链头与链尾,每个彩虹链16个字符,本示例采用的方法为链尾后5个字符以及链头共13个字符,其存储空间为相关技术中彩虹链存储空间的81.2%。

截止到现在,整个彩虹链表生成工作就完成了,所生成的彩虹链表与相关技术中彩虹链表相比较,本方法生成的彩虹链表空间为604gb,在整体存储空间上,本公开所占存储空间仅为相关技术中彩虹链表存储空间到61.3%(81.2%*75.4%)。

第六应用示例:彩虹链表的查找

(1)单个口令的查表方法效率的提升

相关技术中,如图10所示,在链的搜索部分(即根据哈希值计算各待查链尾的过程),对密文由给定散列值从假定的位置i出发(0≤i≤t-1,t为彩虹链所有节点的个数),计算出搜索链的最后一个节点(待查链尾的示例)需要执行t-i次归约运算和t-i-1次散列运算。由于相关技术计算彩虹链采用的规约函数互不相同(如图10中的r0、r1、r2、r3),因此,如果要检验所有的t个位置,则总共需要进行次散列运算,最坏情况下的时间复杂度为o(t2)。由于归约与散列运算的次数几乎相等,如果散列值在链的各个位置的概率是相同的,则期望的计算次数约为相当于最坏情况下所花时间的1/3。

如图11所示,一个哈希值为“01ac345ed90”。经过多次计算得到的待查链尾分别为“admin123”、“workfflow”、“467rtyfg”、“qwer3456”。其中,可以将多个经过一次规约r1计算的待查链尾与“admin123”保存到相同的文件中。可以将多个经过r0、h、r1计算的待查链尾与“workfflow”保存到相同的文件中。依次类推,gpu会得到多个文件。然后gpu将所得到的文件发送到cpu,由cpu根据各所述文件在预先存储的文件存储结构中进行查找工作。

对于最右侧的搜索链,可能是某个较长的搜索链的一部分,其最后一个节点(即待查链尾)对应长搜索链的某个段节点。换言之,由于采用了循环规约函数,有些搜索链的计算可能出现重复的待查链尾,搜索链可以简化。举例来讲,如果循环规约函数中规约函数的数量为r(例如,图11中规约函数为r0和r1,则r=2),彩虹链存在t个节点,则最终仅需要保留r条最长的搜索链,分别对应r个归约函数。这样,整个搜索过程在最坏情况下需要进行次散列运算。在该公式中,如果r为t的1/5,则可以计算得到查表的计算量大约为原来的36%,节省了大量查表计算量和查表计算时间。

(2)适应cpu-gpu架构的大批量口令的查表方法

相关技术中的彩虹链表查表流程是:根据密文(哈希值),计算待查链尾。对待查链尾进行查表,确定所属链。根据链头和规约函数计算得到口令。该算法是针对cpu查表而设计的,检索一条链尾,计算一次口令,这是因为cpu的计算能力弱、访存速度快的特点而设计的,这种算法可以保证每条口令的计算速度。而在cpu-gpu架构的环境中,gpu是主要计算能力,一般是cpu的几十倍到数百倍不等,但访存则是其瓶颈,所以相关技术中的彩虹链表查表方法在cpu-gpu架构上并不能发挥出很好的作用。

在cpu-gpu架构的环境中,更为重要是发挥gpu的计算效能。一般情况下,我们在进行彩虹链表查表计算时,都是大量的密文同时进行查表工作。本公开考虑cpu-gpu架构的特点,充分发挥gpu的运算能力。首先,在彩虹链表查表时利用gpu对密文进行集中计算,计算出各密文对应的待查链尾。其次,对计算的待查链尾根据前3个字符ascii值进行排序,最后在此基础上进行查表。

如图12所示:cpu读入大量哈希值(s401),将任务分配到各gpu(s402)。gpu的各线程可以分别得到不同的哈希值(s403),各gpu根据散列、规约函数,计算出所有待查链尾。其中,同次运算得到的各待查链尾分别写入同一个文件,不同次运算得到的待查链尾不在同一文件(s404)。gpu将写有各待查链尾的各文件发送至cpu,cpu将收到的各文件存储到存储空间。cpu根据收到的文件中的待查链尾前3位字符的ascii值,在cpu中预存的文件存储结构中,查找各待查链尾对应的该前3位字符的ascii值的文件。再根据待查链尾去除前3位字符后的第二剩余字符在该对应的文件中顺序查找,得到对应的链首(s405)。根据链首、哈希函数和循环规约函数,计算得到哈希值对应的口令(s406)。

(3)查表时间估算

假设有一批口令的哈希值(4096个)等待彩虹链表查表计算,采用的cpu-4gpu结构的通用服务器(4块型号为c2050的gpu卡),每次计算链尾的时间为t1,cpu-gpu每次传输io开销为t,每个待查链尾查表及计算口令时间为t2,则相关技术中方法查表时间开销为:4096×(t1+t+t2)。由于gpu每次可启上千个线程(每块gpu卡启1024个线程,共计4096个),所以4096个哈希值的待查链尾可以同时计算,则该时间同样为t1。因为是同时计算得到4096个待查链尾,所以io也只需要一次集中读写。本公开中,因为采用循环规约函数链(循环为整个链长的1/5),所以本公开执行5次集中计算和5次集中存储,全部过程耗费的总时间为t1+5×t+4096×t2。

(4)实验结果比对

实验规模:1万条md5算法95字符8位口令,cpu-gpu通用服务器(4块型号为c2050的gpu卡)。推算如果要穷尽,则需要大约1703小时(71天)能够完成,每卡每秒可破译2.5亿口令,而且支持厚度攻击。

(4-1)造表时间:相关技术方法需1823小时,本公开方法需3598小时。

(4-2)存储空间:相关技术中生成的彩虹链表空间为986gb,本公开方法生成的彩虹链表空间为604gb。

(4-3)查表时间:相关技术中查表时间为679小时(28.3天),本公开方法查表时间为65.3小时(2.72)天。

本公开通过多个gpu根据从cpu接收彩虹链表的各链首生成对应的链尾,并将各链尾及其对应的链首组成彩虹链发送至cpu。充分利用了gpu的计算能力和cpu多进程的控制能力,在同样开支的条件下能够得到更强大的计算资源。

图13是根据一示例性实施例示出的一种基于cpu-gpu架构的彩虹链表的处理方法的装置1900的框图。例如,装置1900可以被提供为一服务器。参照图13,装置1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。

装置1900还可以包括一个电源组件1926被配置为执行装置1900的电源管理,一个有线或无线网络接口1950被配置为将装置1900连接到网络,和一个输入输出(i/o)接口1958。装置1900可以操作基于存储在存储器1932的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。

在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由装置1900的处理组件1922执行以完成上述方法。

本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的链表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本公开中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本公开披露的各实施例。

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