IT-Sicherheitsmanagement Teil 7: Symmetrische Verschlüsselung 08.05.17 1
Literatur [7-1] Schäfer, Günter: Netzsicherheit. dpunkt, 2003 [7-2] Stallings, William: Sicherheit im Internet. Addison-Wesley, 2001 [7-3] Beutelspacher, A.; Schwenk, J.; Wolfenstetter, K.-D.: Moderne Verfahren der Kryptographie. 4. Auflage, Vieweg 2001 [7-4] Schmeh, Klaus: Kryptografie. dpunkt, 4. Auflage, 2009 [7-5] Schneier, Bruce: Angewandte Kryptographie. Addison-Wesley http://www.schneier.com/ [7-6] Freiermuth, Karin; Hromkovic, Juraj; Keller, Lucia; Steffen, Björn: Einführung in die Kryptologie. Vieweg+Teubner, 2010 [7-7] Buchmann, Johannes: Einführung in die Kryptographie. 5. Auflage, Springer, 2010 [7-8] Burnett, Steve; Paine, Stephen: Kryptographie. RSA Security s Official Guide. RSA Press, mitp, 2001 2
Übersicht Gedanken zur Brute Force-Methode Perfekte Sicherheit One-Time-Pad Meet in the Middle Betriebsarten von Blockchiffren Stromchiffren RC4 3
Brute Force Angriff ein Gedankenspiel I Schlüssellänge [bit] Anzahl möglicher Schlüssel Zeitbedarf 10 6 Entschl./s Zeitbedarf 10 11 Entschl./s 32 4,3 * 10 09 35,8 Min. 42*10-3 s 56 7,2 * 10 16 1.142 Jahre 8 Tage 128 3,4 * 10 38 5,4*10 24 Jahre 10 20 Jahre Hinweise Mit der Technologie Mitte der 90er Jahre sind in Software ca. 200.000 DES- Entschlüsselungen pro Sekunde möglich, also 2*10 5 pro Sekunde. Heute wahrscheinlich: 10 6 pro Sekunde EFF-Rechner Deep Crack (1998): 9*10 10 pro Sekunde, Kosten ca. 250.000$ Siehe: https://de.wikipedia.org/wiki/eff_des_cracker Durch Spezialhardware (Kosten ca. 8.000 EUR) soll der Schlüsselraum von 2 56 in ca. 6 Tagen durchlaufen werden können: 13*10 10 Entschlüsselungen pro Sekunde. 4
Brute Force Angriff ein Gedankenspiel II Nun realisieren wir einen Ciphertext-Only-Angriff, also einem Angriff, bei dem nur der verschlüsselte Text bekannt ist. func crack(chiphertext) { for key:= 0..2 n -1 { PlainText:= encrypt(chiphertext,key) if test(plaintext) { return key } } throw Exception("I give up") } Und wie sieht die test()-funktion aus? Woher "weiß" diese Funktion, dass der richtige Wert gefunden wurde? 5
Brute Force Angriff ein Gedankenspiel III Nehmen wir an, dass der richtige Plaintext eine Word-Datei ist, dann würde test() prüfen, ob der vermutete Plaintext überhaupt eine Word-Datei sein kann (Kopf, Struktur etc.). Kann dieser Test 10 6 mal pro Sekunde oder schneller erfolgen? Aber das reicht noch nicht, denn auch wenn formal eine Word- Datei vorliegt, muss diese nicht sinnvoll sein, denn es kann dort so etwas drin stehen: 3g&7r_90hdIk4$ etc. Noch schlimmer ist es, wenn es reiner ASCII-Text ist; dann ist der Test schnell zu implementieren, aber das Problem mit 3g&7r_90hdIk4$ besteht trotzdem. Noch schlimmer: der Ciphertext sei ein verschlüsseltes Passwort. Dann ist jeder ASCII-Text ein Kandidat für den richtigen Plaintext, sofern jedes Zeichen durch die Tastatur eingegeben werden kann. Oder: was nutzt eine geknackte Passwort-Datei mit ca. 250.000 möglichen scheinbar korrekten Zeichenketten? 6
Brute Force Angriff ein Gedankenspiel IV Nun realisieren wir einen Known-Plaintext-Angriff, also einem Angriff, bei dem der Plaintext und der ChiperText bekannt sind: func crack(chiphertext,plaintext) { for key:= 0..2 n -1 { Plain:= encrypt(chiphertext,key) if PlainText = Plain { return key } } throw Exception("I give up") } Dieser Test ist leicht in Hardware zu realisieren. Und wie sieht die "test() -Funktion aus? Trivial und sehr schnell. Bei diesem Angriff sollten wir uns wegen schneller Hardware Sorgen machen... 7
Was lernen wir daraus? Ein Angreifer versucht möglichst aus einem Ciphertext-Only-Angriff einen Known-Plaintext-Angriff zu machen und das muss verhindert werden. Liefern Sie daher dem Angreifer möglichst nie ein Paar (Chiphertext, Plaintext) oder gar eine Menge dieser Paare. Leider liefern der Kontext und weitere öffentliche Informationen genügend Hinweise: Struktur/Aufbau von Dateien oder Dateisysteme (Menschliche) Sprache, schriftliche Floskeln Protokollaufbau (Bitfelder) Bilder (Struktur der Dateien) Auch kann der Chiphertext selbst eine Quelle von Hinweisen sein, z.b. Größere gleiche Blöcke 8
Perfekte Sicherheit (Shannon) P Menge der möglichen Klartexte (plain text) C Menge der verschlüsselten Texte (cipher text) Menge der möglichen Schlüssel Ein Verschlüsselungsverfahren heißt perfekt sicher, wenn es nur einen Schlüssel zur Entschlüsselung gibt und wenn die verschlüsselten Texte unabhängig von den Klartexten sind, also dass P(p c) = P(p) mit p ε P und c ε C für alle k ε ist wobei P(p c) die bedingte Wahrscheinlichkeit ist. Das bedeutet aber auch, dass P <= C <= ist wobei die Anzahl der Elemente von bedeutet. 9
One-Time-Pad (Vernam-Chiffre) I Dieses Verfahren ist eines der wenigen, die perfekt sicher sind. Es wird eine Tabelle (Pad) mit wirklich zufälligen Zeichen der Länge L erstellt. Der Klartext hat dieselbe Länge L. Verschlüsselung: Jedes Zeichen des Klartextes wird mit dem korrespondierenden Zeichen der Tabelle verknüpft, z. B. per XOR. Entschlüsselung: Jedes Zeichen des Chiffretextes wird mit dem korrespondierenden Zeichen der Tabelle mit einer inversen Funktion verknüpft, z. B. auch per XOR. 10
One-Time-Pad (Vernam-Chiffre) II Vorteile Sehr sicher, wenn wirklich zufällige Kodierungen benutzt werden Im 2.Weltkrieg hatte die Sowjetische Armee Wiederholungen benutzt, so dass einige Texte entschlüsselt werden konnten. Nachteile Unhandlich Beide Seiten müssen dieselbe unhandliche Tabelle benutzen. 11
Begriffe Blockchiffre = Unabhängige Ver-/Entschlüsselung von Blöcken gleicher Länge, meist 64 bit Jeder Block wird für sich getrennt von anderen behandelt. Die kryptographischen Nachteile werden durch Blockmodi beseitigt. Stromchiffre = Kontinuierliche Verschlüsselung unterschiedlich langer Blöcke, von 1 bit bis viele Bytes auch variierend In der Praxis wird jeweils ein Byte behandelt. 12
Blockchiffren Digital Encryption Standard (DES) Blockchiffre mit 56 bit effektiver Schlüssellänge, Schlüssel besitzt noch 8 Bits Prüfsumme Block ist 64 bit lang Entwickelt von IBM Anfang der 70er Jahre Das DES-Verfahren ist (bis auf die Schlüssellänge) sehr sicher: in 35 Jahren ist es nicht gelungen das Verfahren zu brechen, aber: Bis 1997 keine erfolgreiche Known-Plaintext-Attacke, dann aber: DES-Challenge (Preis von RSA Data Security) 14.000 Rechner rechneten ca. 4 Monate 1998: Reduktion auf 39 Tage, teilweise 56 h 1999: Unterschreitung der 24 h-grenze 100.000 Rechner rechneten 22 h Ab ca. 2000: Bau von speziellen Maschinen DES gehört zu den am besten untersuchten Verfahren. Ursprünglich wollte IBM einen 128 bit-schlüssel benutzen und wurde von der US-Regierung daran gehindert. 13
Schlüssellängen - Ein weiteres Gedankenexperiment Schlüssellänge Dauer der Entschlüsselung 56 bit 1 s 64 bit 4 Minuten 80 bit 194 Tage 112 bit 10 9 Jahre 128 bit 10 14 Jahre 192 bit 10 33 Jahre 256 bit 10 52 Jahre Erläuterung: Wenn das Durchprobieren aller 56 bit-schlüssel 1s dauern würde, dann würde bei einem 64 bit-schlüssel das Probieren schon 4 Minuten dauern... 14
Doppelte Verschlüsselung Es entsteht eine doppelte Verschlüsselung und damit eine theoretische Verlängerung des Schlüssels auf 2*56 also 112 bit. Dies wäre ausreichend. Dabei wird vorausgesetzt, dass eine doppelte Verschlüsselung nicht durch eine einzige mit einem anderen Schlüssel ersetzt werden kann. Diese Bedingung erfüllt DES, aber z.b. nicht XOR. Es gibt aber einen Angriff: Meet in the Middle. 15
Meet in the Middle I (A) (B) (M) Plaintext ist bekannt Chiffretext ist bekannt Es ist ein Paar(Plaintext, Chiffretext) bekannt. (A): vom Plaintext ausgehend werden alle Schlüssel (2 56 ) angewendet und in in einer Tabelle abgespeichert. Das ist die Menge aller Werte (M). Dann wird vom Chiffretext ausgehend alle Schlüssel (2 56 ) schrittweise entschlüsselt. Bei jedem Schritt wird geprüft, ob ein Wert aus der Tabelle der (M) gefunden wurde. Falls ja, dann ist das Paar (K 1, K 2 ) ein Kandidat der gesuchten Schlüssel. Leider/zum Glück ist das nicht eindeutig, denn es werden mehrere Kandidaten gefunden. Dann wären weitere Paare(Plaintext, Chiffretext) notwendig, um die falschen Kandidaten auszusortieren. 16
Meet in the Middle II - Aufwand Ein volles Durchprobieren für K 1 : 2 56 DES Abspeichern und Sortieren in der Datenbank Ein volles Durchprobieren für K 2 : 2 56 DES Bei jedem Schritt: Suchen in der Datenbank Ergebnis: Menge von Kandidaten Anhand eines weiteren Paares (Plaintext, Chiffretext) wird jeder Kandidat jeweils 1x geprüft und gegebenenfalls aussortiert. Sind noch Kandidaten übrig, müssen diese mit einem weiteren Paar (Plaintext, Chiffretext) ausgeschlossen werden. d.h. bestenfalls eine effektive Schlüssellänge von 2 58, eher 2 57. 17
Dreifache Verschlüsselung I (A) (B) (M) Nun hätten wir 3x56 bit, also einen 168 bit-schlüssel. Aber auch hier funktioniert der Meet in the Middle-Angriff, so dass für K 1 je 2 56 und für K 2 auch 2 56 Schlüssel zu probieren und in der Tabelle abzuspeichern sind: 2 112. Dazu kommt noch der rechte Zweig mit 2 56, was aber in Anbetracht von 2 112 zu vernachlässigen ist. Die effektive Schlüssellänge ist 112 bit, was (heute) ausreichend ist (siehe Gedankenexperiment von oben) 18
Dreifache Verschlüsselung II - Triple-DES (3DES) Die 2. Verschlüsselung ist eine "Entschlüsselung" Optional steht dann noch eine 1DES zur Verfügung, wenn K 1 = K 2 = k 3 ist. Sonst keine Vor- oder Nachteile, außer Performanz e: Verschlüsselung, d: Entschlüsselung, m: Klartext, c: Chiffretext: c= e(k 1,d(k 2,e(k 3,m))) Falls K 1 = K 3, dann ist die Schlüssellänge 112 bit. In der Praxis wird so gearbeitet. 19
Weitere Verfahren neben AES und DES Blowfish https://de.wikipedia.org/wiki/blowfish Twofish Teilnehmer am AES-Wettbewerb https://de.wikipedia.org/wiki/twofish CAST-256 Wird von PGP benutzt RFC 2144, 128 bit-schlüssel Teilnehmer am AES-Wettbewerb MISTY Mitsubishi 64 bit-blöcke, variable Runden mit 128 bit-schlüssel Parallelisierbarkeit Und noch: Safer, GOST, LOKI, Khufu, Khafre... 20
Betriebsarten von Blockchiffren Der Zweck der Betriebsarten/Modi liegt darin, verschiedene Blöcke so zu verknüpfen, dass bei Unkenntnis des Schlüssels das Entschlüsseln erschwert wird. Voraussetzung dazu ist das Auffüllen des letzten Blocks auf das Mehrfache der Blocklänge (Padding). Diese Zusatzbits müssen beim Entschlüsseln wieder entfernt werden. Es werden folgende Betriebsarten vorgestellt: Electronic Codebook Mode (ECB-Mode) Cipher Block Chaining Mode (CBC-Mode) Output Feedback Mode (OFB-Mode) Cipher Feedback Mode (CFB-Mode) Siehe auch: http://en.wikipedia.org/wiki/block_cipher_modes_of_operation 21
Electronic Codebook Mode (ECB-Mode) I Plain 1 Plain 2 Plain 3 Plain n Verschlüsselung Cypher 1 Cypher 2 Cypher 3 Cypher n Vorteile und Probleme Parallelität ist sehr einfach zu realisieren. Für kurze Nachrichten ist ECB vollkommen geeignet Ansonsten: nicht benutzen! 22
Electronic Codebook Mode (ECB-Mode) II Cypher 1 Cypher 2 Cypher 3 Cypher n Entschlüsselung decrypt k decrypt k decrypt k decrypt k Plain 1 Plain 2 Plain 3 Plain n Probleme Angriff durch Häufigkeitsanalyse möglich Gleiche Blöcke werden gleich verschlüsselt. Siehe auch: https://de.wikipedia.org/wiki/electronic_code_book_mode 23
Cipher Block Chaining Mode (CBC-Mode) I Plain 1 Plain 2 Plain 3 Plain n Verschlüsselung Initialisierungsvektor + + + + Cypher 1 Cypher 2 Cypher 3 Cypher n Der Initialisierungsvektor ist ein nicht geheimer Block, mit dem als erstes per XOR verschlüsselt wird. Nun gibt es keine gleichen Chiffreblocks bei denselben Klartextblöcken mehr. Mit einer XOR-Funktion wird "addiert". 24
Cipher Block Chaining Mode (CBC-Mode) II Cypher 1 Cypher 2 Cypher 3 Cypher n Entschlüsselung decrypt k decrypt k decrypt k decrypt k Initialisierungsvektor + + + + Plain 1 Plain 2 Plain 3 Plain n Dies ist die zu empfehlende Betriebsart Siehe auch: https://de.wikipedia.org/wiki/cipher_block_chaining_mode 25
Output Feedback Mode (OFB-Mode) I Initialisierungsvektor Plain 1 Plain 2 Plain 3 Plain n Verschlüsselung + + + + Cypher 1 Cypher 2 Cypher 3 Cypher n Der Initialvektor wird in einer Fortschaltfunktion wiederholt mit dem Schlüssel verschlüsselt. Mit jeweils dem neuen verschlüsselten Wert werden per XOR die Klartextblöcke verschlüsselt. 26
Output Feedback Mode (OFB-Mode) II Initialisierungsvektor Cypher 1 Cypher 2 Cypher 3 Cypher n Entschlüsselung + + + + Plain 1 Plain 2 Plain 3 Plain n Die Verschlüsselungsketten können im Voraus/parallel berechnet werden, so dass Parallelität erreicht werden kann. Diese Art der mehrfach verschlüsselten Werte wird uns bei dem Pseudozufallsgeneratoren und bei den Stromchiffren wieder begegnen. Siehe auch: https://de.wikipedia.org/wiki/output_feedback_mode 27
Counter Mode (CTR) I - Verschlüsselung Plain 1 Plain 2 Plain 3 Plain n Startwert +1 +1 +1 + + + + Cypher 1 Cypher 2 Cypher 3 Cypher n Beginnend mit einem Startwert, wird dieser verschlüsselt mit dem geheimen Schlüssel. Für jeden Folgeblock wird der Startwert um 1 erhöht. 28
Counter Mode (CTR) II - Entschlüsselung Cypher 1 Cypher 2 Cypher 3 Cypher n Startwert +1 +1 +1 + + + + Plain 1 Plain 2 Plain 3 Plain n Die Entschlüsselung verläuft genauso wie die Verschlüsselung. 29
Counter Mode (CTR) III - Startwert Nonce 0 +1 Nonce 1 Counter Nonce = number used once = eine (lange) ganze Zahl, die nur ein einziges Mal benutzt wird Damit die Wahrscheinlichkeit für eine mehrfache Benutzung sehr klein ist, sollte eine lange, echte Zufallszahl benutzt werden. Es darf niemals bei diesem Modus ein Nonce-Wert doppelt benutzt werden. Siehe https://de.wikipedia.org/wiki/nonce http://stackoverflow.com/questions/4145531/how-to-create-and-usenonces 30
Stromchiffren Blockchiffren haben den Nachteil, dass der Klartext in Einheiten der Blockgröße vorliegen sollte. Für interaktive Anwendungen heißt dies, dass gewartet werden muss bis ein Block vorhanden ist oder dass der Block mit Füllinformation aufgefüllt werden muss. Stromchiffren = Verschlüsselungsalgorithmen, die keine Einheiten mit festgelegter Größe (Blöcke) benötigen und bei denen die Einheiten ähnlich den Blockmodi verknüpft sind. 31
Verfahren von Ron Rivest RC2 (Rivest Cipher), RFC 2268 RC4 RC5 RC6 Einsatz in S/MIME Relativ wenig untersucht Entwickelt 1987 Geheim gehalten bis 1994 Schnell und einfach Teilnehmer am AES-Wettbewerb Siehe: http://de.wikipedia.org/wiki/ronald_l._rivest http://en.wikipedia.org/wiki/rc2 http://en.wikipedia.org/wiki/rc5 32
RC 4 Rivest Cipher No. 4, 1987, http://en.wikipedia.org/wiki/rc4_(cipher) Erst geheim, ab 1994 veröffentlicht. Siehe https://tools.ietf.org/html/draft-kaukonen-cipher-arcfour-03 http://en.wikipedia.org/wiki/rc4_(cipher) 33
RC 4 - Vorbereitung Schlüssellänge: 1..2048 bit, praktisch: 128 oder 256 bit In ein Feld S mit 256 Zellen wird der jeweiligen Index zugewiesen. Das Feld k wird mit Schlüssel der Länge L des Schlüssels gefüllt, nötigenfalls mehrfach hintereinander. Dann werden 256 mal die Elemente in S anhand von k vertauscht: S 0 S 1 S 2 S 3 S 4 S 5... S 255 :=Index k 0 k 1 k 2 k 3 k 4 k 5... k 255 Byteweise mit Schlüssel füllen Falls Schlüssel kürzer als 2048 bit: Mehrfach wiederholen for j:=0, i:=0 to 255 do j:=(j + S[i] + k[i mod L]) mod 256 swap(s[i],s[j]) od 34
RC 4 - Durchführung Das Feld S von 256 Elementen, in denen die Werte von 0 bis 255 entsprechend dem Schlüssel gesetzt wurden, wird nach dem Verfahren unten bearbeitet. Das Ergebnis eines Durchlaufs Key wird mit XOR mit den Klartext verschlüsselt. Für das nächste Byte wird ein erneuter Durchlauf durchgeführt. i:= (i+1) mod 256; j:= (j+s[i]) mod 256; swab(s[i],s[j]) key:= (S[i]+S[j]) mod 256; Cipher[..]:= Plain[..] xor key 35
RC 4 Probleme und Lösungen(?) Es muss eine wirkliche 2048bit-lange Zufallszahl als Schlüssel benutzt werden, keine kürzeren Schlüssel, die dann mehrfach hintereinander gesetzt werden. Da der volle Schlüssel sich erst nach einer gewissen Anzahl von generierten Bytes auswirkt, sollten mindestens die ersten 256 Bytes verworfen werden. Es dürfen keine Schlüssel doppelt benutzt werden, da dann nach einem Chosen-Plaintext-Angriff leicht entschlüsselt werden kann (dasselbe gilt auch für den CTR-Modus) http://www.crypto.com/papers/others/rc4_ksaproc.pdf Ohne dies zu beachten ist von der Benutzung von RC4 abzuraten. 36
RC 4 Verbesserung durch SPRITZ i:= i+w mod 256; j:= k+s[j+s[i]mod 256] mod 256; k:= i+k+s[j] mod 256; swab(s[i],s[j]) key:= S[j+S[i+S[key+k mod 256] mod 256] mod 256]; Cipher[..]:= Plain[..] xor key Die Zahl w ist teilerfremd zu 256; die Schlüsselinitialisierung ist anders als bei RC4. Siehe https://de.wikipedia.org/wiki/rc4 http://people.csail.mit.edu/rivest/pubs/rs14.pdf https://www.schneier.com/blog/archives/2014/10/spritz_a_new_rc.html https://github.com/romanvolkov-io/rc4-spritz https://eprint.iacr.org/2016/092.pdf 37
Weitere Stromchiffren (Beispiele) A5 Einsatz in Mobil Telefonen: D1, D2 E-Plus und E2 Gehört zum GSM-Standard War zunächst geheim Ist in den beiden einfachen Versionen recht unsicher, die dritte ist besser (A5/3) Siehe: http://de.wikipedia.org/wiki/a5_(algorithmus) SEAL Sicherheit und Schnelligkeit ähnlich RC4 Salsa20 und ChaCha20 Eigenes Verfahren in winzip Sehr unsicher 38
Nach dieser Anstrengung etwas Entspannung... 39