1. ホーム
  2. encryption

[解決済み] AES暗号化 - 鍵とIVの比較

2022-03-06 01:24:06

質問

私が開発しているアプリケーションでは、ユーザーがファイルを暗号化することができます。ファイルはどんな形式でも構いません(スプレッドシート、ドキュメント、プレゼンテーションなど)。

指定された入力ファイルに対して、暗号化されたデータファイルと鍵ファイルの2つの出力ファイルを作成するんだ。元のデータを得るには、この2つのファイルが必要です。鍵ファイルは、対応するデータファイルに対してのみ動作する必要があります。同じユーザーのものでも、他のユーザーのものでも、他のファイルでは動作しないはずです。

AESアルゴリズムでは、暗号化のために鍵と初期化ベクトル(IV)の2種類のパラメータが必要です。

鍵ファイルの作成には、3つの選択肢がありますね。

  1. アプリケーション内にハードコードされたIVを埋め込み、キーをキーファイルに保存する。
  2. アプリケーション内にハードコードされたキーを埋め込み、そのIVをキーファイルに保存する。
  3. キーとIVの両方をキーファイルに保存する。

同じアプリケーションを異なるお客様が使用されていることにご注意ください。

この3つの選択肢は、どれも同じ最終目標を達成するように見えます。しかし、正しいアプローチはどうあるべきか、皆さんのご意見を伺いたいと思います。

どのように解決するのか?

他の回答にもあるように、暗号化されたファイルごとにユニークなIVを持つことが重要ですが、それはなぜでしょうか。

まず - なぜ暗号化されたファイルごとに一意のIVが重要なのかをおさらいしておきましょう。( IVに関するウィキペディア ). IVは、暗号化処理の開始時にランダム性を付加します。連鎖したブロック暗号化モード(あるブロックの暗号化データが、その前のブロックの暗号化データを取り込む)を使用する場合、最初のブロックに関する問題が残りますが、ここでIVの出番です。

IVがなく、鍵だけで連鎖式ブロック暗号化を行った場合、同じテキストで始まる2つのファイルは、同じ最初のブロックを生成します。入力ファイルが途中で変更された場合、2つの暗号化されたファイルは、その時点から暗号化されたファイルの終わりまで、異なる外観を持つようになります。もし誰かが冒頭の類似性に気づき、一方のファイルが何から始まっているかを知れば、もう一方のファイルが何から始まっているかを推論することができます。平文ファイルが何で始まり、それに対応する暗号文が何であるかを知ることで、その人は鍵を特定し、ファイル全体を復号化することができるかもしれません。

もし各ファイルがランダムなIVを使用した場合、最初のブロックは異なるものになります。上記のシナリオは阻止されました。

では、IVが各ファイルで同じだったらどうでしょう?ここでまた、問題のシナリオが発生します。各ファイルの最初のブロックは、同じ結果になるように暗号化されます。実質的に、これはIVを全く使用しないのと変わりません。

では、次に提案されたオプションについて説明します。

選択肢1.アプリケーション内にハードコードされたIVを埋め込み、そのキーをキーファイルに保存する。

オプション2. アプリケーション内にハードコードされたキーを埋め込み、キーファイルにIVを保存する。

これらのオプションはほとんど同じです。同じテキストで始まる2つのファイルが、同じ暗号文から始まる暗号化されたファイルを生成した場合、あなたは台無しにされます。これは、これらのオプションの両方で発生します。 (すべてのファイルを暗号化するために使用されるマスターキーが1つであると仮定して)。

<ブロッククオート

オプション 3. キーとIVの両方をキーファイルに保存する。

を使用する場合 ランダム 各鍵ファイルにIVがあれば大丈夫です。2つの鍵ファイルが同じであることはなく、各暗号化されたファイルはその鍵ファイルを持っていなければなりません。異なるキーファイルでは動作しません。

追記:オプション3とランダムIVを採用した場合、復号が成功したかどうかを判断する方法を検討し始めます。あるファイルから鍵ファイルを取り出し、それを使って別の暗号化ファイルを復号化してみてください。復号化が進み、ゴミのような結果が出ることに気づくかもしれません。このような場合は、次のことを調べてみてください。 認証された暗号化 .