您不应从密钥生成初始化向量。对于给定的消息,初始化向量应该是不可预测的;如果您从密钥(或用于生成密钥的密码)生成它,IV 将始终相同,这违背了它的目的。
然而,IV 不需要保密。用密文发送它是很常见的,不受保护。将 IV 包含在 URL 中比尝试在某些服务器端状态下尝试跟踪给定链接的 IV 要容易得多。
Salt 和 IV 有不同的应用,但它们的作用方式相似。
加密“盐”用于基于密码的密钥派生算法;存储用于身份验证的散列密码是此功能的特例。Salt 使相同的密码产生不同的哈希值,并阻止“字典攻击”,在这种攻击中,黑客预先计算了常见密码的哈希值,并建立了一个“反向查找”索引,以便他们可以快速发现给定密码的密码哈希。像静脉注射一样,使用的盐也不是秘密。
初始化向量与 DES 和 AES 等分组密码一起以反馈模式(如 CBC)使用。每个块在加密时与下一个块组合。例如,在 CBC 下,前一个块密文在加密之前与当前块的纯文本进行异或运算。IV 是随机生成的,用作引导进程的虚拟初始块。
因为为每条消息选择(或至少应该)不同的 IV,所以当使用相同的密钥加密相同的消息时,生成的密文是不同的。从这个意义上说,静脉注射与盐非常相似。加密随机生成器通常是盐或 IV 最简单和最安全的来源,因此它们也具有相似性。
密码学很容易搞砸。如果您对自己正在做的事情没有信心,您应该考虑您所保护的信息的价值,并相应地进行预算以获得您需要的培训或咨询。