
CorkamiのリバースエンジニアリングスペシャリストであるAnge Albertiniは、AES暗号で処理した後に再び有効なJPEGに変わるJPEG画像を生成できるかどうかを冗談で尋ねられました。 Ange
は課題を受け入れ、研究の結果に基づいて、さまざまな形式でこれがどのように行われるかを説明する
プレゼンテーションを公開しました。
「AESやJPEGを知っている必要はありません。複雑すぎます」とAlbertini氏は書いています。 「レゴブロックで遊ぶだけです。」
AESは、元のテキストの少なくとも1バイトを変更した結果、暗号文を完全に変更するブロック暗号です。 暗号文の内容を制御する方法はないようです。
通常、特定の形式のファイルは署名で始まり(JPGの場合、署名は\ xFFまたは\ xD8です)、その後にいくつかのセクションが続き、その中に必要なセクションがあり、オプションのセクションがあり、その後にファイルエンドマーカーが続きます。 マーカーの後に、任意のコンテンツ(ジャンク)を追加できます。
ブロック暗号には、パラメータIVが適用されるいくつかのモード(CBC、OFB、CFDなど)があり、暗号化プロセスで使用する外部データを選択できます。 このデータはランダムであると想定されていますが、実際には、ソーステキストの先頭のフラグメントAが暗号文のフラグメントBに常に変わるようなデータをスリップできます。 したがって、最初のブロックの内容、つまりファイル形式の署名を制御できます。
復号化機能を使用して、任意のテキストを復号化することもできます。 特定のタイプ(特定の画像)の暗号文が必要な場合は、最初にXキーで暗号化を解除し、次に同じXキーで結果を暗号化して目的のテキストを取得します。 ファイルの終わりマーカーの後にこのデータをジャンクに埋め込みます。
アクションアルゴリズムは次のようになります。

Albertiniは、この方法を使用して、PDFからPDF、JPGからJPG、PNGからPNG、FLVからFLV、およびZIPからPNGを暗号化することができました。 関連するファイルの例とコードは
こちらをご覧ください 。