2010-01-01 18 views
1

如果我剛剛用CBC和Rijndael將一些純文本加密爲密文,告訴世界原始純文本的長度是x字節是不安全的嗎?它看起來總是和密文的長度一樣,所以我認爲它並不重要,但是它有什麼重要的塊模式或密碼?揭示明文的長度?

+0

附加詳細信息如下:我將純文本的長度存儲在數據庫中,以便稍後可以刪除由CBC引起的空字節。 – Tower 2010-01-01 13:49:51

回答

5

您應該使用PKCS5填充方案。該方案總是附加額外的信息,包括已添加的額外字節數。在解密之後,檢查最後的塊以查看應拋棄多少個字節。

有關原始郵件長度的信息很難壓制。即使使用填充來阻塞大小,也可以推斷出原始消息的長度爲n,n-1,n-2,...或n-blocksize + 1個字節。大多數加密協議很少或沒有努力隱藏明文長度。

0

輸出的長度並不總是相同的。但是,如果純文本的長度都差不多,密文的長度可以是相同的,由於填充(Rijndael算法/ AES是一種分組密碼) http://en.wikipedia.org/wiki/Padding_(cryptography)

而且它如果你告訴削弱你的安全世界是明文的長度,所以除非有很好的理由,否則我會反對。

而且看看CBC是如何工作的:

http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29

+0

我需要這個長度,以便稍後可以去掉由CBC引起的空字節。所以,長度以純文本形式存儲在數據庫中。 – Tower 2010-01-01 13:47:33

0

Rijndael算法是塊密碼,所以純文本將被填充到一個完整的塊。 (這可能會被加密層隱藏)。

所以加密的消息文本長度將指示明文的長度。

如果您通過消息長度泄漏信息,那麼您將不得不做自己的填充。事實上,發送消息可能會泄漏信息,因此當您沒有任何要發送的內容時,您需要發送無操作消息。

0

明文通常與密文的長度不同。純文本在加密之前填充。如果您發送「是」或「否」兩種不同的信息中的一種,那麼發送原始長度可能不是一個好主意。如果你的所有消息長度相同,那麼發佈這個長度是可以的。