初期化ベクトル 【IV】 Initialization Vector
同じ暗号鍵で同じ平文を暗号化すると生成される暗号文も同じになるため、通信内容を継続的に盗聴している攻撃者がいる場合、同じ暗号鍵に基づく暗号通信を繰り返すと効率的に暗号鍵を推測できしまう場合がある。
これを防ぐため、毎回異なるランダムな値を生成し、暗号鍵や暗号文の算出過程の一部に取り込むことで、同じ暗号鍵でも暗号文が毎回不規則に変化するようにする手法が用いられる。このランダムな初期値を初期化ベクトルと呼び、通信開始時に決定して送信者と受信者で共有する。初期化ベクトル自体は秘密である必要はない。
初期化ベクトルの長さや用途は暗号方式ごとに異なる。暗号鍵と同じか近い長さの値を用いて暗号鍵の決定のために用いる方式もあれば、一度に暗号化する単位である平文ブロックと同じ長さの初期化ベクトルを用意して、暗号化そのものに利用する方式もある。
CBCにおけるIV
例えば、ブロック暗号の代表的な暗号利用モードの一つであるCBC(Cipher Block Chaining)では、同じ平文が同じ暗号文に変換されるのを防ぐため、一つ手前のブロックの暗号文と現在のブロックの平文のXOR(排他的論理和)を取ってから暗号化を行う。
このとき、先頭のブロックには一つ手前のブロックが存在しないため、何らかのダミーのデータを用意する必要があるが、これを毎回決まった内容にしてしまうと、各ブロックの暗号文が毎回同じになってしまう。これを防ぐため、先頭ブロックとXORを取るデータとして毎回異なる初期化ベクトルを生成して利用する。
(2023.9.24更新)