我今天在想这个,想问一下。我想我足够理解IV可以说在谈论哈希时它们与Salts基本相同。它们在那里是为了改善消息之间的随机性。如果IV是简单追加或纯文本的开头,为什么AES需要知道IV才能对其解密?它不能解密,丢弃前x个字节然后具有原始明文,还是AES对流中的前一个字节进行特殊的jizz-jazz?

评论

通过阅读相关的Wikipedia文章,几乎可以轻松解决这个问题。请注意,在不使用IV的情况下尝试解密在逻辑上等同于尝试在不访问salt的情况下将密码与盐腌哈希进行比较。

我从来不完全了解CBC在做什么。是将未加密的前一个块作为下一个IV,还是将加密的前一个块作为下一个IV?

实际上,维基百科的文章证实了我所说的话。如果IV的长度相同,并且在明文的前面或后面加上了IV,那么在解密之后,您可以简单地从末尾或从开头剥离这些字节。解密器需要IV的唯一原因(从该文章的外观来看)是知道要剥离哪些字节!

看图像。在加密和解密期间,前一个密文块始终用作下一个块的“ IV”。如果不存在初始化矢量,则初始化矢量将作为第一个“上一个块”。

IV不以纯文本开头。它与纯文本块进行异或,因为该部分的第二句话清楚地指出了这一点。现在,当解密第一个密文块时,您将收到一条针对IV进行XOR的消息。如果IV未知,请找回原始消息,祝您好运。

#1 楼

如Wikipedia文章中有关块密码模式的文章所述,在CBC模式下加密之前,将初始化向量与第一个明文块进行异或。解密第一个块后,您仍然拥有一个已与明文进行XOR的中间值-如果没有此值,恢复恢复明文的希望就很小。但是,您不需要IV即可解密后续块。

您可以通过执行CBC的方式消除对初始化矢量的了解(注意:不建议也不鼓励这样做,只是指向新颖性)。如果您使用空IV并为第一段明文使用随机值,则可以丢弃该值,而仅传输密文。请注意,这实际上不会给您带来任何好处,因为现在密文要长一个整块!

评论


$ \ begingroup $
如果一致地对第一段纯文本使用空IV和随机值,则唯一的问题是,您将获得一个额外的不必要的块密码运算。最终结果与使用随机块作为第一个密文块没有区别。
$ \ endgroup $
–亨里克·赫尔斯特伦
13年4月8日在7:11

$ \ begingroup $
实际上,第一个为null的随机块(即第一个随机块)的XOR成为IV。
$ \ endgroup $
–阿伦
2015年8月12日,凌晨3:01

$ \ begingroup $
密文长1块,但传输的消息长度相同(假设您在消息上附加/添加了IV,以便收件人可以对其进行解密)。在这种模式(垃圾第一块)中,IV在解密期间变得无关紧要,但仍确保使用相同的密钥对相同的明文进行加密将导致不同的密文。
$ \ endgroup $
–街道
20年7月23日在8:06

#2 楼

我同意。出于我的目的,我一直在明文前添加一个随机数据块,以便接收方解密时,他们只是丢弃
第一个块,因为只有这样才能确保密文始终保持不变
/>如果明文有效负载相同(不计算第一个随机块)。
这似乎可以实现
从头开始的初始化矢量,而无需发送带有
密文的初始化矢量。 IE浏览器可以忽略。

建议初始化向量是随机的,并且只能使用一次,这意味着它将需要如何发送给接收器,这似乎与生成随机的第一个明文块并将其丢弃的建议相同解密后。

评论


$ \ begingroup $
您正在发送带有密文的IV-您只是将密文的长度增加了IV的大小,并在此过程中进行了额外的分组密文操作。
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
17年11月15日在21:05