3

ウィキペディア:

CBC モードには自己修復の特性があります。暗号の 1 つのブロックが変更された場合、エラーは最大で 2 つのブロックに伝播します。

構成例:

ブロックサイズを 64 ビットとします。元の平文は次のとおりです。

3231343336353837  3231343336353837  3231343336353837  • • •

正しい暗号文は次のとおりです。

ef7c4bb2b4ce6f3b  f6266e3a97af0e2c  746ab9a6308f4256 • • •

暗号文が壊れていて、バイトが次の'0x4b'ように変更されている場合'0x4c':

ef7c4cb2b4ce6f3b  f6266e3a97af0e2c  746ab9a6308f4256  • • •

次に、次のように復号化されます。

efca61e19f4836f1  3231333336353837  3231343336353837  • • •

質問:

CBC (Cipher Block Chaining) の自己修復特性を理解するのに苦労しています。作成された例が役立つかもしれないと思っていましたが、今はもっと混乱しています。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

15

個人的には、この種の質問には解読グラフィックスが非常に役立つと思います。ウィキペディアから (パブリック ドメインの画像) :

元の CBC 復号化

次に、いくつかの破損を追加しましょう。

破損した CBC 復号化

赤い点は部分的な破損した入力を表し、赤い実線は完全なブロックの破損を表します。

始める前のいくつかの表記法: 元の平文ブロックをp1p3、破損したものをp1'p3'、正しい暗号文ブロックをc1c3、破損したブロックを ~ として番号付けc1'c3'ます。

3231343336353837  3231343336353837  3231343336353837  • • •
       p1                p2                 p3

ef7c4bb2b4ce6f3b  f6266e3a97af0e2c  746ab9a6308f4256  • • •
       c1                c2                 c3

ef7c4cb2b4ce6f3b  f6266e3a97af0e2c  746ab9a6308f4256  • • •
       c1'               c2'=c3             c3'=c3

efca61e19f4836f1  3231333336353837  3231343336353837  • • •
       p1'               p2'                p3'=p3

IVあなたの例で与えていないものもあります。

最初のブロックを見てみましょう: ブロック暗号の入力の 3 ビットが変更されます ( 0x4b ^ 0x4c = 0x07 = 4+2+1)。ブロック暗号は疑似ランダム順列になるように設計されているため、これはランダム関数と区別できない全単射関数です (鍵の知識なしk) - 復号化関数の出力として完全に (疑似) ランダム ブロックを取得します。

    dec(      c1        ,k) =         p1       XOR IV
<=> dec(ef7c4bb2b4ce6f3b,k) = 3231343336353837 XOR IV
    dec(      c1'       ,k) =         p1'      XOR IV
<=> dec(ef7c4cb2b4ce6f3b,k) = efca61e19f4836f1 XOR IV

次のステップとして、IV は XOR されるため、最終的には

    dec(      c1        ,k) XOR IV =         p1       
<=> dec(ef7c4bb2b4ce6f3b,k) XOR IV = 3231343336353837 
    dec(      c1'       ,k) XOR IV =         p1'      
<=> dec(ef7c4cb2b4ce6f3b,k) XOR IV = efca61e19f4836f1 

これは、ブロック全体が破壊されたことを示しています (下部の完全な赤いブロック)。

次に、2 番目のブロックに進みます。ブロックで破損が発生していないため、暗号文ブロックを復号化することから再び開始します。

    dec(      c2        ,k) =         p2       XOR         c1
<=> dec(f6266e3a97af0e2c,k) = 3231343336353837 XOR ef7c4bb2b4ce6f3b
                                                    ^

この式では、どこでも破損していないブロックが使用されていることに注意してください。念のため、このブロックは暗号化中に次のように生成されました。

             c2      = enc(        p2       XOR         c1      ,k)
<=> f6266e3a97af0e2c = enc(3231343336353837 XOR ef7c4bb2b4ce6f3b,k)

次のステップは、前のブロック (今回は IV ではなく c1') との XOR の適用です。この前のブロック c1' は破損しています:

    dec(      c2        ,k) XOR       c1'        =         p2       XOR         c1       XOR        c1'
<=> dec(f6266e3a97af0e2c,k) XOR ef7c4cb2b4ce6f3b = 3231343336353837 XOR ef7c4bb2b4ce6f3b XOR ef7c4cb2b4ce6f3b

c1 XOR c1'これで、(エラー) を実際に計算c1 XOR c1' = 0000007000000000して、どこでも置き換えることができます。

    dec(      c2        ,k) XOR       c1'        =         p2       XOR 0000007000000000
<=> dec(f6266e3a97af0e2c,k) XOR ef7c4cb2b4ce6f3b = 3231343336353837 XOR 0000007000000000

そして最後に単純化しp2 XOR 0000007000000000 = p2'ます:

    dec(      c2        ,k) XOR       c1'        =         p2'      
<=> dec(f6266e3a97af0e2c,k) XOR ef7c4cb2b4ce6f3b = 3231333336353837

最初の暗号文ブロックの元の破損 ( 0x07) がc1'2 番目の平文ブロックに逐語的に転送されていることがわかりますがp2'、それ以外はそのまま残ります (図のほとんどが白いブロックで視覚化され、単一の四角が赤くなっています)。CBC のこの特異な特性は、オラクル攻撃のパディングなど、現実世界のシステムに対する攻撃につながる可能性があります。

3 番目のブロックは非常に退屈です。復号化と XOR への入力が変更されていないためp1=p1'、すべて問題ありません。

于 2014-10-11T22:26:02.443 に答える
1

When decrypting in CBC mode a block is decrypted by first deciphering the block in question using the key, and then XOR it with the previous block in the ciphertext. Take a look at the CBC mode drawing on wiki

As you only need the current and previous block for decryptin in CBC mode, the effect of a changed byte in the ciphertext, would only affect the block it's in, and the following block (if that exists).

于 2014-10-11T21:35:16.910 に答える