web-dev-qa-db-ja.com

暗号化されたファイルが暗号化されていないファイルよりも35%大きいのはなぜですか?

ownCloudドキュメント によると、暗号化を有効にすると、ファイルサイズは暗号化されていないフォームよりも最大35%大きくなる可能性があります。

暗号化についての私の理解から、ファイルサイズは多かれ少なかれ同一でなければなりません(おそらく、最後にいくつかの0ビットが埋め込まれ、キーサイズの倍数になります)。

それは間違っていますか?そうでない場合、なぜですか?

42
warren

ほとんどの場合、暗号化されたファイルはbase64でエンコードされており、33.3%のファイル増加に対応します(base64データの4バイトに3バイトのデータをエンコードします)。読みやすくするために64文字ごとに新しい行を挿入すると(openssl、GPG、PGPのASCII armorによって行われるように))、サイズが65/64増加します。

これら2つの効果を組み合わせると、新しいファイルは(4/3)*(65/64)=オリジナルのサイズの135.4%、またはファイルサイズが35.4%増加します。

この答えはこちら で計算を行いました。

暗号化によってファイルサイズを大幅に変更する必要はないはずですが、あなたは正しいです。ヘッダー、初期化ベクトル/ノンス、完全なブロックにするためのパディング、および整合性をチェックするためのMACがある場合は、データのカップルブロックを追加する可能性がありますが、これらの変更は大きなファイル(たとえば、4つの1 MBのAESエンコードファイルにブロックすると、ファイルは0.006%大きくなります。

ただし、ファイルサイズを増加させないようにするには、暗号化されたデータを任意のバイナリとして保存して渡すことで問題が発生しないようにする必要があります。コンピュータウイルスの拡散を防ぐために、任意のバイナリは電子メールでブロックされることが多く、ヘキサエディタの外部で開くことは困難です。 Base64でエンコードされたファイルは、受け渡しが簡単で、不明なファイルタイプのバイナリファイルよりもポータブルな形式です。

79
dr jimbob

ファイルが圧縮されている場合は、この不一致が発生する可能性があります。

圧縮アルゴリズムは、ランダムでないデータに対して最適に機能します。暗号化は、情報からランダム性を生成することを目的としています。情報にはパターンがあるため、一般に圧縮は簡単です。ただし、暗号化すると、通常はパターン(および情報)がすべて消去されます。

例:2.75GBのメールアーカイブファイルは、簡単に<.5GBに圧縮できます。ただし、これらの電子メールアーカイブが暗号化されている場合、圧縮バージョンは2.75GBにかなり近くなります。

7
d1str0

通常、%マークは、ファイルが暗号化後にBase64でエンコードされている可能性があり、破損を防ぐために各ブロックでチェックサムを取得する可能性があることを示しています。 Base64は、8ビットの文字を6ビットの文字にエンコードします。つまり、ファイル全体をレンダリングするために必要な文字が増えるため、問題のファイルは約30%大きくなります。ブロックごとのチェックサムを追加すると、最大35%になります。

通常、暗号化自体がオーバーヘッドを追加します。通常、オーバーヘッドはヘッダー+フッター、最終的な暗号化キー、パラメーター、ソルト、チェックサム、および1ブロックサイズから1を引いたものです。これは、暗号化データがブロックサイズで均等に分割できない場合、最大ブロックまで埋め込む必要があるためです。サイズ-1。

ただし、前の文のすべてのデータは、サイズが1 GBまたは100 GBであっても、サイズに関係なく、すべてのファイルに静的な量のデータを追加します。

%で表されるデータの拡大は、base64などの再エンコードプロセスを示しています。

3