“真正的盐”与“初始化向量”一样吗?

信息安全 密码学 加密 哈希 随机的
2021-08-23 14:45:11

在关于真盐与假盐的问题中,答案描述了真盐如何“扰乱加密算法”。我大致知道初始化向量是如何工作的;这是同一个概念,还是完全不同的东西?

2个回答

初始化向量以下意义上大部分是相同的:它们是公共数据,应该为每个实例(每个散列密码,每个加密消息)重新生成。盐是指能够多次使用相同的密码而不会打开弱点;或者,如果您愿意,可以防止攻击者共享密码攻击成本,以防可能在多个实例上使用相同的密码——这就是预计算(彩虹)表的全部内容。比如说,使用 CBC 进行对称加密时,IV 的要点是允许使用相同的密钥来加密多个不同的消息。

“初始化向量”这个名称暗示了对给定内部状态的重复过程,IV 是状态被初始化的地方。例如,MD5哈希函数定义为一个压缩函数的重复动作,以当前状态(128位)和下一个消息块(512位)为输入,输出下一个状态值;一开始,状态被初始化为一个约定的值,称为“IV”。从这个意义上说,密码处理中使用的大多数“盐”不是“初始化向量”。但这是对表达的过度解释。

尽管如此,命名事物主要是一个传统问题。“盐”是一种 IV,它:

  • 涉及密码的某些处理;
  • 每个处理实例应该是不同的(它不能是固定的常规值);
  • 只需要唯一性(“它不重复”),而不需要在可能的盐空间中进行统一选择(尽管假设盐足够长,统一随机选择是一种以压倒性概率获得唯一性的好且便宜的方法)。

细节(如何准确插入盐/IV 以及在算法中的哪个点)是一个红鲱鱼。

当在密码的上下文中讨论“盐”时,上面的答案是正确的。但是,术语“盐”也用于随机但非秘密值的其他用途。

对于与随机提取器有关的盐的非常严格的处理,请阅读Cryptographic Extraction and Key Derivation: The HKDF Scheme关于为什么必须使用盐来获得通用随机提取器,有一些理论——尽管这在密码的情况下并不是非常相关。