2011-08-29 43 views
1

我通過一個AES256(CBC)加密連接發送二進制數據,它在加密前被壓縮。我正在使用OpenSSL進行AES密碼處理。AES256網絡流量 - 填充如何影響大小?

問題是,我需要解密「隨機」長度段中的數據。這是否需要填充?如果是這樣,我將如何分辨填充和真實數據之間的區別?密碼是否有一些內置的功能來檢測在解密時刪除填充?網絡流量中是否應該填充?

我試圖避免有人發送248位數據,並沒有及時讀取服務器端,他們看到滯後(這是一個視頻遊戲)。

我搜索了很多並沒有發現任何與此相關的內容;這導致我相信我可能會在所有這些工作如何,或我的問題是獨特的(我懷疑)。

這一切歸結爲:我是否必須擔心填充/取消填充網絡流量,或不?

回答

1

在CBC模式下,您需要將所有消息填充到下一個塊邊界。您還需要發送每條消息的IV。與長消息相比,短消息的開銷顯然更大。

CTR模式將塊密碼變成流密碼。它不需要填充,IV被替換爲Nonce,它可以(但不總是)比IV短。

如果你有很多短信,那麼CTR模式可能會給你值得保存。或者將大量短消息捆綁到一個更大的消息中進行加密。

填充通常有一個非常嚴格的形式,可以自動識別和刪除。

+0

更重要的是,現時可以是隱含的(例如,爲連接協商一次,然後通過某個消息編號爲各個消息推導)。 –

1

您將遇到一個問題,即只能對大小爲塊大小倍數的軟件包進行解密和解密。正如我理解你的問題,你希望有一個「實時」連接,可以是更小或者其他大小的包(不是128bit的倍數)。是否想過使用流密碼?然後你可以加密任意大小的包。您還可以使用AES作爲流密碼,例如計數器模式。

+0

實際上我考慮過幾種流密碼。 http://en.wikipedia.org/wiki/Stream_cipher#Comparison_Of_Stream_Ciphers 我只是不太熟悉他們。我想是時候改變它了。 –

+0

知道流密碼的好庫嗎? OpenSSL的選擇相當有限。 –

+0

安裝在HC-256上,留下了一個例子,因爲我找不到C++的任何地方http://stackoverflow.com/questions/7227908/c-crypto-libraries-supporting-hc-128-256 –