如果我刚刚用CBC和Rijndael将一些纯文本加密成密文,那么告诉全世界原始纯文本的长度是x字节是不安全的吗?它似乎总是与密文的长度相同,所以,我认为没关系,但是它有一些块模式或密码吗?它有什么关系?
答案 0 :(得分:5)
您应该使用PKCS5填充方案。此方案始终填充额外信息,包括已添加的额外字节数。在解密时,检查最后一个块以查看应丢弃多少字节。
很难抑制有关原始邮件长度的信息。即使使用填充到块大小,也可以推断出原始消息的长度为n,n-1,n-2,...或n-blocksize + 1个字节。大多数加密协议很少或根本没有努力隐藏明文长度。
答案 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
答案 2 :(得分:0)
Rijndael是一个分组密码,因此纯文本将填充到一个完整的块。 (这可能会被您的加密层隐藏)。
因此加密的消息文本长度将表示纯文本长度。
如果您按消息长度泄漏信息,则必须自己填充。实际上,发送消息可能会泄漏信息,因此当您没有任何要发送的内容时,您需要发送无操作消息。
答案 3 :(得分:0)
纯文本的长度通常与密文不同。纯文本在加密前填充。如果您发送两个不同消息中的一个“是”或“否”,则发送原始长度可能不是一个好主意。如果您的所有消息长度相同,则可以发布该长度。