彩虹表在現代暴力破解中起到了舉足輕重的作用. 彩虹表構造的好壞直接關係到密碼破解的快慢. 接下來讓我
們一步一步瞭解彩虹表的原理, 最後目標是構造出自己的彩虹表.
說道彩虹表不得不提到Hellman大神在1980年提出的time-memory trade-off算法了
畢竟彩虹表就是對其理論的改良的工程實現.
對於密鑰空間大小爲N的密碼系統, 一般破解思路是想辦法使T(操作總時間)*M(內存總大小) = N.
這樣的話如果想讓M = 1那麼就變成了單純的暴力破解
如果想讓T = 1那麼就需要造一個內存空間大小等同與N的表
現代密碼設計的最基本的原則就是讓以上的兩種手段在可遇見的未來(密碼的有效期內)不可行
不過Hellman的time-memory trade-off選取
使其可以用M = m*t =
這樣的話在表已經建立的情況下相當於把原密碼體系的長度縮短了1/3
那麼我們先看下算法的大致流程.
設明文爲
我們採取選擇明文攻擊,
按常規思路我們要存儲的m*t次對K的嘗試結果的話那麼我們最終得到的有一個m*t的表, 其能付出O(1)的代價對結果進行查詢
不同的我們這次選取退化函數R, 其能把密文空間上元素映射到密鑰空間
我們再把
在N上選取不同的密鑰
起始點之後的每一個
同理可推出第i行最終點
好了現在我們有了一個m*n的表, 但是我們只保留表的第一列(
如果我們用P得到了C, 我們要驗證密鑰K有沒有存在於我們的表中
設
TRUE:
如果
FALSE:
那麼我們讓
從結果上來看, 雖然我們只保存了2*m個結構,但是通過退化函數R,我們只需要在查詢過程中引入少量的計算就相當於預存了一個m*t大小的表(最好情況)
這種通過函數的映射來縮小表的大小,提高破解效率的做法就是time-memory tarde-off的核心
不過因爲退化函數我們不能避免的會出現表中值得重疊問題(false alarm的產生的原因之一)
之後我們將看到作者如何通過理論證明如何選取m, t來保證破解的成攻率並證明重疊的問題對錶的有效性沒有很大影響