2023年7月31日发(作者:)
第28卷第2期 2011年2月 计算机应用与软件 Computer Applications and Software Vo1.28 No.2 Feb.2011 基于分布式环境下的彩虹表密码攻击 李 昕 , 曹天杰 米国粹 邹静 (中国矿业大学计算机学院。(中国科学院软件研究所江苏徐州221008) 北京100080) 摘要 密码安全是被经常讨论的问题。分析了基于彩虹表的密码破解的基本原理,首先介绍了哈希链,分析了其原理和缺点, 即容易出现链冲突。随后引出彩虹链,分析了其工作原理及优势。并使用分布式计算环境对彩虹表的分布式计算、分布式存储,分 布式攻击等进行了相关研究。 关键词 密码安全分布式攻击 彩虹表 PASSWORD CRACKING BASED oN RAINBOW TABLE IN DISTRIBUTED CoMPUTING ENVIRoNMENT Li Xin ' Cao Tianjie Mi Guocui Zou Jing (ChinaMining University of Technology,Academy ofComputer and Science,Xuzhou 221008,Jiangsu,China) (Institute ofSotwarfe,Chinese Academy ofSciences,Beiifng 100080,China) Abstract Password security is a topic frequently discussed.In this paper.we analyze the rationale of password cracking based On rainbow table.Firstly we introduce the hash chain,analyze its theory and its shortcomings,i. it is easy to come force the chain conflict.Then we intro— duce the rainbow chain,analyze its operation theory and advantages.By using distributed computation ellvironment,correlated studies on dis— tributed computing,distributed storage and distirbuted attacking on rainbow table are discussed. Keywords Password security Distributed attacking Rainbow table 0引 言 Windows操作系统的密码安全一直以来都是引人关注的热 门话题。操作系统一般会把密码作为哈希函数的输出值来存 1 Rainbow攻击简介 1.1 hash链 彩虹表的基本思想来自hash链。对于一个Q:H(P)(日 储。哈希(hash)是单向操作,即使攻击者能够读取密码的哈希 表,他也不可能仅仅通过那个哈希表来重构密码。这样,破解 hash的任务就是:对于给出的一个q,反算出一个P来满足q= hash(P)。通常我们能想到的两种办法,一种就是暴力破解法, 把明文P中的每一个P都算一下hash(P),直到结果等于q;另 一为某个hash算法,如MD5),建立另一个算法R:使得P=R (Q),然后对于一个P,这样进行计算:.po一日 gl—R— 1一日 q2一只— p2一日--+g3一 叶p3……一月L+q(n一1)一 一+P (凡一1) 一 — gn—R 凡。 即把q用H、R依次迭代运算,最后得到pn,n可能比较大。 种是查表法,把每个P和对应的q都记录下来,按q做一下索 最后我们把po和pn都存储下来,把其他的结果都丢弃。然后 用不同的 代入计算,得到多个这样的eopn的对子。 引,到时候查一下就知道了。这两种办法理论上都是可以的,但 是前一种可能需要海量的时问,后一种需要海量的存储空问,以 我们在破解的时候,给出了一个q,我们来寻找P。我们先 把q作一次R运算得到一个值例如叫cl,然后把cl和每一个P 对的最后一个作比较,假如和某一个P 相等,那么有可能这个 pn所对应的P(n一1)就是我们在追寻的q,为了验证我们把Pn 对应的p0再做一次链式计算,比对qn是否就是给出的q,如果 是,很明显P(n一1)就是我们在追寻的P,因为P(n 1)一日 至于以目前的人类资源无法实现。 举例来说,对于14位的大小写加数字(不算特殊字符)组 成的密码的集合为(26×2+lo) 14:62 14:1.24×10 25, 即使我们每纳秒可以校验一个明文,暴力破解法也需要大概4 亿年;如果我们采用查表法,假定Hash的结果是128位即l6字 节的,光存放hash值(不存放明文P)就需要10 26字节的存储 ’g 。 如果不是,我们再算.g— —cl一日一一R—c2,再比对c2 空间。彩虹表的根本原理就是组合了暴力法和查表法,并在这 两者之中取得一个折中,用可以承受的时间和存储空间进行 破解。 收稿日期:2009—08—04。中国矿业大学青年科研基金项目 (2007A039) 李昕,博士 主研领域:信息安全。 第2期 李昕等:基于分布式环境下的彩虹表密码攻击 291 是否是gn,如果是,那么P(n一2)就可能是P;再算c3、D4直到c (n一1),如果都不是就继续寻找,直到遍历所有的90gn对。 总的来说,就是用一个pOpn对存储一个链子的数据,如果n 很大,就可以大大减小存储的空间。这样带来的问题是必须作 n次比对,时间更长,但是我们不需要瞬间破解,等待几秒乃至 始元素,生成一个长度为t的链。如果生成密文C的密钥确实 在表中出现,肯定能在表中找到一个与链尾元素匹配的链。由 于只有链首和链尾元素被保存了,所以需要从链首元素开始重 构这个链,在R(C)之前的那个密钥就是生成密文C的密钥。 在一个有m个链,每个链长度为t的表中,查找一个密钥成 功的概率为: m t一1 . ,几天破解一个密码都是可以接受的。 下面我们给出一个hash链攻击的例子: 1)假设明文空间是6个小写字母字符,而hash值为32bit, 则一条可能的hash链可能如下: aauaaa—日一281DAF40一R_÷sgfnyd—日_+920ECFlO Pm ≥__1 (1一昔 单个表的查找成功率随着表的增大而快速降低。为了得到 ~ __+kiebgt 2)我们只存储起始点aaaaaa和终点kiebgt。对于一个给定 的hash值h,若想求其对应的密码,我们对h反复进行R和H操 作。如果在某个 操作后,我们发现其值等于某条链的终点,于 是,我们回到其对应的起点,去重新生成该链。 3)假如我们给的hash为920ECFlO,而920ECF10一R— kiebgt,于是我们回到起点aaaaaa,重新计算hash链: aaaaaa一日一281DAF40一只_sgfnyd一日_920ECFlO 4)一旦发现hash值920ECFlO,显然其对应的密码就 是sJnyd。 5)但假如从aaaaaa重新恢复的hash链中没有920ECF10, 于是我们继续对920ECFlO做R和日操作,然后去匹配彩虹表中 别的hash链。 6)在对h进行R和 操作 次后(假设k为hash链长),若 所有的hash链都不匹配,则无法恢复密码。 但hash链有一个明显的缺点,即在生成链的过程中可能出 现,从不同的链首开始得到相同的元素。这是由于映射函数 (reduction function)R是密文空间(大空间)到密钥空间(小空 间)的一个映射。研究表明,表越大,出现这种链碰撞的可能性 越高。这样就减少了表所能覆盖的密钥的大小。如第二条链的第 三个值和第七条链的第二个值相等,则其链后面的元素完全相 等,尽管这两条链的终点不等。 1.2彩虹链 为了更好地描述彩虹链,我们先给出形式化说明。 给定一个明文尸n和与之对应的密文 ,试图找到用密码算 法S加密 时所需要的密钥k N(N为密钥空间),使得: Co=5 ( ) 我们使用所有可能的k e N的密钥去加密 ,这样就预计 算出所有可能的密文。而所有的密文是按链的方式组织的,在 内存中只保存链首和链尾,这样就表现出了时间和空间的折中 策略。这个链是使用映射函数 来生成的,映射函数将一个密 文映射到一个密钥。链的组织如下: k —二一__+ C — k +l 用八k)来表示R(S (Po)),这样就得到了一个密钥的链: k 上 上 一… 生成一个表,表中包含m个链,每个链的长度为t,但是为 了节约空间,只保存这m个链的链首和链尾元素。给定一个密 文C,在这个表中找出生成这个密文的密钥。首先以R(C)为开 更高的成功率,我们采用多个表,每个表使用不同的映射函数。 这样z个表成功率表示为: . m t—1 . … ≥1一(1一万1 (1一号)p ) 上面方法的主要局限是,当在一个表中出现碰撞时必须进 行合并。0echslin提出了一种被称之为rainbow链的新链,在这 种链中即使出现碰撞时也不需要合并。此方法在rainbow链中 使用了连续的映射函数,即从映射函数1到映射函数t一1。这 样一来,两个链碰撞时,合并仅发生在两个链的对应位置上元素 相等的情况下。如果位置不相同,因为后面使用了不同的映射 函数,所以不需要合并。对于一个长度为t的链,碰撞发生并需 要合并的概率为1/t。 对于一个m×t的彩虹表,查找成功的概率为: =1-兀(1一 )m。=m =N(J ) 实际上t个大小为m×t的经典表和一个大小为mt×t的彩 虹表的查询成功率相当。在两种方法中,表都覆盖了mt 个密 钥,使用了t个不同的映射函数。他们的对应关系如图1所示。 ? 图1 经典表与彩虹表对应关系 在彩虹表中查找密钥采用如下的方式进行:首先将R 一 应 用到密文上得到结果,然后将结果与彩虹表中的链尾匹配。如 果找到匹配了,可以从链首重构整个链。如果找不到,我们接着 对结果应用R 一 一 ,然后将结果与彩虹表中倒数第二个元素 进行匹配。下面接着对结果应用 一 一 一。,以此类推。整 .,. 1、 个过程中需要计算次数是 ,这只是经典表的一半左右。 顺便指出彩虹表的出处即为在彩虹表的每一列采用了不同的 reduction函数的缘故。 图2所示给出一个彩虹链攻击的例子: 1)假设我们要破解的密码hash是“re3xes”,首先对该值用 292 计算机应用与软件 2011血 臣口鐾_① —● 回 圈H ■ 融 . STOP 吕 -@ 图2彩虹表攻击例子 R3运算处理一下,得到明文“rambo”。然后看是否在每一个链 的终点有明文“rambo”出现。 2)如果rambo没有出现在表的任一链的终点,则继续用 R2运算处理,紧跟着用H和R3运算处理,这次算得的 “linux23”恰好在最后一个链的终点出现。如果没出现,则反复 应用类似运算处理。 3)从最后一个链的起点“passwd”恢复整条链,我们看到 “re3xes”是“culture”的hash结果,所以,密码就是“culture”。 2 Rainbow攻击的分布式设计 彩虹表攻击有三部分可考虑分布式。 1)Rainbow表的分布式计算 服务器仅仅分发给客户端产生彩虹表时所需要的各项参 数,然后由客户端来进行彩虹表计算。这样做有如下两点好处: a)服务器可以根据需要预计算出各项参数。 服务器端根据所需计算的彩虹表的各项参数及客户端计算 能力,来决定每个客户端所需产生的彩虹表的参数,以及达到某 个成功率所需要产生的彩虹表的个数。设m为每张表中彩虹 链个数,t为彩虹链长度,z为彩虹表个数,则各项参数之问的关 系满足如下方程: ~ P =l—n(‘ l 1一等)m :m ’ m (m +L=^ (1一e- )P… ≥1一(1一P 。 ) 这样,服务器根据想要达到的成功率让每个吝户端产生不 同表数、不同链数的彩虹表,每个彩虹表由不同的随机值开始生 成。尽管各个表之间可能存在冗余,但总的来说,由公式可推 出,表越多,成功率越大。 b)在计算过程中,客户端不需要与服务器进行交互。 J.Bomt提出了一种基于DP(distinguished points)技术的分 布式攻击,由于DP技术固有的缺点,客户端在产生彩虹表时要 与服务器交互,来验证DP的有效性。在基于彩虹表的分布式 攻击中客户端在计算彩虹表的过程中不需要与服务器交互,减 少了交互的代价。. 2)Rmnbow表的分布式存储 当前国际上也有分布式计算彩虹表的项目,叫做OistrRTgen。 它的原理是客户端计算一个8兆的彩虹表,然后回传给服务器,由 服务器将其保存在某个安全的地方。这种方法的缺点是: a)传输大量数据浪费时间; b)由于彩虹表涉及到敏感信息,在传输过程中还需要进行 加密。 我们先择将彩虹表保存在客户端本地,供后继分布式查询 时使用。这种方法能适用于计算客户端相对比较稳定的网络, 即客户端断开服务器的概率比较低的网络。 3)Rainbow的分布式攻击 分布式攻击可以采用两种方式,一种是由服务器负责分发 已经计算好的彩虹表,客户端接收到彩虹表后进行彩虹表攻击, 这样做有以下缺点: a)在应用中,服务器存有大量数据,可能成为整个系统的 瓶颈;再者,彩虹表的网络传输代价很高。 b)这些彩虹表,如果在网络传输中被篡改,有可能将导致 攻击失败,这又增加了加密和解密的代价。 所以我们采用了服务器只负责传输相应参数,即待破解密 码的哈希值,客户端再收到指令后,先进行攻击,如果攻击失败, 则再根据需要产生部分彩虹表,继续查找。这样做可能会增加 攻击的平均时间。一旦某个客户端找到密码,通知给服务器。 服务器然后通知其他客户端密码已找到,攻击结束。在实际攻 击中,由于彩虹表之间存在冗余,有可能多个客户端都会找密 码。这样服务器取第一个找到密码的结果即可。 3实验结果 3.1 Rainbow分布式计算和存储实验 分布式计算和存储测试所用的参数如下: :[ABCDEF- GHIJKLMNOPQRSTUVWXYZO123456789]; ;[ABCDEFGHI- JKLMNOPQRSTUVWXYZ],分别表示要产生密钥的字符集。令 m为每张表中彩虹链个数,t为彩虹链长度,Z为彩虹表个数。 我们对生成基于 算法的密钥长度可为1—7位字符的彩虹表 的生成进行了单机版和分布式版的测试。数据参数如表1、表2 所示。 表1 Rainbow分布式存储测试数据参数 表2 Rainbow分布式存储测试结果 实验表明,对于大的彩虹表,用单机生成不仅速度慢,而且 因为彩虹表一般很大,很难存储。同时由于对于太大的文件,操 作系统很难把它一次性读到内存,这样在进行查找时,给系统造 成很大负担。我们用5个计算节点同时生成彩虹表,得到了很 好的加速比。同时,也缓解了单机上存过大彩虹表的问题。 3.2 Rainbow分布式攻击实验 分布式攻击实验采用第三方提供的Rainbow表,Rainbow表 的各参数如表3所示。 第2期 李昕等:基于分布式环境下的彩虹表密码攻击 293 表3 Rainbow分布式攻击实验数据 实验中,我们使用了字母、数字、包括特殊字符的密钥空间, 这基本涵盖了一般的密码所包含的字符。结果表明,用5台 Core Duo2.4G的计算机,对于任意14位以内的WindowsXP系 统密码都可以在平均5分钟以内破解出来。这里之所以是14 位以内的密码,是因为WindowsXP的密码hash算法是7位一个 单元进行的。 4结束语 本文对基于彩虹表的分布式密码攻击进行了探讨,分析了 彩虹表的基本原理,即hash链和彩虹链。并使用分布式计算环 境对彩虹表的分布式存储、分布式攻击等进行了相关研究。实 验表明,彩虹表对于密码破解的确是强有力的武器。不过,如果 在生成哈希表之前,给密码加个唯一的前缀,然后再hash。这 样,攻击者就无法用彩虹表来攻击了。因为“密码”和“加了前 缀的密码”生成的哈希结果是不匹配的。除非知道所有的哈希 表都加了这个前缀。即使真的知道,也得专门针对你的机器生 成一个定制的彩虹表。 另外基于GPU的计算日益成熟,在一台普通PC上辅以 NVidia CUDA技术,对于NTLM算法可以达到最高每秒103, 820,000,000次明文尝试(超过一千亿次),对于广泛使用的 MD5也接近一千亿次。下一步的研究计划是把具有GPU计算 能力的计算节点整和到系统中来,以增强系统的计算能力。 参考文献 [1]Hellman M E.A cryptanalytic time-memory trade off[J].IEEE Trans— actions on Information Theory,IT-26,1980:401—406. [2]Oechslin P.Making a Faster Cryptanalytic Time—Memory Trade—Off[J], Lecture Notes in Computer Science,Volume 2729,2003:617—630. [3]Bomt J,Preneel B,Vandewalle J.On time—memory tradeoff between ex— haustive key search and table precomputation[J].On Information The— ory in the Benelux,1998:111—118. [4]Cosnard M,PHILIPPE J L.Distributed Algorithms for deciphering[J]. [S.1.]:[S.n.],2007. [5]http://en.wikipedia.org/wiki/Rainbow—tables. (上接第283页) //教师冲突检测每冲突一次Conflict+1。 if FArrange[J][n].1nfo.TeacherlD=FArrange[i][n]. Info.TeacherID then{ FArrange[j][n].Conflict:=FArrange[J儿n].Conflict+1; FAxTange[iH n].Conflict:=FArrange[i][n].Conflict+1; //班级冲突检测每冲突一次Conflict+1。 ifGroupConflict(FArrange[i][n],FA ̄ange[J][n )then FA ̄ange[j][n].Conflict::FArrange[j]【n].Conflict+1; FArrange[i][n].Conflict:=FArrange[i¨【n].Conflict+1; Result: Trile: ofr Fhem do Result:=Resuh and(FItem[i].Conflict=0); f nction End 4.5 交叉和变异(Mutate/CrossOver) 交叉和变异是遗传算法的重点,关于它们的选择算法更是 关键之处。许多排课算法就是按照“物竞天择、适者生存”的思 想,选择出适应度高的染色体进行交叉变异,最终使排课问题得 以成功解决。而本算法在进行时间冲突检测时发现,如果一个 课程项在本时问列上冲突值高,那么其相关的课程多存在于这 个时间列,相对应其它时间列的冲突情况可能就会减小。按照 这一思想,本算法在交叉时选择每个时间列上冲突值不为零的 最大课程项,然后针对这些项进行交叉。 实际上这种交叉变异算法也是经过多种算法对比后决定 的,其交叉率并不高(最大只有1/FEnableCount,最小可能为 0),但是其交叉效率令人满意。变异操作也针对有冲突的课程 项进行,测试发现取值不宜过小,确定为50%。 定义函数原型: procedure Mutate; procedure CrossOver; 算法伪码如下: procedure CrossOver ofr FEnableTime do { GetMax Ahem.Conflict; Add Ahem to PMax;} ofr PMax do Exchange(PMax[i],PMax[i+1]); procedure End procedure Mutate for Fhem do if Fhem[i].Conflict<>0 then if Random(100)<50 then Arrangeltem(Fltem[i]); procedure Mutate End 5结束语 计算机排课可以提高排课质量,把教务工作者从繁重的工 作中解脱出来,而且课表中的信息也非常清楚,对于优化学生在 校学习进程,评估每位教师对教学的贡献,领导合理决策等都具 有重要的意义,必将会大大推动教学的良性循环。 参考文献 [1]汪祖柱,程家兴,刘慧婷.基于遗传算法求解时间表问题[J].计算 机工程与应用,2004(24):92—94. [2]吴政,汪峰坤.基于遗传算法的排课系统[J].计算机与数字工程, 2008(11):29—32. [3]袁礼海,宋建社,毕义明,等.混合遗传算法及与标准遗传算法对比 研究[J].计算机工程与应用,2003(12):123—124. [4]周洪伟,原锦辉,张来顺.遗传算法“早熟”现象的改进策略[J].计 算机工程,2007(19):201—203. [5]Chu P C,Beasley.A genetic algorithm for the generalized assignment problem[J].European Journal of Operation,1995:20—22. [6]滕姿,邓辉文,杨久俊.基于遗传算法的排课系统的设计与实现 [J].计算机应用,2007(27):199—204. [7]冯冬表,王非,马雁.遗传算法中选择交叉策略的改进[J].计算机 工程,2008(19):189—191. [8]胡义伟,郑金华,谢勇.遗传算法在大学排课系统中的应用[J].计 算机系统应用,2008(09):66—69.
2023年7月31日发(作者:)
第28卷第2期 2011年2月 计算机应用与软件 Computer Applications and Software Vo1.28 No.2 Feb.2011 基于分布式环境下的彩虹表密码攻击 李 昕 , 曹天杰 米国粹 邹静 (中国矿业大学计算机学院。(中国科学院软件研究所江苏徐州221008) 北京100080) 摘要 密码安全是被经常讨论的问题。分析了基于彩虹表的密码破解的基本原理,首先介绍了哈希链,分析了其原理和缺点, 即容易出现链冲突。随后引出彩虹链,分析了其工作原理及优势。并使用分布式计算环境对彩虹表的分布式计算、分布式存储,分 布式攻击等进行了相关研究。 关键词 密码安全分布式攻击 彩虹表 PASSWORD CRACKING BASED oN RAINBOW TABLE IN DISTRIBUTED CoMPUTING ENVIRoNMENT Li Xin ' Cao Tianjie Mi Guocui Zou Jing (ChinaMining University of Technology,Academy ofComputer and Science,Xuzhou 221008,Jiangsu,China) (Institute ofSotwarfe,Chinese Academy ofSciences,Beiifng 100080,China) Abstract Password security is a topic frequently discussed.In this paper.we analyze the rationale of password cracking based On rainbow table.Firstly we introduce the hash chain,analyze its theory and its shortcomings,i. it is easy to come force the chain conflict.Then we intro— duce the rainbow chain,analyze its operation theory and advantages.By using distributed computation ellvironment,correlated studies on dis— tributed computing,distributed storage and distirbuted attacking on rainbow table are discussed. Keywords Password security Distributed attacking Rainbow table 0引 言 Windows操作系统的密码安全一直以来都是引人关注的热 门话题。操作系统一般会把密码作为哈希函数的输出值来存 1 Rainbow攻击简介 1.1 hash链 彩虹表的基本思想来自hash链。对于一个Q:H(P)(日 储。哈希(hash)是单向操作,即使攻击者能够读取密码的哈希 表,他也不可能仅仅通过那个哈希表来重构密码。这样,破解 hash的任务就是:对于给出的一个q,反算出一个P来满足q= hash(P)。通常我们能想到的两种办法,一种就是暴力破解法, 把明文P中的每一个P都算一下hash(P),直到结果等于q;另 一为某个hash算法,如MD5),建立另一个算法R:使得P=R (Q),然后对于一个P,这样进行计算:.po一日 gl—R— 1一日 q2一只— p2一日--+g3一 叶p3……一月L+q(n一1)一 一+P (凡一1) 一 — gn—R 凡。 即把q用H、R依次迭代运算,最后得到pn,n可能比较大。 种是查表法,把每个P和对应的q都记录下来,按q做一下索 最后我们把po和pn都存储下来,把其他的结果都丢弃。然后 用不同的 代入计算,得到多个这样的eopn的对子。 引,到时候查一下就知道了。这两种办法理论上都是可以的,但 是前一种可能需要海量的时问,后一种需要海量的存储空问,以 我们在破解的时候,给出了一个q,我们来寻找P。我们先 把q作一次R运算得到一个值例如叫cl,然后把cl和每一个P 对的最后一个作比较,假如和某一个P 相等,那么有可能这个 pn所对应的P(n一1)就是我们在追寻的q,为了验证我们把Pn 对应的p0再做一次链式计算,比对qn是否就是给出的q,如果 是,很明显P(n一1)就是我们在追寻的P,因为P(n 1)一日 至于以目前的人类资源无法实现。 举例来说,对于14位的大小写加数字(不算特殊字符)组 成的密码的集合为(26×2+lo) 14:62 14:1.24×10 25, 即使我们每纳秒可以校验一个明文,暴力破解法也需要大概4 亿年;如果我们采用查表法,假定Hash的结果是128位即l6字 节的,光存放hash值(不存放明文P)就需要10 26字节的存储 ’g 。 如果不是,我们再算.g— —cl一日一一R—c2,再比对c2 空间。彩虹表的根本原理就是组合了暴力法和查表法,并在这 两者之中取得一个折中,用可以承受的时间和存储空间进行 破解。 收稿日期:2009—08—04。中国矿业大学青年科研基金项目 (2007A039) 李昕,博士 主研领域:信息安全。 第2期 李昕等:基于分布式环境下的彩虹表密码攻击 291 是否是gn,如果是,那么P(n一2)就可能是P;再算c3、D4直到c (n一1),如果都不是就继续寻找,直到遍历所有的90gn对。 总的来说,就是用一个pOpn对存储一个链子的数据,如果n 很大,就可以大大减小存储的空间。这样带来的问题是必须作 n次比对,时间更长,但是我们不需要瞬间破解,等待几秒乃至 始元素,生成一个长度为t的链。如果生成密文C的密钥确实 在表中出现,肯定能在表中找到一个与链尾元素匹配的链。由 于只有链首和链尾元素被保存了,所以需要从链首元素开始重 构这个链,在R(C)之前的那个密钥就是生成密文C的密钥。 在一个有m个链,每个链长度为t的表中,查找一个密钥成 功的概率为: m t一1 . ,几天破解一个密码都是可以接受的。 下面我们给出一个hash链攻击的例子: 1)假设明文空间是6个小写字母字符,而hash值为32bit, 则一条可能的hash链可能如下: aauaaa—日一281DAF40一R_÷sgfnyd—日_+920ECFlO Pm ≥__1 (1一昔 单个表的查找成功率随着表的增大而快速降低。为了得到 ~ __+kiebgt 2)我们只存储起始点aaaaaa和终点kiebgt。对于一个给定 的hash值h,若想求其对应的密码,我们对h反复进行R和H操 作。如果在某个 操作后,我们发现其值等于某条链的终点,于 是,我们回到其对应的起点,去重新生成该链。 3)假如我们给的hash为920ECFlO,而920ECF10一R— kiebgt,于是我们回到起点aaaaaa,重新计算hash链: aaaaaa一日一281DAF40一只_sgfnyd一日_920ECFlO 4)一旦发现hash值920ECFlO,显然其对应的密码就 是sJnyd。 5)但假如从aaaaaa重新恢复的hash链中没有920ECF10, 于是我们继续对920ECFlO做R和日操作,然后去匹配彩虹表中 别的hash链。 6)在对h进行R和 操作 次后(假设k为hash链长),若 所有的hash链都不匹配,则无法恢复密码。 但hash链有一个明显的缺点,即在生成链的过程中可能出 现,从不同的链首开始得到相同的元素。这是由于映射函数 (reduction function)R是密文空间(大空间)到密钥空间(小空 间)的一个映射。研究表明,表越大,出现这种链碰撞的可能性 越高。这样就减少了表所能覆盖的密钥的大小。如第二条链的第 三个值和第七条链的第二个值相等,则其链后面的元素完全相 等,尽管这两条链的终点不等。 1.2彩虹链 为了更好地描述彩虹链,我们先给出形式化说明。 给定一个明文尸n和与之对应的密文 ,试图找到用密码算 法S加密 时所需要的密钥k N(N为密钥空间),使得: Co=5 ( ) 我们使用所有可能的k e N的密钥去加密 ,这样就预计 算出所有可能的密文。而所有的密文是按链的方式组织的,在 内存中只保存链首和链尾,这样就表现出了时间和空间的折中 策略。这个链是使用映射函数 来生成的,映射函数将一个密 文映射到一个密钥。链的组织如下: k —二一__+ C — k +l 用八k)来表示R(S (Po)),这样就得到了一个密钥的链: k 上 上 一… 生成一个表,表中包含m个链,每个链的长度为t,但是为 了节约空间,只保存这m个链的链首和链尾元素。给定一个密 文C,在这个表中找出生成这个密文的密钥。首先以R(C)为开 更高的成功率,我们采用多个表,每个表使用不同的映射函数。 这样z个表成功率表示为: . m t—1 . … ≥1一(1一万1 (1一号)p ) 上面方法的主要局限是,当在一个表中出现碰撞时必须进 行合并。0echslin提出了一种被称之为rainbow链的新链,在这 种链中即使出现碰撞时也不需要合并。此方法在rainbow链中 使用了连续的映射函数,即从映射函数1到映射函数t一1。这 样一来,两个链碰撞时,合并仅发生在两个链的对应位置上元素 相等的情况下。如果位置不相同,因为后面使用了不同的映射 函数,所以不需要合并。对于一个长度为t的链,碰撞发生并需 要合并的概率为1/t。 对于一个m×t的彩虹表,查找成功的概率为: =1-兀(1一 )m。=m =N(J ) 实际上t个大小为m×t的经典表和一个大小为mt×t的彩 虹表的查询成功率相当。在两种方法中,表都覆盖了mt 个密 钥,使用了t个不同的映射函数。他们的对应关系如图1所示。 ? 图1 经典表与彩虹表对应关系 在彩虹表中查找密钥采用如下的方式进行:首先将R 一 应 用到密文上得到结果,然后将结果与彩虹表中的链尾匹配。如 果找到匹配了,可以从链首重构整个链。如果找不到,我们接着 对结果应用R 一 一 ,然后将结果与彩虹表中倒数第二个元素 进行匹配。下面接着对结果应用 一 一 一。,以此类推。整 .,. 1、 个过程中需要计算次数是 ,这只是经典表的一半左右。 顺便指出彩虹表的出处即为在彩虹表的每一列采用了不同的 reduction函数的缘故。 图2所示给出一个彩虹链攻击的例子: 1)假设我们要破解的密码hash是“re3xes”,首先对该值用 292 计算机应用与软件 2011血 臣口鐾_① —● 回 圈H ■ 融 . STOP 吕 -@ 图2彩虹表攻击例子 R3运算处理一下,得到明文“rambo”。然后看是否在每一个链 的终点有明文“rambo”出现。 2)如果rambo没有出现在表的任一链的终点,则继续用 R2运算处理,紧跟着用H和R3运算处理,这次算得的 “linux23”恰好在最后一个链的终点出现。如果没出现,则反复 应用类似运算处理。 3)从最后一个链的起点“passwd”恢复整条链,我们看到 “re3xes”是“culture”的hash结果,所以,密码就是“culture”。 2 Rainbow攻击的分布式设计 彩虹表攻击有三部分可考虑分布式。 1)Rainbow表的分布式计算 服务器仅仅分发给客户端产生彩虹表时所需要的各项参 数,然后由客户端来进行彩虹表计算。这样做有如下两点好处: a)服务器可以根据需要预计算出各项参数。 服务器端根据所需计算的彩虹表的各项参数及客户端计算 能力,来决定每个客户端所需产生的彩虹表的参数,以及达到某 个成功率所需要产生的彩虹表的个数。设m为每张表中彩虹 链个数,t为彩虹链长度,z为彩虹表个数,则各项参数之问的关 系满足如下方程: ~ P =l—n(‘ l 1一等)m :m ’ m (m +L=^ (1一e- )P… ≥1一(1一P 。 ) 这样,服务器根据想要达到的成功率让每个吝户端产生不 同表数、不同链数的彩虹表,每个彩虹表由不同的随机值开始生 成。尽管各个表之间可能存在冗余,但总的来说,由公式可推 出,表越多,成功率越大。 b)在计算过程中,客户端不需要与服务器进行交互。 J.Bomt提出了一种基于DP(distinguished points)技术的分 布式攻击,由于DP技术固有的缺点,客户端在产生彩虹表时要 与服务器交互,来验证DP的有效性。在基于彩虹表的分布式 攻击中客户端在计算彩虹表的过程中不需要与服务器交互,减 少了交互的代价。. 2)Rmnbow表的分布式存储 当前国际上也有分布式计算彩虹表的项目,叫做OistrRTgen。 它的原理是客户端计算一个8兆的彩虹表,然后回传给服务器,由 服务器将其保存在某个安全的地方。这种方法的缺点是: a)传输大量数据浪费时间; b)由于彩虹表涉及到敏感信息,在传输过程中还需要进行 加密。 我们先择将彩虹表保存在客户端本地,供后继分布式查询 时使用。这种方法能适用于计算客户端相对比较稳定的网络, 即客户端断开服务器的概率比较低的网络。 3)Rainbow的分布式攻击 分布式攻击可以采用两种方式,一种是由服务器负责分发 已经计算好的彩虹表,客户端接收到彩虹表后进行彩虹表攻击, 这样做有以下缺点: a)在应用中,服务器存有大量数据,可能成为整个系统的 瓶颈;再者,彩虹表的网络传输代价很高。 b)这些彩虹表,如果在网络传输中被篡改,有可能将导致 攻击失败,这又增加了加密和解密的代价。 所以我们采用了服务器只负责传输相应参数,即待破解密 码的哈希值,客户端再收到指令后,先进行攻击,如果攻击失败, 则再根据需要产生部分彩虹表,继续查找。这样做可能会增加 攻击的平均时间。一旦某个客户端找到密码,通知给服务器。 服务器然后通知其他客户端密码已找到,攻击结束。在实际攻 击中,由于彩虹表之间存在冗余,有可能多个客户端都会找密 码。这样服务器取第一个找到密码的结果即可。 3实验结果 3.1 Rainbow分布式计算和存储实验 分布式计算和存储测试所用的参数如下: :[ABCDEF- GHIJKLMNOPQRSTUVWXYZO123456789]; ;[ABCDEFGHI- JKLMNOPQRSTUVWXYZ],分别表示要产生密钥的字符集。令 m为每张表中彩虹链个数,t为彩虹链长度,Z为彩虹表个数。 我们对生成基于 算法的密钥长度可为1—7位字符的彩虹表 的生成进行了单机版和分布式版的测试。数据参数如表1、表2 所示。 表1 Rainbow分布式存储测试数据参数 表2 Rainbow分布式存储测试结果 实验表明,对于大的彩虹表,用单机生成不仅速度慢,而且 因为彩虹表一般很大,很难存储。同时由于对于太大的文件,操 作系统很难把它一次性读到内存,这样在进行查找时,给系统造 成很大负担。我们用5个计算节点同时生成彩虹表,得到了很 好的加速比。同时,也缓解了单机上存过大彩虹表的问题。 3.2 Rainbow分布式攻击实验 分布式攻击实验采用第三方提供的Rainbow表,Rainbow表 的各参数如表3所示。 第2期 李昕等:基于分布式环境下的彩虹表密码攻击 293 表3 Rainbow分布式攻击实验数据 实验中,我们使用了字母、数字、包括特殊字符的密钥空间, 这基本涵盖了一般的密码所包含的字符。结果表明,用5台 Core Duo2.4G的计算机,对于任意14位以内的WindowsXP系 统密码都可以在平均5分钟以内破解出来。这里之所以是14 位以内的密码,是因为WindowsXP的密码hash算法是7位一个 单元进行的。 4结束语 本文对基于彩虹表的分布式密码攻击进行了探讨,分析了 彩虹表的基本原理,即hash链和彩虹链。并使用分布式计算环 境对彩虹表的分布式存储、分布式攻击等进行了相关研究。实 验表明,彩虹表对于密码破解的确是强有力的武器。不过,如果 在生成哈希表之前,给密码加个唯一的前缀,然后再hash。这 样,攻击者就无法用彩虹表来攻击了。因为“密码”和“加了前 缀的密码”生成的哈希结果是不匹配的。除非知道所有的哈希 表都加了这个前缀。即使真的知道,也得专门针对你的机器生 成一个定制的彩虹表。 另外基于GPU的计算日益成熟,在一台普通PC上辅以 NVidia CUDA技术,对于NTLM算法可以达到最高每秒103, 820,000,000次明文尝试(超过一千亿次),对于广泛使用的 MD5也接近一千亿次。下一步的研究计划是把具有GPU计算 能力的计算节点整和到系统中来,以增强系统的计算能力。 参考文献 [1]Hellman M E.A cryptanalytic time-memory trade off[J].IEEE Trans— actions on Information Theory,IT-26,1980:401—406. [2]Oechslin P.Making a Faster Cryptanalytic Time—Memory Trade—Off[J], Lecture Notes in Computer Science,Volume 2729,2003:617—630. [3]Bomt J,Preneel B,Vandewalle J.On time—memory tradeoff between ex— haustive key search and table precomputation[J].On Information The— ory in the Benelux,1998:111—118. [4]Cosnard M,PHILIPPE J L.Distributed Algorithms for deciphering[J]. [S.1.]:[S.n.],2007. [5]http://en.wikipedia.org/wiki/Rainbow—tables. (上接第283页) //教师冲突检测每冲突一次Conflict+1。 if FArrange[J][n].1nfo.TeacherlD=FArrange[i][n]. Info.TeacherID then{ FArrange[j][n].Conflict:=FArrange[J儿n].Conflict+1; FAxTange[iH n].Conflict:=FArrange[i][n].Conflict+1; //班级冲突检测每冲突一次Conflict+1。 ifGroupConflict(FArrange[i][n],FA ̄ange[J][n )then FA ̄ange[j][n].Conflict::FArrange[j]【n].Conflict+1; FArrange[i][n].Conflict:=FArrange[i¨【n].Conflict+1; Result: Trile: ofr Fhem do Result:=Resuh and(FItem[i].Conflict=0); f nction End 4.5 交叉和变异(Mutate/CrossOver) 交叉和变异是遗传算法的重点,关于它们的选择算法更是 关键之处。许多排课算法就是按照“物竞天择、适者生存”的思 想,选择出适应度高的染色体进行交叉变异,最终使排课问题得 以成功解决。而本算法在进行时间冲突检测时发现,如果一个 课程项在本时问列上冲突值高,那么其相关的课程多存在于这 个时间列,相对应其它时间列的冲突情况可能就会减小。按照 这一思想,本算法在交叉时选择每个时间列上冲突值不为零的 最大课程项,然后针对这些项进行交叉。 实际上这种交叉变异算法也是经过多种算法对比后决定 的,其交叉率并不高(最大只有1/FEnableCount,最小可能为 0),但是其交叉效率令人满意。变异操作也针对有冲突的课程 项进行,测试发现取值不宜过小,确定为50%。 定义函数原型: procedure Mutate; procedure CrossOver; 算法伪码如下: procedure CrossOver ofr FEnableTime do { GetMax Ahem.Conflict; Add Ahem to PMax;} ofr PMax do Exchange(PMax[i],PMax[i+1]); procedure End procedure Mutate for Fhem do if Fhem[i].Conflict<>0 then if Random(100)<50 then Arrangeltem(Fltem[i]); procedure Mutate End 5结束语 计算机排课可以提高排课质量,把教务工作者从繁重的工 作中解脱出来,而且课表中的信息也非常清楚,对于优化学生在 校学习进程,评估每位教师对教学的贡献,领导合理决策等都具 有重要的意义,必将会大大推动教学的良性循环。 参考文献 [1]汪祖柱,程家兴,刘慧婷.基于遗传算法求解时间表问题[J].计算 机工程与应用,2004(24):92—94. [2]吴政,汪峰坤.基于遗传算法的排课系统[J].计算机与数字工程, 2008(11):29—32. [3]袁礼海,宋建社,毕义明,等.混合遗传算法及与标准遗传算法对比 研究[J].计算机工程与应用,2003(12):123—124. [4]周洪伟,原锦辉,张来顺.遗传算法“早熟”现象的改进策略[J].计 算机工程,2007(19):201—203. [5]Chu P C,Beasley.A genetic algorithm for the generalized assignment problem[J].European Journal of Operation,1995:20—22. [6]滕姿,邓辉文,杨久俊.基于遗传算法的排课系统的设计与实现 [J].计算机应用,2007(27):199—204. [7]冯冬表,王非,马雁.遗传算法中选择交叉策略的改进[J].计算机 工程,2008(19):189—191. [8]胡义伟,郑金华,谢勇.遗传算法在大学排课系统中的应用[J].计 算机系统应用,2008(09):66—69.
发布评论