2

次のテストアプリケーションがあります。

import Codec.Crypto.AES
import qualified Data.ByteString.Char8 as B

key = B.pack "Thisismykey....."

iv = B.pack "0000000000000001"

main = do 
     let myenc = crypt' CTR key iv Encrypt (B.pack "1234567812345678") 
     print (B.unpack myenc)

次の結果が表示されます: "\250\DC4\DC4\255\223\221C\ETBx\239sF\nuZu"

クリアテキスト「1234567812345678」を「1234567812345688」に変更すると、「\250\DC4\DC4\255\223\221C\ETBx\239sF\nuUu」が得られます

クリアテキストを「1134567812345678」に変更すると、「\250\ETB\DC4\255\223\221C\ETBx\239sF\nuZu」という出力が得られます

入力と出力の間に明確に予測可能な相関関係があり、IMHO が発生してはならないので、私は今非常に驚いています。クリアテキストの先頭で何かを変更すると、出力の先頭だけが影響を受けます..バイト文字列の 8 または 16 バイト境界に何らかの関係がある可能性がありますか?どうすればこれを修正できますか? ここで何かが私を誤解させていますか?

CTR モードとは別に、AES は 4x4 バイト配列で動作し、問題は単一の配列の暗号化に関するものであることに注意してください。私の理解では、AES は 4 ラウンドのミキシングを実行し、1 バイト (16 のうち) を変更すると、ビットの少なくとも 50% が異なることになります。したがって、私の意見では、16バイトのクリアテキストの最後の変更が暗号文の最後を正確に変更し、前部の変更が前部を変更するなどではありません。私の理解では、IVはカウンターとしてのみ機能します。複数の 4x4 アレイが関係している場合。

4

1 に答える 1

7

ハスケルとは関係ありません。

http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Initialization_vector_.28IV.29を読む

CTR モードでメッセージを 2 回暗号化するために同じ IV を使用しているため、安全ではありません。暗号化アルゴリズムについて読み、セキュリティの抜け穴がある可能性が高いため、独自の暗号化コードを作成しないようにしてください。

CTR モードの要件は、(key,IV) ペアが一意である必要があることです。簡単な解決策は、暗号化するすべての新しいメッセージに対して新しい IV を生成することです。

【CTRモードのセキュリティ欠陥の説明】 https://crypto.stackexchange.com/questions/2991/why-must-iv-key-pairs-not-be-reused-in-ctr-mode

CTR モードでは F(IV+counter,key) XOR Plaintext = CIPHER .. したがって、ナンスとキーが同じままである場合、F は両方のプレーン テキストで同じです.. したがって、$C_1$ が $P_1$ と $C_2$ の暗号である場合は $P_2$ の暗号です

xor($C_1$,$C_2$) = xor($P_1$,$P_2$) for same (key,IV) pair

サポート コード :

import Codec.Crypto.AES
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString as BS
import Data.Bits (xor) 

key = B.pack "Thisismykey....."

iv = B.pack "1234567891012131"
p1 =  (B.pack "1234567812345678") 
p2 =  (B.pack "1234567812345688") 
x = crypt' CTR key iv Encrypt p1 
y = crypt' CTR key iv Encrypt p2 

main = do 
     print $ BS.zipWith xor x y  
     print $ BS.zipWith xor p1 p2

出力

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0]
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0]
于 2012-09-10T13:10:10.000 に答える