Verschusselt statt verschlüsselt

Seite 2: XOR-Verschlüsselung

Inhaltsverzeichnis

Im Gegensatz zur fehlenden Vorformatierung ist ein XOR mit konstantem Chiffreblock allerdings ein Beinbruch, und zwar der offenen Sorte, denn derart eingesetzt ist es anfällig für so genannte "Known-Plaintext-Angriffe". Eine XOR-Verschlüsselung läuft folgendermaßen ab:

Chiffratblock1 = Klartextblock1 XOR Chiffreblock(Schlüssel 1)
Chiffratblock2 = Klartextblock2 XOR Chiffreblock(Schlüssel 2)
Chiffratblock3 = Klartextblock3 XOR Chiffreblock(Schlüssel 3)

... Entschlüsselt wird mit derselben Rechenvorschrift, nur mit vertauschten Rollen von Klartext und Chiffrat:

Klartextblockn = Chiffratblockn XOR Chiffreblock(Schlüssel n)

Wenn der Chiffreblock wie im voliegenden Fall für jeden Sektor derselbe ist, ergibt sich:

Chiffreblock(Schlüssel) = Chiffratblockn XOR Klartextblockn

für einen beliebigen Block n. Man muss also nur einen beliebigen 512-Byte-Sektor mit bekanntem Klartext finden, um den universellen Chiffreblock zu berechnen. Solche Angriffe heißen daher auch "Known-Plaintext-Angriffe". Das Schlimme: Beispielsweise Sektor 67 besteht bekanntermaßen fast vollständig aus Nullen, wenn die erste Partition mit FAT32 formatiert ist:

00008400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00008410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00008420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000085d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000085e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000085f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|

Folglich: Liest man Sektor 67 von der verschlüsselten Platte aus erhält man bis auf die letzten beiden Bytes den vollständigen Chiffreblock, denn

Chiffreblock(Schlüssel) = Chiffratblockn XOR 0 = Chiffratblockn

Die Ausgabe von dd if=/dev/sdc bs=512 count=1 skip=67 | hexdump -vC liefert schon fast den gesuchten 512-Byte-Block:

00008400 77 c8 54 35 ee 90 a9 6a dc 21 53 d5 7d 43 a6 aa |w.T5...j.!S.}C..|
00008410 3f 86 4c 55 7e 0c 99 aa 39 18 32 55 72 30 64 aa |?.LU~...9.2Ur0d.|
00008420 21 60 c8 54 42 c0 90 a9 41 80 21 53 82 00 43 a6 |!`.TB...A.!S..C.|
...
000085d0 01 07 00 92 c7 0e 00 24 8e 1d 00 48 1c 3b 00 90 |.......$...H.;..|
000085e0 fd 76 00 20 fa ed 00 40 f4 db 01 80 2d b7 03 00 |.v. ...@....-...|
000085f0 5a 6e 07 00 b4 dc 0e 00 68 b9 1d 00 d0 72 6e aa |Zn......h....rn.|

Lediglich die letzten beiden Bytes 6e aa stimmen noch nicht, denn sie müssen noch mit 55 aa zum Endergebnis 3b 00 XOR-Verknüpft werden. Damit ist der komplette 512-Byte große Chiffreblock bekannt, mit dem wir problemlos auch alle anderen Festplatten-Sektoren entschlüsseln konnten.