-
1 # 使用者1050810470758
-
2 # 使用者57358069570
簡單的說就是針對特定演算法,尤其是不對稱演算法進行有效破解的一種方法(如 md5演算法)。他的過程 就是建立一個 源資料與加密資料之間對應的hash表。這樣在獲得加密資料後 透過比較,查詢或者一定的運算,可以快速定位源資料。理論上,如果不考慮查詢所需要的時間的話,hash 表越大,破解也就越有效越迅速。當然對於其它破解方法(如碰撞)此方法比較笨拙,對於可變長金鑰等現代高階演算法,效果會大打折扣。但是無論怎樣, 彩虹表(hash)永遠是在資料加解密中是無奈但十分有效的方法 。
假設我們有一個密碼雜湊函式H和口令P.傳統的做法是把H(X)的所有輸出窮舉,把H(P)=H(x[y]),得出P==X[y];
而雜湊鏈是為了降低傳統做法空間要求的技術,我們的想法是定義一個衰減函式 R的雜湊值對映成以“P”的值透過交替運算H和R函式獲取雜湊函式,形成交替的密碼和雜湊值.
例如:假設P是字母6個字元的密碼和雜湊值的集合32位長鏈看起來可能是這樣的:
aaaaaa -H()->281DAF40 -R()-> sgfnyd -H()-> 9203CF10 --R()-->kiebgt.
要生成的表中,我們選擇一組隨機的初始密碼,從P,計算每一個鏈的一些固定長度的K表,並存儲在每一個鏈的第一個和最後一個密碼。第一口令被稱為起點和最後一個被稱為端點。在上面的例子鏈,“AAAAAA”將以此為起點,“kiebgt”將是終點,並沒有其他密碼(或雜湊值)將被儲存。
假如給定一個密文h ,我們要反運算(找到對應的密碼),計算一個鏈,透過將R後H,後R 後h ,並依此類推。如果在該運算過程中的任何點,我們發現該點的值的匹配之前的雜湊鏈的其中一個端點,那麼我們就得到了相應的起始點,我們所尋求的密碼p。
例如,如果我們給出的雜湊920ECF10,我們將計算其首次申請U鏈:發現到:
90E1CF10---R()-->kiebgt
由於kiebgt是我們的端點之一,我們將採另外的點作為新端點,就是找到aaaaaa.
aaaaa--H-->281DAF40---R-->sgfnyd--H-->920EC10
因此,密碼是“sgfnyd”。
但是,假如FB107E70是不是在鏈中,但同樣的端點AAAAAA,那麼我們則需要跟另外的一條雜湊連結繼續這場破譯比賽.
有幾個簡單的雜湊鏈的缺陷。如果在任何時候兩條鏈相互碰撞(產生相同的值),它們將合併,因此該表將不會覆蓋儘可能多的密碼,儘管支付相同的計算成本產生最嚴重的。沒有儲存在它們的全部,由於以前的鏈,這是不可能有效地檢測。例如,如果鏈條3的第三個值鏈7中的第二個值相匹配,兩個鏈將覆蓋幾乎相同的值序列,但它們的最終值將是不一樣的。雜湊函式H是不太可能產生衝突,因為它通常被認為是一個重要的安全功能,不這樣做,但減少功能R,因為它需要正確地覆蓋可能的明文,不能抗碰撞。
其他的困難的重要性,選擇正確的功能R.採摘R的身份是一點不比蠻力的方法。只有當攻擊者有可能的明文將是他可以選擇的函式R,使得確保只有時間和空間是用於可能的明文,而不是整個空間的可能的密碼是個好主意。在影響R牧羊人前雜湊計算的結果可能明文,但這樣做的好處與缺點的R可能不會產生類中的每一個可能的明文攻擊者希望檢查否定肯定的,沒有密碼的攻擊者來自他的選擇類。此外,它可以是難以設計的函式R明文,以便匹配期望的分佈。
彩虹表的碰撞與普通的雜湊鏈有效地解決問題,透過更換單減函式R序列相關的減函式R 1到R K表。透過這種方式,為了使兩個鏈碰撞和合並,他們必須打相同的值上的相同的迭代。因此,在每個鏈的最終值將是相同的。最後一個後處理階段可以排序表中的鏈中刪除任何“重複”鏈其他鏈具有相同的最終值的。產生新的鏈,然後填寫表。這些鏈是不無碰撞(他們可能會重疊是暫時的),但他們不會合並,大大減少了總人數的碰撞。
如何查詢,使用序列的還原功能的變化,因為雜湊值的興趣可能會發現在鏈中的任何位置,這是需要產生K表不同的鏈。第一鏈假設的雜湊值是在過去的雜湊位置,並只適用於R K表 ;鏈承擔的雜湊值是在第二到最後的雜湊位置,並適用於R 7 -1,H,則RK表 ;依此類推,直到最後一個鏈,它適用於所有的還原功能,交流與H.生產虛驚一場,這將建立一個新的途徑:如果我們“猜”的雜湊值錯誤的位置,我們可能會不必要地評價一個鏈。
雖然彩虹表有遵循更多的鏈,他們做了,這有更少的表:簡單的雜湊連結串列不能增長而迅速成為低效率的由於合併連鎖店,超過一定規模,來處理這個,他們保持多個表,和每個查詢必須透過每個表搜尋。彩虹表可以達到同樣的效能,使他們能夠執行的一個因素7較少的查詢表,7倍。
https://iknow-pic.cdn.bcebos.com/34fae6cd7b899e51ede1f3f745a7d933c9950de2
回覆列表
簡單的說就是針對特定演算法,尤其是不對稱演算法進行有效破解的一種方法(如md5演算法)。他的過程就是建立一個源資料與加密資料之間對應的hash表。這樣在獲得加密資料後透過比較,查詢或者一定的運算,可以快速定位源資料。理論上,如果不考慮查詢所需要的時間的話,hash表越大,破解也就越有效越迅速。當然對於其它破解方法(如碰撞)此方法比較笨拙,對於可變長金鑰等現代高階演算法,效果會大打折扣。但是無論怎樣,彩虹表(hash)永遠是在資料加解密中是無奈但十分有效的方法。假設我們有一個密碼雜湊函式H和口令P.傳統的做法是把H(X)的所有輸出窮舉,把H(P)=H(x[y]),得出P==X[y];而雜湊鏈是為了降低傳統做法空間要求的技術,我們的想法是定義一個衰減函式R的雜湊值對映成以“P”的值透過交替運算H和R函式獲取雜湊函式,形成交替的密碼和雜湊值.例如:假設P是字母6個字元的密碼和雜湊值的集合32位長鏈看起來可能是這樣的:aaaaaa-H()->281DAF40-R()->sgfnyd-H()->9203CF10--R()-->kiebgt.要生成的表中,我們選擇一組隨機的初始密碼,從P,計算每一個鏈的一些固定長度的K表,並存儲在每一個鏈的第一個和最後一個密碼。第一口令被稱為起點和最後一個被稱為端點。在上面的例子鏈,“AAAAAA”將以此為起點,“kiebgt”將是終點,並沒有其他密碼(或雜湊值)將被儲存。假如給定一個密文h,我們要反運算(找到對應的密碼),計算一個鏈,透過將R後H,後R後h,並依此類推。如果在該運算過程中的任何點,我們發現該點的值的匹配之前的雜湊鏈的其中一個端點,那麼我們就得到了相應的起始點,我們所尋求的密碼p。例如,如果我們給出的雜湊920ECF10,我們將計算其首次申請ŕ鏈:發現到:90E1CF10---R()-->kiebgt由於kiebgt是我們的端點之一,我們將採另外的點作為新端點,就是找到aaaaaa.aaaaa--H-->281DAF40---R-->sgfnyd--H-->920EC10因此,密碼是“sgfnyd”。但是,假如FB107E70是不是在鏈中,但同樣的端點AAAAAA,那麼我們則需要跟另外的一條雜湊連結繼續這場破譯比賽.有幾個簡單的雜湊鏈的缺陷。如果在任何時候兩條鏈相互碰撞(產生相同的值),它們將合併,因此該表將不會覆蓋儘可能多的密碼,儘管支付相同的計算成本產生最嚴重的。沒有儲存在它們的全部,由於以前的鏈,這是不可能有效地檢測。例如,如果鏈條3的第三個值鏈7中的第二個值相匹配,兩個鏈將覆蓋幾乎相同的值序列,但它們的最終值將是不一樣的。雜湊函式H是不太可能產生衝突,因為它通常被認為是一個重要的安全功能,不這樣做,但減少功能R,因為它需要正確地覆蓋可能的明文,不能抗碰撞。其他的困難的重要性,選擇正確的功能R.採摘R的身份是一點不比蠻力的方法。只有當攻擊者有可能的明文將是他可以選擇的函式R,使得確保只有時間和空間是用於可能的明文,而不是整個空間的可能的密碼是個好主意。在影響R牧羊人前雜湊計算的結果可能明文,但這樣做的好處與缺點的R可能不會產生類中的每一個可能的明文攻擊者希望檢查否定肯定的,沒有密碼的攻擊者來自他的選擇類。此外,它可以是難以設計的函式R明文,以便匹配期望的分佈。彩虹表的碰撞與普通的雜湊鏈有效地解決問題,透過更換單減函式R序列相關的減函式R1到RK表。透過這種方式,為了使兩個鏈碰撞和合並,他們必須打相同的值上的相同的迭代。因此,在每個鏈的最終值將是相同的。最後一個後處理階段可以排序表中的鏈中刪除任何“重複”鏈其他鏈具有相同的最終值的。產生新的鏈,然後填寫表。這些鏈是不無碰撞(他們可能會重疊是暫時的),但他們不會合並,大大減少了總人數的碰撞。如何查詢,使用序列的還原功能的變化,因為雜湊值的興趣可能會發現在鏈中的任何位置,這是需要產生K表不同的鏈。第一鏈假設的雜湊值是在過去的雜湊位置,並只適用於RK表;鏈承擔的雜湊值是在第二到最後的雜湊位置,並適用於Rķ-1,H,則RK表;依此類推,直到最後一個鏈,它適用於所有的還原功能,交流與H.生產虛驚一場,這將建立一個新的途徑:如果我們“猜”的雜湊值錯誤的位置,我們可能會不必要地評價一個鏈。雖然彩虹表有遵循更多的鏈,他們做了,這有更少的表:簡單的雜湊連結串列不能增長而迅速成為低效率的由於合併連鎖店,超過一定規模,來處理這個,他們保持多個表,和每個查詢必須透過每個表搜尋。彩虹表可以達到同樣的效能,使他們能夠執行的一個因素ķ較少的查詢表,ķ倍。