2010-01-01 31 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

明文通常与密文的长度不同。纯文本在加密之前填充。如果您发送“是”或“否”两种不同的信息中的一种,那么发送原始长度可能不是一个好主意。如果你的所有消息长度相同,那么发布这个长度是可以的。