0

AES 暗号文を解読するとき、暗号文が有効かどうかをどのように確認しますか? 例えば:

Encryption Key: stackoverflow
Plaintext: Hello World!
AES Ciphertext: 3AN75bE2LlGR957fjjd5WOfRmdY=

同じ暗号化キーを使用して復号化すると、平文の結果は次のようになります。Hello World!

ただし、別のキーを使用する場合:

Encryption Key: stackexchange
AES Ciphertext: 3AN75bE2LlGR957fjjd5WOfRmdY=
Plaintext Result: ]o+ãTy¹¶Ïâ

平文の結果が有効であり、指定された暗号化キーが正しいことを確認する方法はありますか?

http://www.movable-type.co.uk/scripts/aes.htmlを使用して JS 実装を作成しています。

4

2 に答える 2

0

暗号文が正しいかどうかを確認する最善の方法は、暗号文と IV などの追加パラメータまたは GCM などの認証済み暗号に対して MAC (SHA-256 を使用する HMAC など) を使用することです。ブロック暗号を使用する MAC を使用する場合は、必ず別のキーを使用する必要があります。

(受け入れられた回答のように)既知の値をチェックすると、あらゆる種類の攻撃に対して脆弱になり、パディングとプレーンテキストのオラクル攻撃のため、トランスポートプロトコルで使用しないでください。

于 2013-02-27T21:07:11.620 に答える
-1

確かに:プレーンテキストだけでなく、プレーンテキストを保持するシリアライズされたjsonオブジェクトを暗号化してください。逆シリアル化されない場合、それは正しいキーではありません

これをシリアル化して暗号化します。

{"p": "Hello World!"}

復号化すると、{"p":"プレフィックスが 1:2^48、サフィックスが"}1:2^16 になる可能性があります。プレーンテキストの復号化も、json 値に対して有効である必要があります。これは、復号化されたテキストがデシリアライズ可能で価値があるかどうかを確認するだけで、偽陽性の可能性が 1:2^64 未満であることを意味しp、ほとんどのアプリケーションにとって十分です。

本当に主張する場合は、プレーンテキストの最初の文字を格納する別のフィールドを含めることができます:

{"p": "Hello World!","v":"H"}

...しかし、1:2^128 の誤検知の検証チャンスがあるのはやり過ぎだと思います

于 2013-02-27T16:44:20.620 に答える