根据您使用的框架,可以将各种填充模式与AES加密一起使用。例如,使用.NET,我们可以选择PKCS7,ISO10126,ANSIX923,零或无。

我知道加密器和解密器需要使用相同的模式才能互操作。

选择填充模式时有哪些注意事项?除了“无”以外,您选择哪个都无关紧要吗?可以认为某些安全性比其他安全性好吗?

评论

有一种用例(对于ECB / CBC块模式)不需要填充,也就是知道明文长度的情况。例如,如果消息的内容是BER / DER编码的,则在消息本身中指定长度。在这种情况下,取消填充消息可能是有害的,因为填充的类型将来可能会更改。否则,您将需要填充以区分纯文本和末尾添加的字节。

#1 楼

填充无可与流密码和AES-CTR一起使用,以使密文的长度与明文的长度相同。填充零不能始终可靠地除去,因此应避免使用。其他任何一个都可以可靠地删除并且可以使用。

填充无泄漏有关明文长度的信息。除此之外,在填充的选择上没有安全隐患。所有填充都使攻击者可以部分了解最后一块的内容。实际上,这是一种已知的纯文本攻击。如果密码不能抵抗已知的明文攻击,那么问题就出在密码上,而不是填充。

评论


$ \ begingroup $
所有填充方案都会泄漏一些有关纯文本长度的信息(除非所有可能的纯文本都短于一个填充块),没有一个会泄漏更多信息。还应该提防填充oracle攻击;避免它们的最好方法是先加密然后再加密MAC,但在任何情况下,最好不要尝试验证填充的有效性。
$ \ endgroup $
–伊尔马里·卡洛宁(Ilmari Karonen)
2011年12月16日的16:14

$ \ begingroup $
请注意,如果攻击者可以立即使用oracle,则攻击者可以验证填充是否正确时,很可能会使用oracle填充攻击。这取决于用例,但我认为它们比大多数人期望的更为普遍。用例也可能会随时间变化,因此现在不易受攻击并不能保证将来的安全。您还可以在EAX模式下使用AES之类的方案来提供密文的完整性/身份验证。唯一的麻烦是,EAX不能像其他MAC模式那样普遍使用(但只需要一个密钥)。
$ \ endgroup $
–马腾·博德威斯♦
2011-12-17 9:35

$ \ begingroup $
@IlmariKaronen查看此答案:不检查填充并不是真正的选择,因为它会返回长度未知的纯文本字符串,稍后您可能会遇到其他已知的纯文本问题。请参阅有关XML加密的论文/博客。您唯一的选择是添加在线协议的完整性检查。此外,无论您做什么,都有可能泄漏时序信息。
$ \ endgroup $
–马腾·博德威斯♦
2012年1月7日在1:15