Encryption 我们可以为AES使用特定的填充模式来检测错误吗?

Encryption 我们可以为AES使用特定的填充模式来检测错误吗?,encryption,cryptography,aes,error-correction,error-detection,Encryption,Cryptography,Aes,Error Correction,Error Detection,这些天我一直在阅读和做AES的实验。例如,对于128位AES,在加密过程中,如果明文小于128位,则将向其添加所有0的填充。解密后,可以删除这些0 我正在考虑使用填充进行错误检测:如果纯文本总是16位,那么在解密后,文本的形式应该是(某些数据的16位+0的112位)。我们称这种形式为“法律明文”。总共可以有2^16个法律明文 如果攻击者不知道密钥和IV,则通过修改密码,解密的明文可以是任何形式。他/她有(2^16)/(2^128)=2^(-112)的概率使其成为法律明文,这是一个非常小的机会 这

这些天我一直在阅读和做AES的实验。例如,对于128位AES,在加密过程中,如果明文小于128位,则将向其添加所有0的填充。解密后,可以删除这些0

我正在考虑使用填充进行错误检测:如果纯文本总是16位,那么在解密后,文本的形式应该是(某些数据的16位+0的112位)。我们称这种形式为“法律明文”。总共可以有2^16个法律明文

如果攻击者不知道密钥和IV,则通过修改密码,解密的明文可以是任何形式。他/她有(2^16)/(2^128)=2^(-112)的概率使其成为法律明文,这是一个非常小的机会

这听起来合理吗

(当然,攻击者仍然可以通过修改第i个密码来进行位翻转,以获得第(i+1)个明文中想要的结果)

  • 对于可能以0x00字节结尾的二进制数据,用0(0x00)填充也不起作用。通常使用née PKCS#5填充

  • 将填充与加密身份验证相结合会违反CBC模式加密的安全性,请参阅,这通常是个坏主意。将加密、身份验证和填充分开

  • 不考虑秘密,最好的做法是对加密数据加上一个随机值。使用非随机IV是设计缺陷

    许多密码学家已经考虑过填充和加密身份验证,并得出了更好的方法,最好遵循这些方法

    通常,除非您是密码领域专家,否则最好不要尝试提出非标准方法

    :任何人,从最无知的业余爱好者到最好的密码学家,都可以创建一个他自己无法破解的算法。

    有一些精心设计的算法,比如检测错误(或篡改)


    您没有在方案中明确说明模式,但听起来您是在建议CBC。如果是这样的话,它完全没有提供任何保护:攻击者可以翻转前16位密码文本中的任何一位,但仍然有一个有效的纯文本。

    我得到了1。三,。你能详细说明一下吗。?修改密码以使解密的明文合法地进行身份验证检查应该是非常困难的。(我知道它可以通过位翻转来处理下一个明文)这看起来像是键检查值(KCV)的变体。为什么这不值得努力。改为使用经过身份验证的加密。您的意思是通过翻转当前密码的前16位,我们将使下一块纯文本有效吗?从当前密码解密的纯文本应该仍然无效,对吗?@adieux-right,我明白你的意思。您将检测到当前块上的更改并停止。尽管如此,我还是不相信安全性,而且GCM的效率要高得多,所以是什么激发了这个计划?谢谢。我之所以提出这一点,是因为我们的频道非常慢,每3秒发送一条消息。所以我认为只要用这个简单的方法每次检查就足够了。你看到这里有什么潜在的问题吗?@adieux By slow channel,你是说你的传输速度很低吗?如果是这样的话,那么使用7/8的带宽似乎是浪费。但是如果你只是说你的流量很低,那当然没关系。剩下的主要问题是,作为一个非标准方案,我不会对其安全性感到非常有信心。第二个问题是您必须编写更多的自定义代码来支持该方案,而实现缺陷是发现漏洞的地方。实现标准模式(如GCM)的库将有更好的审查和维护。