 Ja, moin, hörte mich, gut. Erst mal testen. Ich bin Jan Ruge und ich erzähle euch, oder auch Bollack 42 und ich erzähle euch was über wie man Software Defined Radius benutzen kann, um Seitenkanalangriffe durchzuführen. Erst mal kurz zu mir, also ich war an der Universität Hamburg, unter denen ist auch das meiste, was ich euch jetzt erzähle, entstanden. Aktuell mache ich gerade mein Master an der TU Darmstadt und ja, erst mal was sind Seitenkanalangriffe? Also bei Seitenkanalangriffen versuche ich immer die physikalischen Eigenschaften von irgendeiner Implementierung auszunutzen. Beispiele dafür wäre zum Beispiel die Stromaufnahme von einem Chip, das Zeit- oder Laufzeitverhalten oder was ich jetzt in diesem Fall vorstellen werde, die elektromagnetische Abstrahlung von einem Gerät während des Operationen durchführt. Warum jetzt ein Software Defined Radio? Es gibt auch zum Beispiel digitale Oszilloskope, die man für sowas nutzen kann, also sprich Analyse von elektrischen Signalen. Das Problem bei denen ist halt, dass die ziemlich teuer sind. Also ich sage jetzt mal so für einen Durchschnittstudenten nicht gerade leicht zu bekommen und oft handelt es sich auch um Speicherauszilloskope. Das heißt, sie speichern die Samples erst mal und die haben nur eine begrenzte Speicher-Tiefe. Das heißt, ich bin auch in dem Zeitbereich, den ich analysieren kann, erst mal beschränkt. Bei SCR sieht das alles ein bisschen anders aus. Ich kann halt die rohen Daten direkt zum PC Stream dort verarbeiten. Da gibt es gute Frameworks hier, zum Beispiel GNU Radio ist relativ bekannt, was mir schon sehr viel Signalverarbeitung primitiver abnimmt. Ich habe bereits im Gerät selber einen analogen Filter bzw. da eine Vorverstärkung drin, was halt irgendwie in gewisser Form halt auch den Hardwareaufwand reduziert und wenn ich digitale oder elektrische Signale messen möchte, dann kommt es im Wesentlichen auch darauf an, wie schnell kann ich das Signal abtasten. Und die SCR-Empfänger haben halt von Haus aus immer schon relativ schnell analog Digitalkonverter, was halt, was man sich halt zu Nutzen machen kann. Genau. Ich erzähle euch jetzt was über elektromagnetische Abstrahlung und zwar erst mal, wie Seitenkanaleffekte überhaupt entstehen. Also hier ist jetzt zum Beispiel ein CMOS-Gate, also die meisten integrierten Schaltungen sind irgendwie CMOS-Schaltung. In dem Fall handelt es sich um ein Nicht-Gate oder Not-Gate und das geht halt so, dass ich auf der linken Seite hier kommt mein Input rein und da, wo jetzt CL dran steht mit den beiden Transistoren, dazwischen ist halt der Ausgang von dem Gate. Wenn der Input jetzt zum Beispiel auf High wäre, dann würde das der obere Transistor sperren und der untere wäre Leiden und dadurch wird der Ausgang von dem Gate auf Low gezogen, also auf 0 Volt. Wenn ich mir das jetzt so statisch angucke, kann man halt sagen, warum verbraucht überhaupt eine CPU oder ein Chip stroben, weil entweder da eine oder da andere Transistor sperrt und eigentlich dürfte da überhaupt kein Strom fließen. Ein Grund hierfür ist, dass die Leiterbahn eine gewisse Kapazität aufweisen, beispielsweise über Masse. Und wenn jetzt irgendwie ein Pin oder ein Output von einem Gate sein Zustand ändert, dann muss halt dieser Kondensator, also sich die Spannung ändert, muss dieser Kondensator erst mal geladen oder entladen werden und das verursacht letztendlich den Stromfluss. Und da kann man schon mal daraus ableiten, dass die Stromaufnahme von einem Chip hemer dauern mit der Anzahl der Bits, die werden, die flippen korraliert. Das heißt, wenn viele Bits flippen, dann verbrauche ich mehr Strom und wenn weniger flippen, dann brauche ich weniger Strom. Bei Desktop PCs sieht es halt so aus, dass die CPU selber dann irgendwie ein Gigahertzbereich rechnet und es dann eine Spannungsregulierung gibt, die quasi versucht die Versorgungsspannung stabil zu halten und die arbeitet letztendlich wie ein Lowpass Filter und dabei entstehen dann halt letztendlich Noise im Bereich von unter 4 Mhz. Das war einer meiner ersten Versuchsaufbau, die ich jetzt mal mit einem Desktop PC gemacht habe. Auf der linken Seite sehen wir halt das Gerät, was angegriffen wird. Da oben ist dann eine Antenne und diese Antenne ist dann über ein Abconverter mit einem STR verbunden und rechts hier ist mein Laptop, den ich dann die Signale verarbeite. Ich habe da noch ein Netzwerkverbindung dazwischen, einfach aus dem Grund, dass ich halt irgendwie ein Programm auf dem Rechner starten möchte, die ich dann analysiere und ja genau. Wie gesagt, die Seitenkanal Effekte treten in dem Fall meistens so in Frequenzen von unter 4 Mhz auf. Wenn ich das mit einem STR empfangen möchte, brauche ich ein Abconverter. Das heißt, es ist ein Gerät, was erstmal die niederfrequenten Signale so hoch schiebt im Frequenzbereich, dass ich sie mit einem normalen STR quasi empfangen kann und die Signale, über die ich jetzt rede, die haben so ein Pima Down der Bandbreite von 100 KHz ein bisschen mehr. Also im Prinzip lassen sich die Angriffe auch mit einem RTL-STR durchführen. Das war so eines meiner ersten Experimenter, was ich überhaupt mal gemacht habe. Ich habe einfach, wollte mal gucken, wie sehen der Seitenkanal Effekt überhaupt aus in dem Fall. Ich habe hier einfach ein Programm, was nichts anderes macht, als etwa eine Sekunde lang die CPU voll auszulassen und dann eine Sekunde lang nichts macht. Und dann habe ich mit GNU Radio mir mal das Spektrogramm anzeigen lassen. Und was ihr hier seht, ist letztendlich auf der X-Achse, habt ihr die Frequenz und auf der Y-Achse die Zeit und die Farbe gibt euch quasi die Insensität von der entsprechenden Frequenz an einen bestimmten Zeitpunkt an. Und wir sehen hier, dass sich ein sehr regelmäßiges Muster abzeigt. Das heißt, es tauchen plötzlich Signale auf, die vorher nicht da waren. Und das ist doof. Und genau, ich möchte jetzt, also wenn ich die Seitenkanal Effekte von einem Programm analysieren möchte, möchte ich überhaupt erst mal wissen, wann fängt die Berechnung überhaupt an. Und diese Signale könnten wir jetzt beispielsweise nutzen, um den Start und das Ende von der Berechnung zu bestimmen, um dann quasi die Programmausführung selber uns genauer anzuschauen. Wenn man viel verschiedene Frequenzen ausprobiert und viel damit rumspielt, möchte man das ganz automatisieren, was ich jetzt in meinem zweiten Schritt gemacht habe, in der zweiten Intervention. Und zwar, was ich gemacht habe, ist, ich habe einfach zehnmal das Programm gestartet und was dabei, was man dann sieht, ist das Spektrogramm hier oben. Also wir haben dann, es lässt sich wahrscheinlich sehr schwer nur erkennen, aber zwischendrin sind immer horizontale Linien drin. Das sind immer die Programmausführung. Also wenn das Programm gestartet wurde, dann sieht man dann leicht im Spektrogramm und vor allem eine Carrier jetzt hier ganz links, sieht man, der ist immer genau dann unterbrochen, wenn das Programm gerade ausgeführt wird. Das heißt, wir versuchen jetzt so ein Carrier jetzt erstmal überhaupt automatisch zu finden. Dafür habe ich ein Waflet genommen, das hat so eine Pulsform, was dieses, mit diesem Waflet kann ich quasi nach Pulsförmieren, Änderungen in dem Signal suchen. Ich nehme dieses Waflet, nimm das auch zehnmal, also entsprechend, wie oft ich das Programm ausgeführt habe, und pass die Pulsweize in etwa der Berechnungszeit von dem Testprogramm an und verschiebe das dann über die Zeitachse. Und was dabei rauskommt, ist etwas, was so aussieht wie hier unten. Das ist quasi die Antwort von diesem Waflet auf das Spektrogramm und wir sehen hier, dass blau ist halt eine niedrige Response von dem Waflet und rot ist eine hohe. Und hier haben wir ein paar sehr starke Maxima, die auch mit den Carriers hier oben gut übereinstimmen. Das heißt, letztendlich, wenn wir diese Waflet-Transformation einmal gemacht haben, brauchen wir hier nur das Maximum in dem Spektrogramm oder in dieser Darstellung hier unten zu suchen. Und wir wissen schon, welchen Carrier wir nutzen oder welche Frequenz wir nutzen können, um so eine Art Trigger-Signal zu bekommen. Wir können jetzt z.B. mit GNU Radio einhergehen und das so ein Signal mal Amplituden demodulieren. Und was dabei rauskommt, nach ein bisschen Lowpass-Filtern, ist ein Signal, das aussieht wie hier oben. Und wir sehen halt hier sehr schöne Einbrüche im Signal. Und die können wir halt nutzen, um zu erkennen, wann genau unser Testprogramm ausgeführt wurde. Dass wir quasi die entsprechende Zeitspanne aus unseren Rondendatenstrom extrahieren können. Man könnte jetzt einfach hier in dem Fall, wo das ziemlich gut geht, mit einem Schwellwert einfach sagen, wenn es unter diesem Schwellwert ist, dann fühlen wir gerade das Programm aus. Und wenn es wieder über den Schwellwert-Felter-Wert dann ist die Ausführung des Programms zu Ende. Das geht aber allerdings nicht mehr so gut, wenn das, wenn dieses Trigger-Signal etwas vorauscht ist, weil dann hat man irgendwie ein Spike drin und dann würde dieser Threshold zu früh triggern. In dem Fall habe ich jetzt ein Haar-Wail-Flat genommen. Das sieht so ähnlich aus wie das Waiflat hier, nur dass es halt halbiert ist. Und dieses Haar-Wail-Flat ist letztendlich dafür zuständig, oder mit dem kann man eine Slope-Detection machen. Das heißt, eine Aufwärts- oder Abwärtsflanke im Signal erkennen. Und wenn man dieses Haar-Wail-Flat auf dieses Trigger-Signal anwendet, sieht man hier, dass man sehr schönes Bikes bekommt. Und dann muss ich einfach nur noch in den Signal nach Maxima suchen und habe halt genau den Zeitbereich, wann mein Programm ausgeführt wurde. Und dieses Verfahren hat sich letztendlich als ziemlich robust dargestellt. Als nächstes habe ich mir mal so ein bisschen OpenSSL-Basis-Routinen angeschaut, um mal zu sehen, was die für Seitenkanaleffekte aufweisen. Das hier ist jetzt ein kleines C-Programm, was ich dafür mal getestet habe. Und hier unten seht ihr das entsprechende Spektrogramm dafür, also von einer Ausführung, wie jetzt die Seitenkanaleffekte davon aussehen. Und ich habe hier erstmal eine Zeile, wo ich nichts mache, also einfach nur so ein bisschen Work generiere, dann führe ich 400 Multiplikationen mit Argument aus, was ich selber kontrollieren kann, damit ich verschiedene, verschiedene Werte testen kann. Und danach mache ich nochmal einfach wieder eine gewisse Zeit lang einfach nichts. Und wenn wir uns das Spektrogramm ansehen, dann sehen wir hier, haben wir verschiedene Carrier, wieder die Auftreten. Und in der Mitte in diesem Bereich sehen wir plötzlich, wenn die OpenSSL-Routine ausgeführt werden, haben wir plötzlich so eine Art Rauschen auf der Frequenzachse. Also irgendwie scheint dieser, können wir offensichtlich schon mal die unterscheiden anhand der Spektrogramms, ob wir jetzt gerade eine OpenSSL-Routine ausführen oder gerade einfach nur stumpf in einer Schleife durchlaufen. Dann könnte man mal versuchen, einen hergehen und einen so einen Carrier zu rauszufiltern und dann eine Frequenz-Demodulation zu machen, also dasselbe Signal, was im FM-Radio verwendet wird. Und wenn wir das über mehrere Spuren mitführen, weil sonst ist es etwas verrauscht, gibt es etwas, was so aussieht. Auch hier ist wieder derselbe Fall. Wir haben Bereiche, die sehr strukturiert aussehen, dann kommen unsere Routine, also unsere Multiplikationen und die unterscheiden sich halt deutlich von den Operationen, die wir davor durchgeführt haben. Das heißt, wir können ja auch quasi unterscheiden, was wir gerade berechnen und in dem Fall ist es auch vor allem sehr strukturiert. Also es ist nicht einfach nur Rauschen, was daraus kommt, sondern es scheint auch gewissermaßen Sinn zu machen, weil hier jetzt plötzlich auch noch neue Frequenzen in diesem demodulierten Signal auftauchen, die vorher nicht da waren, als wir einfach nur in dieser Scheife gelaufen sind. Aktuell haben wir jetzt letztendlich einfach nur rohe Signale oder Spektrogramme, die jetzt zübsch aussehen, aber man braucht auch irgendwie einen Weg, um jetzt Nutzdaten daraus zu generieren. Verfahren dafür ist zum Beispiel ein sehr einfaches Verfahren, ist die Differential Power Analysis, mit dem man einfach letztendlich nur Unterschiede in Berechnung daraus finden kann. Und das Verfahren funktioniert so, dass ich zwei Werte wähle, die ich, wo ich wissen will, ob die jetzt die selben Seitenkanaleffekte verursachen oder unterschiedliche, dann führe ich immer wiederholt Messungen mit diesen beiden Argumenten durch und berechne letztendlich einfach nur noch die Differenz von den durchschnittlichen Messungen von beiden Argumenten. Da gibt es eigentlich nur zwei Fälle, die auftreten können, entweder die Wahl von A oder B hat überhaupt keinen Einfluss auf das, was ich messe. In dem Fall berechne ich letztendlich die Differenz von zwei Mittelwerten vom selben Experiment und das konvergiert gegen Null. Oder aber diese Differenz konvergiert nicht gegen Null. Das würde halt bedeuten, dass die Wahl von A und B unterschiedliche Seitenkanaleffekte verursachen. Wenn wir das jetzt mal für die OpenSSL Multiplikation machen, kommt dabei, sieht das so aus. Im oberen Fall haben wir einfach zwei Werte genommen, die beide kleiner sind als der Modul. Also die OpenSSL Multiplikation war eine modulare Multiplikation und das wir hier sehen ist im wesentlichen Rauschen, also da zeichnet sich nicht allzu viel ab und wenn wir allerdings A oder den einen Wert kleiner wählen als den Modul und den anderen Wert größer wählen als den Modul, dann sehen wir das genau an den Stellen, wo vorher diese Carrier aufgetreten oder diese neuen Frequenzen aufgetreten sind, demodulierten Signal, sehen wir plötzlich sehr starke Unterschiede in den Spektrogrammen. Das lässt sich auch relativ gut an der skale Rechtsablesen, wenn man halt die Minimal- und Maximalwerte vergleicht. Hier oben geht der Maximalwert bis etwa 0,2 und im unteren Fall bis 0,45. Also man sieht halt deutlich, dass wenn die eine Zahl kleiner und die andere Zahl größer ist als der Modul, dass wir deutlich andere Spektrogramme damit erzeugen können. Multiplikationen sind ganz gut, aber zur RSA komme ich später nochmal, aber was auch interessant sind sind die Potenzierungsmethoden von OpenSSL. Sorry für diesen Codewurstwirfer, so sieht die OpenSSL Routine für Potenzierung aus. Sie ist sehr ähnlich zu der binären Potenzierung. Ich will jetzt nicht genau zeigen, wieso das funktioniert, aber was hier letztendlich passiert ist, dass ich aber dieses array PoW habe, was einfach nur die e-Input-Potenzen von meinem Input C enthält. Also was ich berechnen möchte ist CHd Modulo N. Und hier unten laufe ich dann letztendlich über die Gruppenweise, über die Bitsform-Exponenten und multipliziere mein Zwischenwert mit dem, was ich hier vorberechnet habe, also mit der i-Input-Potenz halt. Und wenn dieser Wert, also dieses d von i, nun gerade eins ist, dann multipliziere ich quasi mit meinem Input Modulo N. Das heißt, ich weiß, dass meine Multiplikation selber bereits Seitenkanal-Effekte zeigen. Und was ich erwarten würde ist, dass wenn mein Input von der, also wenn mein C kleiner ist als der N oder als das N würde es andere Seitenkanal-Effekte erzeugen, wenn mein C größer ist als das N. Einfach, weil ich hier unten letztendlich die Multiplikation mit C habe. Das Problem an der Geschichte ist nur, dass dieser Fall, dass das wirklich mit C multipliziert ist, sehr selten auftritt. Also in diesem Fall finde 2048 Bit-Potenzierung, sind es etwa nur zwölf Multiplikationen, die wir wirklich, die wirklich Seitenkanal-Effekte verursachen. Aber mit ein bisschen Wiegen und Brechen kommt man dann irgendwann, das sind jetzt nach 500 Messungsbeispielsweise, zu dem Punkt, dass man wirklich die beiden Fälle unterscheiden kann. Also so sieht jetzt das Spektrogramm aus, wenn man, wenn beide Werte kleiner sind als der Modul. Und so würde das Spektrogramm aussehen, wenn der eine Werte kleiner ist und der andere Werte größer ist als der Modul. Damit könnten wir jetzt praktisch den Input, also also das C mit unserem Modul vergleichen über diesen Seitenkanal-Angriff oder über diesen Seitenkanal. Okay, so schön so gut. Wie könnte man das jetzt zum Beispiel auf RSA anwenden? Für die Leute, die RSA noch nicht so gut im Kopf haben oder es wieder vergessen haben, das funktioniert praktisch so. Ich wähle erst mal zwei Primzahlen, P und Q, die sind geheim. Und wenn ich eine von den beiden habe, dann ist RSA kaputt. Es ist ein Public-Key-Verfahren. Das heißt, ich habe einen öffentlichen und privaten Schüssel und man kann halt sagen, wenn ich das N kenne oder das N kenne ich und einer der Primzahlen kenne, kann ich die andere einfach herausrechnen. Dann wähle ich einen öffentlichen Schüssel. Das ist meistens eine Konstante. Und aus diesen öffentlichen Schüssel kann ich dann, wenn ich P und Q kenne und auch nur dann kann ich den privaten Schüssel D berechnen. Die Verschüsselung in RSA ist relativ einfach. Ich nehme die Nachricht, potenziere die mit meinen öffentlichen Exponenten, Module N, das ist mein Ciphertext. Und wenn ich die Nachricht endschüsse möchte, dann nehme ich den Ciphertext, potenziere den mit meinen privaten Exponenten, Module N und kriege meine Nachricht wieder raus. Nun habe ich gesagt, dass wir unseren Input mit unserem N vergleichen können, also mit dem Modul vergleichen können. Das ist in dem Fall relativ uninteressant, weil das N halt irgendwie, es ist bekannt, das ist Teil des Public Keys, das rauszubekommen wir jetzt nicht sonderlich interessant. Allerdings, wenn man eine, in der Praxis wird häufig eine optimierte Version von RSA verwendet, die den chilesischen Restsatz benutzt. Die ist etwa um Faktor 4 schneller, also das hat reine Performance-Grunde. Und so sieht die Berechnung aus. Und was wir hier sehen, ist, dass die eine Potenzierung, Modul N durch zwei Potenzierungen mit P bzw. Q ausgetauscht werden. Das heißt, wenn ich den Ciphertext von einer RSA Verschlüsselung kontrollieren könnte und diesen entsprechenden Seitenkanal messen könnte, dann könnte ich ihn mit entweder P oder mit Q vergleichen. Und damit könnte man dann letztendlich eine binäre Suche auf eine der beiden Primzahlen fahren und damit RSA brechen. Problem ist nur, also jetzt, das trifft nur auf OpenSSL und Nupigetsu. Für andere Implementierung kann ich nicht sagen, kann ich das jetzt nicht sagen, aber OpenSSL benutzt ein Countermeasure für Seitenkanalangriffe. Das nennt sich Blinding. Das funktioniert letztendlich einfach so, dass ich vorher eine zufällige Zahl R wähle, die mit meinem öffentlichen Schlüssel einmal verschlüsselt. Und dieses letztendlich zufällige Zahl dann auf meinen Ciphertext raufmultipliziere. Das Problem dabei ist, dass ich dadurch jegliche Struktur, die ich bräuchte, um den Angriff zu fahren von meinen Ciphertext zerstöre und somit keine Vorhersage darüber machen kann, wie eigentlich dieser Input zu der Potenzierungsmethode aussieht. Wenn ich das jetzt da oben gemacht habe, dann kann ich brechen nicht einfach ganz normal RSA. Und wenn man die Potenzgesetze anwendet, dann sieht man, dass da letztendlich M mal R als Ergebnis rauskommt, wenn ich das mit RSA entschlüsse. Und dann brauche ich letztendlich meine gebleinete Nachrichten und noch einmal mit R hoch minus 1 zu multiplizieren. Und dann kommt wieder meine Nachricht raus. Also das sind letztendlich nur zwei Multiplikationen, die ich overhead habe, aber dadurch RSA vor fast allseiten Kanalangriffen schützen könnte. Dennoch habe ich mir mal die Potenzierungsmethode so wie sie in OMSSL vorkommt genommen und habe mal versucht, ob man wirklich damit eine binäre Suche fahren kann und wie das eigentlich in der Praxis aussehen würde. Wie gesagt, wir müssen dafür annehmen, dass der Ciphertext nicht gebleindet ist, aber ich starte halt erst mal mit einem Referenzwert, der definitiv größer ist als Piola Q. Dafür setze ich einfach die ersten most significant bits des Inputs auf 1 und mein Secret starte sich dann auf 0. Und dann setze ich letztendlich das itibit jeweils auf 1, vergleich das mit meiner Referenz, die halt größer ist. Und wenn dabei halt Seitenkanaleffekte auftreten, dann, das ist genau falsch, das sehe ich hier gerade. Also wenn halt Seitenkanaleffekte auftreten, dann weiß ich, dass ich das bits auf 1 setzen kann, weil die Zahl halt kleiner ist. Im anderen Fall kann ich einfach weiter machen. Ich habe das damals auch einmal durchlaufen lassen und damit ihr meinen Eindruck habt, wie das aussieht. Also ich fange damit an, dass ich jetzt erstmal, ist es ein bisschen schnell, es ist ein sehr langsamer Angriff. Also dass ich erstmal meine Referenzwerte für Seitenkanaleffekte messe. Also ich habe hier jetzt das Großteil des Spektrogramms ausgeblendet, die einfach für den Angriff jetzt nicht relevant waren. Und hier sehe ich, das ist jetzt zum Beispiel der positive Case, dass halt Seitenkanale starke Unterschiede auftreten. Da sieht man hier schon leicht angedeutet diese rote Linie und direkt daneben die blaue Linie. Das sind meine, meine Unterschiede im Spektrogramm und was ich dann damals gemacht habe, ist einfach, den, den maximalwert in diesem Spektrogramm zu bestimmen, um halt ein Wert dafür zu haben, ob das jetzt stärker oder ob das ein starker Seitenkanal oder starke Unterschiede sind oder nicht. Und natürlich noch einmal den Negativtest, halt, dass wenn beide Zahlen halt kleiner sind als der Modul oder größer sind als der Modul, hat man halt nur Rauschen und entsprechend dasselbe, dasselbe dort nochmal gemacht. Und jetzt geht da eigentlich Angriff los. Also ich bin schon mal davon ausgegangen, dass das erste Bit hier oben, das hier steht, ist mein bekannter Modul. Ich bin davon ausgegangen, dass das, dass das erste Bit schon eins ist, deswegen steht da vorne in der Acht. Und ich setze jetzt das zweite Bit zusätzlich nochmal auf eins und vergleiche das quasi mit meinem Referenzwert, der sowieso, der sowieso größer ist als, als der Modul. Und wir sehen hier halt, dass da schon deutliche Unterschiede zu erkennen sind. Und deswegen, wenn ich das laufen lasse, setze ich hier oben in meinem bekannten Teil, das den entsprechenden, das entsprechende Bit auf eins. Was ich, jetzt habe ich hier, teste ich das gleiche nochmal mit einem E. Und da sehen wir halt noch keine Linien und dementsprechend, wenn man genau sagt, dann sagt mir das Programm auch dort unten, das Bit war 0. Und wenn wir das jetzt so ein bisschen laufen lassen, also gestartet habe ich das um 18 Uhr irgendwas und das mal ein bisschen schneller laufen lassen. Dann sieht man halt, dass hier oben so ganz langsam der Stringdead-Beef raus ist, was damals der Modul ist, den ich gewählt habe. Also das ist auf jeden Fall ein Weg, wie man den Modul extrahieren kann. Es ist in dem Fall relativ aufwändig. Ich muss auch sagen, dass diese Unterscheidungsmethode, die ich getroffen habe, einfach minimal und maximal zu bestimmen, nicht sonderlich robust ist, weil dann hier oben dann unter Umständen zufällig einfach durch Rauschen große Unterschiede auftreten und dadurch dann halt letztendlich der ganze Angriff irgendwann abricht. In dem Fall war das auch nach, ich glaube, 84 Bit ist damals der Angriff abgebrochen und wenn man jetzt mal auf die Uhr guckt, wir haben jetzt etwa 64 Bit, das so reichen für 64 Bit ist es etwa 21 Uhr irgendwas. Also letztendlich der ganze Angriff für die 84 Bit hat damals glaube ich fünf Stunden gebraucht. Ja, das kommt hin. Also ist nicht sonderlich schnell, aber es ist auf jeden Fall etwas, was theoretisch funktionieren könnte. Genau, das haben wir gesehen. Also wie gesagt, es ist langsam, aber es funktioniert. Es gibt ein gutes Paper von Shamir und Genkin, die haben halt eine ähnliche Arbeit gemacht. Die hatten damals einen deutlich schnelleren Angriff, damals auch auf diese MRA-Akt-Potenzierung. Dem will ich jetzt heute nicht vorstellen, dass etwas komplexer, braucht noch ein bisschen mehr Signalverarbeitung, habe ich leider auch damals nicht zum Laufen gebracht. Worauf ich mich jetzt vor allem noch mal konzentriere, ist mal ein Arduino. Also ich habe, okay, ich habe jetzt gesehen, man kann halt irgendwie Desktop PCs angreifen. Es ist ein bisschen schwierig, aber es funktioniert. Und das war damals, oder das ist dieser Versuchsaufbau, dass ich halt hier eine deutlich kleinere Antenne nehme und die direkt über die Spannungsversorgung von dem Chip hänge. Und mal versuche dort, Seitenkanaleffekte zu messen. Der Vorteil in dem Fall ist, dass die Clockrate von der CPU halt deutlich langsam ist, also irgendwie 16 Megahertz und es lässt sich halt definitiv besser verarbeiten als beim Desktop PC. Das Kryptoverfahren, was ich mir angeguckt habe, in dem Fall war DES. Aber da ich jetzt ein komplett neues Gerät hatte, wusste ich jetzt auch nicht, wo Seitenkanaleffekte überhaupt auftreten. Die Methode, die ich ganz am Anfang erklärt habe, wie ich überhaupt diese Carrier-Signale finde, kann ich halt auch dafür missbrauchen, um einmal über das komplette Spektrum rüberlaufen zu lassen. Und letztendlich die Response von diesem Wavlet mal über das komplette Spektrogramm zu mir anzugucken. Und dabei ist etwas, da kommt so etwas raus wie hier oben und wir sehen hier, dass bei 128 Megahertz hat dieses Wavlet, ich sage mal, einem sehr starken Zusammenhang zwischen das Programm rechnet nicht oder rechnet und dem der Intensität einer Frequenz rausgefunden. Also wir können halt hier sehen, dass in diesem Frequenzbereich relativ stark sein kann, an den Effekten auftreten. Wie gesagt, ich habe dann einfach mal DES auf dem Arduino implementiert und zum Laufen gebracht und hier unten sieht man jetzt ein Spektrogramm von einer DS-Routine. Also es ist gemittelt über mehrere Ausführungen und was man hier jetzt sieht, ist ein Pattern, was sehr regelmäßig aussieht. Also man kann hier irgendwie immer so zum Beispiel Linien erkennen, die sich wiederholen und das ist wahrscheinlich ziemlich krebsig zu lesen, was hier steht. Aber wenn man die Punkte oder dieses Pattern, was sich wiederholt, mal wirklich durchzählt, kommt man genau auf 16 und DS ist eine symmetrische Schifre, die halt genau aus 16 Runden besteht. Also was wir hier wirklich sehen, sind die einzelnen Runden, während sie auf dem Arduino durchlaufen. Das heißt, das ist schon mal ein gutes Zeichen, einmal, dass unser Alignment gut genug ist, um einzelne Runden zu unterscheiden und anzugreifen und dass dort auch anscheinend Zusammenhänge zu erkennen sind. Im Vorwege muss ich sagen, ich habe leider keine Keyboards heraus extrehen können, aber was ich damals gemacht habe, ist einfach mal zwei unterschiedliche Inputs, also zwei unterschiedliche Werte zu entschlüsseln und zu gucken, ob die zu unterschiedlichen Seitenkanaleffekten führen. Hier oben sieht man so ganz schwach Linien, die halt mit den Runden übereinstimmen, aber wo man das viel deutlicher sieht, ist hier die Scala. Also wenn ich halt zwei unterschiedliche Werte entschlisse, dann sehe ich hier halt einen Maximalwert von 0,6 und wenn ich zweimal den Wert 0 verschlüsse, dann komme ich hier nur auf Maximalwerte von 0,2. Das heißt jetzt wiederum, dass ich definitiv irgendwie einen Zusammenhang zwischen Daten auch habe, also das ist nicht nur einfach Pattern sind, die durch die Instruktion verursacht werden, sondern das ist halt wirklich auch die Daten unterschiedliche Seitenkanaleffekte verursachen und dies könnte man beispielsweise nutzen, um eine Correlation Power Analysis zu machen. Ich habe es versucht, irgendwo habe ich da noch einen Fehler an der Implementierung denke ich, aber das ist auf jeden Fall etwas, was definitiv möglich ist. Dann noch einmal zum Schluss. Genau, ich habe das Ganze mit Radio damals implementiert, ist ein Super Frame Wort, gerade wenn man neu ist im Bereich Software Defined Radios, ist es gut, um reinzukommen. Man kann letztendlich ein Flow Graph implementieren in einer GUI, der wird dann zu einer Python-Klasse exportiert, die kann ich direkt in mein Programmcode nutzen und die ruft letztendlich C++-Rotiden auf und daher ist das Ganze auch einigermaßen effizient. Für ein Desktop PC muss man sagen, dass eine Unverschrift oder ein nicht gebleinetes RSA eingreifbar ist. In dem Fall war der Angriff sehr langsam, wie es mit symmetrischen Schiffren aussieht, ist es ein bisschen schwierig, weil die sind um einige schnelle RSAs und Verfahren, was ziemlich langsam ist, gerade weil ich mit diesen großen Zahlen rechnen muss. Symmetrische Schiffren auf einem Desktop PC, sag ich jetzt mal anzugreifen, ist etwas schwierig, aber ich weiß nicht, ob es funktioniert. Fürs Arduino, symmetrische Krypto könnte verwundbar sein oder ist wahrscheinlich verwundbar. Ich habe es noch nicht hinbekommen. Diese Versuche, die ich hier damals gemacht habe, lassen sich letztendlich auch auf viele andere Embedded Devices übertragen, also das ist jetzt nicht so, dass ich dann nur mein Arduino zu Hause angreifen könnte, sondern generell alle CPUs, die halt so in dieser mit ähnlichen Frequenzen arbeiten, weisen entsprechend auch häufig Seitenkanalefekte auf. Was ich mir leider noch nicht angeguckt habe, was auch ein interessantes Ziel ist, wären Mobile Devices, das ist so inzwischen Fall zwischen Embedded Devices und Desktop PCs. Also die Architektur von diesen Geräten ist deutlich deutlich einfacher als jetzt bei einem Desktop PC, aber komplexer als beim Embedded Device. Gankin und All haben dazu schon Arbeit veröffentlicht, die haben es wo hinbekommen, aber dafür hat mir jetzt persönlich noch die Zeit gefehlt. Genau und falls Interesse hat, hier unten ist noch ein Link zu dem Projekt und das war es von meiner Seite, habt ihr Fragen. Hi, welches SDR Device hast du da anfangs verwendet? Du meinst den Desktop PC? Das erste, das war damals ein Dell Optiplex, das war bei uns in der Uni so diese Standard Workstations, die wir damals für uns zur Verfügung gestellt haben. Ich habe das damals auch auf meinen eigenen Desktop Rechner getestet, es hat auch funktioniert. Generell kann man sagen, wenn du ein anderes Device hast, dann hast du auf jeden Fall immer auch seinen Kanal Effekten im anderen Frequenzbereich und damals hatte ich halt noch nicht die Methode, dass man, dass sie über das Spektrum einmal rüberscannen kann und zu gucken, welche Frequenzbereiche sind überhaupt interessant, sich anzugucken. Von daher war das damals immer so ein bisschen schwierig, den Angriff auf ein neues Gerät zu portieren, aber das ist definitiv etwas, was man sich vielleicht noch mal ein bisschen angucken könnte. Also in der Regel trifft das auf sehr viele oder auf etliche Geräte zu. Und welches SDR hast du da benutzt? Das habe ich jetzt mit den USRP B200 gemacht, einfach weil es muss man leider sagen irgendwie hübschere, eine bessere Auflösung hat und ein bisschen sauberer Daten liefert alleine schon wegen der Sampling-Tiefe, also das hat ein 12-Bit-Converter und das RTLSR nur ein 8-Bit, von daher sehen die Spektrogramme nicht ganz so grobkörnig aus. Es würde aber allen von der Bandbreite her auch definitiv mit den RTLSR funktionieren, wenn du halt einen Abkonverter hast. Weitere Fragen? Bei was für Frequenzen lagen jetzt die Signale, die du auf dem Desktop-Bit-See empfangen hast? Du hast ein kleiner 4-Mega-Herz gesagt. Da müsste man nochmal in die Spektrum. Da steht es nicht. In dem Fall ist das hier die sind 0 Mega-Herz und das hier sind 2 Mega-Herz, also 2 Mega-Herz-Bandbreite. In dem Fall, da steht es nicht dabei. Ja, also letztendlich waren sie definitiv unter 4 Mega-Herz, aber die stärksten glaube ich so Pima Down bei 2. Dann bedanke ich mich und tschau!