web-dev-qa-db-ja.com

固有のデータには初期化ベクトル(IV)が必要ですか?

一意のデータの暗号化に使用する場合、初期化ベクトル(IV)はまだ必要ですか?たとえば、クレジットカード番号や社会保障番号などです。

IVの究極のポイントは、2つの同一のPlainTextメッセージのCipherTextが同じにならないようにすることです。 PlainTextが一意である場合、IVが必要ですか?

2
webworm

IVの役割は、暗号化システムに大きく依存します。それがストリーム暗号であるかブロック暗号であるか、そして後者の場合、 操作モード

IVは 初期化ベクトル を意味します。これは、ループプロセスの開始値の総称です。暗号化では、IVという用語を使用して、計算の開始時に使用され、頻繁に変更されますが、秘密ではないパラメーターを指定します(それ以外の場合は、keyと呼びます) 。

一般に、IVの再利用は致命的な罪ですが、IVの再利用によって暗示される苦痛の量はさまざまです。 CBCモードでのブロック暗号の場合、IV再利用は、2つのメッセージが同じブロックのシーケンスで始まるかどうかを即座にリークします。そして、より一般的には、CBCのIV mustはランダムに、均一に、そして予測できないように生成されます。 「ビーストアタック」という名前で)。

CTRまたはOFBモードでブロック暗号を使用する場合、IVの再利用は致命的であり(悪名高い「2倍パッド」となり)、暗号化されたデータを簡単に復元できます。 IVを使用するストリーム暗号にも同じことが当てはまります。 CFBモードでのIVの再利用は、その荒廃において少し包括的ではありませんが、それでもなお悲惨です。

一般的なルールとして:

  • IVは、特定のキーに対して決して再利用されません。
  • 鍵を再利用しない場合(かつその場合に限り)、固定IVを使用して回避できます。各キー値が1つのメッセージに使用される場合は、固定IVを使用できます。ただし、キーは秘密ですがIVは秘密ではないため、各メッセージのIVを変更する方が各メッセージのキーを変更するよりも簡単であると考えられます(たとえば、暗号化されていないファイルヘッダーにIVを含めることでIVを伝達できます)。
  • 暗号化を望ましいものにするほとんどの攻撃モデルは、悪意のある変更も可能にするため、整合性のチェックも必要です。整合性と暗号化を組み合わせるのは、思ったほど簡単ではありません。正しい方法は、両方を実行する暗号化モードを使用することです。これは、実際には [〜#〜] gcm [〜#〜] を意味します。 GCMには、IVに関する独自の要件があります。つまり、IVは決して再利用してはならず、それは重要です
  • クレジットカード番号を処理するものはすべて PCI-DSS の範囲に含まれる可能性が高く、質問した場合、システムがPCI-DSSにまったく準拠していない可能性があります。キーボードから手を離し、ビジネスの選択肢を再考するほうが賢明でしょう。
3
Thomas Pornin

これが初期化ベクトルの唯一のポイントではありません。

IVの目的は、同じキーで暗号化スキームを繰り返し使用しても、キー自体に関する情報が漏洩しないようにすることです。同様に、これはブロック暗号のブロック間で内部的に適用されます。

2
M'vy