2011-10-05 43 views
1

我正在創建一個協議,它試圖爲以後「存儲」對稱密鑰會話。我存儲了三件事:session_id(public),symmetric_key(private)和counter/nonce(private)。每傳輸一次,session_id都會以明文傳輸,並用於查找symmetric_key。對稱密鑰用於解密數據。數據包含一個散列(sha256),用於驗證消息內容。然後,我從內容中提取nonce,並檢查它是否與存儲的nonce匹配。如果它是我增加存儲的隨機數1。否則,數據包是假的,我把它扔掉。目前,我使用nonce作爲symmetric_key的IV。這是一個錯誤嗎?我必須使用完全隨機的IV嗎?最後,如果我確實使用隨機IV,那麼我如何傳輸多次?我需要重新談判一個新的密鑰嗎?我正在使用mcrypt庫來執行此操作。如果我在協議中使用隨機數,IV是否仍然需要是隨機的?

爲了清楚起見,客戶端發送:[隨機數+數據+散列(數據+隨機數)]加密+ session_key可以

謝謝!

+0

只是爲了澄清,你發送回服務器,會話ID,加密數據,以及未加密的內容的哈希值,其中包括現時? –

+0

再次更新,你是對的,散列需要包含nonce。 – chacham15

+0

你如何執行與客戶端的初始密鑰交換?理想情況下,我會建議通過SSL來完成,以避免任何意外問題。 –

回答

1

我會限制我的答案使用隨機四。 我假設你正在使用需要IV的密碼塊鏈接(CBC)模式。

請注意,IV沒有加密(因爲接收方需要用於解密第一個數據塊),所以如果您使用nonce作爲IV,而不是說[nonce + data + hash(data +隨機數]]加密更確切地說,隨機數[數據+散列(數據+隨機數)]加密,其中+表示串聯。

RFC 2451「ESP CBC模式密碼算法」說「IV必須隨機選擇使用隨機產生的IV防止從具有相同數據的數據包生成相同的密文,該數據包跨越第一個塊密碼算法的塊大小「。

除了是隨機的,IV也應該是不可預測的。先前使用前一個消息的最後一個密文塊作爲IV的做法---雖然隨機是可預測的---是有缺陷的。然而,這個缺陷只有在對手能夠裝入選擇的純文本攻擊時纔會引起您的關注。也就是說,如果攻擊者可以發送選擇的純文本進行加密並能夠看到結果。顯然,一個隨機數是獨一無二的,是可以預測的。

最好使用隨機IV。您可以播種PRNG並生成IV,並在序列重複之前保守地重新播種。重播時,使用密鑰交換並更改對稱密鑰也是一個好主意。這將確保對於給定的鍵你永遠不會使用相同的IV兩次。

有關選擇純文本攻擊的詳細信息,請參閱Why is using a Non-Random IV with CBC Mode a vulnerability?

+0

但問題是,是不同的1不同?意思是2個相同的明文會翻譯成2個不同的密文?最後,nonce在加密中的原因是雙重的:1.防止重放攻擊,2.攻擊者不能預測nonce,因此iv。最後,我發現了維基百科有關iv的文章中的這句話:「一些密碼學基元要求IV僅僅是不重複的,並且所需的隨機性是內部派生的。在這種情況下,IV通常被稱爲隨機數 – chacham15

0

是的,IV需要仍然是隨機的。否則,系統不安全。這是BEAST攻擊openssl的錯誤。您不會多次發送IV,您會爲每條發送的消息使用一個新的。每次你加密一個新的消息時,選擇一個新的IV併發送[IV,ENCRYPT(k,IV,m)]更重要的是,你的整個協議真的很腥。您使用的散列並不實際保證某人沒有篡改您的數據,因爲他們可以輕鬆地計算散列(數據|隨機數)。如果您嘗試確保不會發生這種情況,請使用帶有不同私鑰的HMAC。

我真正的建議是,不要寫自己的協議。這些東西真的很難做到。 SSL由很多非常聰明的人組成,即使這樣人們仍然發現它的缺陷。值得慶幸的是,這些缺陷並不多,而且他們得到修復。任何人都不會寫任何東西。

如果你告訴我你實際上正在嘗試使用它,我可以指出一些現有的協議可能已經做到了。這會節省你寫它的時間,而且實際上是安全的。

+0

nonce被加密,意味着它們不能計算散列(數據+隨機數)。 – chacham15

+0

即使它不是,數據也是加密的,所以他們不能得到原來的。此外,散列也被加密。因此,即使他們可以重新計算散列,他們也不能加密它。 – chacham15

+0

僅僅因爲nonce被加密,並不意味着他們不能計算散列(newdata + nonce)。你假設他們不能使用現有的散列來做到這一點。其實你可以。它爲什麼存在HMAC。 假設你有散列(nonce +數據)。事實證明,具有函數的sha家族的構造方式,你可以將數據追加到散列並仍然有效。所以我可以生成只有知道mydata的值的(nonce + data + mydata)的散列,參見http://en.wikipedia.org/wiki/Merkle%E2%80%93Damg%C3%A5rd_construction – imichaelmiers

相關問題