web-dev-qa-db-ja.com

AESとCBCを使用する場合、IVを秘密にする必要がありますか?

ランダムに生成されたキーと初期化ベクトルでデータを暗号化する場合、3つの情報すべてを同じテーブル行に格納します。 IVとキーを暗号化する必要がありますか?

簡略化されたテーブル構造:

  • 暗号化されたデータ
  • キー(2番目の方法を使用して暗号化)
  • IV(暗号化?)

アーキテクチャと方法が必要であると想定してください:その背後にある説明は長くて退屈です。

44
Stu Pegg

Wikipedia から:

初期化ベクトルにはキーとは異なるセキュリティ要件があるため、IVは通常秘密である必要はありません。ただし、ほとんどの場合、初期化ベクトルが同じキーの下で再利用されないことが重要です。 CBCおよびCFBの場合、IVを再利用すると、プレーンテキストの最初のブロックに関する情報、および2つのメッセージで共有される共通のプレフィックスに関する情報がリークします。

IVを秘密にする必要はありませんが、ランダムで一意である必要があります。

51
Polynomial

あなたの場合、IVはDBの平文でokayでなければなりませんが、ユーザーにcontrolIV。

decryptionのIVは、最初のブロックを最終的な平文にXORするために使用されます(そして使用されるだけです)-攻撃者が制御できる場合IVはデータの最初のブロックを任意に制御でき、残りの平文は変更せずに存続します。

enter image description here

攻撃者が最初のブロックの元の平文を知っている場合、攻撃者は試行なしで最初のブロックの任意のデータを選択できるため、問題は再び拡大します。エラー。

これは、暗号化されたデータが信頼できないチャネルを介してIVを介して、おそらくブラウザやアプリなどに送信される場合に特に重要です。

8
George Powell