Reverse Engineering Nicht Öffentlicher Kryptographiealgorithmen
Total Page:16
File Type:pdf, Size:1020Kb
Reverse Engineering nicht ¨offentlicher Kryptographiealgorithmen Felix Schuster 14. Januar 2010 Studienarbeit Ruhr-Universitat¨ Bochum Lehrstuhl fur¨ Netz- und Datensicherheit Professor Jorg¨ Schwenk Nicht zur Ver¨offentlichung bestimmt. Keine Weitergabe außerhalb des fur¨ die Anerkennung als Studienarbeit und die Bewertung notwendigen Rahmens. Ich danke Prof. Dr. J¨org Schwenk fur¨ die Betreuung dieser Arbeit. Ebenfalls bedanken m¨ochte ich mich bei Dr. Gregor Leander fur¨ die freundliche Unterstutzung¨ bei Fragen zu S-Boxen sowie bei Ingrid und Norbert Schuster und Josefin Annemuller¨ fur¨ das Korrekturlesen. 2 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung5 1.1 Uberblick¨ .......................................5 1.2 Vorwort........................................5 1.3 Zielstellung......................................6 1.4 Das Ziel: Chiasmus..................................7 1.5 Einstieg Reverse Engineering.............................7 1.5.1 x86 Assembler Grundlagen..........................8 1.6 Verwendete Software.................................9 1.6.1 GSTOOL...................................9 1.6.2 Windows XP SP2 in VMware Player.................... 11 1.6.3 zynamics BinNavi............................... 11 1.6.4 IDA - The Interactive Disassembler..................... 12 1.6.5 PyEmu.................................... 12 1.6.6 Microsoft Visual Studio 2008........................ 12 1.7 Eigene Programme.................................. 13 2 Lokalisierung von Chiasmus im GSTOOL 14 2.1 Reverse Engineering GSTOOL.EXE......................... 15 2.1.1 Einschub: Differential Debugging...................... 15 2.2 Reverse Engineering MPCrypt.dll.......................... 19 2.2.1 Analyse der bereitgestellten Funktionalit¨at................. 22 2.2.1.1 calcKeySchedule.......................... 22 2.2.1.2 generateKey............................. 23 2.2.1.3 encryptDecryptFile......................... 23 2.2.1.4 encryptString............................ 24 2.2.1.5 decryptString............................ 24 2.2.1.6 intToHexString........................... 25 2.2.1.7 hexStringToInt........................... 25 2.2.1.8 comFunc0 - comFunc6....................... 25 3 Extrahierung und Spezifikation von Chiasmus 26 3.1 Verschlusselung¨ .................................... 26 3.1.0.9 Einschub: Argumente und lokale Variablen im Stackframe... 26 3 Inhaltsverzeichnis 3.1.0.10 Einschub: Verifizierung der Korrektheit mit PyEmu....... 30 3.1.1 Grafische Beschreibung............................ 33 3.2 Entschlusselung¨ .................................... 35 3.2.1 Grafische Beschreibung............................ 36 3.3 Key-Schedule..................................... 38 3.3.1 Grafische Beschreibung............................ 39 4 Analyse von Chiasmus 41 4.1 Korrektheit des Verfahrens.............................. 41 4.2 Abh¨angigkeiten der Konstanten........................... 45 4.3 S-Boxen........................................ 46 4.3.1 Erste Orientierung.............................. 46 4.3.2 Lineare Attacke................................ 46 4.3.3 Differenzielle Attacke............................. 50 4.3.4 Berechnungsvorschrift............................ 52 4.4 Kryptographische Einordnung............................ 53 4.4.1 Verabeitungsgeschwindkeit.......................... 53 5 Angriff gegen Schlusselgenerierung¨ im GSTOOL 55 5.1 Beschreibung..................................... 55 5.2 Analyse........................................ 56 5.2.1 Allgemein: Wieso srand(time()) keine gute Wahl ist............ 56 5.3 Angriff......................................... 58 5.3.1 Weitere Einschr¨ankung des Schlusselraums¨ ................. 59 6 Fazit 61 Literaturverzeichnis 62 A Anhang 64 A.1 Eigene Chiasmus-Implementierung in C++..................... 64 A.2 PyEmu Skripte.................................... 69 A.3 Flowgraphs...................................... 71 4 1. Einleitung 1 Einleitung 1.1 Uberblick¨ In dieser Arbeit wird erstmals eine Spezifikation des nicht ¨offentlichen Kryptographieverfahrens Chiasmus des Bundesamtes fur¨ Sicherheit in der Informationstechnik (BSI) mit Hilfe von Re- verse Engineering gewonnen. Nach der Anfertigung einer ersten Implementierung in der Programmiersprache C++ werden weitere Analysen durchgefuhrt,¨ die Aufschluss uber¨ die ursprungliche¨ Spezifikation und Eigen- schaften der Chiffre bringen. So werden unter anderem die S-Boxen des Chiasmus-Verfahrens auf ihre Resistenz in Hinblick auf die lineare und differenzielle Kryptanalyse untersucht. Die Arbeit schließt mit einer Attacke gegen die Schlusselgenerierung¨ der speziellen Chiasmus- Implementierung im Programm GSTOOL des BSI. Dabei wird die betreffende Implementierung komplett gebrochen. 1.2 Vorwort Ein Großteil der Kryptographieliteratur fur¨ Einsteiger zitiert an einem Punkt Auguste Kerckhoff mit seinen bekannten Prinzipien, um dem Leser zu vermitteln, dass ein gutes Kryptographie- verfahren keiner Geheimhaltung bedarf. Vielmehr f¨ordere die Ver¨offentlichung eines Verfahrens dessen Sicherheit, weil es so dem Urteil und der Analyse der internationalen Expertenschaft ausgesetzt werde. So sind heutzutage auch beinahe alle breit eingesetzten Algorithmen und eine große Anzahl von popul¨aren Kryptographieanwendungen fur¨ jedermann frei einsehbar. Das mehrere Jahre dau- ernde ¨offentliche Auswahlverfahren fur¨ den Advanced Encryption Standard (AES) hat enorm zur Vertrauensbildung gegenuber¨ dem gew¨ahlten Algorithmus beigetragen und erfolgreich bis dahin unbekannte Schw¨achen in anderen Verfahren aufgedeckt. Trotz der Vorteile und Erfolge fur¨ ¨offentliche A, gab und gibt es Verfahren und Anwendungen, deren Funktionsweise bewusst geheimgehalten wird. Die Grunde¨ dafur¨ sind vielf¨altig. Zun¨achst geht mit einer Geheimhaltung prinzipiell immer erstmal ein Sicherheitsgewinn einher. Unsiche- re, wie sichere Verfahren werden sicherer, weil die Arbeit fur¨ Kryptanalytiker ohne Kenntnis der genauen Spezifikationen in jedem Fall erschwert wird. Fur¨ die Autoren und Nutzer einer 5 1. Einleitung solchen Chiffre ist es jedoch schwerer zu entscheiden, zu welcher der beiden Gruppen ihr Ver- fahren geh¨ort - der der sicheren oder doch der der unsicheren. In der Vergangenheit wurden Kryptographieverfahren mitunter auch als Firmengeheimnisse betrachtet - h¨aufig weil in ihre Entwicklung Geld geflossen war und man die Ergebnisse nie- mandem kostenlos zur Verfugung¨ stellen wollte. Bekannte Beispiele hierfur¨ sind die Chiffren RC41 und CSS2. Beide Algorithmen wurden gegen den Willen ihrer Rechteinhaber in den 90er Jahren publik. Seitdem konnten mehrere, zum Teil schwerwiegende Schw¨achen in beiden nach- gewiesen werden. Im Fall von CSS ist bekannt, dass die unautorisiert ver¨offentlichte Version mit Hilfe von Reverse Engineering einer Softwareimplementierung entstand. Mit Reverse Engineering wird gemeinhin der Vorgang des Nachvollziehens von Entwicklungs- schritten in umgekehrter Reihenfolge bezeichnet. Dabei kann es sich bei dem Zielobjekt um etwas Abstraktes wie eine Software, aber auch um etwas Greifbares wie einen Motor handeln (den man von Hand auseinander nimmt). Das Ziel ist in jedem Fall das Gleiche: Es sollen Informationen uber¨ Funktionsweisen und den inneren Aufbau gewonnen werden, die anders nicht zug¨anglich sind. Genau mit diesem Reverse Engineering von kryptographischen Anwendungen besch¨aftigt sich diese Arbeit. 1.3 Zielstellung Das Ziel dieser Arbeit ist, mit Hilfe von Reverse Engineering die Funktionsweise des bisher nicht ¨offentlichen Kryptographieverfahrens Chiasmus offenzulegen. Dazu werden die entsprechenden Algorithmen in den Kapiteln zwei und drei im Assemblercode3 der PC-Anwendung GSTOOL lokalisiert und anschließend spezifiziert. In dem darauf folgenden Kapiteln wird zus¨atzlich dazu noch ein genauerer Blick auf die Eigen- schaften des Chiasmus geworfen - der Prozess des Reverse Engineerings wird gewissermaßen eine Ebene h¨oher fortgesetzt. Im letzten, funften¨ Kapitel wird schließlich ein Angriff gegen die spezielle Chiasmus-Implementierung im GSTOOL demonstriert. 1Rivest Cipher 4: Von RSA Security entwickelte Stromchiffre [14]. Wird u.a. in der WLAN-Verschlusselung¨ WEP eingesetzt. 2Content Scrambling System: Der bei Video-DVDs eingesetzte Kopierschutz. Basiert auf einer 40 Bit Strom- chiffre. 3Unter Assembler wird gemeinhin die Programmiersprache verstanden, die ein Prozessor direkt versteht. Nativ ausfuhrbare¨ Programme, wie z.B. EXE-Dateien unter Windows, enthalten generell Assemblercode. Hier wird Assembler fur¨ x86-Prozessoren betrachtet. 6 1. Einleitung 1.4 Das Ziel: Chiasmus Das Bundesamt fur¨ Sicherheit in der Informationstechnik (BSI) setzt in seinen kryptographi- schen Anwendungen unter anderem die selbst entwickelte Blockchiffre Chiasmus zur Datenver- schlusselung¨ ein. Die genaue Spezifikation des Verfahrens ist ausdrucklich¨ nicht ¨offentlich und wird entsprechend unter Verschluss gehalten. Die vermutlich einzige ¨offentliche Quelle fur¨ Informationen zu Chi- asmus ist die Webseite des BSI. Dort ist zu erfahren, dass das Chiasmus-Verfahren uber¨ eine gultige¨ Zulassung fur¨ Daten mit der Anforderung Verschlusssache - Nur fur¨ den Dienstge- " brauch\ (VS-NfD) verfugt¨ und mit einer Schlussell¨ ¨ange von 160 Bits auf 64 Bits langen Daten- bl¨ocken zur Ver- und Entschlusselung¨ arbeitet. Von den 160 Bits des Schlussels¨ sollen dabei nur 128 effektiv zur Sicherheit beitragen, die ubrigen¨ 32 Bits wurden,¨ wie zum Beispiel auch beim DES Algorithmus, zur Fehlererkennung verwendet [7]. Implementierungen des Chiasmus sind zumindest in den beiden BSI-Softwareprodukten