2

システムに、ランダムなプレーンテキストまたは暗号文のいずれかの入力を受け取るプロセスがあります。パフォーマンスは問題ではないので、次のような擬似コードを使用して、すべての着信入力を復号化することを計画しています。

//get the input, either a plain text, or cipher text 'in disguise'
//ex of plain text: "some text".getBytes()
byte[] plainText = getInput();
try {

    //try to decrypt whatever it is. Using Bouncy Castle as the AES crypto engine
    plainText = AESDecryptor.decrypt(HARDCODED_AES_KEY, plainText);
} catch(Exception ex) {
    ...
}

//do some process with the plain text
process(plainText);

暗号化方式にAESを使用しています。

上記のコードは、弾力がある城を使用してプレーンテキストを復号化しようとすると、常に例外がスローされるという仮定に大きく依存しています。しかし、仮定は100%正しいのでしょうか?人間が読める形式のプレーンなテキストを復号化しようとすると、常に例外がスローされますか?

前もって感謝します!

4

1 に答える 1

2

短い答え

いいえ、例外を保証することはできません。

長い答え

例外を受け取る確率は、使用されるパディングスキームによって異なります。暗号化ライブラリがパディングを含むアルゴリズムを使用してデータを復号化する場合、正しくパディングされたプレーンテキストが見つかることを期待します。パディングの形式が正しくない場合(たとえば、入力が暗号文ではなく平文であったため)、例外がスローされる可能性があります。

復号化にパディングスキームを使用しておらず、入力が暗号のブロックサイズの倍数(AESの場合-16バイト)である場合、ライブラリは平文をうまく復号化し、ジャンクを提供します。


例として、PKCS#7のパディングについて考えてみます。これにより、平文の最後にゼロ以外のバイト数が追加され、値はパディングバイト数と等しくなります。平文を暗号のブロックサイズに合わせるのに十分なバイトが追加されます。例えば:

12 34 56 78 9A BC DE F0 08 08 08 08 08 08 08 08

ここで、08値はAESブロックサイズに合わせるための8バイトのパディングです。それで、あなたがいくつかの平文を解読するならば、それは有効なパディングをもたらす可能性がありますか?おそらくそうではありません。しかし、それは可能であり、システムを設計するためのずさんな方法です。


データが暗号化されているかどうかを示すために、提案されたプロトコルに別のレイヤーを追加する必要があります。この時点で、使用するアルゴリズムを指定すると便利な場合があります。これにより、将来、追加のアルゴリズムをサポートするための柔軟性が向上する可能性があります。

于 2012-08-30T14:12:47.027 に答える