XTS-AES模式主要是解決什麼問題,是怎樣解決的?


AES 分組加密操作模式有三種 ECB CBC XTS

我們知道一個功能模塊 如果所有的輸入相同 那麼輸出也相同

AES模塊也一樣 大量數據輸入之後很容易找到一些規律, 這就是明顯的攻擊點。

ECB到CBC到XTS主要需要解決的問題是 (1 相同的數據塊 得到的密文是否相同 2 能否隨機訪問各個數據塊 解密一個數據塊是否需要解密相鄰的其他數據塊)

ECB 相同的數據塊 密鑰一樣的話 輸出的密文也一樣 這樣有嚴重的漏洞 容易被攻擊。

CBC 引入了一個IV值遞歸 上一組加密後產生新的IV值作為下一數據塊加密的輸入 這樣至少有個一個參數不同 但帶來的問題是沒有辦法隨機訪問各個區塊了,訪問某個區塊必須解出前一個區塊數據。

XTS 加入了tweak key 與 AES key 互相配合, 各個區塊用同樣的AES key 但Tweak key 不相同 比如設置為與區塊的index 成對應關係, 這樣各個區塊數據加密解密互相獨立(獨立的tweak key)

綜上所述 XTS 相比 ECB CBC解決的兩個問題是

1 相同的數據塊得到的密文不可以相同

2 不同數據塊可以獨立加密和解密


XTS即基於XEX(XOR-ENCRYPT-XOR)的密文竊取演算法的可調整的密碼本模式(Tweakable Codebook mode),該演算法主要用於以數據單元(包括扇區、邏輯磁碟塊等)為基礎結構的存儲設備中靜止狀態數據的加密。

以上是官方的解釋,談一下我的理解。

我們都知道磁碟上的數據是有一定格式的,比如一個扇區是512位元組,磁碟加密直接要對寫入扇區的明文進行加密,記錄在磁碟扇區上的是相應的密文。

而我們通過傳統的AES加密方法,比如CBC加密模式,密文須包含一個128bit的初始向量。那麼問題來了,我們豈不是要騰出額外的128個bit專門存儲初始向量?

這樣做是增加了磁碟的開銷,而且明文和密文在扇區上的存儲也不是一一對應的,這給磁碟底層的加密實現帶來很大的麻煩。

更為關鍵的是,傳統的加密演算法,更改密匙非常不便,一旦更改,就意味著要重新進行密匙擴展演算法,對磁碟來說要增加很大的開銷,同時還要擔心密匙泄露的問題。

在這種情況下,針對磁碟加密的特點,2002年,Moses Liskov,Ronald L.Rivest, David Wagner,首次提出了可調整的分組密碼這個概念,跟傳統的分組密碼相比,除了密匙和明文這兩個輸入外,還引入另外一個輸入---tweak,即可調整值。

這樣做的好處是,在不更改密匙的情況下,僅僅改變tweak值,就可以給加密系統提供多變性,既減少了磁碟的開銷,也不怕密匙泄露,因為tweak值是公開的,就算泄露了tweak值,如果不知道密匙,是無法破解系統的。而且,這種演算法,不需要初始向量,也就避免我們上面所述的明文和密文在扇區上的存儲不對應的問題。

XTS-AES演算法是基於以上思想,被IEEE採用的一個標準。

簡單介紹下其原理,以傳輸單個128bit數據塊為例:

i為128-bit調整值,j為128-bit數據塊在數據單元中的位置值,C為128-bit密文數據塊。

AES-enc為標準AES演算法,key2為調整值密匙,key1為數據密匙,模乘操作中 α為GF(2^128)域中對應於多項式x的本源。

計算的步驟順序如下:

1. T &<---- AES-enc(key2,i) ? (α^j );

2. PP &<----P⊕T

http://3.CC&<---AES-enc(Key1,PP)

4. C&<--CC⊕T

需要指出的是,j代表數據塊在數據單元里的index,比如256個bit數據塊,那麼 0bit-127bit的j=1,128bit-256bit 的j=2。j 的引入,是讓各個數據塊的加密保持獨立。


我昨天剛好看過一點點..

比如磁碟的一個sector是4k,那麼我們需要M=C,如果C&>M一個sector就不夠用了。因此我們不能存下IV,要用deterministic encryption. 而我們又希望每個sector用不同的key加密,防止一些信息的泄漏(如果用同一個key,那麼相同的sector產生相同的ciphertext,造成信息泄漏).

比較慢的構造方法是對於i-th sector我們利用PRP和primary key去產生kn = E(key, i),但是這樣做的話速度就比較慢加密每個sector就需要執行兩次E.因此這時候就需要XTS-AES.

XTS-AES需要5個輸入,(k1,k2)是兩個key, (t,i)標示第t個sector的第i個block, 和一個plaintext x.

對於某個sector #t 先用E(k2, t)產生一個數N,然後用下面過程得到ciphertext C.

C = E(k1, x ^ p(N,i)) ^ p(N,i)

這裡的p(N,i)我那個slides並沒有解釋是什麼,只是說能在常數時間內運行完。

我懂的不多,只能回答這麼多了 = =


推薦閱讀:

ShellShock 攻擊實驗
從SHAttered事件談安全
進門請刷手——將門禁卡植入手中
為什麼各種PDF編輯器都遵守當打開有密碼保護的文件時要輸入密碼才能操作?

TAG:密碼學 | 信息安全和密碼學 |