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