初始向量

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

动机

区块加密在密码学的领域里是最基本的加密运算方式之一。然而它的限制是只能对一个预先定义、固定大小数据进行加密。比如在高级加密标准（AES）里，若使用长度为128位的密钥，加密的过程就是将整个明文切割成多个128位长度的子明文，然后依前后顺序用同一把密钥转换成对应的多个128位长度的子密文，这些子密文依产生的顺序连接起来便是完整的密文。这种作法其实就是把甲数据转换成固定的乙数据，这样的对应关系是绝对的，因此攻击者在收集足够的明文与密文的组合后可以轻易的比对并推导出明文或密钥。
为了要隐藏明文与密文的组合被攻击者收集，并且不重新创建密钥来混淆输入的明文，在1980年由美国国家标准与技术中心提出了四种区块加密模式。第一种称为电子密码书模式（ECB mode），描述了最基本的运作模式（前述较有疑虑的运算方式）。为了要避免ECB模式的问题，文中提出了密码块链接模式（CBC mode）。CBC模式的作法是对第一块明文投入随机的初始向量，然后将明文与向量运算的结果加密，加密的结果再作为下一块明文的向量。这种做法的最终目的是要达到语义上的安全，让攻击者无法从密文中获取能助其破译的相关线索，避免遭受选择明文攻击法。

区块加密

区块加密常被用做身份验证的加密。之后亦有所谓的身份验证加密模式（authenticated encryption modes）。在这种模式中会使用到初始向量。这类应用中一般求出的结果都是固定值，因此使用固定结果的方式（deterministic algorithms）进行验证，所以初始向量亦使用固定值或是全部填零。

流加密

流加密中的初始向量被计入那些被用来加密的密钥的信息（secret state）里，然后每次算出后的密文再滚入下一轮（round）的密文计算之中。由于性能的要求，流加密的设计都希望轮的总数能愈小愈好；但实际的应用上，要定义出总数是十分困难的（not a trivial task）。再著，我们也必须考量其他议题，如：传输过程中损失的信息量、密文的独一性、初始向量的相关性以及造成流加密许多安全议题的相关初始向量攻击法。这类攻击议题对流加密的安全性造成严重的隐忧，并且有许多持续进行的研究。

WEP的初始向量

在无线传输规格802.11的有线等效加密算法中使用24位的初始向量来与同一把密钥做加密运算，这使得密文容易被破译。使用数据包插入的方式可以在数秒内将WEP破解。这个严重的缺限使得此算法不被推荐使用。