 Okay, also ich erzähle euch was zu Seitenkanal-Angriffen innerhalb FPGA-Chips. Das heißt, um was geht es? Um Field Programmable Gate Arrays, FPGAs, das ist programmierbare Hardware. Die ist immer häufiger anzutreffen in verschiedenen Systemen, was sich dann noch darauf eingehen wird. Und Seitenkanal-Angriffe, das sind Angriffe, die durch Nebeneffekte einer Implementierung funktionieren. Also zum Beispiel auch Stromverbrauch oder manche haben in letzter Zeit vielleicht von Spectre & Meltdown gehört. Zeit-Timing-Side-Channel-Angriffe. Um was geht es aber nicht? Es geht nicht um traditionelle Messungen an der Platine. Das gibt es schon, sondern ich präsentiere hier neuere Forschungsergebnisse. Die Statistik, die wir verwenden, ist aber eigentlich ein Sicht dieselbe. Um was es hier geht, sind Software-basierte Messungen, die man innerhalb vom Chip machen kann. Und wir messen dann trotzdem Strom und Spannung, aber eben indirekt. Also Angriffe, die vergleichbar sind vielleicht mit Rohammer, Glockscrew, wenn das hier jemand kennt, Meltdown & Spectre. Ich will jetzt aber hier auch nicht sagen, dass es so kritisch ist wie diese Angriffe, weil mir bekannt sind jetzt keine kommerziellen Systeme, die jetzt großflächig damit exploitable werden oder sowas. Wer bin ich? Also ich bin Doktorand am KIT in der technischen Informatik. Am besten, wenn er mich erreichen wollte, schreibt er mir eine KIT-E-Mail. Meine Themen sind so Zuverlässigkeiten, Sicherheit von FPGAs bezüglich Laufzeitschwankungen. Also eigentlich komme ich auch eher von der Hardware-Seite und bin kein Krypto-Experte. Und es ist aber aufgefallen, dass man das möglicherweise auch für Security-Anwendung verwenden kann. Okay, die Agenda von dem Vortrag ist jetzt nochmal eine ein bisschen genauere Einleitung, um was es eigentlich genau geht. Danach erkläre ich dann, was zu FPGAs und Side-Channel-Angriffen in bisschen mehr Details. Dann bastel ich das mehr oder weniger zusammen und zeige, wie man das innerhalb vom FPGA machen kann. Und ein kurzes Fazit mit Fragen. Zwischenfragen sage ich dann, wann die angebracht sind. Okay, also erstmal zur FPGA-Chips und deren Anwendung und den Power-basierten Side-Channel. Verschiedenes auch nochmal. Eventuell komme ich dazu über, dass ich manches irgendwie so halb Englisch sage, seit dem Kanal-Angriff ist jetzt auch nicht ganz so häufig. Man nennt es halt eher Side-Channel oder sowas. Sorry dafür. Zeit für Fragen zum Schluss. Und zwischendrin für das Grundverständnis würde ich sagen auch noch Teil zwei. Dann können wir so gucken, dass jeder ungefähr auf demselben Level ist, dass er auch den Rest besser verstehen kann. So, wo werden FPGAs eingesetzt? FPGAs sind programmierbare Hardware. Und wurden eher so für Prototyping oder Kleinserien eingesetzt. Sie sind halt ineffizienter gegenüber ASICS, die speziell für eine bestimmte Anwendung gefertigt werden. Könne aber zum Beispiel auch als Glue-Logic verwendet werden. Das heißt, wir haben jetzt Chip A und Chip B auf dem Board und die reden nicht so ganz miteinander, dann macht man FPGA dazwischen. In der Vergangenheit oder auch heute noch sind FPGAs viel Netzwerkanwendung im Einsatz. Und der Trend geht jetzt halt auch dazu, die als Rechenbeschleuniger zu verwenden. Zum Beispiel bietet jetzt Amazon schon in ihrer Cloud irgendwelche mietbaren FPGAs an, die man verwenden kann, genauso wie GPUs. Microsoft verwendete selbstwohl, sagen sie, im Hintergrund eben. Und in der Alibaba-Cloud kann man auch FPGAs mieten. Die sind integriert. Zum Teil gibt es auch integrierte FPGAs zusammen im selben Chip mit CPU-Kern. Und in Smartphones gibt es auch schon FPGAs. Also das iPhone soll wohl einen haben als Beschleuniger für Machine Learning oder sowas. Und oft ist es eben auch wiederum nur Glue-Logic. Jedenfalls werden FPGAs immer mehr Mainstream. Das heißt, es wird auch interessanter, die zu betrachten, was irgendwelche möglichen Probleme damit sind, sein könnten. Also softwares Sichtweise, weil ich denke mal, das ist die Sichtweise der meisten Leute hier, vermute ich einfach mal. Und für das Rechnen ist es auch die richtige Sichtweise, die man auf FPGAs haben sollte, als Rechenbeschleuniger. Dann sind die eben extrem parallel. Also wir können ganz viele kleine feinkranular Instruktion oder Logik im FPGA implementieren, um verschiedene Dinge parallel zu lösen. Anstatt jetzt vielleicht auf Instruktionsebene oder mehrere parallele Threads, haben wir tatsächlich eher auf Bit-Logic-Ebene die Parallelität. Es sind daher auch komplexer zu programmieren. Wenn man es jetzt einordnen würde, dann könnte man es hier sagen, auf der linken Seite ist ein Standardprozessor oder CPU, der ist relativ universal und einfach zu nutzen. Und auf der rechten Seite wäre ein ASIC, also ein Prozessor oder ein Chip, der extra für einen bestimmten Algorithmus oder bestimmte Funktionen gefertigt wurde. Der ist komplex, teuer, aber eben sehr effizient. Es könnte man zwischen GPUs oder Grafikkarten und FPGAs ansiedeln. Die haben dann auch eine gewisse Überlappung. Also wenn man jetzt extrem speziell oder wenn man extrem Matrix Berechnungen macht, sowas in der Richtung, dann sind GPUs oft trotzdem noch effizienter wie FPGAs und sonst kann man in vielen Anwendungen mittlerweile sagen, dass FPGAs wohl effizienter sind, wenn man denn die Effizienz auch wirklich rausholen kann durch die jeweilige Programmierung. So, jetzt wollte natürlich auch wissen, wie ein FPGA aufgebaut ist. Da sieht es im meisten Fällen so in etwa aus, also wenn das jetzt der Chip ist, dann haben wir eben verschiedene, ich stehe so, fast zum Rücken, wir haben eben verschiedene Programmierbare Verbindungen und zwischen den Programmierbaren Verbindungen, okay, ich kann mal ein Maus nehmen, sorry. Okay, also wir haben Programmierbare Verbindungen und Programmierbare Logikblöcke. Logikblöcke bestehen aus, im simplesten Fall, aus Look-up-Tables. In den Look-up-Tables haben wir ja ein Teil davon vordefiniert, also wir haben schon fertig da ein bestimmtes Element in Hardware sitzen, also das ist in Silicon praktisch implementiert. Was wir aber definieren können, sind dann die Ausgänge dieser Look-up-Table. Also wir haben definiert schon bestimmte Eingänge und wir können für die Eingangskombination entscheiden, was der Ausgang sein soll. Damit kann man dann verschiedene Logikfunktion beliebig implementieren. Im Detail müsst ihr das jetzt nicht anschauen hier rechts. Was dann auch noch drin ist, sind eben bestimmte Speichelemente, das sind normale Gister und die können dann eben den Wert übernehmen. Natürlich kann man jetzt aber mit so einem einzelnen Block noch nicht viel Logik implementieren, wir brauchen jetzt dann auch mehrere und die kann man dann globaler eben vernetzen mit Switch-Matrixen, das heißt wir haben prinzipiell Gitter und jeder von den Gitterpunkten kann eben entweder verbunden werden oder nicht verbunden werden und dadurch kann man dann sein komplettes System zusammenbauen. Das sind jetzt Details vielleicht zu viel erstmal und für Standardentwickler ist es auch unnötig, ich komme später zu mehr hier dazu. Jedenfalls man hat sehr viel Freiheiten, deswegen ist es eben auch so schwierig jetzt einfach mal kurz ein Programm oder so für ein FPGA zu kompilieren und dass es dann auch effizient gehen würde. Jetzt eine kürze, was sind passive Side-Channel-Angriffe? Also wir messen etwas in einem System und versuchen durch das Messen Geheimnisse zu extrahieren und dieses, was wir da messen, sind normalerweise irgendwelche Nebeneffekte, die nebenher passieren, also versehentlich oder kaum vermeidbare Laufzeiteffekte. Ich würde es jetzt ein bisschen sogar unterscheiden zwischen versehentlich und kaum vermeidbar, das können wir jetzt drüber diskutieren und es geht halt damit komplett algorithmisch in logische Sicherheit. Da kann man, kann zwar auch gegen Side-Channel-Counter-Messers machen durch bestimmte algorithmische Verfahren, aber letztendlich umgehen die Side-Channel ist halt, was in Algorithmen so implementiert ist. Und es können jetzt halt Schwankungen im Stromverbrauch sein oder es können auch so was sein, das ist so klassisch elektromagnetische Abstrahlung, das Fun-Agg-Freaking, was man so aus den 80er Jahren oder so schon kennt, mit, wenn man jetzt irgendein CRT-Monitor hat und seine Antenne drauf ausrichtet, dann kann man vielleicht das Bild von dem Monitor sehen oder so was, so diese Geheimdienst-Methoden da. Also es gibt es schon eigentlich viel länger. Zeitbasierte Side-Channels gibt es eben auch, genutzt Inspector und Meltdown. Und man kann auch sehr kreativ hier sein, sogar durch Spulen, Fiepen, also durch akustische Abstrahlung, kann man eventuell sehen, was so ein Prozessor berechnet. Das muss jetzt nicht im Hörbahndereich sein, das kann auch im Ultraschallbereich sein oder so. durchaus möglich gibt es zumindest Veröffentlichungen dazu, wie praktikabel die sind, weiß ich jetzt nicht. Einzelne Messungen kann man jetzt für so Side-Channels machen. Wir messen einen Spannungs-Trace, ob man da jetzt wirklich was sehen kann, nicht immer, also in vielen Sachen nicht. Deswegen gibt es halt diese Differential-Power-Analysis, wo man jetzt statistisch versucht, die Daten rauszukorellieren oder rauszufinden, was denn jetzt wohl die CPU berechnet. Da erzähle ich dann später ein paar Mehrdetails dazu. Jetzt komme ich noch zur aktiven Side-Channel-Angriffen, das ist nicht ganz so das Thema in einem Vortrag. Aktiv sind eigentlich dann Fault-Attacks, das heißt wir versuchen Fehler in ein System einzubringen. Das wäre zum Beispiel Rohammer, das ist ja eine Datenmanipulation letztendlich durch irgendwelche Faults, die man in das System einbringt. Es gibt auch Differential-Fault-Analysis, da versucht man jetzt in einzelnen Berechnungsschritten von dem Algorithmus Fehler zu erzeugen und dann zum Beispiel über ein Cypher-Text-Per, wo der eine Cypher-Text korrekt ist und der andere Fehler hat, kann man dann letztendlich auch über bestimmte Verfahren den geheimen Schlüssel extrahieren, wenn man ein paar solche Paare sammelt. Das wurde auch schon Software basiert gezeigt durch Power-Management-Funktionen in irgendwelchen SOCs, also System- und Chip-Systemen, wo jetzt auch irgendein Arm-System, wo eine CPU drin war und noch andere Module, aber die CPU eigentlich keinen Zugriff auf die anderen hatte und dementsprechend wurde über Power-Management aber ein AIS-Modul angegriffen. Das nennt sich dann Clockscrew, das wurde in Newsnicks vorgestellt letztes Jahr, ist auch öffentlich zugänglich. Das ist jetzt aber auch fast alles, was ich zu dem Teil sage. Der zweite Teil werden erzeugen von massiven Fehlern durch Faults, also von Crashing oder Blockieren von Diensten. Eventuell könnte man das so was wie Stux-Net nennen und es kann halt auch zu Denial of Service führen oder sogar permanent Denial of Service. Was wir jetzt hier gelernt haben in dem kurzen WAS-Ausblick, also WAS sind FPGA-Chips und die Einsatzzweck und WAS sind Side-Channel und Fault-Angriffe, dann komme ich jetzt als Nächstes zu ein paar Mehrdetails, wie man jetzt tatsächlich die FPGA benutzen kann und wie Power-basierte Side-Channel-Angriffe funktionieren. Und auch noch mal ganz kurz, ein bisschen mehr zu Fault-Angriffen. Also das ist jetzt Teil 2. Nach dem Teil 2 würde ich dann ein paar Fragen entgegennehmen, aber jetzt erst einmal ein paar Mehrdetails noch. Erst einmal zu FPGAs und allgemein digitaler Logik, für jemand, der jetzt noch nichts von digitaler Logik gehört hat bisher, dann noch zur Stromversorgung in integrierten Schaltkreisen, was eine wichtige Grundlage für das Ganze ist und dann Power-Side-Channel und Fault-Angriffe. Also noch mal ein bisschen detaillierter zu den FPGAs. Wir haben jetzt irgendwelche Lookup-Tables, die wir in den FPGA mapen und wir können flexibel beliebige Logikfunktionen schalten. Also versucht es keinen Sinn in dem Folgen zu finden, wir haben jetzt halt irgendwelche Logikverknüpfungen, die könnte man jetzt eben auf die Lookup-Tabelle mapen und alles wird hier gleichzeitig in einem Zeitschritt ausgeführt, wenn man jetzt in so Zeitschritten denken würde. Und alles aber parallel. Also, wie gesagt, so Art-Bit-Parallel könnte man das jetzt nennen. Nicht einzelne End-Instruktion, OR-Instruktion, XOR-Instruktion, sondern in einem Zeitschritt. Das kann man jetzt ein bisschen weiterspinnen und kommt dann zur digitalen Logik, zur Register-Transfer-Ebene. Das heißt, wir haben in einem Zeitschritt hier die kombinatorische Logik stehen. Man legt am Anfang praktisch seine Daten hier an und dann wartet man irgendwie ein bisschen und dann hat man am Schluss das Ergebnis. Und das ist halt physikalisch auch ein bisschen limitiert. Aber in der in digitaler Logik macht man eben deswegen Register hin. Und hat jetzt am Anfang Register und am Ende Register und wenn man jetzt sagen würde, die laufen zum Beispiel bei 100 Megahertz, dann dauert es eben, hat man so viel Zeit dazwischen, wie eben 100 Megahertz dauert, also 10 Nanosekunden von einem bis zum anderen Register. Ansonsten funktioniert es nicht richtig. Also, wir können die Logik jetzt in einem FPGA sogar komplett frei wählen. Also, wir können hier beliebig sagen, beliebig viele Elemente hintereinander schalten. Aber wenn wir dann noch 100 Megahertz verwenden, aber die Logik würde viel länger dauern, dann gäbe es natürlich Berechnungsfehler. Also, wie je mehr Logik pro Zeitschritt, desto langsamer wird das Ganze auch. Und zusätzlich sollte man hier sagen, das verwenden wir später, die Geschwindigkeit ist eben auch abhängig von Temperatur und Spannung. Das heißt, es sind Sicherheitsmarschen notwendig, dass es keine Rechenfehler gibt. Falls wir das denn wollen, das zeige ich ich auch noch später. Jetzt kommen nochmal ein paar mehr Details, wie man eben diese Logik in FPGA springt. Also, wie machen wir das überhaupt? Wir müssen jetzt nicht tatsächlich jedes Bit hinsetzen oder so, sondern es geht ein bisschen abstrahierter. Deswegen gibt es Hardware Description Language. Die werden in der Industrie als Standard Verilog und VHDL verwendet und werden halt Chips damit entwickelt. Das ist effizient und präzise, aber man sollte es auch nicht, wie eine Programmiersprache verstehen. Ansonsten kommt wahrscheinlich nichts Sinnvolles dabei raus, weil man eben auf dieser Klockebene denken muss, dass es auch wirklich funktioniert. Es gibt es aber eigentlich auch High Level Sprachen, die sind dann für eher algorithmische Beschreibungen geeignet, wie OpenCL oder C++, was vom Hersteller dann abhängt, was er dir denn für ein Tool gibt. Also überhaupt diese FPGA-Tools sind sehr proprieter, es gibt leider sehr wenig sinnvoll benutzbare Open Source Tools. Wie auch immer, die High Level Sparen sind immer noch relativ ineffizient und in dem Vortrag jetzt hier auch gar kein Thema. In dem VHDL grundlegend machen wir ein Takt gesteuertes Zuweisen von Werten. Also wie gesagt, wir haben ja immer kombinatorik und segmentielle Logik und wir müssen dann intakten Denken, wie das zugewiesen wird, dass unsere Schaltung auch funktioniert. Also zum Beispiel hier habe ich ein kleines Beispiel in VHDL. Wir sehen hier ein Counter, der ist als Prozess deklariert und der Prozess ist jetzt sensitiv, nennt man das, auf den Klok und der Prozess machen wir eine Bedingung, die schaut ob jetzt der Klok eben eine Rising Klok Edge hat. Das heißt, wir haben eine ansteigende Taktflanke, das heißt, in jedem Taktschritt gilt diese Rising Edge Bedingung. Das heißt, wir haben ein Event, der praktisch einmal pro Takt passiert und dadurch tun wir einmal pro Takt, machen wir diese Plus Zuweisung hier. Also wir sehen hier A ist A plus 1 und der VHDL-Kompiler ist das, was da links steht. Also wir haben ein Plus und dann ein Register und das ist jetzt so ein Loop und mit 100 MHz zählt da jetzt immer Plus 1 auf eben dieses A, was in diesem Register gespeichert ist. Wenn man jetzt noch einen zweiten Counter will, geht es in VHDL relativ einfach. Man kann jetzt ganz viel parallel arbeiten, die Blöcke machen. Ich kann jetzt einfach sagen, Counter 2 auch kloksensitiv B, wenn man das halt oben drüber deklarieren muss, da habe ich zwei Counter, die parallel die ganze Zeit hochzählen. Es könnte natürlich unterschiedliche Schaltung machen, genau das Identische macht wohl wenig Sinn und kann so meine Logik aufbauen. Wenn ich jetzt allerdings, was sequenziell machen will, muss ich selber mich darum kümmern, dass nacheinander verschiedene Schritte auch passieren, wo zum Beispiel State Machines ganz gut geeignet sind. Dann könnte ich in die If-Bedingung zusätzlich schreiben, wenn man in State 1 bis 2, 3 und dann kann ich die States durchgehen und dadurch irgendwelche sequenziellen Dinge abhandeln. Eigentlich schreibt man das Ganze auch so, wenn ihr gerade gesehen habt, was sich verändert hat. Wir haben jetzt so ein kleines Dreieck dahin gemacht, das bedeutet so viel, dass der ganze Block taktsensitiv ist, das heißt pro takt schaltet der einmal einfach zur Vereinfachung. Normalerweise versteht der Digital Designer dann, wenn dann Dreieck sieht, auch ohne dass ein Klok verbunden ist, dass wir vermutlich einen Klok haben, um das Ganze takt gesteuert zu haben. Jetzt fragen wir uns vielleicht zu dem, weil das, was ich vorher gesagt hatte, war ja okay, das ist temperaturabhängig und so weiter. Wie lange braucht es Plus? Das ist halt abhängig vom Mapping auf die FPGA-Architektur und wir sagen normalerweise, unserem Compiler beziehungsweise Synthese-Tool heißt es eigentlich richtig, nicht Synthese, also nicht Compiler, sondern Synthese, welche Frequenz wir uns denn so wünschen. Und dann versucht das Tool, diesen Wunsch zu erfüllen, also der Compiler-Mapper, versucht diese Frequenz zu erreichen mit immer mehr iterativen Optimierungsschritten und verwendet auch im Hintergrund physikalische Modelle dafür. Und wie gesagt, ist es abhängig von Temperatur und Spannung, deswegen sind die Modelle meistens halt Worst Case-Modelle. So, wenn man jetzt in digitaler Logik oder in VHDL eben was schreibt, dann will man natürlich nicht eine riesige Datei machen, sondern das auch strukturell machen. Man verwendet auch Libraries, wie in Programmiersprachen oder so, das nennt man dann eher strukturelle Modellierung. Also wir verwenden Komponenten wieder und man kann jetzt auch, das ist nämlich jetzt schon mal vorweg, man kann jetzt hier auch herstellerspezifische Architektur nutzen, das heißt, anstatt jetzt andere hierarchische Komponenten zu verwenden, kann ich jetzt ganz exakt sagen, ich will jetzt dieses Loot5-Element kurz, heißt es jetzt bei Xilinx, dem einen Hersteller verwenden und kann es dann in VHDL auf diese Art hier verwenden. Hier sieht man das Ring Oscillator. Es ist der Name von unserer Komponente. Loot5 ist praktisch, kann man mal sagen, die Klasse, die wir instanzieren und da ist noch eine Generic Map. Diese Generic Map bedeutet Parameter, die man ja im ganzen zur Compile-Zeit übergibt und eine Portmap. In der Portmap machen wir jetzt halt die ganzen Verbindungen. Das sind es aber halt elektrisch sozusagen Verbindungen, das sind jetzt nicht irgendwie Parameter, die man dem ganzen übergibt, sondern jetzt Verbindungen, die man sich eher so strukturell vorstellen muss. Also wir haben ein Output-Wert, das O ist der Output, die ist der Lookup-Table und da haben wir ein Signal, das heißt Self-S, als einer der Inputs Self-S. Als einen anderen Input haben wir Enable und alle anderen Inputs sind jetzt auf Null, also ich hätte hier auch eine Loot2 verwenden können, ich brauche eigentlich nur zwei Inputs. Was es in dem Fall realisiert, zeige ich dann auch noch mal später. Jedenfalls kann man halt so jetzt strukturell modellieren. Man kann das Ganze dann auch mehr reproduzieren, also mit einem Generate mehrfach generieren, das ist dann aber auch ein Generate von I, Null bis RO Max, also mir erstellen ganz viele von diesen Ring- Oscillatoren, haben aber das gleiche Enable-Signal und nur ein anderes Self-Signal, das wird auf sich selbst verweist, also es ist einfach ein Array sozusagen als Self-Signal. Was das tut, komme ich auch später noch dazu. Jetzt einen Blick auf so einen kompletten FBGA, das hier, was ich gerade zeige, ist ein Floorplan, nennt man das, also komplett, wenn man Chip jetzt von oben würde, hier aber auf eher schematische Weise dargestellt, dann sieht man, kann man verschiedene Sachen, wenn man reinzoomt, sehen die eben in dem FPGA an welcher Stelle die exakt platziert sind. In dem Fall sieht man jetzt das ganze Blaue hier in der Mitte, das sind eben schon fertig platzierte Elemente und wenn man sich das genauer anschaut, kann man sich jetzt eben diese Logikfunktion anschauen. Also hier ist jetzt ein Schaubild, wo man sieht, dass diese schaubare Verbindung, diese Switchmatrix ist, auf die gehe ich jetzt nicht näher ein und sogenannte Slices und ein so ein Slice wiederum ist dann aufgebaut, auch in diese Lookup-Table-Elemente wie vorher erwähnt. In dem Fall ein spezielles Carry4-Element, da gehe ich später auch drauf ein und Latches und Register. Es gibt auch noch mehr, also es gibt speziellere Elemente, DSP-Blöcke, die jetzt dann Floating Point können, eventuell oder zumindest Multiplikation beschleunigt oder Division solche Sachen. Blog-Speicher, dass man ein paar mehr SRAM-Zellen hat in dem Ganzen und nicht nur die Register benutzen muss und dieses Carry4 in dem Beispiel kann man jetzt auch wieder instanzieren ist auch so ähnlich wie vorher, man hat ja auch verschiedene Inputs und Output-Signale und nochmal zu einer anderen Darstellung, weil ich die später benutzen werde. Hier zeige ich jetzt auf der linken Seite in der Darstellung mit ausgeblendeten Verbindungen, das ist etwas leichter zu sehen, finde ich zumindest oder auf der rechten Seite sieht man es nur schematisch, das sind dann die Verbindungen einfach aus durchgezogenen Linien, dann stellt man tatsächlich dieses exakte Interconnect-Netzwerk sehen muss, was nicht unbedingt immer relevant ist. Wenn man das jetzt in Code machen will, das ist vielleicht ganz interessant, Sightings sieht eher vor, dass man das in separate Dateien schreibt in irgendwie Constraints Dateien, dann ist relativ statisch, also hier unten sage ich jetzt eine Constraints Datei, wo man jetzt ein bestimmtes Slice irgendwie platziert, ich weiß nicht ob er das alle lesen könnte, ist auch nicht so wichtig, ich sage eigentlich alles dazu. Das geht teilweise auch eben als VHDL Attribute, also hier rechts seht ihr jetzt, wie ich verschiedene, man sieht oben Library, das ist die Library die man verwendet, dann der Sensor wie genannt wird, dann kommt Architecture und da ist der interessantere Teil das sind Attribute, die man in VHDL schreiben kann, zum Beispiel ist hier so was wie Keep und S, die braucht man um den Compiler beizubringen, nicht irgendwas weg zu optimieren, was man behalten will, zum Beispiel mit Absicht irgendein Delay oder sowas, dann gibt es aber dieses Arlock Constraint, das hier schon angewandt wurde, da sieht man Arlock of CI4, also hier das hat ein bestimmtes Label und das heißt das Label ist die Position an der man das jetzt platzieren will, aber weil es ein Arlock ist, ist es eine relative Platzierung, wenn man dann wieder links auf diese Constraint Datei geht, sieht man der Constraint Datei, geben wir an ein Lock, das heißt, wir sagen wo wir jetzt dieses eine Element platzieren wollen, wenn wir jetzt aber in derselben Hierarchie mehrere Arlock, also Relativ Location Constraints macht kann man so ein ganzes Modul aufbauen und die ganzen Relativen Locations zueinander und dann dieses Modul mehrfach an verschiedenen Stellen eben im FPGA platzieren da gibt es dann noch mehr Constraints um das dem Tool auch beizubringen, dass es auch wirklich tut, weil sehr oft wird irgendwas verändert und umoptimiert leider meistens funktioniert es dann aber doch ganz gut, wenn man mal ein bisschen mit rumgespielt hat das war es glaube ich zu der Slide schon da komme ich noch mehr dazu später, ok also, jetzt komme ich zum Spannungseinfluss auf Transistorien also wenn man diese Grafik anschaut sieht man, dass es in dem Fall jetzt vier verschiedene Variations untersucht also wir haben einmal Process Variations, das sind Fertigungsschwankungen die sind auch relativ hoch verändern sich aber halt nicht mehr nach der Fertigung das heißt, an einem Ende vom FPGA sind eventuell die Delays viel höher wie am anderen Ende das heißt, theoretisch könnte ein Teil vom FPGA schneller laufen wie der andere Teil praktisch ist es aber so, dass der Hersteller, die eben sehr konservative Sachen gibt, also der Hersteller sagt dir, das Ding läuft mit 200 MHz in echt läuft es, an manchen Stellen mit 300, an anderen mit 250, je nachdem was Temperatur und Spannung sagt ja, die anderen Effekte wie gesagt sind auch Temperatur die Temperatur verändert sich aber eher nur im Millisekunden-Bereich und ich zeige jetzt auch hier übrigens, wenn das nicht ganz klar war auf der Y-Achse die Veränderung in dem Pass-Delay also die Veränderung im Delay im, Entschuldigung, Delay Zeit, die eben Transistor braucht oder die eben verschiedene Teile von einem Fahrt brauchen, um zu schalten und das verändert sich eben hier in dem Fall ist es maximale wenn man auf der rechten Seite der Y-Achse anschaut sind hier 4% drin und im Vergleich dazu von den fast 4%, die diese Transient Voltage Drop, das die Rechte der rechte Balken anzeigt ist die Thermal Variation im Bereich von 30 Grad zum Beispiel also die zweite der zweite Balken ist ja relativ wenig und zudem, dass es relativ wenig ist verändert sich es auch nur im Millisekunden-Bereich sagen wir mal da kommt ein Steady-State Voltage Drop das nennt man so das ist ein statischer Spannungsabfall der anzeigt was passiert wenn man durchschnittlich 8% der Flip Flops im System hat und die tockeln die ganze Zeit aber jetzt nicht was passiert wenn sie zum Beispiel anfangen zu tockeln, nachdem sie davor nicht getockelt haben ok der Begriff Tockeling heißt hier jetzt auch dass die Transistoren eben anfangen die Flip Flops eben anfangen sich die ganze Zeit von 0 auf 1 ihren Wert zu ändern das meine ich jetzt hier mit Tockeling also die wechseln die ganze Zeit ihren Wert und schalten hin und her und das kann eben Spannungsabfall verursachen weil das Strom braucht und das ist eben im statischen Fall nicht zu kritisch aber wenn man spontan anfängt alle Transistoren die man so hat alle Flip Flops die man so hat von 0 auf 1 zu wechseln dann führt es eben zum hohen Spannungsabfall und das ist jetzt dieser Transient Voltage Drop das ist das schlimme dazu dass es eben im Mikro- oder Nanosekunden-Bereich passieren kann und abhängig von der jeweiligen Belastung man kann jetzt theoretisch auch auf Resonanzen kommen oder sowas, vom Spannungsversorgungsnetz dann kann es auch negative Effekte haben hier zum Beispiel die Details muss man jetzt nicht angucken aber was einem Deschaubild zumindest sagen soll ist, dass es abhängig davon ist wie man tockelt was für ein Voltage Drop mir damit erreichen können also hier sind in allen Bereichen von dem rechten Schaubild wurden immer nur 8% verwendet aber wurden in verschiedenen Mustern eben an und abgeschaltet und deswegen konnten wir halt dadurch die Verzögerungszeit erhöhen fast 4% oder in manchen Fällen was trotzdem nur etwa 1% so, vielleicht um das besser zu verstehen zur Stromversorgung von Elektronik im Allgemeinen also für die E-Techniker eher bekannt wir haben halt in unserem System irgendwann mal wir haben viele teils unerwünschte oder nicht ideale Komponenten das sind aktive Spannungsregler und Widerstände und Spulen und Kapazitäten in unserem System und das ist auf dem Board irgendwo der Spannungsregler dann ist über das Board verteilt alle verschiedenen Komponenten die mir, wie gesagt, teilweise sind die tatsächlich extra platziert als Bauteil aber teilweise wollen mir die Komponenten eigentlich gar nicht haben aber sie sind parasitär eben da und letztendlich führt es halt dazu dass wir eine Spannungsstabilität haben von einer zeitlichen Belastung und das ist auch innerhalb des Chips also von einem Bereich vom Chip zum anderen Bereich kann es Unterschiede geben also so ein Spannungsabfall wenn man das so ganz grundlegend anschauen will, könnte man sagen der Spannungsabfall ist davon abhängig von einer Stromdifferenz pro Zeit also wir haben hier Voltage Drop und das nennt man jetzt LDIDT das ist abhängig von Induktivitäten im System an irgendeiner Stelle weil Induktivitäten verzögern praktisch Strom kann man so, könnte man so sagen und dann kommt es darauf an wie stark verändert sich der Strom den wir denn von dem System ziehen über die Zeit und wenn das hoch ist, gibt es einen höheren Spannungsabfall und der zweite Teil den gehe ich jetzt nicht darauf ein das ist eher der resistive Spannungsabfall der ist meistens geringer wenn wir es eben schaffen können die Stromdifferenz sehr zu erhöhen ist vor allem dieser LDIDT Spannungsabfall ein großes Problem in aktuellen Chips also in, weiss ich, weniger wie 45 Nanometer System so was weil es eben auch auf dieser Package Ebene in dem diese Dice verpackt werden nicht unbedingt vermeidbar ist so jetzt können wir diesen Spannungsabfall nutzen also es ist ja jetzt nicht nur so dass wir jetzt bei diesen Strom messen müssen sondern durch das, dass der Strom sich verändert kriegen wir eben den Spannungsabfall und können auch darüber Power Side Channels machen falls sich jemand jetzt gerade fragt der schon mal was Side Channels gehört hatte an sich zur Einführung für die die noch nichts darüber gehört haben Power Side Channels nutzen die Schwankungen in Spannungen oder eben Strom von dem System und da mit eben die Secret Keys zu extrahieren das hatte ich vorher schon mal gesagt in dem Fall kann man jetzt zum Beispiel oder für die Simple Power Analysis kann man einzelne Verschlüsselungen messen eventuell messen wir die selbe Verschlüsselung 100 mal und nehmen den Mittelwert um dann besser was zu sehen dass dieses Standard weit neues oder Standard rauschen, dass man irgendwie hart raus gemittelt wird und in dem Fall sieht man hier jetzt auch, dass man RSA in einer iven Implementierung zumindest relativ leicht angreifen kann wenn man jetzt hier von links nach rechts geht und an irgendeiner Stelle haben wir eine 1, da gibt es ein Spannungseinbruch weil jetzt eben irgendwelche Multiplizierer in dem System aktiv werden und wenn dann die 1 bestehen bleibt verändert sich nichts, aber wenn die 0 kommt würde eventuell weniger Funktionsanheiten im System aktiv sein und dann gibt es wieder ein Overshoot weil die Spannungsversorgung eben nicht komplett stabil ist und wenn man jetzt die Spannungsversorgung anfängt zu belasten dann steigt sie erstmal die Spannung ein und wenn man sie entlastet dann steigt sie halt erstmal kurz an und das kann man hier ausnutzen um dann den geheimen Schlüssel sehen zu können lustigerweise als Funfect RSA kann man tatsächlich mit mehr Bits eher leichter angreifen weil dann diese ganzen Operationen länger brauchen okay aber nicht genug natürlich kann man das auch verstecken SSL und so weiter kriegt immer wieder Patches die tatsächlich gegen solche Power Side Channels gedacht sind und deswegen sehen mir vielleicht oft eher an den Secret Key nicht auch wenn man über viele Traces mitteln dann sieht man eher so was wie rechts eher eine relativ flache Linie deswegen gibt es Differential Power Analyzes was wir da machen ist statistisch eben das was wir vermuten was unsere Verschlüsselung im Power Trace sichtbar macht also unsere Verschlüsselung basiert auf einem bestimmten Algorithmus und der Algorithmus führt jetzt eben dazu je nach Berechnungen einen Spannungsabfall zu provozieren und das was wir denken was es ist korrelieren wir dann mit den Traces die wir vom System bekommen ich erkläre das gleich mehr im Detail also dazu brauchen wir auf jeden Fall ein sogenanntes Leakage Modell das ist das Modell das uns sagt dass sich dann der geheimen Schlüssel sich auf den Voltage Trace auswirkt und wir brauchen auch viele viele Traces dazu das heißt wir haben Trace und der Trace wird mit diesem Modell korreliert was Korrelation ist, sage ich dann auch nochmal gleich weil dann Korrelation vergleichen wir praktisch zwei sozusagen zwei Mengen miteinander ob sie Ähnlichkeit haben oder nicht das Diagramm erkläre ich jetzt auch mal kurz was wir hier links unten haben das ist jetzt auf der x-Achse über den seitlichen Verlauf und auf der y-Achse die Korrelation was wir hier grau im Hintergrund sehen ist eine Menge an verschiedenen Traces, nicht Traces sondern eine Menge an verschiedenen Hypothesen über einen geheimen Schlüssel das heißt Hypothese ob jetzt irgendwas 0 oder 1 ist und wir machen das jetzt mit jedem Schlüssel wo wir denken, dass er vorkommt im System und sehen dann dass einer davon sich aus allen anderen hervorhebt das ist das was wir dann in dem Diagramm dafür extra markiert haben also nachträglich, dass nachdem man sieht, dass der natürlich besser ist wie die anderen, sieht man hier diesen schwarzen Trace der hat einen größeren Ausschlag als die anderen Traces das kann man jetzt das ist jetzt das ältergebnis man kann das Ganze auch über die Zeit anschauen der gucken wir jetzt immer zu jedem Zeitpunkt, das heißt wir haben am Anfang ein paar wenige Traces dann gucken wir uns an, was ist gerade die beste Korrelation und markieren die schwarz und alle anderen lassen wir grau und gehen so weiter und sammeln immer mehr Traces mit einberechnen und nach rechts hin in diesem Diagramm sehen wir dann, dass sich eben weiter zum Null hin bewegt und das schwarze immer noch zum Glück von der Null sich unterscheidet und dadurch der geheime Schlüssel ist wie es jetzt genau funktioniert wie wir praktisch jetzt das links unter Diagramm machen, das zeige ich jetzt nee, jetzt, sorry, komme ich erst zu AES um das Leakage Modell zu erklären AES ist bekannt als Reindahl Algorithmus also daher kommt AES als Reindahl hat den Contest gewonnen der Advanced Encryption Standard zu werden Ursprünglich ist es von 1998 und wir haben verschiedene Möglichkeiten für den Key 128, 192, 256 wir schauen uns jetzt für 128 an was Runden basiert berechnet wird in 10 Runden und jede Runde passieren verschiedene Operationen Adround Key, S-Box, Shift-Rows, Mix-Columns was auch immer das heißt was wichtig ist für den Angriff zum Teil ist das wir einen Rundenschlüssel haben der abhängig ist vom kompletten Key also wir haben ein Secret Key und davon leitet sich ein Rundenschlüssel ab das kann man aber auch rückwärts rechnen das heißt selbst wenn wir jetzt ganz am Schluss in der letzten AES Runde wo dann der Cypher Text aus dem Algorithmus rauskommt den Rundenschlüssel angreifen können wir den tatsächlichen Schlüssel rekonstruieren und das macht uns den Seitenangriff zumindest leichter also jetzt zu den tatsächlichen Algorithmischen Details also wir haben sofern man das in der Präsentation gut machen kann also wir haben jetzt gegeben 0 bis n Paare gemessener Traces das heißt ich hab pro Trace einen unterschiedlichen Cypher Text das ist nicht immer die gleiche wir verschlüsseln verschiedene Sachen aber mit dem gleichen Geheimenschlüssel der Geheimenschlüssel ändert sich nicht da haben wir ein Voltage oder Power Trace über eine Zeit also hier V, I von T und zur Korrelation brauchen wir eben eine Hypothese vom Geheimenschlüssel normalerweise macht man das dann Bit oder Byteweise weil wenn man jetzt den kompletten Schlüssel nehmen würde müssten wir praktisch 128 Korrelationen berechnen das wäre dann auch nicht besser also ja vielleicht nicht unbedingt nicht besser wie Blutforce, immerhin kann man aus den Daten die man hat das berechnen braucht aber wahrscheinlich viel zu lange das alles zu berechnen es ist wahrscheinlich genauso schlecht wie Blutforce zu machen deswegen kann man Byte oder Bitweise machen dann wird das eher linear zur Kielänge also vielleicht dauert es dann eben nur 128 lang oder 256 mal 8 also das heißt so viel 256 mögliche Werte die ein Byte annehmen kann und die 128 Bit von AES sind eben 8 Byte jedenfalls machen wir eine Annahme über die Auswirkungen vom Schlüssel auf den Voltage Trace das heißt zum Beispiel Byteweise können wir ein Hemmingmodell verwenden das wäre jetzt halt hier ein Hemmingmodell also die Keyhypothese also das Farbhyp da haben wir mehrere davon eben pro Byte haben wir dann 256 verschiedene Hypothesen und danach kommt unser Leakage Modell das ist die letzte AES-Runde eine invertierte S-Box und in der invertierten S-Box eben der Rundenschlüssel das C.I. oder der Teil vom Rundenschlüssel verixort mit unserer Keyhypothese vom letzten Rundenschlüssel der Cypher Text koaliert verixort mit der Keyhypothese vom letzten Rundenschlüssel wir müssen dann eine Korrelation aller Traces machen mit allen Hypothesen also wir haben das Hemmingmodell von allen Hypothesen und den Trace von allen Zeitpunkten und wir koalieren mit der Pierson's Correlation das findet man jetzt so auf Wikipedia da muss ich jetzt die Details auch nicht erklären was es genau macht wir vergleichen jedenfalls die Menge vorberechnen also können wir anfangen über alle Traces zu gehen also wir nehmen eine Keyhypothese im Bereich von eben der 0255 pro byte berechnen unser Leakage Modell das Leakage Modell müssen wir dann für die Vorberechnung eben für das EY und das EY2 hinzufügen pro Keyhypothese aber über alle Traces also wir müssen die ganze Menge an Traces mitverwenden im nächsten Schritt geben wir über alle Zeitpunkte im Trace da müssen wir sowas ähnliches machen wir berechnen jetzt dieses EX um das EX vorzuberechnen müssen wir auch unser Voltage Trace eben aufaddieren also der komplette Voltage Trace also sorry jeder der Traces jeder der Traces wird eben wieder aufaddiert das heißt wir haben das EX pro Zeitpunkt und das EX pro Trace ist eben ein gemeinsamer Trace sozusagen im Mittelwert und für die Keyhypothese müssen wir dann nochmal doppelt also über alle Zeitpunkte über alle Keyhypothese müssen wir noch dieses EY der Erwartungswert von EXY berechnen der hier oben verwendet wird und ganz am Schluss können wir dann einfach das in unser Pierson's Correlation reinklatschen und wir machen dann eben nochmal über alle Keyhypothesen also hier rechts von links nach rechts über alle Zeitpunkte also das hier sind alle Zeitpunkte und alle Keyhypothesen das heißt jeder einzelne Strahl der hier drin ist, ist eine Keyhypothese während Zeitpunkte sieht man ja auf der X-Achse und die Korrelation ist das Ergebnis dann der Pierson's Correlation so und jetzt war es es eigentlich schon das ist a differential power analysis so das war jetzt nicht der Vortrag sondern die Zwischenfragen kommen gleich ich sag's vielleicht auch keine Zwischenfragen mehr aufgrund Zeit jedenfalls sorry jedenfalls kommen wir jetzt zum Verhindern von differential power analysis und Countermeasures dazu was man eben tun könnte ist es reduzieren der Schwankung zur Laufzeit es wäre also durch was wie invertierte Logik das heißt wir versuchen die Logik die eben die Schwankung ausgleicht da gibt es was nenn sich dual rail pre-charge logic aber zum Beispiel wenn man sich überlegt wenn man Transistoren einfach nur dupliziert reicht es nicht unbedingt weil es gibt ja Fertigungsschwankungen und es wird immer mehr zum Problem dass dann auch dann immer noch Unterschiede drin sind und tatsächlich können minimal statistische Abweichungen ausreichen und in einem hartnäckigen Fall es ist nicht mal so hartnäckig wenn man dann mit 4 Millionen Traces trotzdem noch einen Unterschied erkennen wenn man hier jetzt ganz am Ende schaut ist noch ein Unterschied zu erkennen da gibt es auch weiterführende Dinge dazu wer sich damit befassen will Prinzip ist es eher so ein Katz und Mauspiel es gibt eigentlich fast keine perfekten Countermeasures irgendjemand findet meistens doch irgendwas weil irgendwas liegt trotzdem irgendwie raus wobei man auch algorithmisch wieder was machen kann aber da will ich jetzt nicht ganz drauf eingehen es wird zu viel dann kommen wir zum aktiven Side Channel Angriffen also Folder Text hatte ich vorher schon mal kurz erwähnt Differential Fold Analyse es wird zu viel aber allgemein kann man Folds eben erzeugen wenn man zum Beispiel die Spannung verringert oder die Taktrate im System erhöht dann kann es eben Berechnungsfehler geben im FPGA zeige ich später mehr dazu wie man das eben machen kann über den schon vorher gezeigten Spannungsabfall den man über den DIDT wollte also den DIDT wollte ich auch wie man den erzeugen können so jetzt wollte ich euch die Zwischenfragen machen könnten kurze Zwischenfragen können wir machen aber ich brauche wahrscheinlich trotzdem noch 15 Minuten für den Vortrag also wenn keine Zwischenfragen sind mache ich einfach weiter keine ok dann mache ich weiter und kommt zu putting it together also Power Side Channel ich griffe innerhalb FPGAs das ist jetzt war mein tatsächliches Forschungsthema was wir jetzt tatsächlich neu machen weil alles was ich bisher präsentiert habe ist eigentlich ein alter Hut gibt es schon länger seit 99 sogar schon also komm ich zum Szenario was es Problem sein könnte ich habe hier so ein lustiges Diagramm und zwar mit ein Angreifer hätte der einen einzelnen FPGA angreifen will es ist vielleicht nicht interessant weil das ist dann verschlüsselt das werden ist zwar auch schon geknackt aber jedenfalls gehen wir eher davon aus dass man komplettes System haben in dem FPGA Logik ist ein Shared FPGA System oder ein Shared SOC System und Chip wo noch viele andere Komponenten drin sind und da könnte der Angreifer irgendwie ein Benutzer vom System sein wenn man jetzt der CPU zum Beispiel mehrere Tasks auf der CPU hat und irgendein Task hat ein Teil vom FPGA unter seiner Gewalt ein Teil vom FPGA dann könnte der eine Task indirekt den anderen dem seine FPGA Logik zumindest angreifen falls da jetzt kryptografische Beschleuniger drin sind und sowas kann es halt auch so kommen durch All Accelerator Store zumindest bietet es Amazon auch irgendwelche Accelerator an die man irgendwie kaufen kann für den ihr FPGA oder mieten kann oder sowas bisher bieten die aber pro User nur ein FPGA also es ist da noch kein Problem bis er auf die Idee kommt es zu virtualisieren jedenfalls sind die Komponenten elektrisch verbunden miteinander und dadurch halt potenziell exploitbar und der Zugriff von FPGA ist halt schon irgendwo Software basiert weil mir ja die Konfiguration von der Software aus steuern können okay in einem Szenario also für Side Channel Angriffe könnte man jetzt vom FPGA eventuell irgendwie die Spannungsschwankung messen oder auf der anderen Seite können wir irgendwie Spannungseinbrüche erzeugen das kann man jetzt auch durch die FPGA erstmal die kreativ irgendwie verwendet okay da ist es noch was irgendwie im Slide falsch da unten aber ja also für Side Channel Angriffe wollen wir die Spannung messen wir brauchen einen Spannungssensor und für Fold Angriffe müssen wir die Spannung manipulieren das machen wir durch Ring Oscillatoren auf eine bestimmte Art die später erklärt wird erst mal zu zurück zu dem hier zu digitalen Logik, ich hatte ja vorher gesagt wir haben jetzt irgendeinen Zeitschritt ist jetzt halt anhand von unserem Clock definiert und dass keine Fehler im System passieren jetzt können bei niedriger Spannung wenn man jetzt 10 Nanosekunden hier maximal erlaubt hat, können die niedrige Spannung bedeuten es geht trotzdem mit 9,8 Nanosekunden also es ist innerhalb unserer Zeit die das braucht, dass es gut funktioniert oder 9,2 Nanosekunden das ist dann halt noch besser, auch noch in der Zeit wo es funktioniert wir könnten das aber mit Absicht ausnutzen dass es eben nicht funktioniert aber wir dadurch sehen wie die Spannung sich verändert also hier in dem Fall habe ich jetzt auch auf der linken Seite einen Einbittregister und ich habe sinnloserweise ein Endgate genommen, das beide Inputs zusammen verschaltet hat also eigentlich passiert nichts Sinnvolles deswegen muss man auch den FPGA-Tools beibringen das trotzdem nicht wegzuoptimieren aber wir können uns vorstellen haben wir Anfangs- Anfangs-Element, das braucht vielleicht 0,1 Nanosekunden da haben wir ganz viel Verzögerung und bis dahin geht es vielleicht genau 10 Nanosekunden im schlechtesten Fall und 9,6 im idealen Fall je nach Spannung und das kann man jetzt so schrittweise durchgehen wenn es jedes Element vielleicht 0,1 Nanosekunden braucht dann kann man mehr oder weniger halt dann wenn man was dazwischen baut, abschätzen was dazwischen baut, wer das hier wie weit jetzt die Spannungsschwankungen sind wie hoch oder niedrig zumindest relativ gesehen also haben wir zum Beispiel wenn wir hier am Anfang sagen wir schaffen es das erste Register dazu zu bringen oder wir sagen dem ersten Register wir geben dem einfach eine 0 dann gibt es eine 0 aus danach machen wir eine 1 rein und dann wäre ja das andere Register hier einen Tag später das hat ja erstmal eine 0 drin stehen und dann machen wir den Übergang von 0 auf 1 dann fängt an die 1 von links nach rechts durch diese ganzen Elemente durchzulaufen wenn es die Spannung niedrig ist also wenn man mal eine schöne Tabelle anschaut bei niedriger Spannung wird es jetzt heißen praktisch in b kommt eigentlich immer die 1 an weil wir hatten ja gesagt b an der Stelle okay oder nicht immer aber fast immer eine 1 an wenn man 10,1 Nanosekunden oder 9,7 Nanosekunden braucht aber bei a kann es halt sein wenn es dann zu niedrig ist steht da eben immer noch eine 0 von vorher drin das kann man jetzt weiter so machen und dann ganz viele bits machen da hat man richtig schön Sensor gebaut und zwar nennt sich das aber auch Time to Digital Converter das heißt wir können jetzt am Anfang anstatt irgendein Register zu nehmen das 0 und 1 macht einfach den Takt nehmen der Takt macht ja eh schon 0 oder 1 und der Takt läuft dann eben durch die Initialen Delays erstmal durch und am Schluss haben wir eine so genannte Observable Delay Line weil meistens interessieren uns ja nur die letzten bits nur die schwankend tatsächlich und dann bauen wir überall diese Register dazwischen und in dem speziellen Fall sehen wir hier ist an irgendeiner Stelle halt noch 1 und ab irgendeinem Zeitpunkt steht dann eben 0 drin und am Schluss können wir dann 64 bits zum Beispiel nehmen und können dann in dem Fall sagen okay das encodieren wir jetzt als 2 bits weil 2,1 so weit rein propagiert sind und so haben wir eigentlich ein Spannungssensor ich denke die Idee haben hier vorne zumindest die Leute wohl verstanden okay da kann man damit auch da so Spannungsabfälle wenn man jetzt einen massiven Abfall hat sieht man das tatsächlich dann im System und sieht so einen schönen Abfall hier und wie sich die Spannung auch wieder erholt jetzt wurde es vielleicht auch in Codes sehen ich habe noch 10 Minuten Zeit okay wobei ich glaube nicht allen Code erklären werde es fällt auch etwas klein sieht es da hinten jeder ja geht okay gut also wir haben es ist auch nicht der komplette Code es wäre zu viel aber bei in VHDL brauchen wir eben so eine Art Prototypenheader oder nicht Prototypen sondern die wie kann man es nennen, Parameter Portmap eben das sind die ganzen Portverbindungen drin die habe ich jetzt auch weggelassen wir sollten Don't Touch verwenden sonst wird auch irgendwas wegoptimiert das allein reicht aber nicht danach müssen wir in unserer Architektur irgendwann unsere Signale eben deklarieren die wir verwenden wollen verwenden auch wieder die vorher genannten Relative Location Constrains und Bell Constrains diese Bell Constrains sind dann für diese Register also hier auf der rechten Seite das sind Register das in der Mitte sind die Carry Elemente das Rote sind letztendlich die Verbindungen die wir haben wollen um jetzt innerhalb des Slices Register zu platzieren muss man dann Bell verwenden ansonsten sind die durcheinander gemischt es ist zum Safe Net also das ist irgendwie so eine Art Keep dass man Signale beibehält und nicht entfernt werden manchmal werden sie trotzdem entfernt Keep macht sie extern Keep funktioniert normalerweise immer aber Keep auf diese Zwischensignale zu machen würde heißen dass die extern im Slices sichtbar sein müssen und dann kann es sein man kann die Verbindung gar nicht mehr erstellen also Keep heißt dass wenn wir jetzt so einen Slice haben und Verbindung am Ausgang vom Slice macht es Keep Constraint dass die Signale auch aus dem Slice rauskommen also zwischen Signale im Slice sollte man damit nicht unbedingt belegen aber manchmal muss man zumindest zu Safe Net nehmen dass nicht auch irgendwas doch wegoptimiert wird hier unten habe ich nur zur Vereinfachung ein Array gemacht mit den Namen weil wir müssen irgendwie Strings verwenden dass später die Software das verwendet also wir machen Attribute mit Strings also zwar True und Yes einmal warum auch immer und wir haben dann ein Array indem ich jetzt eben die Strings auch abspeichern die man dann verwenden kann für diese Flip Flop Bell Constraints so jetzt sind jetzt die Constraints und das ist mehr oder weniger die Implementierung von zumindest diesem Teil hier links wir haben einmal eine Delay Chain dann nenne ich diese Carry Elemente wir laufen die Carry Elemente durch ich kann jetzt in dem Generate kann ich auch das Arlog verwenden und kann dann einen Integer hochzählen an welcher Stelle eben das jetzt platziert werden soll dass sie so nach und nach platziert werden und hier habe ich jetzt eine Verbindung und die Verbindung sagt eigentlich nichts anderes dass wir von dem Carry Element eigentlich gar nichts wirklich groß verwenden wollen außer also das Carry Element ist dazu gedacht, dass man damit Adder implementieren kann oder alles was carry Logik hat wo irgendein Signal lang durchläuft das machen wir gar nicht, wir setzen alles was in dieser Logik drin ist so, dass nur ein Signal durch Mucse durchläuft die aber keine Veränderung an dem ganzen Signal machen das soll wirklich nur zur Zeitverzögerung dienen das heißt wir haben hier wirklich nur solche Zeitverzögerungen Elemente die jetzt von unten nach oben durchlaufen und dann zwischen die Zwischen-Elemente rausziehen auf Register und die Register stehen hier unten im Code, die sind jetzt auch so ähnlich gemacht auch mit irgendeinem E das hier halt durchläuft, wir müssen da halt irgendwie durch 4 teilen, weil wir das pro Slice haben wollen jeder Slice hat 4 davon dann machen wir eben dieses Spell Constraint um dann eben immer wieder die 4 Elemente nacheinander in einem Slice aufzufüllen und ja wenn jemand den Code dann genauer angucken will kann er ihn auch haben, wenn er mich fragt von daher reicht das soweit, denke ich mal so sieht jetzt eins dieser Carry Elemente im Detail aus, das heißt hier links ist der Mucse immer permanent durchgeschaltet gemacht wir verwenden also tatsächlich nur diese Mucselemente und das Signal, das hier durchläuft und am Ende verwenden wir irgendwelche Register und das sind dann letztendlich unsere ganzen Outputs und die nacheinander so dann auf die FPGA Primitiv-Map den Sensor, den wir vorher gesehen haben haben hier unten jetzt halt irgendein Initiales Delay da habe ich alles Mögliche Elemente verwendet die brauchen einfach eine Weile an Zeit und am Schluss machen wir dann auch die Register wirklich raus, dass wir das Signal uns anschauen können so jetzt kann man das für ein Side Channel Angriff verwenden das werde ich hier vielleicht nicht mehr alle Details erzählen, da die Zeiten nicht mehr so lang reicht, aber ihr habt vorher das Prinzip ja schon gesehen wie Side Channel Angriffe funktionieren die funktionieren intern genauso wie extern, weil wir ja indirekt auch Spannung messen das ist auch ein veröffentliches Paper, zusammen mit Leuten aus Bochum das ist auch Open Access verfügbar wenn das jemand finden will dann kann er mich auch fragen oder vielleicht steht es dann auch später online drin weiß ich gar nicht jedenfalls haben wir 2 Floor Plans untersucht, einmal ein AES Modul mit dem Sensor der ziemlich nah dran ist also wenn ihr vorher diesen Spannungsabfall gesehen hatte, in einem Diagramm das war nun ein extremer Fall von einem sehr hohen Spannungsabfall und man jetzt AES wirklich sieht ob das überhaupt genug Spannungsschwankung sichtbar macht auf dem Sensor, das war zu dem Zeitpunkt für uns noch nicht klar, deswegen haben wir verschiedene Sachen ausprobiert das könnte man sich im rechten Pfeife auch denken, das könnte Nutzer A und B sein in irgendeinem System jedenfalls unsere Referenzmessung wird extern mit dem Oszilloskop gemacht und ihr kennt die Correlation Diagramme schon, d.h. hier sieht man eine gute Correlation von dem Secret Key auch über die Traces und wir brauchen sehr wenige Traces nur, dass es gut funktioniert dann haben wir auch das Ganze mit dem nahen Sensor probiert im FPGA, man sieht hier, das sieht schon etwas unschöner aus, es ist nicht ganz so perfekt weil es halt eigentlich ja kein richtiges Oszilloskop ist wir hatten auch einen thermischen Drift hier noch drin, den haben wir nicht rauskorrigiert also wir hatten gemerkt, dass es teilweise auch wieder schlechter wird wenn man hier rechts das Diagramm ansieht ist hier irgendwie sowas drin meistens wird es eher besser über die Zeit der Sensor war mit 96 MHz getaktet und AIS mit 24, also wir haben schon mehr gesampelt mit dem entfernten Sensor hat es aber auch ganz gut funktioniert bei 96 weil hier jetzt am Anfang korreliert es noch nicht so gut aber mit sehr wenig Traces kann man schon den Secret Key extrahieren also mit weniger wie 1000 und dann haben wir zu guter letzt auch probiert mit der exakt gleichen Taktrate wie das AIS-Modul, den Sensor zu clocken und das hat auch relativ gut funktioniert da muss man dazusagen dass der Sensor eigentlich nicht sampled wie ein traditionelles Oszilloskop weil man hatte die Verzögerungszeit und die Verzögerungszeit findet über den ganzen Taktzyklus hinweg statt d.h. was wir eigentlich messen ist tatsächlich der komplette Durchschnitt der innerhalb von einem Taktzyklus passiert d.h. es ist gar nicht so extrem wichtig das exakt zu sampled im Vergleich zum Oszilloskop das ist im Prinzip sogar ein Vorteil ist zumindest so meine Vorstellung davon wir sind da immer noch ein bisschen dran zu überlegen warum das eigentlich dann ganz gut funktioniert zum Teil ist es natürlich auch synchron gewesen ich habe mich nicht synchron probiert leider brauche ich noch mindestens 5 Minuten oder 10 eher 5 ich probiere es mal also jetzt zu Side Channel Angriffen in Summary also fpga zu fpga Power Side Channel sind möglich was man aber auch sehen kann ist tatsächlich Software die im Arm Core läuft also das ist jetzt so ein fpga SOC wir sind hier 2 Cortex A9 Prozessoren und wenn die jetzt kein richtiges RSA sondern eben so ein Multiply und Square Algorithmus macht also eher so Textbook RSA weil OpenSSL ist tatsächlich ja gegen solche Dinge schon protected auf irgendeine Weise dann kann man tatsächlich simpel RSA auch angreifen will ich jetzt auch nicht näher drauf eingehen es geht auf jeden Fall der nächste Schritt was ich noch sagen wollte sind eben Default Attacks das hatte ich ja vorher schon gesagt wir können auch ein System so Denial of Service machen also ein fpga Crashing also mit wenigen Ressourcen sorry, machen wir nochmal so mit wenigen Ressourcen ohne Spezial Tools das ist vielleicht wichtig zu erwähnen weil klar es gibt akademische Tools mit denen man diesen Bitstream komplett manipulieren kann da kann man dann eventuell sogar Kurzschlüsse programmieren aber die Idee ist dass man das einfach durch normale Hersteller Tools machen können und durch das Verfahren das wir jetzt verwenden brauchen wir auch relativ wenig Ressourcen in den meisten fpga's das war getestet auf mehreren fpga's von Xylings über Intel, Altera halt Lattice und hier sind jetzt nur Xylings fpga's abgebildet wir können auch die ARM CPUs dann damit Crashing dieses System ist dann irgendwie kaputt und wenn man die anderen fpga's zumindest diese beiden die gab's als PC Expresskarten wenn man die im PC drin hat und wir machen das dann ist danach das Board irgendwie so gecrashed dass wir danach den PC runterfahren müssen am Ende das Netzteil ausschalten und wieder einschalten müssen und erst dann können wir überhaupt wieder was mit den Boards anfangen also wenn ich einfach Reboot mache und danach Zugriff will, ist das Board immer noch tot also JTech Zugriff geht auch nicht und dann liegt aber daran weil der Spannungsregler von dem Board sich einfach abschaltet das ist nicht speziell jetzt so speziell fpga also das haben wir damit gemacht indem wir Ring-Ostylatoren konfigurieren wir verwenden im Prinzip den Effekt wie vorgesagten hoher Strom in kurzer Zeit aber nicht jetzt den Ring-Ostylator selber weil der tockelt ja jetzt intern irgendwie beliebig schnell takte der jetzt eben im Ring und sondern wir verwenden die Ring-Ostylatoren wie im Enable-Signal und ganz viele davon wie im Generate, wie ich auch schon vorher erklärt hab wenn wir jetzt ganz viele davon praktisch für einen Einschlag aktivieren dann können wir eben diesen vorher gezeigten Voltage-Stop messen mit den Sensoren das reicht aber nicht unbedingt ums zu crashen manchmal hat es irgendwie doch ausgereicht wo wir uns dann gewundert haben und deswegen sind wir auch erst draufgekommen das muss wohl an Resonanzen in der Regelung liegen die wollen wir jetzt angreifen das heißt, wir machen jetzt eine Frequenz mit dem wir wiederum die Ring-Ostylatoren an und abschalten und verbinden jetzt praktisch dieses Tockling-Modul mit dem Enable von den Ring-Ostylatoren und die Frequenz ist definiert die können wir uns raussuchen und intern laufen die Ring-Ostylatoren das ist uns egal, die laufen wahrscheinlich im Gigahertz-Bereich aber sie erzeugen auf jeden Fall wenn man jetzt das dann Frequenz-Sweep macht dann reichen bei manchen FPGA nur 8% der Look-Up-Tables bei anderen brauchen wir 35% der Look-Up-Tables aber dann ist das System halt meistens mindestens der FPGA ist dann resetted und die Konfiguration ist weg oder der Armcore crashed oder sowas und die beiden PC-Express-Boards waren tatsächlich gar nicht mehr verwendbar bis man sie komplett ausgeschaltet Stromlos gemacht hatte also permanent bis zum Power-Cycle und Armcore crashed auch so, das sieht dann wenn man gleichzeitig zu dem Board mit JTEC verbunden ist mit diesem Chip-Scope, dann kriegt man sowas hier ist nochmal eine Übersicht über die Frequenzen also das ist jetzt in dem FPGA wo man nur 8% der Ressourcen gebraucht haben da haben wir einen gewissen Bereich in Frequenzen wo es eigentlich irgendwie immer crashed das sind eher die niedrigeren Frequenzen und ab einer gewissen höheren Frequenz ist das System so wie es aussieht eigentlich stabil wir haben das auch extern natürlich gemessen am Ost-Cycle sieht mir wundern uns ein bisschen warum direkt jetzt hier der Spannungsregler aussteigt, weil was man beim Ost-Cycle sehen kann ist, dass man eben eine Schwankung in der Spannung hat und mir hat hier auch das Signal, dass die Ring-Ostillatoren aktiviert und die Spannung die hat zwar schon relativ hohen Ausschlag, aber die fängt dann irgendwie an irgendeiner Stelle einfach runter zu gehen wissen wir jetzt selber nicht genau warum das ist an irgendeiner Stelle ist dann der FPGA auf jeden Fall dekonfiguriert, weil wir haben ein Pin der immer High ist der geht dann auch auf Null, weil der FPGA wohl die Konfiguration verliert langfristig bleibt der Spannungsregler dann halt auf Null bei diesen 2 PCI Expresskarten zumindest so gut jetzt komme ich zum Fazit und ihr könnt dann endlich Fragen stellen und ich habe nicht mal so viel überzogen fünf Minuten also zum Fazit wir haben erfolgreiche Angriffe auf elektrischer Ebene innerhalb FPGA zeigen können dazu gibt es jetzt, gibt es 2 Veröffentlichungen die Angriffe können rein durch Software eingebracht werden die Sensoren sind halt ausreichend für Side-Channel-Angriffe und wir können Aktivität generieren die für einen Crash, also den Nile of Service ausreichen also kann man sagen, dass FPGA so auf jeden Fall noch nicht wirklich für Multi-Useranwendungen verwendet werden können, weil das potenzielle Probleme mit sich bringt als Ausblick was man dagegen tun könnte eventuell können wir jetzt Bitstream Checking anfangen, also so ein Vierenscanner für Bitstreams, naja nicht unbedingt die tollste Idee wahrscheinlich geht auch nur heuristisch und das mit Satz-Säuber zu machen braucht wahrscheinlich dafür Tage wenn man beweisen will, dass die maximale Aktivität dann natürlich auch nur unter gewissen Annahmen nach physikalischen Modellen zu viel ist, könnte man sagen, das ist zu viel die Falls könnte man zur Laufzeit vielleicht frühzeitig erkennen, weil der Drop geht ja schon runter dann könnte man irgendwie was tun, vielleicht um was abzuschalten aber falls jemand jetzt einen bestimmten FPGA-Bereich hat, dann kriegt er vielleicht ein Takt in den Bereichen, wir könnten diesen Takt abschalten aber eigentlich kann sich ja auch selber jemand einen Takt bauen mit Ring-Ostellatoren also kann man es auch nicht unbedingt so verhindern Side-Channels gibt es klassische Vermeidungs-Strategien Masking und Hiding also man versucht algorithmisch oder implementierungsmäßig die Leakage zu reduzieren haben wir noch nicht getestet und jetzt bin ich aber auch am Ende vom Vortag und ihr könnt Fragen stellen Vielen Dank Dennis Ja, das mit dem Viren-Scanner klingt sehr interessant, besonders mit FPGAs, da denke ich sofort an große Möglichkeiten im Bereich Blockchain-Technologie Okay, haben wir noch Fragen aus dem Publikum direkt hier vorne Hallo Dennis, die erste Frage wäre in welchem System ist denn schon wirklich Multi-User-Betrieb auf FPGAs bekannt und die zweite für die Korrelation braucht es ja eine Synchronisierung der Daten in einer Form wie kriegst du das bewerkstelligt Ja, also ich muss sagen, das ist halt wie gesagt eher ein akademisches Projekt gewesen dementsprechend haben wir nicht versucht ein echtes System anzugreifen und mir ist Multi-User-FBGAs-System bekannt es gibt allerdings schon zumindest unzählige Papers und es gibt auch Vorträge, wo Microsoft groß als Keynote in der Konferenz hält, wo sie sagen wir wollen Multi-User-FBGAs machen machen sie jetzt noch nicht, aber da gibt es auf jeden Fall viele Pläne dazu die sind damit zumindest jetzt vorläufig nicht so leicht zu bewerkstellen da muss man halt noch mehr machen und zur Synchronisation das war wir haben also was Problemes in Sidechannel-Angriffen ist, dass wir ja vielleicht ein System haben, wo wir gar nicht wissen was drin vorgeht wir müssen jetzt aber wissen wann exakt der AES-Algorithmus anfängt zu rechnen, weil wir hatten ja vorher synchrone Zeitpunkte wir gehen davon aus, dass alle Traces zur selben Zeit praktisch auch wirklich die gleiche Berechnung praktisch ausführen und das haben wir aber uns nicht damit befasst es ist tatsächlich halt ein Problem, wenn wir jetzt wirklich einen voll realistischen Angriff machen ja ja, hallo zum Beispiel mit den FPERs in Handys hätte ich noch eine Frage, und zwar inwiefern ist es da wirklich möglich, dann so anhand der Durchzuführen also ich denke mal, ich weiß jetzt nicht wie und man dann die FPER-Programmierung in den Handys als Mail-Ware oder wie auch immer verändern an haben sie sich damit beschäftigt achso, ich denke, dass man das momentan wahrscheinlich noch nicht kann wie gesagt, ich hatte ja gesagt bis jetzt gibt es keine kommerziellen Systeme von denen ich jetzt weiß, dass sie direkt angreifbar sind ich glaube, die sind nicht frei programmierbar Hi, was kann der Grund sein dass auch bei geringer Schaltfrequenz von den Ring-Ostylatoren der FPGA crasht weil du meintest ja, das sei so ein Resonanz-Effekt mit der Spannungsversorgung aber es würde ja bedeuten, dass nur bei bestimmten Frequenzen der FPGA crashen müsste ja, da muss ich sagen ich bin ja auch nicht ganz sicher drüber warum das passiert bei geringfrequenzen ich glaube eigentlich reicht es sogar aus wenn man spontan alle Ring-Ostylatoren aktiviert, also in manchen Fällen hat es schon mal eben dazu geführt, dass gecrashed ist, und durch das, dass wir das oft wiederholen, erhöhen mir halt die Wahrscheinlichkeit dass es mal funktioniert so haben wir noch weitere Fragen aus dem Publikum ja, dann, vielen Dank für diesen umfassenden Vortrag es war sehr interessant einen großen Applaus nochmal für Dennis, bitte euch wünsche ich viel Spaß an den weiteren Vorträgen und noch viel Spaß auf der GPM