初期化ベクトル(IV) - 暗号化全般

暗号化全般 | IT用語集

初期化ベクトル(IV)とは

初期化ベクトル(Initialization Vector, IV)は、ブロック暗号の暗号モードで使用されるランダムまたは疑似ランダムな値です。同じ鍵と平文の組み合わせでも、異なるIVを使用することで異なる暗号文が生成されます。

IV vs Nonce

  • IV:CBCモードなどで使用。ランダム性が重要
  • Nonce:CTR/GCMモードで使用。一意性が重要(Number used ONCE)

暗号モード別の要件

モードサイズ要件
AES-CBC128ビットランダム、予測不可能
AES-GCM96ビット推奨一意(再利用禁止)
ChaCha2096ビット一意(再利用禁止)

実装例

import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes

key = os.urandom(32)  # AES-256

# CBC:ランダムIV
iv = os.urandom(16)  # 128ビット
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))

# GCM:ナンス(一意であればOK)
nonce = os.urandom(12)  # 96ビット推奨
cipher = Cipher(algorithms.AES(key), modes.GCM(nonce))

トラブル事例

⚠️ IV/Nonceの再利用

問題:GCMでナンスを再利用すると、認証鍵が漏洩

対策:毎回新しいナンスを生成。カウンターやUUIDを使用可能。

関連用語

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

暗号実装のご相談