圧縮/暗号化アルゴリズムの出力保証

ここでの私の質問は圧縮/暗号化アルゴリズム全般と私にとっては完全なnoobieのように聞こえる。さて、私は "一般的に" "すべてが依存する"ことを理解していますが、すべてが参照実装/公開された仕様を持ち、全体的に標準的なアルゴリズムを使用しているとします。具体的には、AES-256とGZip/Deflateの.NET実装を使用しています

だからここに行く。同じ入力を正確に与えれば、両方のタイプのアルゴリズムは同じ出力を正確に生成することができます。

たとえば、.NET上の aes(gzip( "hello")、key、initVector))の出力は、MacまたはLinuxのものと同じですか?

4
はい、実装(アルゴリズム)がまったく同じの場合です。それが厳密に標準準拠のAES-256なら、それはまったく同じです。
追加された 著者 Violet Giraffe,
@Anton Gogolev:gzipは多くの設定が可能な柔軟なフォーマットですが、それも決定的です。
追加された 著者 Violet Giraffe,
@VioletGiraffe圧縮アルゴリズムは同じですか?
追加された 著者 Anton Gogolev,
@こんにちは、それは私の悪いです。ありがとう!
追加された 著者 Anton Gogolev,
AESの出力は、入力、初期ベクトル、およびキーが同じ場合に限り同じになります。
追加された 著者 James K Polk,
サイドノート:AESや他の方法で暗号化された出力をgzipping(圧縮)することは非常に納得のいくものではありません。暗号化アルゴリズムが良好であれば、「非常にランダム」なものを出力するはずであり、エントロピーが高いため、圧縮は非常に効率が悪くなります。むしろ aes(gzip( "hello")、key、initVector)
追加された 著者 zerm,
圧縮について - 同じ出力を保証できるかどうかはわかりません。同じような可能性のあるシンボルについては、ハフマン符号化に固定順序はないと想像できるでしょうか?しかし、これはgzip/zipの仕様で指定されているかもしれません。だから、出力が同じである可能性は非常に高いと思いますが、標準に準拠した別の出力に何かを圧縮できると仮定します。
追加された 著者 zerm,

2 答え

AESは厳密に定義されているので、同じ入力、同じアルゴリズム、同じキーを与えても、同じ出力が得られます。

ジッパーでも同じとは言えません。

問題は標準ではありません。定義された標準があります:Deflateストリームは IETF RFC 1950 であり、gzipストリームは IETF RFC 1952 に準拠しているので、誰でもこれらの定義から始まる互換性のあるZIPコンプレッサー/デコーダを作成することができます。

しかし、ジップはLZコンプレッサーの大きなファミリーに属しています。建設によって、全単射型でも注入型でもありません。つまり、単一のソースから、同じ入力を記述するための多くの方法がありますが、それらはすべて異なるものの有効です。

例。 私の入力は:ABCABCABC

有効な出力は次のとおりです。

  • 9個のリテラル

  • など

これらの出力はすべて有効で、同じ入力を記述(再生成)します。明らかに、それらのうちの1つは、他よりも効率的です(より多く圧縮します)。しかし、実装が異なる場合があります。いくつかは他よりも強力です。たとえば、 kzip 7zip は、gzipよりも優れた(より圧縮された)zipファイルを生成します。 gzipでも多くの圧縮オプションがあり、同じ入力から異なる圧縮ストリームを生成します。

さて、正確に同じバイナリ出力を得たい場合、 "zip"以上のものが必要です:正確な zip実装と正確な圧縮パラメータを強制する必要があります。次に、常に同じバイナリを生成することを確認します。

6
追加された
華麗な説明!どうもありがとう!しかしもう1つ。 1つの特定のzip実装が常に同じ入力に対して同じ出力を生成することを確認できますか?
追加された 著者 Anton Gogolev,
理論的には、実装が「正しく」コード化されているかどうかは少なくともです。 FPUの丸め誤差、little/bigエンディアン、ランダムinitなどのために、実行されるCPUによって実装が異なる結果を生むことがありますが、これは欠陥とみなされるため、「良い」実装はそのように動作しませんそれ。
追加された 著者 Cyan,
あなたのzip実装が浮動小数点計算を使用する場合、私はそれが深刻な話をする必要があると思います。
追加された 著者 Nick Johnson,

AESは標準に定義されているため、準拠している実装であれば、実際には同じ出力が生成されます。 GZipはプログラムなので、異なるバージョンのプログラムが異なる出力を生成する可能性があります。私は、それより前のバージョンの出力を再展開できるようにするためにはそれ以降のバージョンを期待していますが、その逆は可能ではありません。

他の人が言っているように、圧縮しようとするなら、AESからの暗号文ではなく、平文を圧縮します。 Cyphertextは、ランダムに見えるように設計されているため、適切に圧縮されません。

2
追加された
ありがとう!今、あなたが知っているかもしれない標準に定義された圧縮アルゴリズムがありますか?
追加された 著者 Anton Gogolev,