 Herzlich willkommen zum D-Wog-Vortrag über Quantum Hardening, das ist nicht der Original-Vortrag. Da hat die Aufnahme nicht funktioniert, deswegen machen wir das Ganze jetzt einfach nochmal. Genau, zunächst zu mir. Ich bin Software-Entwicklerin, arbeite bei Adobe, mache neben meiner Arbeit bei Adobe auch Freelancing-Arbeit und bin auf Embedded Devices und Anwendungen, die ein erhöhtes Sicherheitsbedürfnis haben, spezialisiert. Rust, C++, den ganzen Kram. Und unter anderem hatte ich da auch einen Kunden, der von mir wollte, dass ich einen HSM für den Kunden implementiere. Ein Embedded HSM. Und zuletzt wollte dieser Kunde auch von mir, dass ich das Ganze gegen Quantum-Computer absichere, also Quantum Hardening, betreibe. Und den, was ich da implementiert habe, also das Resultat der Nachforschung, die ich dafür gemacht habe, stelle ich heute quasi vor. Zunächst zum Vortrag selber, es geht um Quantum Hardening und nicht um Quantum Computing. Das sind zwei unterschiedliche Sachen. Beim Quantum Computing geht es darum, Quanteneffekte zu benutzen, um mächtigere Computer zu bauen. Beim Quantum Hardening geht es darum, kryptografische Protokolle gegen Angriffe durch Quantencomputer zu verteidigen. Genau, es gibt noch die Quanten-Kryptografie, das ist wieder was anderes. Dabei werden Quanten-Computing-Methoden angewendet, um Daten kryptografisch abzusichern. Also das sind dann kryptografische Protokolle, die auf den Eigenschaften von Quantencomputern basieren. Genau, und heute geht es eben um Quantum Hardening. Der Vortrag ist in verschiedene Teile gesplittet. Ich fange an, damit noch mal zu wiederholen, wie grundsätzlich Kryptografie, wie so kryptografische Primitiven funktionieren, wie man ein so ein kryptografisches Protokoll, ein aktuelles kryptografisches Protokoll, designen, um darauf einzugehen, was Quantencomputer für Probleme für diese Protokolle bedeuten und besprechen am Schluss, wie man die löst. Das Ganze baut also auf, soll auch für Einsteiger und Leute mit wenig Erfahrung in der Kryptografie selbst gut zum Einsteigen sein. Fangen wir an mit, was ist eigentlich Kryptografie? Zunächst mal geht es bei der Kryptografie darum, geheime Nachrichten abzusichern, also Informationen so zu codieren, dass sie nur diejenigen für diese bestimmt sind, lesen können. Hier haben wir unser Beispiel, I like your cat ears. Offensichtlich eine Nachricht, die unbedingt abgesichert werden muss, sollte niemand anders mithören können. Und hier würde man eben versuchen, Technik zu benutzen, mit denen I like your cat ears nur von Bertha gelesen werden kann. Es gibt noch ein paar andere Eigenschaften, die man von guten kryptografischen Protokollen gerne hätte und von guten kryptografischen Methoden. Zum Beispiel möchte man, dass die Daten nicht verändert werden können. Also zum Beispiel angenommen, ich schicke Daten an meine Bank, dann möchte ich nicht, dass zum Beispiel ich schicke eine Überweisung an meine Bank, dann möchte ich nicht, dass da darin Dinge geändert werden und dass die machen mit Krieg, weil an Költer es passieren, dass die Bank falsche Dinge tut. Ich möchte zum Beispiel auch, dass die Bank feststellen kann, dass die Anweisung zur Überweisung wirklich von mir kommt. Sondern man Authentizität, also ich möchte die Daten authentifizieren. Ich möchte sie gegen Lesen absichern, also gegen Mitschniffeln absichern und ich möchte gleichzeitig dafür sorgen, dass sie authentifiziert bzw. tamper proof sind. Genau, fangen wir mal mit den archaischen kryptografischen Methoden an, wie man das vor über 1000 Jahren schon gemacht hat. In dem Fall die Rotationsschiffere, die ist tatsächlich sehr alt, weil die wurde quasi von Julius Zerzer als Zerzer Schiffere erfunden. Genau, die wurde von Julius Zerzer als Zerzer Schiffere erfunden. Dabei wird jedem Buchstaben aus dem Alphabet quasi eine Zahl zugewiesen. Zum Beispiel dem Leerzeichen hier in dem Beispiel, die 0, dem A, die 1, den B, die 2 und so weiter. Und dann addiere ich einfach meinen Schlüssel, zum Beispiel in dem Beispiel die 4, zu jedem dieser Buchstaben drauf und hole mir wieder den Buchstaben zurück. Also wird zum Beispiel aus dem Leerzeichen mit dem Schlüssel 4, wird ein D, aus dem A, wird ein E, aus dem B, wird ein F und so weiter. Um das Ganze dann wieder zu entschlüsseln, subterriere ich die Zahlen einfach wieder. Dann wird aus dem D, aus dem D, wird ein Leerzeichen, aus dem E, wird ein A, aus dem F, wird ein B und so weiter. So geht das Ganze zurück. Wir haben hier unten auch das Beispiel, I like your cat ears, wird in dem Fall zu M, D, P, M, O, I, D, B und so weiter. Also ist sehr, sehr schwer lesbar, wir haben das Ganze verschlüsselt. Ist das Ganze auch sicher? Angriff, Antwort, nein. So ein Verschlüsselungsverfahren ist angreifbar. Ich kann nämlich einfach alle 27 möglichen Schlüssel durchprobieren. Wir haben 27 Buchstaben im Alphabet, wenn ich ein Schlüssel größer als 27 verwende, dann fängt es wieder von vorne an. Also ich probiere einfach jeden möglichen Schlüssel durch. Und irgendwann finde ich schon den, der passt. Insofern ist die Rotationsschiffe kein sicheres Verfahren. Es gibt noch andere alte Verfahren, alte archaische Verfahren, zum Beispiel die Substitutionsschiffe. Dabei tausche ich auch Buchstaben, hier weiß doch ein Anderen aus, nur dass ich sie jetzt hier nicht durch einen konstanten Wert addiere, also einen konstanten Wert addiere, sondern dass ich einfach jedem Buchstabe einen alternativen Buchstaben zuweise. Und das quasi zufällig mache. Ich mische also quasi einmal das Alphabet durch. Hier in dem Beispiel habe ich dem Leerzeichen, das J zu gewesen, dem A, das X, dem B, das N, dem C, das G, etc. Sieht man schon weiter unten, im Beispiel wird dann aus dem E bleibt E. Space wird J, L wird W und so weiter. Es kommt wieder etwas raus, was ich nicht lesen lässt, also zumindest nicht offensichtlich. Ich habe das Ganze verschlüsselt. Ist das Ganze sicher? Na es ist auf jeden Fall sicherer als die Rotationsschiffe. Ich habe hier nämlich nicht nur 27 Schlüsse, sondern 27 Facultätschlüsse, also 27 mal 26 mal 25 mal 24 und so weiter. Dann noch ist das Ganze nicht sicher. Es gibt nämlich einen Angriff, die statistische Analyse. Hier schaue ich einfach, was sind dann Buchstaben, die häufig vorkommen. Zum Beispiel in dem Beispiel unten kommt das J relativ häufig vor. Das liegt daran, dass das Leerzeichen relativ häufig vorkommender Charakter ist. Auch das K und das O kommen relativ oft vor, weil denen die Vokale zugewiesen wurden. Und dadurch, dass es diese unterschiedlichen Häufigkeiten gibt, kann man wieder relativ gut einfach durchprobieren und Statistik benutzen, um tatsächlich Statistik benutzen, um den Schlüssel rauszufinden und den Plaintext auch zu rekonstruieren. Substitutionsschiffe schwerer, 10-28 Schlüssel ist nicht zu knacken, durch einfach durchprobieren, statistische Verfahren funktionieren dann wieder. Die dritte archaische Basisschiffe, die ich heute besprechen möchte, ist die Transpositionsschiffe. Bei der Transpositionsschiffe vertausche ich nicht Buchstaben, durch andere Buchstaben, sondern, also ich vertausche aber nicht einen bestimmten Buchstaben, also das A zum Beispiel doch ein E, sondern ich tausche die Positionen durch. Wir haben hier ein Beispiel mit dem Schlüssel 3, 1, 5, 4, 2. Den auf Hello angewandt gibt, EOL. EOL ist wieder relativ schwer zu lesen, insofern ist das Ganze verschlüsselt. Ist das Ganze sicher? Nein, nicht so wirklich. Denn ich kann einfach Anagramme bilden und indem ich immer mehr Anagramme bilde, finde ich irgendwann etwas Sinnvolles raus, also finde ich irgendwann ein sinnvoll klingendes Anagramm raus. Das ist also nicht so einfach zu knacken, das ist also auch zu knacken. Genau. Damit haben wir mal so drei alte archaische Verschlüsselungsverfahren durchgesprochen, wie die so funktionieren, das sind so Grundprinzipien. Jetzt gehen wir quasi auf die moderne Kryptografie ein. Natürlich nicht vollständig, moderne Kryptografie ist sehr kompliziert, muss man sehr, sehr viel beachten und gibt sehr, sehr viel spannende Mathematik da drin. Aber ich versuche mal so ein paar Grundzüge moderner Kryptografie zu erklären, dass man ungefähr eine Vorstellung erhält, wie das Ganze funktionieren könnte. In der Praxis, damit diese Verfahren tatsächlich funktionieren, muss man sehr viel Detailwissen haben. Oft funktioniert es dann auch nicht, insofern nur die Grundzüge jetzt. Genau und hier haben wir schon mal eine Blockschifre. Das ist eben so einer der möglichen Grundblöcke moderner Kryptografie. Dabei wird der Text, den man verschlüsseln möchte, einfach in Blöcke eingeteilt. Wenn der Text zu kurz ist, werden noch ein paar Nullen quasi dran gehängt oft und jeder Block wird einzeln verschlüsselt. Das macht das Ganze einfacher, weil es auch einfacher in Hardware zu implementieren, als wenn man immer den gesamten Text komprimieren muss, den gesamten Text verschlüsseln muss. Man kann damit zum Beispiel auch Streaming, also nach und nach immer mehr Daten verschicken kann, also auch Streaming betreiben. Blockschiffren bauen auf einer Ebene, auf den drei Schiffren auf, die ich gerade besprochen habe. Auf der Substitution von Bits, auf der Transposition von Bits, also dem Vertauschen. Und auf der Rotation, naja, nicht wirklich Rotation, in dem Fall, es sind Bits, ist die Rotation einfach ein Xor. Ist nicht ganz korrekt, aber kann man sich so ungefähr als Analogie vorstellen. Genau, hier haben wir ein Beispiel von so einer Schifre, in dem Fall von IES. Das ist ein sogenanntes Substitutions per Mutationsnetzwerk. Hier wird jeweils der Schlüssel genommen mit dem Plaintext vermischt. Dabei wird pro Bit aus dem Schlüssel ein Bit aus dem Plaintext genommen, als es wird nicht der gesamte Text mit einer konstanten rotiert, sondern eben jedes Bit mit seinem anderen Bit aus dem Key. Dann werden die Substitutionsblocke, die man hier sieht, S1, S2, S3, S4 angewandt, um die Daten zu ersetzen. Und dann werden die Daten einmal umher geschaffelt. Das Ganze hat das Ziel, dass jedes Bit vom Output von möglichst vielen Bits aus dem Schlüssel und von möglichst vielen Bits aus dem Key abhängt. Wenn ich ein Key aus dem Output ändere, um ein Bit flippe, also von 0 auf 1 setze oder von 1 auf 0 setze, wenn ich von dem Input ein Bit flippe, sollen sich im Output möglichst etwa statistisch gesehen 50% der Bits flippen. Das ist tatsächlich auch so, Stand der Technik ist in der Praxis natürlich ein bisschen komplizierter, als es hier dargestellt ist, muss man noch verschiedene Dinge beachten. Zum Beispiel, hier ein Problem bei diesem Verfahren wäre, dass man die gleichen Input wieder den gleichen Output erhält. Also zum Beispiel, wenn mein Input komplett aus nullen besteht, merke ich das relativ schnell. Das ist natürlich was, was ich nicht so wirklich möchte. Und dafür gibt es dann eben wieder Verfahren, wie man das Ganze zu komplexeren Protokollen zusammensetzt, lösen für das Problem wären, in dem Fall Blockschiffer in Modi. Wie gesagt, ist der Advanced Encryption Standard, ist was man heute sehr oft benutzt wird, zum Verschlüsseln. In einer Grundkonstruktion kann man auch mal auf Wikipedia schauen, Substitutions-Permutations-Netzwerk, da kann man sich das Ganze noch mal im Detail zu Gemüte führen. Achso, um zu entschlüsseln berechtigt man dieses ganze Netzwerk einfach rückwärts. Also wir sind jetzt von oben nach unten gegangen, um das Ganze zu entschlüsseln geht man einfach von unten nach oben. Das ist also komplett umkehrbar, aber statistisch und sprechenweit getrennt, dass es schwer angreift, also das momentan nicht angreifbar ist, durch bekannte Methoden am Computer. Wie man daraus jetzt ein Protokoll baut, in dem Fall mal ein ganz einfaches Protokoll. Alice möchte Berta die Nachricht checken, I like your cat ears. Die Schwierigkeit an der Stelle ist, dass Alice zunächst einen Schlüssel an Berta checken muss. Und diesen Schlüssel sicher zu versenden, das sieht man hier in Orange. Diesen Schlüssel sicher zu verschicken ist schwierig, aber man muss es sehr gut machen. Wenn der Schlüssel gefunden ist, dann können alle zukünftigen Nachrichten entschlüsselt werden. Das möchte man also nicht. Alice schickt also ein besonders vertrauenswürdigen Boten los oder überbringt diesen Schlüssel selbst an Berta. Und dann können Alice und Berta in Zukunft über öffentlich einsehbare Kanäle sicher miteinander kommunizieren, so dass nur die beiden die Daten erhalten können. Rückwärts funktioniert das Ganze natürlich genauso, sobald die einmal ein Key ausgetauscht haben können, die miteinander kommunizieren. Ich habe es schon angesprochen. Nein, was anders? Zunächst Message Authentication Code. Wir haben nämlich eine Sache ausgelassen. Und zwar, wenn ich jetzt ein Bit in diesem Substitutionspermutationsnetzwerk im Input verändere oder im Output verändere, kann ich das Ganze zurückrechnen und man wird nicht werken, dass die Daten verändert wurden. Das ist ein Problem, wie wir vorhin besprochen haben. Eine wichtige Eigenschaft moderner Kryptografie ist, dass die Daten eben auch nicht veränderbar sind. Und dafür gibt es auch kryptografische Methoden. In dem Fall nennt man das ein Message Authentication Code. Den berechne ich einfach über meinen Text, den ich authentifizieren möchte. Hängen den an die Nachricht vorne dran oder hinten dran. Schickt die auch an den Empfänger. Empfänger entschlüsselt die Daten. Empfänger berechnen normalerweise den Authentication Tag meistens über die verschlüsselten Daten in modernen Protokollen und checkt dann, ob sich das verändert hat. Da geht der Key rein. Also ich kann diesen Authentication Tag auch nur dann berechnen, wenn ich den Schlüssel besitze. Hängen den Authentication Tag dran. Der Empfänger validiert den Authentication Tag mit seinem Schlüssel und bemerkt so, wenn die Daten oder der Tag verändert wurden. Der vergleicht einfach sein Ergebnis mit dem Ergebnis des Senders. Okay, haben wir nochmal das Protokoll. Schlüsselaushaus, immer noch ganz wichtig. Alice verschlüsselt die Daten, berechnet über den Cypher Text, den Message Authentication Code, verschickt beide an Bertha. Bertha berechnet wieder den Message Authentication Code und vergleicht die beiden, also den sie berechnet hat und den Alice berechnet hat und entschlüsselt dann die Daten. Und wenn Bertha feststellt, dass die Daten verändert wurden, dann muss Bertha halt sagen, nein, sorry, mache ich nicht. Wie wir schon gesehen haben, dass ich immer noch den Schlüssel sehr, sehr sicher verschicken muss. Und das Ganze ist relativ schwierig, denn moderne Kriptografenverfahren brauchen Schlüssel. Das sind dann so, ja, 192, 128 oder 256 bits von Entropien, also von einem ziemlich zufällig aussehenden Zahlenstring, ist unmöglich zu merken oder braucht man sehr, sehr spezialisierte Menschen, die sich sowas merken können. Oder ich schreibe es halt auf, verliere den Zettel, ist nicht gut. Um dieses Problem anzugehen, gibt es Keyderivation Funktionen. In so eine Keyderivation Funktion werfe ich Schlüsselmaterialen, man das Schlüsselmaterial werfe ich da rein und bekomme dann ein Key raus, der gute Entropie enthält. Also wo etwa 50% statistisch gesehen der Bits 0 und 1 sind und die Wahrscheinlichkeit, dass ein Bit 0 oder 1 es jeweils 50% beträgt. Das Ganze erzeugt ein Schlüsselfesterlänger, das ist auch eine wichtige Eigenschaft, die man so braucht. Für Passwörter, wenn ich da ein Passwort in meine Keyderivation Funktion reinwerfe, dann möchte ich auch, dass die Funktion langsam zu berechnen ist, das macht es schwierig, verschiedene Passwörter einfach durchzuprobieren, entfernt Patterns aus dem Key, solche Dinge. Und das erlaubt mir verschiedene Verbesserungen, die ich machen kann. Zum Beispiel muss ich jetzt, jetzt muss ich nicht mehr den eigentlichen Schlüssel übertragen mit meinem Boden, sondern zum Beispiel eine Sache, die ich machen kann, ist, ich verschieke 2 Schlüssel, solange einer der Booten nicht gefasst wird, kann ich, oder solange einer der Schlüssel nicht abgeschniffelt wird, kann die beiden noch sicher miteinander kommunizieren. Ich kann also Schlüsselmaterial über 2 verschiedene Wege verschicken. Ich kann auch Passwörter benutzen, Passwörter sind viel einfacher zu bemerken, als so ein String zufälliger Zahlen, hat also einige Vorteile. Ich bin viel flexibler damit, dass ich jetzt einen Schlüssel übertrage und wie ich ihn formatiere. Sehen wir das Beispiel, Alice überträgt ihr Passwort oder mehrere Passwörter, an Bertha. Beide berechnen die Keyderivation-Funktion über das Passwort und haben jetzt den Key in einem zweiten Schlüssel und benutzen das Protokoll, wie sie es vorher auch benutzt haben. Haben wir also schon mal eine Verbesserung bei der Schlüsselübertragung erreicht. Das war im Wesentlichen auch schon die symmetrische Kryptografie. Das ist wie man, wo man bis Mitte des 20. Jahrhunderts stand in der Kryptografie. Es gab aber immer noch dieses große Problem. Ich muss meine Schlüssel sicher übertragen und muss das irgendwie physikalisch absichern, solange die nicht sinnvoll übertragen werden können. Das funktioniert mein ganzes Protokoll nicht. Eine große Innovation, die das Ganze so ein bisschen vereinfacht hat, war die sogenannte asymmetrische Kryptografie. Genau. Bei der asymmetrischen Kryptografie gibt es zwei Schlüssel, einen öffentlichen und einen privaten. Den öffentlichen Schlüssel kann ich allen geben. Den privaten behalte nur ich. Mit dem öffentlichen Schlüssel kann ich Daten verschlüsseln. Nur ich kann sie wieder entschlüsseln. Ich könnte meinen Schlüssel raushalten, euch allen geben über dieses Video. Dann könntet ihr mit diesem Schlüssel Daten verschlüsseln. Dann könnte nur ich sie lesen, sofern ich an die Daten rankomme. Das ist sehr hilfreich, dass ich den Schlüssel tausch über öffentliche Kanäle ermöglicht. Ich muss nur noch dafür sorgen, dass ihr das vertrauen habt, dass der Schlüssel wirklich von mir kommt, der öffentliche Schlüssel. Ich muss aber nicht mehr dafür sorgen, dass den Schlüssel niemand abschnüffeln kann, wertliche Nöbertrage. Das ist viel, viel einfacher. Ich zum Beispiel habe meinen Schlüssel tatsächlich auf meiner Visitenkarte. Ich kann jeder den Schlüssel in meiner Visitenkarte lesen, nehmen und mir damit eine Mail schreiben. Im Wesentlichen ist in dem Fall der Fingerprint. Der Schlüssel ist öffentlich im Internet, wenn ihr den nachschauen wollt. Hier haben wir die asymmetrischen Verschlüsselungsverfahren. Das ist die eine Hälfte des Ganzen. Man braucht gleichzeitig auch noch Signaturverfahren. Mit der Verschlüsselung sichere ich die Daten vor, dass sie mit geschnüffelt werden, wenn sie übertragen werden. Mit der Signatur kann ich überprüfen, mit dem privaten Schlüssel, dass kann ich beweisen, dass die Daten wirklich von mir kommen. Ihr könnt es alle authentifizieren, dass die Daten wirklich von mir kommen mit dem öffentlichen Signaturschlüssel. In der Praxis, wenn man verschlüsselte Daten verschickt, verschlüsselt man die Daten immer mit dem öffentlichen Schlüssel des Empfängers und signiert sie mit dem eigenen privaten Schlüssel. Da die meisten Protokolle, die wir heutzutage einsetzen, also zum Beispiel auch wahrscheinlich das Protokoll, wie man das hier gerade dieses Video schaut, da diese Protokolle üblicherweise laufen, also live Verbindung sind, wo ich die in so einem Chat Daten hin und her, schnell schicken kann, gibt es auch dafür ein spezielles Verfahren zum Schlüsseltausch, nämlich den Diffy-Helmen-Key-Exchange. Da erzeugen beide ein privates und öffentlichen Schlüsselpaar, einen privaten und einen öffentlichen Schlüssel, tauschen die aus und nehmen dann den eigenen privaten Key, den öffentlichen Schlüssel des Gegenübers, machen darauf Diffy-Helmen und rausfällt ein Schlüsselmaterial, das sie dann benutzen können. Das coole daran ist, dass der Schlüssel nie über die Leitung geht. Ich tausche einfach die öffentlichen Schlüssel raus, kombiniert mit meinem privaten und beide haben die gleiche symmetrische Entropie. Hier können wir uns mal anschauen, wie dann so ein Protokoll in etwa funktioniert. Heutzutage ist so ein modernes kryptographisches Protokoll. Erst werden Schlüssel ausgetauscht, mit dem Verfahren z.B. Diffy-Helmen oder ECDH-eliptische Kurven. Diffy-Helmen ist ein bisschen das modernere Verfahren. Ich benutze ein asymmetrisches Verfahren, um mich zu authentifizieren. Zum Beispiel ein Signaturschema. Es gibt ja ganz verschiedene Konstruktionen, die man benutzen kann, um zu beweisen, dass man wirklich diejenige Partei ist, die man vorgibt zu sein. Und jetzt an der Stelle haben beide das gleiche Schlüsselmaterial, um daraus auch noch einen ordentlich formatierten Schlüssel zu erzeugen. Wenn Sie darauf eine key derivation, eine Schlüssel-Ableitungsfunktion an und können dann anfangen mit der symmetrischen Schifre und der symmetrischen MAC, dann kann man dann mit der Quantitation Code verschlüsselt Datensübertragen hin und her und hin und her. Das ist dann tatsächlich auch in etwa so der Stand der Technik. Also wenn wir heute so eine Webseite besuchen, zum Beispiel eine Bankenwebseite, media.cc.de, alles Mögliche, dann ist das vermutlich mit in etwa so einem Verfahren abgesichert, grob, wie TLS funktioniert, was diese ganze Verbindung absichert. Und wenn das ordentlich gemacht ist, geht man davon aus, dass auch große Government Player, also dass auch Regierungsorganisationen diese Protokolle nicht knacken können und die abgesichert sind. Das ist was auf Euren Handys läuft, auf jedem kleinsten Device. Das ist Stand der Technik. Kommen wir zu den Quantencomputern oder zum Quantum Hardening. Was kann ich machen, um kryptographische Protokolle, wie wir sie gerade besprochen haben, mit Quantencomputern anzugreifen? Zunächst gibt es da mal Grovers Algorithmus. Grovers Algorithmus ist die Suchfunktion der Quantencomputer. Angenommen, wir haben ein Schlüssel. Es gibt eine Million mögliche Schlüsse, also der Schlüssel ist 6 am Dezimalzahl lang, also von 0 bis 999,999. Was ich in jedem Fall machen kann, ist, ich kann einfach jeden möglichen Schlüssel durchprobieren, solange bis ich den Korrekten gefunden habe. Das ist ein Angriff, der grundsätzlich immer funktioniert. Der Trick ist einfach, dass man den Schlüsselraum nennt, dass man das groß genug macht, dass es ewig ja Millionen braucht, diese Schlüsse alle durchzuprobieren. Wenn man dann irgendwann in 2 hoch 128, 2 hoch 256 mögliche Schlüsse kommt, das ist einfach mehr, als es Sand am Meer oder Atome im Universum gibt, dass es nicht mehr durchzuprobieren. Quantencomputern haben sowas auch, die allgemeine Suchfunktion, die ist nur etwas schneller. Mit einem klassischen Computer, jeden Schlüssel durchprobieren und es eine millionenmögliche Schlüssel gibt, brauche ich im Durchschnitt 500.000 Versuche, um den Schlüssel zu finden, den Korrekten. Also Key Space geteilt durch 2 ist quasi die Zeit, die ich im Durchschnitt brauche. Kann natürlich auch sein, dass man zufällig relativ schnell den korrekten Schlüssel findet im Durchschnitt 500.000 Versuche. Quantencomputern sind ja erstaunlicherweise besser drin. Quantencomputern haben nämlich Grower-Bus-Anchorhythmus, die allgemeine Suchfunktion der Quantencomputer und die braucht nicht die Hälfte der Versuche, also Keysize durch 2, sondern Quadratwurzel Keysize. Also eine millionenmögliche Schlüssel, brauche ich nur 1000 Versuche, um den richtigen zu finden. Warum das genauso ist, ist schwer zu erklären, ich verstehe es auch nicht wirklich, nein, ich verstehe es tatsächlich einfach nicht, aber das ist, wie Quantencomputern funktionieren. Insofern sind die da schon mal viel, viel schneller. Der Vorteil an der Stelle ist, dass ich 6-stelliger Schlüssel, 3-stellige Anzahl in Versuche, verdoppelte ich doch einfach die Anzahl der Stellen in meinem Schlüssel, nicht ein 6-stelligen, sondern ein 12-stelligen Schlüssel, und dann bin ich genauso schnell wie vorher oder sogar schneller. Das ist auch, was man sagt, um kryptografische Protokolle gegen Grower-Anchorhythmus abzusichern, sagt man immer so in etwa, einfach die Schlüssellänge verdoppeln und das Ganze funktioniert schon wieder. Und da die Verschlüsselung so viel, viel, viel schneller ist als die Entschlüsselung, letztlich da ich nicht jede mögliche Schlüssel durchprobieren muss, geht das immer noch relativ schnell. Schlüssel mit 12 Stellen zu benutzen kostet nicht so viel mehr als Schlüssel mit 6 Stellen zu benutzen. Genau. Grower-Anchorhythmus funktioniert so ziemlich auf alles, also kann ich auf symmetrische Kryptografie anwenden, auf asymmetrische Kryptografie funktioniert in jedem Fall doppelte Schlüssellänge, dann ist man hoffentlich im Wesentlichen abgesichert. Was ein viel größeres Problem für uns ist, ist Chores-Algorithmus. Und zwar muss man dazu wissen, die gesamte moderne asymmetrische Kryptografie basiert im Wesentlichen auf zwei mathematischen Problemen, zwei schwer lösbaren mathematischen Problemen, nämlich dem Problem der Integer-Faktorisierung, also Zahlen in ihrer Prim-Zahlen zuzuerlegen, so neun Prim-Zahlen, dreimal drei, wäre so eine Prim-Faktor-Zerlegung eine ganz einfache, die ich auch im Kopf kann. In der asymmetrischen Kryptografie nimmt man da sehr, sehr, sehr, sehr lange Zahlen, die man dann quasi Prim-Faktorisieren müsste. Und da das gar nicht so leicht geht, muss ich quasi auch durchprobieren, ist das momentan sicher, Quantencomputern können das viel, viel, viel, viel, viel, viel, viel effizienter lösen, genauso mit dem Problem des diskreten Locker-Rhythmus. Das betrifft RSA, DSA, Kryptografie mit elliptischen Kurven basieren alle letztlich auf diesen zwei Problemen. Und ja, dagegen kann man nicht viel machen. Die Kryptografie ist dann einfach broken, ist kaputt, kann durch Quantencomputer angegriffen werden. Ist momentan nicht so ein riesiges Problem. Unsere Katzen-Videos, die wir im Internet anschauen, können wir einfach weitermachen und auch die restliche Kommunikation, was wir hier machen, Anrufe ist im Wesentlichen alles immer noch relativ sicher, denn die modernen Quantencomputer, die so existieren, die sind alle noch nicht so wirklich praktikabel. Die sind teuer, müssen cryogenisch gekühlt werden, also mit Helium-Kühler, und das ist ein ganz extrem kaltes bis auf nahe, absoluten Nullpunkt, Null-Carving runter. Und selbst dann haben die auch noch nicht genug Kube zum überhaupt zu modernen asymmetrischen Schlüssel im Memory zu halten. Schlüsse, die ich so einsetze mit RSA, 4 Kilobyte, passt überhaupt nicht in 45 Kubits rein. Dazu bräuchte ich 4.000 Kubits. Auch die elliptischen Kofferverfahren brauchen viel, viel mehr Bits, um die sinnvoll darzustellen und sinnvoll zu durchsuchen, ist weiterhin relativ sicher, weil die das einfach nicht speichern können. Aber es ist gar nicht so unwahrscheinlich, dass wir in den nächsten Jahren bis Jahrzehnten praktikabel Quantencomputer haben werden. Und es gibt es ja doch Daten, die man auch noch in 10, 15, 20 Jahren sicher wissen möchte. Zum Beispiel persönliche Daten und Gesundheitsdaten, das sind alles Dinge, die möchte man, dass sie auch noch in 20 Jahren sicher sind. Deswegen Angriffe, Strategie, die man dann heute benutzen kann, als Angreifer, nennt sich Save Now, Decorate Later. Ich speichere einfach den ganzen Kram, den ich interessiert mit und hoffe mal, dass ich in 10 Jahren einen praktikablen Quantencomputer bauen kann. Und was wir jetzt besprechen, geht im Wesentlichen, aber nicht ausschließlich, eben auf dieses Bedrohungsszenario, was eigentlich, wenn große Government-Agencies-Regierungen den ganzen Kram jetzt einfach mitspeichern. Um dieses Problem anzugehen, hat DINIST, das National Institute of Standards and Technology aus den USA vor etwa fünf Jahren ein Wettbewerb gestartet, um Kriptografie zu finden, die auch gegen Quantencomputer sicher ist, die dann eben auf anderen Problemen beruht, als auf den zwei genannten. Wie gesagt, vor etwa fünf Jahren gestartet, ist jetzt in der zweiten Runde, momentan sind noch 26 Kandidaten im Rennen, was bisher passiert ist. Der Wettbewerb wurde gestartet, ich glaube, 90. Vorschläge wurden in etwa eingereicht, davon sind erst mal, wie so die Hälfte ist, in den ersten 12 Stunden rausgeflogen, war unsicher. Und 26 sind jetzt eben noch übrig. Da wurden dann auch einige gemärscht, also Vorschläge, die relativ sicher sind, wurden zu einem kombiniert, einfach um da einfacher zu entscheiden zu können. Und das läuft eben noch, vor 2022 wird das nichts. Also wir müssen uns noch tatsächlich ein paar Jahre gedulden, bevor wir PostQuantum-Krypto einsetzen können. Wenn einen da die Fortschritte interessieren, kann man auf die PQC Forum Mailing List, die PostQuantum, ich habe vergessen, wofür das PostQuantum Mailing List der List, kann man sich subscriben und damit lesen, gibt ab und zu eigentlich relativ oft ganz spannende E-Mails, wenn man sich für sowas interessiert. Vorschläge, die da momentan im Rennen sind, sowas wie Learning with Errors, Kryptografie auf Basis von Error Correction Quotes, das werden dann die mathematischen Probleme, auf denen das Ganze basiert. Was das genau ist, ECC, ESOgenie, weiß ich auch nicht genau, kann man sich so anschauen, hört man relativ oft, wenn man da mitliest. Es gab auch schon Versuche, in der Kryptografischen Verfahren tatsächlich einzusetzen. Nämlich hat Chrome, zweimal verschiedene Key-Encapsulation-Methoden ausprobiert. Das war NewHawk, NTRU und SIKH. Haben Sie einfach mal in SSL eingebaut, deployed auf Google mit Cloudflare, mal geschaut, wie gut das Ganze funktioniert. Und das stellte sich heraus, hat einfach funktioniert. Das Experiment wurde aber beendet, weil momentan, ja, das sind eben noch experimentelle Algorithmen. Aber geht schon auch auf jeden Fall irgendwie. Und ja, der Code existiert im Internet. Ich habe mir den CACPQ1, das war dieses erste Experiment mit NewHawk, habe ich mir auch schon durchgelesen, ist relativ, was man da erwarten würde. Vor Kurzem gab es eben auch den Vorschlag vom BSI, was man da einsetzen könnte, wenn man aktuell schon Post-Quantum-Kryptografie einsetzen möchte, dann kann man eben zum Beispiel Fotokai- oder Classic-McAlles nutzen. Classic-McAlles ist in dem Fall tatsächlich auch schon ein Protokoll, was in den 70er Jahren erfunden wurde und relativ gut abgehangen wurde. Es geht man auch eigentlich davon aus, dass das sicheres Problem bei Classic-McAlles ist, dass die Keys so riesig sind, dass die bei kleineren Geräten so devices wie die, die ich programmier, was da gar nicht ein Speicher, also kann ich nicht einsetzen. Genau. Momentan haben wir die Key-Encapsulation-Methoden besprochen, also die man zum eigentlichen Schlüssel-Austausch einsetzen kann. Es gibt natürlich auch Signaturverfahren, die sind nicht so ganz relevant für die Post-Quantum-Kryptografie aktuell, weil ja, um die Signaturen schützen quasi von einem Man-in-the-Mittel-Angriff und den kann ich nur an der laufenden Verbindung durchführen. Ja, solange das keine Quantencomputer gibt, brauche ich das nicht. Also reicht klassischer Schutz und safe now und decryp later geht auch nicht, weil die Sachen sind immer noch mit der Key-Encapsulation-Methode abgesichert. Neue Zertifikate verschicken kann ich ja im Nachhinein nicht, also brauche ich eine Zeitmaschine. Genau. Wir haben das Ganze mehrmals schon gesehen, es wurde schon mal ausprobiert mit TLS, Cloudflare und so. Aber momentan vertraut man diesen Algorithmen, die ausprobiert wurden, nicht so wirklich. Warum vertraut man den nicht? Na ja, die Competition für einen guten Post-Quantum-Algorithmus läuft noch, es kann immer noch passieren, dass niemand feststellt, hey, diese Verfahren ist einfach unsicher, deswegen möchte man sich da absichern. Und zwar möchte man einen klassischen und einen Post-Quantum-Algorithmus gleichzeitig benutzen. Man möchte ihn miteinander kombinieren. Und da wir sorgen, dass das Protokoll dann noch sicher bleibt, wenn entweder der klassische Algorithmus oder der Post-Quantum Key-Exchange-Algorithmus gebrochen ist, also so sicher wie der sicherste von den beiden. Wie man das tut, das Forschungsfeld nennt sich Robust-Combiners, robuste Kombinatorn, ist ein Forschungsfeld. Kann man mal bei Google eingeben, also kann man mal bei der Suchmaschine eure Wahl, könnt ihr das mal eingeben und nach Papers schauen. Es gibt echt viele Papers, die sagen, ja, ist gar nicht so einfach, weil im Zweifelfall hat man hinterher ein Protokoll, dass weniger sicher ist. Zum Glück gibt es bei den Key-Austauschverfahren gibt es damit Hoden, wie ich das machen kann, nämlich der Concatenation-Combiner, nennt man das. Concatenation ist ein großes Wort für, ich benutze einfach beide zusammen und hängen die hintereinander. Normalerweise hätte man dann einen Schlüssel, der einfach zu lang ist, den kann ich gar nicht so benutzen. Aber wir haben ja unsere Key-Drivation-Funktion. Wir werfen einfach beide unsere Schlüsse in die Key-Drivation-Funktion rein und haben dann einen Combiner geschaffen, der quasi funktioniert, haben dann einen sicheren Schlüssel, in dem die Entropie aus beiden Key-Exchange-Methoden reingewandert ist. Wir benutzen, also robuste Kombinatorien sind schwierig zu bauen. In dem Fall haben wir den Vorteil, dass wir quasi aneinander hängen können und die symmetrische Kryptografie benutzen können, um einen Kombinator für unsere asymmetrische Kryptografie zu bauen. Gleiches mit den Signaturen. Naja, berechn ich beide Signaturen und prüfe halt beide. Wenn eine fehlschlägt, muss ich halt sagen, nee sorry, Signatureprüfung fehlgeschlagen, entschlüssel ich nicht. Hier habe ich nochmal so ein Protokoll aufgezeigt, wie man das dann funktioniert. Ich mache einfach zwei Schlüsselaustausche und authentifiziere zweimal. Hier in dem Beispiel, z.B. mit ECDH und Fotokal, mache dann zweimal die Authentifizierung und der symmetrische Teil meines Protokolls funktioniert genauso wie vorher. Ich werfe einfach das Schlüsselmaterial, was ich gewonnen habe, in meine Keyderivation-Funktion rein und benutze das Ganze dann ganz klassisch, um zu verschlüsseln. Verdoppelte eventuell nochmal die Länge meines Schlüssel. Wobei Chacha 20 ist da momentan, also eine mögliche Schifre zur symmetrischen Verschlüsselung, wäre da schon relativ sicher momentan, dass man davon ausgeht, die kann jetzt auch nicht gebrochen werden. Stellt sich noch die Frage, wenn ich das Ganze denn implementieren möchte. Wenn ich so ein, ja, wenn ich meinen Protokoll absichern möchte, welche Algorithmen soll ich eigentlich wählen? Wir haben jetzt hier schon ein paar Beispiele von Key-Encapsulation-Funktionen, die Post-Quantum-Hardens-Sint angeschaut. Classic-McAlles, New Hope, waren vorhin so Wörter, die vorkamen. Welches nehme ich davon? Ihr seht, das emoji, keine Ahnung. Denn falsches Leid. Welche nehme ich? Wunderbar, denn der Wettbewerb läuft noch. Es kann immer noch passieren, dass sich herausstellt, hey, verdammt, SIDH ist unsicher, als der Beispiel, was wir vorhin gehört hatten, dann habe ich es pech gehabt. Insofern ist das ein Problem, vor der jeder selbst steht, relativ abgehangene Verfahren, die man momentan so einsetzen kann, wäre Classic-McAlles, das eben aus den 70er-Jahren stammt und dadurch relativ gut abgehangen ist. Man geht auch davon aus, dass es sicher ist, es ist aber einfach nicht praktikabel für so Devices wie die, die ich programmiere. FotoKM könnte man auch einsetzen. Das war eines von den BCM-Fohlenen. Das ist auch, ja, kann man durchaus einsetzen. Sphinx Plus wäre jetzt eines der möglichen Verfahren bei den Post-Quantum-Signaturen. Auch hier wieder das Problem, genau, auch hier wieder das Problem, sehr große Schlüssel, aber das ist eben so klein, wie die schönen kleinen, elliptische Kurven-Schlüssel, wird man bei der Post-Quantum-Kryptografie wahrscheinlich leider zunächst nicht bekommen. Wenn ich das Ganze implementieren möchte auf meiner Plattform, was nehme ich denn da? Für symmetrische Kryptografie und aktuelle asymmetrische Kryptografie. Also was ich vorhin so als den aktuellen Stand der Technik beschrieben habe, ist Lipsodium sehr gut geeignet, das ist sehr, sehr gut abgehangen, setzt auf Primitiven, die sehr sicher sind, wenn man sich da an die Defaults von Lipsodium hält. Gibt es wenig, was man falsch machen kann. Es gibt noch Dinge, aber viel weniger als bei anderen Libraries, das ist quasi so. Bei dem Stand der Technik dann gibt es für die Post-Quantum-Algorithmen, gibt es LibOQS, LibOpenQuantumSafe, PQCleanMUPQ, ich würde LibOQS einsetzen, wenn ihr könnt. Bei meinem Projekt habe ich auf PQClean gesetzt, einfach deshalb, weil ich das für meine Plattform kompliziert bekommen habe. Das sind also drei Libraries, die man sich halten kann. LibOQS benutzt zum Beispiel auch die Implementierung aus PQClean. MUPQ, wäre eine Variante für Arm optimiert. Meine Erfahrung war, dass auch auf Arm Devices der Handshake geht so schnell, da ist es okay, wenn man die PQClean Variante nimmt. Also das Optimierungsproblem ist da nicht so groß, das ist ein Problem, dass man rennt, dass nicht genug Rahmen zur Verfügung steht. Hier haben wir nochmal Übersicht, was man tun kann, was man machen kann. Es gibt symmetrische Schiffrennen, symmetrische Funktionen, die sind alle so weit, weiterhin sicher. Man möchte die Schlüssellänge verdoppeln. Es gibt die Achteln asymmetrischen Verfahren, die leider abgelöst werden müssen. Man möchte die Kabel-Quantum-Computer haben. Und dann gibt es die neuen Post-Quantum-Kryptografie. Es gibt die neue Post-Quantum-Asymmetrische-Kryptografie. Die ist HIP und neu. Bei Datenbanken und bei Kryptografie möchte man nicht, dass Dinge HIP sind. Da möchte man, dass Dinge langweilig sind. Deswegen möchte man momentan nicht vollständig auf die Setzen, sondern möchte die gemeinsam mit den aktuellen nicht-Quantum-Harden asymmetrischen, kryptografischen Primitive jeweils einsetzen. Vielen Dank fürs Zuhören. Ihr könnt mich erreichen unter der angeschriebenen Mail-Adresse karoatcapdev.net auf Twitter unter dakorah d-a-k-o-r-a-a. Wenn ihr Fragen habt, schreibt mir einfach und vielen Dank an Agnes, Jane Pie, Florian, Benbe und Mimi fürs Helfen beim Vortag machen, fürs Gegenlesen, fürs Sanken, wo Fehler sind, fürs Fehler finden vor allem. Vielen Dank dafür. Und euch Danke fürs Zuhören.