在AES中,我的理解是 salt 是使密码更安全的东西,它不会被添加到加密文本中。但 IV 是用于加密第一个消息块的内容,并将被添加到加密文本中。
我有什么不对吗?
答案 0 :(得分:33)
AES本身并不直接使用盐(或实际上是IV)。
当您使用salt与AES结合使用时,您使用基于密码的加密(PBE)。在该方案中,使用人类可存储的密码与盐组合以生成AES密钥。使用salt,因此相同的密码并不总是生成相同的密钥;但是,由于收件人必须能够生成正确的密钥,因此必须将盐与加密数据一起传输。
如果您在某些分组密码模式(如CBC)中使用AES,则需要IV。在这种情况下,它用于确保相同密钥下的相同明文数据不总是加密到相同的密文。同样,收件人要求IV正确解密数据,因此必须与加密数据一起传输。
因此,如果您在CBC模式下使用带有AES的PBE作为底层密码,您可能需要同时发送PBE盐和CBC IV以及加密数据。
答案 1 :(得分:10)
我不太关注你的意思,但这是一个概述。
Salts用于加密散列,以消除使用rainbow table开裂方法成功的可能性。 (彩虹表是密码哈希的反向查找表)
IV用于加密较大的文件,以避免类似的部分加密到同一件事。
它们非常相似,但这里有不同之处。
通常在加密之前或之后添加盐(据我所知)。这意味着加密也是在盐上执行的。
IVs始终与加密结果进行异或。之后完成的原因是因为只有第一个块使用IV,其余的使用前一个块进行此异或。
区别很重要,因为与加密形式的密码进行异或的盐很容易被破坏,而IV则被设计为停止模式识别风格攻击而不是密码文件的字典攻击。
答案 2 :(得分:2)
没有。 IV防止其他相同的消息出现相同的消息。这会泄漏信息,特别是您不止一次传输相同的消息。
答案 3 :(得分:0)
要添加到@Guvante答案中,IV专门用于CBC模式(密码块链接模式) 与EBC模式(如果两个用相同密钥加密的相同块产生相同密码)相比,它可以提高安全性。
称呼更像是一个散列术语,用于抵抗彩虹攻击,它不会使黑客无法进行,但会使发现相同密码之间的模式不可行,因此,相同的明文密码不会产生相同的散列。 它们非常相似,但重要的是要了解每个模块的用法和实现。