初始向量
维基百科,自由的 encyclopedia
在密码学的领域里,初始向量(英语:initialization vector,缩写为IV),或译初向量,又称初始变量(starting variable,缩写为SV)[1],是一个固定长度的输入值。一般的使用上会要求它是随机数或伪随机数(pseudorandom)。使用随机数产生的初始向量才能达到语义安全(消息验证码也可能用到初始向量),并让攻击者难以对原文一致且使用同一把密钥生成的密文进行破解。在区块加密中,使用了初始向量的加密模式被称为区块加密模式。
有些密码运算只要求初始向量不要重复,并只要求它用是内部求出的随机数值(这类随机数实际上不够乱)。在这类应用下,初始向量通常被称为nonce(临时使用的数值),是可控制的(stateful)而不是随机数。这种作法是因为初始向量不会被寄送到密文的接收方,而是收发两方透过事前约定的机制自行计算出对应的初始向量(不过,实现上还是经常会把nonce送过去以便检查消息的遗漏)。计数器模式中使用序列的方式来作为初始向量,它就是一种可控制之初始向量的加密模式。
初始向量的长度依密码运算的所需决定。在区块加密中,初始向量的长度通常就等于一个区块的大小。值得一提的是,对加密而言,一组难以预期并且与密钥等长的初始向量能够避免遭受TMD破译法(简单的说,是花时间(Time)观察被攻击者的密文,并将可能的密文预先算出来放在存储器(Memory)中与之比对,然后推导出被攻击者的明文或密钥资料(Data);这种破译法比起用每一把密钥试误还来得快;不过只要密文的产生中伴随机的因子就可以避免此类攻击)[2][3][4][5]。使用随机数作为初始向量时,还必须考量碰撞的问题以避免生日攻击法(简单来说,就是一群人中两个人生日相同的几率要高于50%只需要23个人,这意味着成功猜出这些人生日的次数可以被降的很低;同样的状况也发生在密码学中,会影响密文的强度)。对于传统、不支持初始向量的资料流加密法,实现上是将原密钥与初始向量先运算后,计算出新的密钥。然而有些实现已被认为不安全;比如有线等效加密(WEP)协议就遭受到关连式钥匙攻击(英语:related-IV attack)。