首頁>技術>

攻擊面應該怎麼選?

我們先來回顧一下 CBC 模式的加密過程。在這個過程中,一個明文分組的加密,需要如下的輸入資料:

上一次的密文分組 Ci-1;這一次的明文分組 Pi;加密和解密共享的金鑰 K。

這一次的明文分組 Pi 和上一次的密文分組 Ci-1 進行異或運算,獲得中間結果 Ti。

異或運算獲得的中間結果 Ti,Ti = Ci-1 ^ Pi

然後,異或運算獲得的中間結果 Ti 和金鑰 K,透過加密函式的運算,產生密文分組:

密文分組 Ci

而加密端的異或運算,發生在明文分組和上一次的密文分組(對於第一次運算,上一次的密文分組就是初始化向量)之間。針對加密端的攻擊,同樣,我們也是在明文分組和上一次的密文分組或者初始化向量上想辦法。

攻擊理論上可行嗎?

假設目標明文分組是 Pi,但是攻擊者並不知道 Pi 的明文內容,而他攻擊的目的就是解密出 Pi 的明文資料。由於密文資料不是保密的,所以攻擊者可以知道所有的密文分組,包括參與 Pi 加密運算的上一次密文分組 Ci-1 和這一次的密文分組 Ci。

如果攻擊者可以使用加密介面,攻擊者就可以構造明文分組,然後呼叫加密運算,觀測加密運算後的密文分組。如果攻擊者觀測到密文分組和目標明文分組對應的密文分組相同,那麼他就可以確定目標明文分組的具體資料了。

如何構造明文分組?

像解密端的攻擊方案一樣,我們還是要利用異或運算的歸零律和恆等律。假設已經知道了 Pi,當前的加密運算需要使用上一次的密文分組 Cj-1,如果攻擊使用的明文可以構造成下面的形式,那麼攻擊就能夠成功:

Pj = Pi ^ Ci-1 ^ Cj-1

這段沒看懂公式怎麼來的.

攻擊實踐上可行嗎?

2011 年 9 月,兩位天才般的研究人員(Juliano Rizzo,Thai Duong)公開了上述的攻擊方案。並且表示,只要給他們幾分鐘時間,他們就可以利用該漏洞入侵你的支付賬戶。他們給這個攻擊技術取了一個超酷的名字,叫做 BEAST。

有什麼防範措施?

其實,防範措施還是要在初始化向量上想辦法。BEAST 攻擊起作用的關鍵,就是要使用上一次加密運算的最後一個密文分組。

如果這一次的加密運算不使用上一次加密運算的資料,BEAST 攻擊就無法運算了。該用什麼替換上一次加密運算的最後一個密文分組呢?

和防範補齊預言攻擊的辦法一樣,替換的辦法就是每一次加密運算,都使用不同的初始化向量。

比較麻煩的是,對於每一次解密運算,解密端需要加密端使用的初始化向量,然後才能執行解密運算。可是,初始化向量的同步不是一件容易的事情,特別是在資料包可能被有意無意丟棄的環境下。

有沒有改進的防範措施?

一個改進的辦法,就是繼續使用上一次加密運算的最後一個密文分組,同時把每一次運算的初始化向量當做第一個明文分組來處理。

這個辦法的好處,就是解密端不需要知道加密端選擇的初始化向量,就可以執行解密運算。這個辦法的壞處,就是解密端需要丟掉初始化向量這一段資料,不能把它當做應用資料來處理。

10
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • String物件的那些事,幾行程式碼就解釋得清清楚楚