Verschusselt statt verschlüsselt
Seite 2: XOR-Verschlüsselung
XOR-Verschlüsselung
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.