ソフトウェア製品に AES 暗号化を追加したいが、データのサイズが大きくなることが懸念されます。データのサイズが大きくなると推測しているので、それを補うために圧縮アルゴリズムを追加する必要があります。
7 に答える
AES はデータを展開しません。さらに、出力は一般に圧縮できません。データを圧縮する場合は、暗号化する前に圧縮してください。
ただし、AES 暗号化は通常paddingと組み合わされていることに注意してください。これにより、データのサイズが増加します (数バイトだけですが)。
AES は、最後のブロックの末尾にある数バイトのパディングを除いて、データを拡張しません。
いずれにせよ、結果のデータは基本的にランダムであるため、圧縮できません。辞書ベースのアルゴリズムで効果的に圧縮することはできません。ベスト プラクティスは、最初にデータを圧縮してから暗号化することです。
暗号化する前にデータを圧縮するのが一般的です。AES暗号化されたデータはランダムに見えるため、後で圧縮しても機能しません(ヘッダーなどを除いて、適切な暗号と同様)。
ただし、圧縮はコンテキストによってはサイドチャネル攻撃を引き起こす可能性があるため、独自の使用法を分析する必要があります。このような攻撃は、暗号化された VOIP に対して最近報告されています。要点は、VBR で圧縮すると、音節によってビットレートに特徴的な変化が生じるということです。したがって、データは生成された速度で送信されるため、一部の (またはすべての) 音節は、十分な分析によって回復可能である可能性があります。解決策は、CBR 圧縮を使用する (効率が低い) か、バッファーを使用して、エンコーダーから出力されるデータ レートに関係なく一定のレートで送信することです (レイテンシーが増加します)。
AES は、16 バイトの入力ブロックを 16 バイトの出力ブロックに変換します。唯一の拡張は、データをブロックの整数に切り上げることです。
AES 暗号化は、暗号化されるデータに何も追加しないと確信しています。これは、状態変数に関する情報を提供するためであり、暗号化に関しては悪いことです。
圧縮と暗号化を混在させたい場合は、その順序で行ってください。その理由は、暗号化されたデータが (理想的には) 完全にランダムなデータのように見え、実際にデータを圧縮することができないことと、圧縮されたファイル形式に伴う簿記のオーバーヘッドのために、圧縮アルゴリズムがデータを大きくしてしまうことです。
@freespace など: 暗号化のクラスで覚えていることの 1 つは、暗号化する前にデータを圧縮してはならないということです。これは、圧縮されたストリームの繰り返し可能なチャンク (セクション ヘッダーなど) によって、暗号化を解読しやすくなる可能性があるためです。
圧縮が必要な場合は、暗号化する前に圧縮してください。
いいえ。唯一の変更点は、データをブロックのサイズに合わせるための少量のパディングです。
ただし、コンテンツを圧縮する場合は、暗号化する前にこれを行う必要があることに注意してください。暗号化されたデータは、通常、ランダム データと区別できない必要があります。つまり、圧縮されません。