初始向量

在密碼學的領域裏 ， 初始向量 ( 縮寫爲IV ） ， 或譯初向量 ， 又稱初始變數 ( 縮寫爲SV ） ， 是一個固定長度的輸入值 。 一般的使用上會要求它是亂數或僞亂數 （ pseudorandom ） 。 使用亂數產生的初始向量才能達到語義安全 （ 訊息驗證碼也可能用到初始向量 ） ， 並讓攻擊者難以對原文一致且使用同一把金鑰生成的密文進行破解 。 在區塊加密中 ， 使用了初始向量的加密模式被稱爲區塊加密模式 。 有些密碼運算只要求初始向量不要重複 ， 並只要求它用是內部求出的亂數值 （ 這類亂數實際上不夠亂 ） 。 在這類應用下 ， 初始向量通常被稱爲nonce （ 臨時使用的數值 ） ， 是可控制的 （ stateful ） 而不是亂數 。 這種作法是因爲初始向量不會被寄送到密文的接收方 ， 而是收發兩方透過事前約定的機制自行計算出對應的初始向量 （ 不過 ， 實作上還是經常會把nonce送過去以便檢查訊息的遺漏 ） 。 計數器模式中使用序列的方式來作爲初始向量 ， 它就是一種可控制之初始向量的加密模式 。 初始向量的長度依密碼運算的所需決定 。 在區塊加密中 ， 初始向量的長度通常就等於一個區塊的大小 。 值得一提的是 ， 對加密而言 ， 一組難以預期並且與金鑰等長的初始向量能夠避免遭受TMD破譯法 （ 簡單的說 ， 是花時間 （ Time ） 觀察被攻擊者的密文 ， 並將可能的密文預先算出來放在記憶體 （ Memory ） 中與之比對 ， 然後推導出被攻擊者的明文或金鑰資料 （ Data ） ； 這種破譯法比起用每一把金鑰試誤還來得快 ； 不過只要密文的產生中伴隨機的因子就可以避免此類攻擊 ） 。 使用亂數作爲初始向量時 ， 還必須考量碰撞的問題以避免生日攻擊法 （ 簡單來說 ， 就是一群人中兩個人生日相同的機率要高於50 % 只需要23個人 ， 這意味著成功猜出這些人生日的次數可以被降的很低 ； 同樣的狀況也發生在密碼學中 ， 會影響密文的強度 ） 。 對於傳統 、 不支援初始向量的資料流加密法 ， 實作上是將原金鑰與初始向量先運算後 ， 計算出新的金鑰 。 然而有些實作已被認爲不安全 ； 比如有線等效加密 （ WEP ） 協議就遭受到 。