メッセージがCBCまたはECBモードによって暗号化されたかどうかを検出する方法は?
AES 128 CBCまたはECBでランダムに暗号化する関数を作成しました。平文と暗号文の間でハミングを行いますが、シームは暗号モードに関連付けられていません。
ブロック暗号モードを検出するにはどうすればよいですか?
前もって感謝します
メッセージがCBCまたはECBモードによって暗号化されたかどうかを検出する方法は?
AES 128 CBCまたはECBでランダムに暗号化する関数を作成しました。平文と暗号文の間でハミングを行いますが、シームは暗号モードに関連付けられていません。
ブロック暗号モードを検出するにはどうすればよいですか?
前もって感謝します
答えは、問題のステートメントにほとんど示されています。
ECB の問題は、ステートレスで決定論的であることです。同じ 16 バイトの平文ブロックは、常に同じ 16 バイトの暗号文を生成します。
したがって、平文ブロックの繰り返しが同じ暗号文ブロック オフセットで発生すると仮定すると、単純に、さまざまな長さの繰り返し暗号文ブロックを探すことができます。
私は同じ問題セットを行っており、この問題を完了しました (clojure を使用)。
私の最初のヒントは、ファーストクラスの関数/ラムダをサポートする言語を使用している場合、何をする必要があるかがより明確になるということです。
とにかく、問題を少し分解してみましょう。
まず、ブラックボックスが ecb を使用してデータを暗号化していることを検証する関数を作成します。これをどのように行いますか?
次のように見えるかもしれません(以下の疑似コード)
function boolean isEcbBlackbox(func f)
{ //what input can I use to determine this?
result = f("chosen input")
if(result ...) {//what property of result should I look for?
true
} else {
false
}
}
ECB の主な弱点は、平文の同一ブロックが暗号文の同一ブロックに暗号化されることです。
編集:課題は現在公開されているため、私のソリューションにリンクします:
https://github.com/dustinconrad/crypto-tutorial/blob/master/src/crypto_tutorial/lib/block.clj#L118