2016-04-21 113 views
1

我一直使用AES-CBC進行加密,每次加密純文本時都使用隨機IV。據我所知,這是推薦的方法。爲什麼隨機IV適合AES-CBC但不適用於AES-GCM

我一直在尋找到AES-GCM/AES-CTR,主要用於AEAD。我還沒有實現任何東西,但是從我讀過的所有東西中,基本上nonce只是一個簡短的IV,並且每個加密調用都有一個內部計數器。開發人員/需要確保在32位計數器循環返回之前的隨機數發生變化,否則相同的隨機數(IV)可能會與相同的密鑰一起使用,從而可能加密相同的純文本並泄漏加密密鑰。

我真的不明白的是爲什麼能夠AES-CBC是罰款與隨機IV,但一些什麼我已閱讀指示AES-GCM一個隨機數(IV)是一個壞主意。我能想到的唯一情況是AES-CBC的IV比AES-GCM的nonce更長,因此AES-GCM可能出現重複隨機數的可能性更大。

我需要加密從幾個字節到10 - 20 GB的任何地方的數據。我知道AES-GCM對於在計數器週期之前可以加密的數據大小(〜60GB)有限制。由於我的數據低於此限制,因此我可以解決此限制。

能有人能夠解釋爲什麼一個隨機數不建議AES-GCM一些輕?

+0

我對此有疑問。使用AES-CBC,我使用長期密鑰並生成隨機IV並將加密數據保存到IV,並將數據保存到磁盤,並且一切正常。在這個實施中,我不關心AEAD。使用AES-GCM/CTR,我仍然想使用長時間密鑰。我的計劃是設置加密,使用隨機數/密鑰加密數據,並使用加密數據保存隨機數。爲了解密,我將設置隨機數並解密數據。使用AES-GCM/CTR可以簡單安全地保存隨機數? – garys

+0

對於AES-CTR/GCM,我期望對於密碼的每次設置,內部計數器都設置爲0,所以如果我正在爲長期存儲加密數據,是不是有一個感知的使用順序NONCE與數據?如果我在相同的密碼會話中使用相同的NONCE加密PlainText1,PlainText2,PlainText3,是否需要按相同的順序解密這些內容? – garys

+0

我投票結束這個題目作爲題外話,因爲它屬於crypto.stackexchange.com –

回答

3

GCM是計數器模式(CTR)的變體。正如你所說,使用Counter Mode的任何變體,必需的 Nonce不用相同的密鑰重複。因此,CTR模式Nonces通常包括一個計數器或一個計時器元素:保證不會在密鑰的生命週期內重複。

如果隨機值是完全隨機的,然後有一個小的機會,它會重複。這個問題很容易避免,因此建議不要使用隨機數。

在CBC模式下,IV會清除第一個塊的內容。如果第一個塊沒有改變(或者使用了固定的IV),那麼第一個塊(僅)的加密實際上處於ECB模式,這是不安全的。 CBC模式的隨機IV避免了這個問題。

因此,在處理的區別:CTR(等GCM其從它派生模式)需要一個保證唯一隨機數。像CBC這樣的模式需要隨機IV。

+0

感謝您的信息。有道理, – garys

4

GCM基於CTR模式,並且如果隨機數與相同的密鑰(very nice example)重複使用,則會繼承多次填充(或兩次填充)問題。如果IV在CBC模式中被重用,那麼觀察者可以檢測到的唯一事情就是消息前綴的相等性。

觀察者可以檢測到先前發送的消息是以CBC模式再次發送的,這可能不會給他們太多,但是CTR可以讓他們能夠推斷消息的內容,如果關於消息的結構的一些信息內容是已知的。

AES-GCM模式的隨機數預計爲96位長。如果你隨機產生的隨機數,則預計後2 n/2個 = 2 48條消息(參見生日問題),以產生一個重複的隨機數。也就是說,如果使用相同的密鑰生成加密消息,則生成重複隨機數的概率爲50%。這是相當多的消息,但它可能發生得更早。

+0

我認爲2^n/2問題將成爲問題的一部分。這個例子有助於解釋它。 – garys

1

你從哪裏讀到你不能使用隨機nonce/IV來進行GCM?

使用默認的隨機數(12個字節或96位),由於生日問題,碰撞的可能性不大。好的,所以密文的數量是有限的,但這並不意味着在這之前你仍然可以生成2^30(十億)條消息,這可能會帶來任何確定性。

另請閱讀NIST specification的第8.2節和第8.3節,該章已經很清楚地說明了主題(確定性IV值和隨機生成的值都指定了2^32)。

+0

以及GCM是與證明額外的計數器,而CBC受到IV的可預測性傷害,對於CTR這件事情沒有理由被稱爲「隨機數」。在這裏,重複只要我讀完全破壞密碼,特別是如果涉及已知/選擇的明文,這將允許您獲得加密的nonce +計數器,從而允許您僅用具有相同密鑰+ IV的密碼對其進行異或得到你以前不知道的其他明文。 – My1

+0

@ My1是的,但GCM **預處理** 12字節IV **,在將其作爲底層CTR模式的計數器值之前,它實際上是一個隨機數**。因此,您可以生成一個96位/ 12字節的隨機IV /隨機數,並且在2^32代後有大約2 ^( - 64)的碰撞機會。使用CTR模式時,情況會更復雜,因爲用戶必須將(隨機)隨機數拆分爲IV本身--GCM將爲您做到這一點。 –

相關問題