web-dev-qa-db-ja.com

AES-128-CBCを復号化すると、最初のブロックが正しくなり、残りは破損します

私は現在、ファイルをAES-128-CBCで暗号化するソフトウェアを調査しています。

逆アセンブリから、使用されたアルゴリズムが正しいことが本当にわかっています(ログメッセージとBCryptライブラリの呼び出し)。

キーとIVは静的であり、実行可能ファイル内に96バイトのblobとして保存されます。これは、XORのセットを使用して16バイトの2つのblobに分割されます。1つはキー用、もう1つはキー用です。 IVのために。

同じアルゴリズムを再現して、キーとIVの両方を取得できました。

ただし、取得したデータを使用して tiny-aes またはOpenSSLコマンドラインツールを使用してファイルを復号化しようとすると、human-を含む、ファイルの適切な復号化ヘッダーの一部が表示されますその時点で読み取り可能なテキストですが、さらにゼロバイトの束であり、元の暗号化されたデータが再び見えます。

ウィキペディアでCBCについて読むと、次のことがわかります。

不適切なIVで復号化すると、プレーンテキストの最初のブロックが破損しますが、後続のプレーンテキストブロックは正しくなります。

しかし、これは私の場合は正反対です。さらに、復号化中にIVをすべてゼロに設定しても、ヘッダーは取得できますが、それ以降のデータは取得できません。

アルゴリズムを適切に適用する方法の重要なポイントを見逃していますか?それとも、Windows BCryptの実装がLinuxのtinyAESおよびOpenSSLと異なるのでしょうか?

1

部分的に正しい結果が表示されている場合は、IVの問題である可能性があります。

CBCでは、IVは暗号化/復号化後にプレーンテキストにXORされます。つまり、IVが完全に間違っていると、復号化されたメッセージの最初のブロック(CBC 16バイト単位)のデータがIVの長さになるため、正しくありません。これは引用されたウィキと一致しています。

ただし、IVが部分的に正しい場合もあり(最初のn <16バイトが正しいなど)、解読されたファイルの正しい最初のnバイトと残りの(16-n)バイトが誤って表示されます。つまり、すべてゼロのIVを試しても、最初のn文字が正しくなる可能性があります。

IVが正しくない理由はわかりませんが、最初に値を確認します。

2
AlphaD