一種基于MapReduce彩虹表并行系統(tǒng)設計方法和裝置制造方法
【專利摘要】本發(fā)明公開一種基于MapReduce彩虹表并行系統(tǒng)設計方法和裝置,其設計方法包括彩虹表數(shù)據(jù)生成步驟和彩虹表解密步驟:對于彩虹表的每個彩虹鏈,map模塊獲取該彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量和鏈尾節(jié)點數(shù)據(jù)矢量,鏈首節(jié)點數(shù)據(jù)矢量記為鏈尾節(jié)點數(shù)據(jù)矢量記為以EPi為Key,以SPi為Value,將<EPi,SPi>數(shù)據(jù)對傳給彩虹鏈的Reduce模塊;彩虹鏈的Reduce模塊對<EPi,SPi>數(shù)據(jù)對進行重組,形成的數(shù)據(jù)結構,其中表示一個鏈表,其值為所有以EPi為鏈尾節(jié)點數(shù)據(jù)矢量的彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量的集合;最后把各個重組完的彩虹表數(shù)據(jù)以新的<Key,Value>數(shù)據(jù)對插入到NoSQL數(shù)據(jù)庫中;然后解析待解密哈希H0,將其映射為彩虹鏈上的節(jié)點Nodei;然后將Nodek轉為鏈尾節(jié)點數(shù)據(jù)矢量EP′i;以EP′i為key從NoSQL數(shù)據(jù)庫中讀取重組后的彩虹鏈數(shù)據(jù),并解析出H0的密碼。
【專利說明】-種基于MapReduce彩虹表并行系統(tǒng)設計方法和裝置
【技術領域】
[0001] 本發(fā)明涉及網(wǎng)絡信息安全領域中的密碼恢復技術,特別是涉及一種基于 MapReduce彩虹表的并行系統(tǒng)設計方法和裝置。
【背景技術】
[0002] 為了保證后臺數(shù)據(jù)安全,現(xiàn)在的做法大多是使用哈希算法對明文密碼進行加密存 儲。哈希算法,又稱散列算法,可以將任意長度的輸入轉為固定長度的哈希值輸出,且具有 單向性,無法由輸出逆推得到輸入,被廣泛應用在密碼安全領域,用于保護密碼安全。密碼 恢復過程就是:給定一個哈希值H0,嘗試計算各種明文X對應的哈希值Hash(X),如果有 Hash (X) = H0,則X是H0對應的密碼。查找的方法包括暴力窮舉法和字典查找法,但暴力 窮舉法對簡單的密碼和簡單的密碼系統(tǒng)是可行的,但對于復雜的密碼和密碼系統(tǒng),則會產 生無窮大的字典,從而需要海量的計算時間;而字典查找法則需要海量的存儲空間,解密代 價太高。
[0003] 為了減小所需要字典的大小,減少產生和查找字典的時間,現(xiàn)有技術提供一種針 對碰撞鏈的解決方案--彩虹表,其基于Martin Heilman理論(基于內存與時間的權重理 論)。彩虹表是暴力窮舉和字典查找的折中,通過預計算的方式來減少口令恢復的時間花 銷,其核心思想是將明文計算得到的哈希值由一個映射函數(shù)映射回到明文空間,進而交替 地計算明文和哈希值,以減少哈希值密碼恢復的時間。一張彩虹表是若干條彩虹鏈的集合, 彩虹鏈通過一系列哈希運算和映射函數(shù)迭代計算得到的,彩虹鏈僅存儲鏈首和鏈尾節(jié)點; 恢復哈希值時,通過一系列映射函數(shù)、哈希迭代計算及鏈尾元素遍歷查找等計算出哈希值 的明文。盡管如此,彩虹表的生成過程仍相當耗時,且最后生成的彩虹鏈集合仍然需要很大 的存儲空間,特別是支持10位以上的長密碼。另一方面,彩虹鏈在生成過程中會產生大量 的鏈表交疊現(xiàn)象,即鏈表的首節(jié)點不同,但鏈表的尾節(jié)點一樣,這種現(xiàn)象給密碼恢復過程增 加了大量的干擾數(shù)據(jù)。目前大都通過分表的方式來減少這種干擾,但這增加了解密的復雜 度,且字表之間如果沒分開存儲,會增大磁盤i〇的負載,而分開存儲會增加通信負載。
【發(fā)明內容】
[0004] 因此,針對上述現(xiàn)有技術的問題,本發(fā)明設計一種新的彩虹表數(shù)據(jù)存儲結構,提 出一種基于MapReduce彩虹表并行系統(tǒng)設計方法和裝置,實現(xiàn)大容量彩虹表的并行生成, 克服彩虹鏈的交疊問題,提高彩虹表讀寫的i〇速度,使其具有可擴展、高容錯、高性能等優(yōu) 點。
[0005] 為了解決上述技術問題,本發(fā)明所采用的思路是,采用MapReduce對彩虹鏈進行 數(shù)據(jù)結構整合。其中,MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(例如大于1TB)的 并行運算。MapReduce主要包括Map (映射)操作和Reduce (歸約)操作,Map (映射)操作 用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce (歸約)函數(shù),用來保證所有 映射的鍵值對中的每一個共享相同的鍵組。簡單說來,一個映射函數(shù)就是對一些獨立元素 組成的概念上的列表的每一個元素進行指定的操作。事實上,每個元素都是被獨立操作的, 而原始列表沒有被更改,因為這里創(chuàng)建了一個新的列表來保存新的答案。這就是說,Map操 作是可以高度并行的,這對高性能要求的應用以及并行計算領域的需求非常有用。而歸約 (或稱化簡)操作指的是對一個列表的元素進行適當?shù)暮喜ⅰkm然他不如映射函數(shù)那么并 行,但是因為歸約總是有一個簡單的答案,大規(guī)模的運算相對獨立,所以歸約函數(shù)在高度并 行環(huán)境下也很有用。本發(fā)明通過MapReduce對彩虹鏈進行數(shù)據(jù)結構整合后,將新的數(shù)據(jù)結 構插入到NoSQL數(shù)據(jù)庫中,從而有效控制彩虹鏈的交疊問題,并利用NoSQL解決鏈表交疊的 讀取問題,做到一次讀取所有交疊。
[0006] 具體的,本發(fā)明的技術方案是:一種基于MapReduce彩虹表并行系統(tǒng)設計方法,包 括彩虹表數(shù)據(jù)生成步驟和彩虹表解密步驟;
[0007] 其中,彩虹表數(shù)據(jù)生成步驟包括:
[0008] 步驟A :對于彩虹表的每個彩虹鏈,獲取該彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量和鏈尾節(jié) 點數(shù)據(jù)矢量,鏈首節(jié)點數(shù)據(jù)矢量記為力5,鏈尾節(jié)點數(shù)據(jù)矢量記為運5,以EPi為Key,以SPi 為Value,將〈Key,Value〉(也即< EPi,SPi >數(shù)據(jù)對,i e [0, L],L為彩虹鏈的最大長度) 形成< EPi,SPi >數(shù)據(jù)對;一個彩虹鏈包括η個鏈首節(jié)點數(shù)據(jù)矢量,可以當成是一個η維的 向量,通過L次迭代,計算出一組鏈尾節(jié)點數(shù)據(jù)矢量,該鏈尾節(jié)點數(shù)據(jù)矢量同樣可以表示成 一個η維向量,最后彩虹表的表示形式就是〈vector 1,vector2>,彩虹表中的彩虹鏈就是2 個向量中每一個維度的對應;
[0009] 步驟B :對< EPi,SPi >數(shù)據(jù)對進行重組,形成< 研,仏/〈免》的數(shù)據(jù)結構,其中 ZJ.S'/ < 57^ >表示一個鏈表,其值為所有以EPi為鏈尾節(jié)點數(shù)據(jù)矢量的彩虹鏈的鏈首節(jié)點數(shù) 據(jù)矢量的集合;最后把各個重組完的彩虹表數(shù)據(jù)以新的〈Key,Value〉數(shù)據(jù)對插入到NoSQL 數(shù)據(jù)庫中。其中,NoSQL數(shù)據(jù)庫是包括HBase但不限于HBase的各種NoSQL數(shù)據(jù)庫。
[0010] 彩虹表解密步驟包括:解析待解密哈希%,將其映射為彩虹鏈上的節(jié)點Nodei ;然 后將Nodek轉為鏈尾節(jié)點數(shù)據(jù)矢量EP' i;以EP' iSkey從NoSQL數(shù)據(jù)庫中讀取重組后的 彩虹鏈數(shù)據(jù),并解析出%的密碼。其具體包括如下步驟:
[0011] 步驟C1 :解析待解密哈希%,按照彩虹表生成的原理,將其映射為彩虹鏈上的節(jié) 點,即為 Nodei,i e [0,L];
[0012] 步驟C2 :將Nodek轉為鏈尾節(jié)點數(shù)據(jù)矢量EP' i,如果k等于L (L為彩虹鏈長度), 那么Nodek就是EPp Nodek需要映射L-k次,NocK_2需要映射兩次,以此類推,k e [0, L], k的初始值設置為L(或者為0);
[0013] 步驟C3 :以EP/為key,從對應的NoSQL數(shù)據(jù)庫中讀取重組后的彩虹鏈數(shù)據(jù),如果 記錄存在,則一次讀取并解析>,依次取出每個SPi ',并還原計算出每個彩虹鏈 上的各個節(jié)點iVo#及其對應的哈希值,如果存在某個抱圳)等于H。, 那么對應的密碼即為%的密碼;否則k減1 (如果步驟2設置為0,則此次為加1)并 根據(jù)步驟2計算下一個映射;
[0014] 步驟C4,如果k減小為0 (如果步驟2設置為0,則此次為增加至L,也即所有映射 均被計算完)后,仍不存在任何一個)等于4,那么解密失敗。
[0015] 具體的,彩虹鏈的map模塊獲取每一組彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量和鏈尾節(jié)點數(shù) 據(jù)矢量包括以下步驟:
[0016] 步驟A1,數(shù)據(jù)的加載步驟:接收一組的彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量,記為#,并 設置彩虹鏈的最大長度為L,傳遞給map模塊;其中,傳遞的是一組鏈首節(jié)點數(shù)據(jù)矢量以及 彩虹鏈的長度(所有彩虹鏈的長度等長,彩虹鏈的最大長度L也即彩虹鏈的長度)給map 模塊,這樣才能計算出每個首節(jié)點對應的尾節(jié)點;
[0017] 步驟A2,彩虹鏈map計算步驟:map模塊對每個彩虹鏈建立一組對應的map線程, 該map線程負責并行計算豆對應的彩虹鏈尾節(jié)點數(shù)據(jù)矢量,記為map線程以EPi為 Key,以 SPi 為 Value,形成< EPi,SPi >數(shù)據(jù)對,將< EPi,SPi >數(shù)據(jù)對(也即〈Key,Value〉 數(shù)據(jù)對)輸出給Reduce模塊;
[0018] 其中,Reduce模塊用于對< EPi,SPi >數(shù)據(jù)對進行重組,包括以下步驟:
[0019] 步驟B1,設置彩虹鏈最大允許的交接鏈表數(shù)N,即Lh >允許的最多的元素個 數(shù),記?對< Sf >的元素個數(shù)為
【權利要求】
1. 一種基于MapReduce彩虹表并行系統(tǒng)設計方法,包括彩虹表數(shù)據(jù)生成步驟和彩虹表 解密步驟; 其中,彩虹表數(shù)據(jù)生成步驟包括: 步驟A :對于彩虹表的每個彩虹鏈,獲取該彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量和鏈尾節(jié)點數(shù) 據(jù)矢量,鏈首節(jié)點數(shù)據(jù)矢量記為穿,鏈尾節(jié)點數(shù)據(jù)矢量記為,以EPi為Key,以SPi為 Value,形成< EPi,SPi >數(shù)據(jù)對; 步驟B :對< EPi,SPi >數(shù)據(jù)對進行重組,形成< £f,L/.s'/ <SP, ?的數(shù)據(jù)結構,其中 人如< >表示一個鏈表,其值為所有以EPi為鏈尾節(jié)點數(shù)據(jù)矢量的彩虹鏈的鏈首節(jié)點數(shù) 據(jù)矢量的集合;最后把各個重組完的彩虹表數(shù)據(jù)以新的〈Key,Value〉數(shù)據(jù)對插入到NoSQL 數(shù)據(jù)庫中; 彩虹表解密步驟包括: 步驟C :解析待解密哈希&,將其映射為彩虹鏈上的節(jié)點Nodei ;然后將Nodek轉為鏈尾 節(jié)點數(shù)據(jù)矢量EP' i;以EP' iSkey從NoSQL數(shù)據(jù)庫中讀取重組后的彩虹鏈數(shù)據(jù),并解析 出 H。的密碼;其中,i G [〇,L],k G [〇,L]。
2. 根據(jù)權利要求1所述的基于MapReduce彩虹表并行系統(tǒng)設計方法,其特征在于,獲取 每一組彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量和鏈尾節(jié)點數(shù)據(jù)矢量包括以下步驟: 步驟A1,數(shù)據(jù)的加載步驟:接收一組的彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量,記為@,并設置 彩虹鏈的最大長度為L,將鏈首節(jié)點數(shù)據(jù)矢量和彩虹鏈的最大長度L傳遞給map模塊; 步驟A2,彩虹鏈map計算步驟:map模塊對每個彩虹鏈建立一組對應的map線程,該map 線程負責并行計算;^對應的彩虹鏈尾節(jié)點數(shù)據(jù)矢量,記為運3,map線程以EPi為Key,以 SPi 為 Value,形成< EPi,SPi >數(shù)據(jù)對。
3. 根據(jù)權利要求1或2所述的基于MapReduce彩虹表并行系統(tǒng)設計方法,其特征在于, 對< EPi,SPi >數(shù)據(jù)對進行重組,包括以下步驟: 步驟B1,設置彩虹鏈最大允許的交接鏈表數(shù)N,即L/W < >允許的最多的元素個數(shù), 記〈尿〉的元素個數(shù)為仏奶呀仏扮 < 邱>). I 9 步驟B2, Reduce模塊對每個彩虹鏈建立一個對應Reduce子線程,每個Reduce子線程 負責收集各自對應的Key的彩虹鏈,將第i個Reduce子線程記為子線程氏,則第i個Reduce 子線程負責收集鏈尾節(jié)點數(shù)據(jù)矢量為EPi的彩虹鏈; 步驟B3,交疊鏈表重組,假設子線程氏為當前取得的彩虹鏈為< >,如果當前 的<坪 >)小于N,則把S/f插入到A/.S7 < 5片 > 中,否則丟棄剩下所有的以EPi 為鏈尾節(jié)點數(shù)據(jù)矢量的彩虹鏈,并完成子線程&的重組工作; 步驟B4,等待所有的子線程氏直至重組結束。
4. 根據(jù)權利要求1所述的基于MapReduce彩虹表并行系統(tǒng)設計方法,其特征在于,彩虹 表解密步驟包括: 步驟Cl :解析待解密哈希4,按照彩虹表生成的原理,將其映射為彩虹鏈上的節(jié)點,即 為 Nodei ; 步驟C2 :將Nodek轉為鏈尾節(jié)點數(shù)據(jù)矢量EP' p k G [〇, L]; 步驟C3 :以EP' i為key,從對應的NoSQL數(shù)據(jù)庫中讀取重組后的彩虹鏈數(shù)據(jù),如果記 錄存在,則一次讀取并解析/上Z < 依次取出每個SP' p并還原計算出每個彩虹鏈上 的各個節(jié)點iVafef及其對應的哈希值\如果存在某個等于%,那 么MWef對應的密碼即為%的密碼;否則根據(jù)步驟2計算下一個映射; 步驟C4,如果所有映射均計算完,仍不存在任何一個//av/7( A/〇A,4)等于%,那么解密失 敗。
5. 基于MapReduce彩虹表并行系統(tǒng)設計裝置,包括彩虹表數(shù)據(jù)生成單元和彩虹表解密 單元; 其中,彩虹表數(shù)據(jù)生成單元包括map模塊和Reduce模塊; map模塊用于獲取彩虹表的每個彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量和鏈尾節(jié)點數(shù)據(jù)矢量 P,以EPi為Key,以SPi為Value,將< EPi,SPi >數(shù)據(jù)對傳輸給Reduce模塊; Reduce模塊用于對< EPi,SPi >數(shù)據(jù)對進行重組,形成< <SP, ?的數(shù)據(jù)結構, 其中< .Sg >表示一個鏈表,其值為所有以EPi為鏈尾節(jié)點數(shù)據(jù)矢量的彩虹鏈的鏈首節(jié) 點數(shù)據(jù)矢量的集合;最后把各個重組完的彩虹表數(shù)據(jù)以新的〈Key,Value〉數(shù)據(jù)對插入到 NoSQL數(shù)據(jù)庫中; 彩虹表解密單元用于解析待解密哈希%,將其映射為彩虹鏈上的節(jié)點Nodei ;然后將 Nodek轉為鏈尾節(jié)點數(shù)據(jù)矢量EP' i ;以EP' i為key從NoSQL數(shù)據(jù)庫中讀取重組后的彩虹 鏈數(shù)據(jù),并解析出%的密碼;其中,i e [0,L],ke [0,L]。
6. 根據(jù)權利要求5所述的基于MapReduce彩虹表并行系統(tǒng)設計裝置,其特征在于,map 模塊具體包括: 數(shù)據(jù)加載子單元,用于接收一組的彩虹鏈的鏈首節(jié)點數(shù)據(jù)矢量,記為義S并設置彩虹 鏈的最大長度為L,傳遞給map計算子單元; map計算子單元,用于對每個彩虹鏈建立一組對應的map線程,該map線程負責并行計 算@對應的彩虹鏈尾節(jié)點數(shù)據(jù)矢量,記為,map線程以EPi為Key,以SPi為Value,將 〈Key,Value〉數(shù)據(jù)對輸出給Reduce模塊。
7. 根據(jù)權利要求5所述的基于MapReduce彩虹表并行系統(tǒng)設計裝置,其特征在于, Reduce模塊具體包括: 參數(shù)設置子單元,用于設置彩虹鏈最大允許的交接鏈表數(shù)N,即/i? >允許的最多 的元素個數(shù),記L/.S7 <兩 > 的元素個數(shù)為< # >); 數(shù)據(jù)收集子單元,用于對每個彩虹鏈建立一個對應Reduce子線程,每個Reduce子線程 負責收集各自對應的Key的彩虹鏈,將第i個Reduce子線程記為子線程Rp則第i個Reduce 子線程負責收集鏈尾節(jié)點數(shù)據(jù)矢量為EPi的彩虹鏈; 鏈表重組子單元,用于交疊鏈表重組,假設子線程氏為當前取得的彩虹鏈為< EPi,SPik >,如果當前的Cb_0.(Zi.s.,〈兩 >)小于N,則把SPik插入到<兩 > 中,否則丟棄剩下 所有的以EPi為鏈尾節(jié)點數(shù)據(jù)矢量的彩虹鏈,并完成子線程氏的重組工作; 判斷子單元,用于等待所有的子線程氏直至重組結束。
8.根據(jù)權利要求5所述的基于MapReduce彩虹表并行系統(tǒng)設計裝置,其特征在于,彩虹 表解密單元包括: 待解密哈希解析子單元:用于解析待解密哈希%,按照彩虹表生成的原理,將其映射為 彩虹鏈上的節(jié)點,即為Nodei ; 數(shù)據(jù)矢量轉換子單元:用于將Nodek轉為鏈尾節(jié)點數(shù)據(jù)矢量EP' p k e [0, L]; 密碼恢復子單元:用于獲取待解密哈希的密碼,以EP' key,從對應的NoSQL數(shù)據(jù)庫 中讀取重組后的彩虹鏈數(shù)據(jù),如果記錄存在,則一次讀取并解析依次取出每 個SP' i,并還原計算出每個彩虹鏈上的各個節(jié)點及其對應的哈希值& 如果存在某個&圳等于%,那么對應的密碼即為H(l的密碼;否則根據(jù)步驟2 計算下一個映射; 判斷子單元,用于判斷解密是否完成,如果所有映射均計算完,仍不存在任何一個 他圳他^等于'那么解密失敗。
【文檔編號】G06F21/62GK104281816SQ201410540011
【公開日】2015年1月14日 申請日期:2014年10月14日 優(yōu)先權日:2014年10月14日
【發(fā)明者】李伊飏, 何寶華 申請人:廈門智芯同創(chuàng)網(wǎng)絡科技有限公司