 Gut. Und damit gebe ich jetzt an die Experten bitte eine warme Runde Applaus. Jetzt ist das Mikrofon an. Hallo, schön, dass ihr alle da seid. Es freut mich, dass ihr zu einem Mathematik-Talk um 22.15 Uhr am Tag 2 erscheint. Wir werden über Gitter und wie man sie in Kryptografie benutzt reden. Und weil es auch viel Code geben wird in diesem Talk, unsere Folien gibt es auf dieser Webseite online. Wenn ihr eure Laptops auspacken wollt und damit spielen wollt und sicherstellen wollt, dass das auch alles so funktioniert, dann könnt ihr das jetzt machen. Dann könnt ihr unsere gesamten Codebeispiele in Sage rein kopieren und damit machen. Also, hier gibt es ein paar Überschriften, wo es um Kryptografie geht. Kryptografie ist häufig in den Nachrichten in letzter Zeit. Und da geht es nicht nur um Bitcoin oder Kryptowährungen oder die Blockchain. Hier sind ein paar Beispiele. Ein paar, die haben alle Dinge gemeinsam. Es geht hier immer um Gitter. Warum reden Menschen über Gitter in Kryptografie? Das gibt ein paar Dinge, die man damit machen kann. Also, man kann entweder Sachen kaputt machen. Das ist super lustig. Jede Art von Krypto, die ihr euch vorstellen könnt, kann man irgendwie auch mit Gitter kaputt machen. Da geht es nicht nur um alte öffentliche Schlüsselverfahren, sondern auch um Verfahren, die wir heute benutzen und auch die, die wir möglicherweise in der Zukunft benutzen werden. Und die andere Art und Weise, wie man Gitter benutzen kann in Krypto, ist eben auch Kryptografie herzustellen. Unter anderem Post-Quantum-Kryptografie. Und wir werden in 20 Jahren vielleicht herausfinden, ob das eine schlechte Idee war, diese Art von Kryptografie zu erfinden. Also, dieser Talk wird in mehreren Teilen stattfinden. Wir werden Dinge kaputt machen. Wir werden Sachen erzeugen. Also, wenn Dinge kaputt gehen, wenn ihr da verloren geht, dann könnt ihr vielleicht einfach später wieder einsteigen. Das ist kein Lettus. Das ist ein Wortspiel im Englischen. Das ist Lettus, Salat nah an Lettus, Gitter. Also, das ist ein Lettus, ein Salat. Ich entschuldige mich bei allen Nicht-Englisch-Sprechern und bei den Übersetzern. Das ist schon in Ordnung. Also, das hier ist ein Gitter in der Mathematik. Es gibt verschiedene Arten von Gitter in der Mathematik. Könnt ihr das euch vorstellen? Als ein wiederholendes Gitter im endimensionalen Raum. Das einfach sich immer wieder wiederholt. Das sieht dann irgendwie so aus wie das hier in zwei Dimensionen. Das ist ein Gitter von Salatköpfen. Also, ein Lettus of Lettuses. Ich habe das nur reingetan, um die Übersetzer zu ärgern. Wir fühlen uns geärgert. Ihr müsst euch das so vorstellen. Wir haben abstrakte Punkte. Aber ihr könnt euch vorstellen, dass diese Punkte mathematische Objekte repräsentieren. Zum Beispiel Polynome. Wir werden also zum Beispiel Gitter von Polynomen sehen. Einzelne Gitterpunkte repräsentieren ein mathematisches Objekt hier. In dem Fall Salatköpfe oder eben auch was anderes. Die Witze beiseite. Wenn man diese ganzen Punkte repräsentieren will, dann muss es eine gewisse Struktur geben. Zum Beispiel statt Bilder von Salatköpfen zu nehmen, können wir auch diese zwei Vektoren nehmen. Und ihr müsst euch vorstellen, dass hier an dieser Stelle der Nullpunkt ist. Und von da aus gibt es zwei Vektoren, die von da weggehen, zwei Geraden. Die sind so gewählt, dass jeder andere Punkt so erreicht werden könnte über eine dieser beiden Kombinationen. Um hier oben hinzukommen, nimmt man den einfach zweimal, um hier rüber gehen, nimmt man es zweimal und subtrahiert den anderen. Also alle Punkte können über diese zwei Objekte erreicht werden. Das ist nicht eindeutig. Also die Grünen sind auch eine Basis. Und die Blauen formen auch eine Basis. Also sehr längliche Vektoren in dem Fall. Und irgendwelche Kombinationen dieser drei Mengen. Und wir können alle Punkte erreichen. Ihr habt über die reellen Zahlen gelernt. Und da ging es um X- und Y-Koordinaten. Und was wir hier benutzen, sind nur integer, also ganzzahlige Vielfache davon. Also ihr könnt nicht die Hälfte von B3 benutzen. Wenn ihr die Hälfte von B3 benutzt, dann landet ihr hinter Mitte. Und da ist aber nichts. Das sind quasi wie bei einem Spielfeld nur auf dem nächsten ganzen Punkt landen. Und wenn wir uns also das mathematisch angucken, dieser B1-Vektor, das ist sowas wie hier an der Stelle, das ist 2, das ist 3,4 zum Beispiel. Und um die zu speichern, packen wir die hier in die Matrix oben in die erste Zeile. Das ist der erste Komponente, das ist die zweite. Und bei dem zweiten Vektor machen wir das ganz genauso. Und 2-Dimensional ist natürlich sehr klein. Jetzt gucken wir uns mal sowas zum Beispiel an. Da kriegt man so einen gewissen Tunnelblick. Also es gibt einen Ursprung, man kann ihn sehen. Und in Kryptografie benutzen wir das mit ein paar 100 Dimensionen oder sogar 1000 Dimensionen. Das machen wir jetzt aber nicht mit Bildern. Ich denke, wir stellen uns das einfach nur vor. Wir haben eine Matrix und die erste Zeile hat 1000 Einträge und so weiter. Und dann haben wir also sonst so viele Einträge in dieser Matrix, wird jeweils 1000 Zeilen. Mathematisch ist das natürlich kein Problem, da weit drüber zu gehen, aber für Bilder bleiben wir jetzt bei der Basis 2, bei der Dimension 2. Also jetzt wisst ihr alle, was ein Gitter ist. Und warum machen wir uns da überhaupt Gedanken drüber? Wieso ist das interessant? Und was wir hier machen wollen, ist, wir finden kurze Vektoren in diesen Gitter. Wir wissen, es gibt verschiedene Basen für so einen Gitter, aber einige werden sehr lange Vektoren haben und andere eben sehr kurze haben. Und dieses Problem nennt man das Shortest Vektor Problem, also das kürzeste Vektor Problem. Und wenn wir eine Gitterbeschreibung haben, dann müssen wir quasi den kürzesten Vektor finden. Und es gibt verschiedene Arten, das zu berechneten. Es stellt sich raus, es ist sehr schwierig, das exakt zu berechnen. Die besten Algorithmen, die das exakt in so einem Gitter berechnen, laufen in exponentieller Zeit, also 2 hoch N in Dimension N. Aber man kann auch eine Nährung nur angeben. Also eine, der einen kurzen Vektor errechnet, aber eben nicht notwendigerweise den kürzesten. Und der läuft in polynomialer Zeit. Und das ist natürlich sehr viel schneller und der Wissenschaftler und euch wissen. Und es ist ein schwieriges Problem, aber leicht näherungsweise zu lösen. Und in diesem Talk werden wir uns speziell den LLL Algorithmus angucken nach den 3 Erfindern, LENSTRA, LENSTRA und LOVA, der einen ungefähr kürzesten Vektor berechnet. Und ungefähr, also ziemlich kurz, bedeutet hier im Sinne der Euclide-Norm sowas wie exponentiell in der Dimension mal der tatsächlich kürzeste Vektor. Und das sieht nicht super beeindruckend aus, aber es stellt sich raus, dass es sehr schwierig zu finden ist. Und wir können damit eben sehr viel Kryptografie kaputt machen. Und das ist das, was uns daran interessiert. LLL. Wir machen also die ganzen Beispiele hier, machen wir mit Sage. Das ist ähnlich wie Python und da kommen noch einige Funktionen dazu, die ihr vielleicht noch nicht gesehen habt. Und in der Art und Weise ist es auch ähnlich zu Python, denn das enthält auch möglicherweise viele Funktionen, die ihr noch nie gesehen habt. Und das, also wenn man hier zum Beispiel 2 mal 3 ausrechnet, dann kommt da 6 raus. Und wenn man 2 und dann dieses Hochdach benutzt, dann ist das nicht das XOR, was aus anderen Programmiersprachen kommt, sondern der Exponent, das ist Mathematiker, notieren das so. Und das gibt auch sehr viele hilfreiche Funktionen. Also wenn man zum Beispiel eine Zahl oder ein Polinom factorisieren will, dann kann man da explizit über die Fektorfunktion ausrechnen. Man kann Nullstellen von Polinomen ausrechnen. Zum Beispiel x²-9 hat minus 3 und 3 als Nullstellen. Was sind die 1? Das ist die Anzahl der Nullstellen. Also wenn man zum Beispiel x² factorisiert, dann kommt dabei raus, das ist x-0 mit Vielfachheit 2. Und es gibt praktische Funktionen, zum Beispiel eben auch, um zufällige Primzahlen zu erzeugen. Und in dem Fall bis zu 2 hoch 512 als Obergröße. Das ist wie gesagt das Exponenten-Symbol dieses Hochdach. Und P mal Q, also wir multiplizieren 2 große Zahlen zusammen und plötzlich machen wir RSA. Und wir wählen einen Exponenten, zum Beispiel 3 oder was auch immer. Und dann nehmen wir eine Nachricht und berechnen PAU, das ist jetzt eine Python-Funktion, die kann man tatsächlich direkt in Python benutzen. Random Prime kommt aus Sage, dafür muss man Sage benutzen. Aber PAU kann man direkt in Python benutzen. Und Cyphertext ist gleich PAU von Message en. Also der Geheimtext ist PAU von Message und en. Und da kriegt man dann die Verschlüsselung und man kann dieselbe PAU-Funktion auch benutzen, um die Entschlüsselung zu machen. Eine heftige Warnung davor, dass wenn ihr RSA implementieren wollt, dann macht es auf gar keinen Fall genauso. Es gibt auch schon später einige Warnungen, die aufgrund von einigen Attacken hier stattfinden. Aber tatsächlich ist RSA, wie man es in Lehrbüchern findet, auch aus anderen Gründen unsicher. Also macht es nicht so, wir werden euch jetzt auch hier nicht alle Dinge, die da schlecht dran sind, zeigen. Also was wir euch von der vorherigen Folie zeigen wollten, ist, dass man Faktorisierung irgendwie wichtig ist. Und wir wollen, dass RSA sicher ist. Also wollen wir Dinge faktorisieren. Und wie schwierig ist es schon, RSA zu implementieren? Sieht ziemlich schwierig aus. Naja, machen wir jetzt einfach, wir bauen jetzt das Internet. Also los. Also bei RSA, da geht es ums Faktorisieren und wir beschäftigen uns mit Gittern. Also wie schwierig ist jetzt Faktorisierung hier wirklich? Also gucken wir uns mal hier die Parameter dieses Problems an. Ich habe also möglicherweise ein Modulus N, den der hier lila ist, und zwei Primzahlen P und Q. Und wenn ich jetzt angebe P und Q, dann wisst ihr, wie ich N faktorisieren kann, denn ihr wisst ja, wie die Faktoren sind. Das ist also ein super einfaches Problem. Wenn ich euch N und einen den Faktoren gebe, zum Beispiel P, dann könnt ihr N immer noch faktorisieren, denn ihr könnt ja einfach Q ausrechnen, indem ihr N durch P zeilt. Also fertig, ganz einfaches Gebiet. Und wenn ich weder P und Q angebe, aber nur N, dann hoffe ich, das ist ein echt schwieriges Problem, denn sonst ist das Internet schon kaputt. Die besten Algorithmen, die wir haben, um das zu faktorisieren, ist subexponential in der Größe der Länge von N. Aktuell hat noch niemand öffentlich RSA 1024 faktorisiert. Möglicherweise hat die NSA das schon gemacht. Das weiß ich nicht. Wenn euch das super interessiert, dann könnt ihr euch den Talk vom 29 C3, den wir da gehalten haben, angucken für mehr Informationen. Das ist tatsächlich relativ schwierig. Jetzt machen wir mal was spannenderes. Was ist, wenn ich euch die Hälfte der Bits von P und die Hälfte der Bits von Q gebe? Wenn die so aussehen, dann stellt sich raus, dass das tatsächlich sehr einfach ist. Man kann das einfach nur, man kann ein bisschen teilen und ein bisschen Bits umsortieren und dann kriegt man P und Q komplett raus. Also es ist ganz interessant, aber man kann sich keine Situation vorstellen, wo das tatsächlich im wirklichen Leben mal auftritt. Jetzt machen wir es mal ein bisschen spannender. Wie wäre es denn mit dieser Variante? Also das ist jetzt auf halben Weg zwischen was, was einfach ist und etwas, das schwierig ist. Wo liegt jetzt dieses Problem? Das ist also mehr spannender. Und es stellt sich raus, dass mit der Information, also wenn man die Hälfte der Bits von P, also sagen wir mal die erste Hälfte dabei, es ist ziemlich egal, welche Bits ich euch gebe, dann kann man das in polynomialer Zeit faktorisieren, obwohl die andere Hälfte der Bits riesengroß ist, die man nicht Brut forcen kann, also die man nicht einfach rausprobieren kann. Und es stellt sich raus, dass der Algorithmus auf Gittern basiert. Deswegen das Thema unseres Talks heute. Also das ist ein kleiner korthographischer Magier-Trick. Das ist Sage Code, den ihr alle jetzt ausführen könnt. Also wenn ihr mir das nicht glaubt, dann könnt ihr das jetzt ausführen und verifizieren, dass das tatsächlich funktioniert. Und ich mache jetzt meinen kleinen magischen Trick. Also ich generiere zwei zufällige Primzahlen, 512 Bit. Das sind also tatsächlich echte Primzahlen. Ich habe da keine versteckten Funktionen drin. Ich multipliziere sie auseinander, comma N, und dann rechne ich jetzt A aus. Und A ist die meisten Bits von P außer die 86 Bits. Und wenn ich mir jetzt den Wert von A angucke, da sind jetzt eine ganze Menge Nullen. Das sind die Bits, die ich gelöscht habe. Also ich habe das meiste von P gelernt, aber nicht alles. Und 68 Bits ist genug, dass ich das definitiv nicht auf meinem Laptop ausprobieren könnte. Ich könnte definitiv keinen Wurzelalgorithmus benutzen, um das auszuführen. Und definitiv nicht, bevor dieser Talk hier zu Ende ist. Also was ich machen möchte ist, ich möchte die Faktorisierung von N rekonstruieren, nur mit der Information, die noch in A drin steht, also nicht der Komplett. Und was ich jetzt mache ist, ich erzeuge eine Matrix. Und ich hatte ja vorhin drüber gesprochen, die Matrizen und Gitter, was miteinander zu tun haben. Und diese Matrix enthält den Wert A. Also das sind die Bits von P, die ich wissen darf. Und N. Und auch ein paar andere Dinge, die öffentlich sind. Und dann benutze ich diesen magischen LLL-Algorithmus da drauf. Und jetzt kommt der magische Trick. Ich benutze den Outputs, also die Ausgabe dieses LLL-Algorithmus, erzeuge einen Polinom aus diesem Vektor, den ich da gekriegt habe. Und wenn ich das LLL-Stellen von diesem Polinom berechnet, dann kriege ich auf magische Art und Weise P zurück. Also da ist jetzt der Hase wieder aufgetaucht. Ich weiß auch nicht, wo der herkam. Was ist hier gerade passiert? Also ich hoffe ihr seid verwirrt, denn ihr solltet hier wirklich verwirrt sein. Aber ich hoffe ihr glaubt wirklich, dass das funktioniert. Also hier ist tatsächlich Magie passiert und ich habe sehr effizient faktorisiert. Das ist ein Beispiel für die sogenannte Coppersmith-Methode. Coppersmith ist einer der größten Krypto-Analysten des 20. Jahrhunderts, möglicherweise das 21. Jahrhunderts, denn er arbeitet jetzt für die US-amerikanische Regierung. Das heißt, wir wissen da aktuell nichts dafür, aber hoffentlich werden wir das in 50 Jahren rausfinden. Ich bin super, also es interessiert mich total. Also alles, was wir von ihm öffentlich wissen, ist total großartig. Es ist ein originales Paper aus dem Jahr 1966, das die Verallgemeinerung dieser Methode beschreibt, es super schwer zu lesen. Das heißt, ich werde eine Vereinfachung, die How Grave Graham einige Jahre später veröffentlicht haben, aber es hat immer noch einige Schritte und sieht sehr verwirrend aus. Also das ist der Zustand von Krypto-Analysis. Ich werde das auf Englisch erklären, was hier passiert und das wird wahrscheinlich trotzdem immer noch aussehen wie Magie. Was ich in Englisch mache, hier ist, ich habe ein Polinom hingeschrieben, in dem Fall ein lineares Polinom A plus X. X ist die Unbekannte, das hat eine sehr kleine Nullstelle. Ich weiß nicht, was diese Nullstelle ist. Ich weiß nicht, wie die aussieht, aber möglicherweise, aber irgendwie hilft mir das trotzdem. Ich habe jetzt also eine Basis hier konstruiert. Ich benutze diese Algorithmen und werfe da LLL auf diese Matrix und dann rechne ich hier von einem Polinom, was ich daraus wieder erzeuge und dann ist magisch eine dieser Nullstellen, die daraus kommt, wieder meine gesuchte Zahl. Aber ich kann das beweisen, aber es ist in gewisser Weise wie Magie. Und jetzt denkt ihr alle wahrscheinlich, ja, wie hier auf dem Bild in der Mitte, und jetzt passiert ein Wunder, wo das Wunder in gewisser Weise dieser LLL-Algorithmus ist. Man wirft kryptografisch Schlüssel in diesen LLL-Algorithmus und auf magische Art und Weise fallen private Schlüssel da unten raus. Ich weiß nicht, was passiert, also selbst Mathematiker, die sich da lange damit beschäftigt haben für Jahre, die fühlen sich immer noch so wie in diesem Comic. LLL funktioniert einfach viel besser, als das funktionieren sollte. Wir wissen auch nicht so richtig, warum. Und ihr könnt, wenn ihr das uns nicht glaubt, wir haben einen Code, der tatsächlich waffenfähig ist und ihr könnt das ausprobieren und schauen, wo ihr damit hinkommt. Wenn ich in den Kryptokonferien reingegangen bin, dann gibt es viele Studien, und viele Gradstudents haben dieses Stück von P veröffentlicht. Nicht dieses Stück von P, sondern dieses Stück von P. Es gab viele theoretische Papers. Aber es ist irgendjemand so dumm, und würde dir ein ganzes Stück von P geben. Das ist nichts, was du in Praktis sehen willst. Im Jahr 2012, das war nach dem Jahr 2003, wenn wir uns ein Freund von uns gesagt haben, wir haben ein Taiwanese Smartcard gegeben. Nachdem wir unser Talk hier letztes Mal gegeben haben, hat ein Teil von Nese gesagt, dass wir ein Teil dieser, das erste Arschlöse fakturisiert haben. Es gab dieses Jahr ein total interessantes Paper an der Newsnex-Konferenz, und die hatten ein paar Infine-Karten gefunden. Da ist möglicherweise so ein Chip mit drauf, der genauso kaputt ist, wie wir das erwartet haben. Wir haben tatsächlich festgestellt, dass Infinien ihre Primzahlen auf eine sehr wunderliche Art und Weise erzeugt. Also so erzeugt man Primzahlen eigentlich nicht. Man kann jetzt eine ganze Menge von diesen Sachen finden und dann eine Primzahl raussuchen, aber wieso? Und was uns dabei aufgefallen ist, ist, dass dieses M, wo man also sehr genau hinschaut, dann haben sie also durch heftige Arbeit dieses kleine A, und das G ist auch bekannt, und die haben das A so klein gemacht, in so kleine Menge eingepackt, dass man danach suchen konnte. Das heißt, wir nehmen uns so ein A, wir rechnen G hoch A mod M aus und benutzen die Coppersmith-Attacke, um K rauszukriegen. Wir kriegen eine Zahl und wenn wir eine Zahl rauskriegen, dann ist das wahrscheinlich ein Faktor, also klasse. Und wenn nicht, naja, Pech. Wir probieren das einfach für jede von diesen Varianten aus und das sieht ganz ähnlich aus wie in Nadja's Talk, jetzt halt nicht in Dimension 3. Und es stellt sich raus, wir können einfach die verschiedenen Varianten ausprobieren, um rauszufinden, wie viele von den As wir ausprobieren wollen. Und das hat dann dazu geführt, dass wir tatsächlich 1024 Bit RSA Keys lösen konnten, die tatsächlich benutzt wurden. Und jetzt sind wir natürlich ein sehr großer Problem, nicht nur wenn wir unser Schlüssel falsch generieren, sondern auch wenn wir ein ganz normalen Schlüssel haben und die man baut, ein Quantencomputer, dann wird RSA 1024, RSA 2048, RSA 4096 geknackt werden und das ist ein Alptraum. Und es ist nicht ganz klar, wann das passieren wird. In 2015, Mike Mosker, der Direktor des Instituts für Quantencomputern in Waterloo, hat gesagt, dass in 2026 die Wahrscheinlichkeit bei 1 Sippel liegt. Und erst letzten Monat, Dario Gill, der Vice-Präsident in IBM, und mit den Namen von Q, wie im James Bond Film, muss es etwas cool sein. Und es ist tatsächlich, es gibt eine Waffenabteilung in IBM und sie arbeiten an einem Quantencomputer, der sächsisch nutzvoll ist, um den sie verkaufen können. Und er hat es zurück in die Zeit geguckt und gesagt, dass in den Jahren 2016 bis 2021 die tatsächliche Zeit gekommen ist in der Computer als Technologie gekommen sind. Und wie hängt das jetzt mit dem Scheuer Algorithmus zusammen? Scheuer Algorithmus braucht zweimal der Anzahl der Bits in dem RSA-Schlüssel. Man braucht zweimal so viele Q-Bits wie im RSA-Schlüssel drin sind. Und Q-Bits sind die Bits in einem Quantencomputer. Und wie vergleicht sich das? Und wie steht das jetzt im Verhältnis mit den fünf Q-Bits, zehn Q-Bits letztes Jahr, zehn Q-Bits dieses Jahr? Es scheint so, als wären wir bald bei 499 Q-Bits. Und das wird dann das Ende für RSA sein. Aber es ist nicht so schlimm, wie es sich anhört. Es wird ein paar Jahre länger dauern. Denn Scheuer Algorithmus braucht 499 perfekte Q-Bits. Und zurzeit werden nur Q-Bits gebaut, die eine Weile halten und dann zerstört werden. Und man braucht dafür Fehler-Korrekturen. Und das ist nicht normale Fehler-Korrekturen, sondern tatsächlich andere Fehler-Korrekturen. Für Quanten-Korrekturen braucht man 1000 Quanten-Bits. Tausendfach die Anzahl der Berechnung, die man hat, für einen gut Q-Bit angenommen, dass Q-Bits die Güte haben, von dem man annimmt. Das heißt, wir brauchen 1000 mal 4096 Q-Bits. Und das ist deutlich länger als ... Das ist deutlich länger, bevor jemand in Öffentlichkeit erst Schlüssel fakturisiert. Und in der Öffentlichkeit sind zurzeit viele Alternativen für RSA, bei der man zurzeit nicht wissen, wie wir sie zerstören können. Und NIST hat letztes Jahr aufgerufen, zu Vorschlägen für Post-Quantum-Kryptosystemen. Und sie haben im letzten Monat diese Tabelle hochgeladen mit verschiedenen Einreichungen, die sie erhalten haben. Und es gibt diese Gitta-basierten, Kot-basierten Multivarianten und Signaturen, Entschüssungen. Und wir sprachen über Kot-basierte und Hash-basierte, weil sie die ältesten Bekannten-Vorschläge sind, die Quantencomputer überleben könnten. Und es gibt auch ein paar Neuere. Aber viele gehen sehr weit zurück. Und es scheint, dass man damit Sicherheit bekommen kann. Das heißt, niemand ist bis jetzt mit einem Quantenalgorithmus abgekommen, hat bis jetzt einen Quantenalgorithmus entwickelt, der die knacken kann. Und in anderen Arten sind eben auch in den letzten Jahren Alternativen aufgekommen, bei denen wir jetzt nicht wissen, wie wir sie knacken sollen. NIST hat eine Woche, vor einer Woche, die Liste der Einreichungen hochgeladen. Und wir werden über die folgenden Jahre noch einiges über diese Lernen, während Leute sich diese Algorithmen genau angucken und angucken, ob sie sich gut über, ob sie sicher gegen Quantencomputer sind. Und sie haben sich nur 69 von den eingereichten, hochgeladen, weil die anderen waren nicht wirklich besonders. Und die 69 wurden hochgeladen. Und jetzt sind wir schon bei ein paar wenige Einreichungen, die jetzt in Rot zu sehen, denn Algorithmen sind drei Stunden nach dem NIST die Liste hochgehaten haben. Geste gerne in Rot. Lawrence Penny, der vielleicht im Publikum sitzen könnte, hat einen Skript hochgeladen, der den Klartext von dem verschlosseten Text ohne den Schlüssel zu können hochgeladen. Drei Stunden und zehn Minuten nachdem die Liste hochgeladen wurde. Das ist gute Arbeit, Lawrence. RVB, ein anderer da. Auch geknackt von jemandem genannt, Lawrence Penny. Erste, HK17 haben Tanya und ich hochgeladen. Ray Koss. RVB, das sind andere Submissions. RVB, HK7 und Gassagen sind andere Vorschläge, die bisher noch nicht so sehr untersucht wurden. Ray Koss ist gut bekannt. Und Tanya, ich und jemand anderes. Auch jemand, der Lawrence Penny heißt, haben einen Skript hochgeladen, der Ray Koss komplett zerstört. Und die haben tatsächlich drei verschiedene Eingriffe vorgeschlagen. Und man sollte das auf jeden Fall nicht mit den Parametern benutzen, die sie vorgeschlagen haben. Und HeLa5, für dänische Leute im Publikum, HeLa5, das ist okay, wenn man Signaturen nimmt. Aber als sie das hochgeladen haben, haben sie behauptet, das wäre sicher gegen gewählten Geheimtext-Angriffe, also Chosen-Cypher-Text. Und ich und Tanya und wieder jemand, der Lawrence Penny heißt, da müsste er echt darauf achten auf diese Person, haben das auch gebrochen. Und wir werden jetzt also auch weiterhin noch davon hören, was von Lawrence und anderen Leuten kaputtgemacht wird, einfach in der Zukunft. Okay. Also wir haben jetzt so viel über Dinge kaputtmachen gehört. Jetzt machen wir mehr RSA kaputt, einfach nur, weil es Spaß macht. Das heißt, ich will euch jetzt wieder eine Variante zeigen, wie man RSA mit Gittern kaputtmacht, mit der sogenannten Small Exponent-Angriff, also dem kleinen Exponenten-Angriff. Hier ist ein Code, da arbeiten wir jetzt alle zusammen. Die Nachricht ist hier squeamish, frage, wie auch immer man das ausspricht. Und wir konvertieren die in eine ganze Zahl. Da passiert gar nichts Spezielles. Und ich generiere eine geheime Zahl N, die 1024 bits hat. Und ich verschlüsse meine Nachricht mit RSA. Was ist das Problem hier? Zu klein, ganz genau. Also die Leute im Publikum passen da immer noch drauf auch. Wir haben ein Problem. Und das Problem ist, dass der Geheimtext kleiner ist als N. Also letztendlich wird auch die gesamte Nachricht kleiner sein. Das heißt, die Modulo-Reduktion, Modulo N, macht überhaupt nichts. Das heißt, wir können ganz einfach die Nachricht über ganze Zahlen, über den Raum der ganzen Zahlen ausrechnen. Deswegen braucht man für RSA Padding, also Auffüllung. Also Nachricht ist zu klein. Die Nachricht hoch drei ist kleiner als N. Also die Modulo-Reduktion macht gar nichts. RSA ist trivial zu brechen. Hier ist ein anderes Beispiel, aber es ist etwas komplizierter. Hier habe ich den Modulus etwas kleiner gemacht. Das ist nur damit, dass Beispiel auf die Folie passt. Aber das wird nicht das Problem sein. Also wir erzeugen ein 300-Bit Modulus. Ich werde jetzt nicht versuchen, den zu fakturisieren, obwohl das möglicherweise sogar geht. Und jetzt nehmen wir sowas wie das Passwort for today is swordfish und machen das wieder zu einer ganzen Zahl, genauso wie vorhin. Und ich mache RSA wie im Lehrbuch, indem ich die Nachricht hoch drei Modulo N berechne. Und wenn die Nachricht kurz ist, dann habe ich dasselbe Problem. Ich kann einfach die dritte Wurzel von C ausrechnen. Aber in dem Fall ist das nicht der Fall. Das heißt, so habe ich es nicht kaputt gemacht. Aber es könnte immer noch ein Problem geben. Denn es liegt daran, dass diese Nachricht ein bestimmtes Format hat. Also der Angeifer könnte zum Beispiel rausfinden, dass die Nachricht ist, das Passwort für heute ist irgendwas. So wie hier. The Passwort for today is swordfish. Also möglicherweise hat der Angriffer das Erraten, dass die Nachricht so aussieht. Und ein Teil der Nachricht kennen sie also nicht. Aber den Rest der Nachricht kennen sie eben. Das heißt, wir haben jetzt einen geheimen Wert, den der Angriffer geraten hat. Und jetzt kommt wieder der Magi Trick. Ich kann eine Matrix konstruieren aus meinen Vermutungen, wie die Nachricht aussieht und dem Geheimtext und dem Modulus. Und dann habe ich einfach nur ein paar Nullen aufgefüllt für die Teile der Nachricht, die ich nicht kenne. Also ich habe eine Basis für ein Gitter. Und jetzt starten wir wieder LLL da drauf. Ich kriege einen Vektor zurück. Ich erzeuge einen Polinom aus den Koeffizienten, diesen Svektors. Ich mache hier Magie. Und wenn ich mir die Nullstellen angucke, dann habe ich den Teil der Nachricht rausgekriegt, die ich nicht kannte. Also Magietrick. Also ich hoffe, ihr habt jetzt heftig Angst davor, RSA jemals selber zu implementieren. Was passiert hier? Es sieht ganz ähnlich aus wie vorhin. Ich werde es wieder auf Englisch hinschreiben. Ihr sollt jetzt nicht in der Lage sein, zu beweisen, was das funktioniert, aber nachvollziehen sollt ihr es können. Ich habe einen Polinom hingeschrieben, das hat relativ kleine Nullstellen. Ich weiß nicht, was Sortfisch ist, also das Passwort. Aber ich weiß, dass wenn ich das zusammennehme mit dem, was ich geraten habe und das Hochdreinnehme, dann kriege ich quasi die Nachricht. Also irgendwas plus Sortfisch hoch drei ist Null Modulo N. Das heißt, ich erzeuge jetzt ein Gitter von Polinomen, die Modulo N verschwinden. Also eins davon ist das, was ich hierhin geschrieben habe. Ich habe LLL aufgerufen, dann passiert die Magie. Ich winke mit meinen Händen. Und dann habe ich irgendwie ein Polinom daraus erzeugt. Und die Lösung Sortfisch war tatsächlich eine Nullstelle dieses kleinen Polinoms in dieser... Das heißt, dieser Angriff heißt Koppersmith Small Exponent, also kleiner Exponent Koppersmith Attacke. Hier gibt es ein paar Varianten, wie man sich dagegen schützen kann. Ihr könnt, also wenn ihr da Angst davor habt, dann benutzt einfach kein RSA, das ist eine Möglichkeit. Wenn ihr RSA benutzen müsst, dann benutzt ordentliches Padding. Wenn ihr RSA benutzen müsst, dann benutzt außerdem auch keine kleinen Exponenten. Also zum Beispiel, wenn es kleiner ist als 65.537, dann funktioniert es auf gar keinen Fall. Also wir sind hier nicht hergekommen, um die ganze Zeit über RSA zu reden. Wir wollten auch über konstruktiv, also praktische Anwendungen von Gittern reden. Und eine der ältesten Anwendungen für Gitter-basierte Krypto ist NTRU. Die Publikation ist aus dem Jahr 1998. Es gibt auch Preprints aus dem Jahr 1996. Und die haben nach Alternativen für RSA und ECC gesucht. Die haben heftig Werbung gemacht, haben auch hohe Geschwindigkeiten erreicht, haben sich also auch Kurven angeguckt und RSA. Im Vergleich zu ECC hatten sie immer noch größere Schlüssel und größere Geheimtexte, aber sie wollten eine Alternative sein. Es ging damals noch nicht um Quantencomputer, obwohl es schon ein paar Papers dazu gab, aber das war noch nicht so präsent. Es gibt jetzt ein Signatureschema und ein Verschlüsselungssystem, also tatsächlich mehrere Signatureschemater. Die hatten echte Probleme. Ich kann mich erinnern, das ist ein Talk-Up um ein Signaturesystem. Der Sprecher hat gefragt, wer hat von den Anwesenden noch nie so ein Signatureschema gebrochen und die Entwickler sahen dann irgendwie so aus. Am Anfang war das ein Problem mit Parametern, aber grundsätzlich war das eine Ordnung. Dann gab es ein paar Verbesserungen, aber es gab wenig Forschung, wie man das effizient implementieren kann und nur weil man ein nettes mathematisches Schema hat wie RSA, also man nimmt einfach N hoch 3. Jetzt haben wir gesehen, es gibt ordentliches RSA, aber nicht ordentlich benutzt. Und da gab es wenig Forschung und das lag teilweise daran, dass diese NTRU-Firma ein Patent angemeldet hat und wir haben dann alle gesagt, ich möchte jetzt so ein System angucken, was ich hinterher nicht mal benutzen kann. Jetzt ist das Patent abgelaufen und jetzt schauen wir uns, also schaue ich mir das gerne an, vielleicht können wir auch ein paar Sachen kaputt machen. Das erste müssen wir jetzt so verstehen, wie NTRU wirkt. Es funktioniert und wir haben hier ein paar Polynome. Es gibt einen Parameter, der den Grad der Polydome angeht und das sind ganz halbe Polynome, das heißt, die Koeffizienten sind ganze Zahlen und im Beispiel werden wir etwas zeigen mit etwas weniger 250 Exponenten, zum Beispiel 7 und wenn wir jetzt so Polynome haben und die addieren wollen, dann machen wir es einfach, Komponenten weiß, das heißt, die erste Komponent ist A0, plus A1, X plus A2, X² und so weiter, bis An minus 1, plus N minus 1, X und Y minus 1. Und wir wollen die Polynome auch multiplizieren und wenn wir einen Polynome mit Grad 3, mit Grad 4 multiplizieren, dann haben wir einen Polynome mit Grad 7 und wir wollen einen Polynome mit kleinem Grad, deswegen müssen wir da irgendwie drum herum gehen und die Lösung ist zügliche Faltung. Und die Regel ist, der Koeffizient von X hoch 1, A, I, B, J, these two indices, A, N minus 1, B2, werden zu N oder N minus 1 aufzumieren und N minus 1 und B0 werden sich zu N minus 1 aufzumieren. Das ist eine Gleichung, mit der wir arbeiten können, mit der wir es in den Computern eingeben können und wenn ihr wissen wollt, das Herkommt hier ist eine Folie mit etwas mehr Mathematik und wir arbeiten in einem Polynome Ring und wir reduzieren Modulo X hoch N minus 1. Das heißt, das ist die selbe Funktion, bei der wir, wie wenn wir mit Modulo N, Englisch 7 reduzieren und hier machen wir einfach alles mit X hoch N, statt X hoch 7 und wir nehmen X N und ersetzen es mit X 1 und wir machen alles genauso wieder vor, nur dass wir jetzt X hoch X hoch N minus 1 schreiben müssen. Okay, jetzt ein paar Beispiele. Und der Computer wird jetzt hier die Arbeit für uns machen und hier ein paar einfache Ausdrücke in Sage und F ist in dem Beispiel 2X314 mit vier Termen, das heißt, wir haben 4 mal X pro 3 plus X plus 3. Das ist ein Grad 2 Polynomen, 2 ist die große Exponentin, die man hier sehen kann und wenn wir jetzt hier multiplizieren mit X, dann müssen wir hier den Termen, den wir auch verdienen, mit dem anderen Termen verdienen und wir kriegen am Ende 4 mal X pro 3 plus X pro 3 und so weiter und ein anderes Beispiel ist mit dem anderen Polynomen G multiplizieren und wir werden hier nicht alles durchgehen, aber wenn wir auf das letzte, auf den letzten Teil von F gucken, dann wird die 3 von F mit der 2 von G multiplizierten, das gibt einer 6 und die 3 von F wird mit 7X multipliziert, das gibt eine 23X, die man bekommt aus dem 3 mal 7 plus die 2 und was ist jetzt mit der Multiplikation mit den endkonfizienten Sachen und das ist, wie man das in Selj sagt, man nimmt 2 Eingaben, F und G und das prozent hier meint Mod und hier jetzt Mod X hoch N minus 1 und wenn N3 ist, dann kriegen wir, wenn wir mit X multiplizieren, X pro 3 plus 3, X plus 4 und die 4 X hoch 3 wurde zu 4 durch die Moduloperation und wenn wir F mit X quadrat multiplizieren, dann rotieren wir die Koffizienten wieder und ein anderes Beispiel mit demselben F und mit demselben G und wenn wir jetzt die Faltung machen, dann ersetzen wir, dann addieren wir die 29 mit der 6 und wir kriegen nur noch 3 Koffizienten und jetzt, wenn wir etwas komfortabler mit unseren Beispielen sind und mit unseren Gleichungen sind und wenn man sich jetzt vorstellt, multipliziert, multipliziert, multipliziert, multipliziert, sieht man, dass die Koffizienten immer größer und immer größer werden und jetzt müssen wir ähnlich wie bei RSA Mod N reduzieren und wir brauchen etwas mehr Reduktion hier und der gibt es einen anderen System parat mit der Kuh, der ist eine ganze Zahl, typischerweise eine Power von 2, eine Exponent von 2 und es gibt ein Beispiel, dass Kuh kein Vielfaches von 3 ist aus Grund, die wir später sehen werden und jetzt reduzieren wir mit X hoch N minus 1, das heißt wir reduzieren den Grad und wir reduzieren die Koffizienten, dass jeder dieser N-Koeffizienten auf all diese Koffizienten werden wir Reduktion anwenden und wir sind jetzt fertig, breit für private und öffentliche Schlüssel und was wir tun, ist, wir nehmen 2 Polynomien und hier haben wir starke Einschränkungen weil wir sie klein haben wollen, wir haben Polynomen, die viel kleiner als Kuh sind und hier erlauben wir nur ein paar Plusen und ein paar Minus bei H und in RSA multiplizieren wir beide Sachen, hier haben wir eine andere Sache, wir suchen für ein H, sodass H multipliziert mit F gleich 3 mal G ist Moduluka manchmal funktioniert das nicht, also müssen wir es noch mal probieren und wenn es nicht funktioniert, müssen wir ein anderes F nehmen wenn wir die auf die Mathe Notation gucken dividieren bei dem F und nicht jedes F funktioniert weil wir zum Beispiel nicht bei 0 teilen können und das müssen wir da wegschmeißen und noch mal probieren und der öffentliche Schlüssel ist das H und der privat Schlüssel ist das F und da kriegen wir G und da müssen wir uns nicht an G erinnern eine Sache rechnen wir nur einmal weil es eine lange Zeit nimmt es zu berechnen und das nennen wir F3 und dann wenn wir F mal F3 Modulka 3 nehmen dann bekommen wir 1 das heißt es gibt einem Polynom wo alle Koeffizienten 0 sind nur 0 sind außer beim konstanten Term ich sohole und jetzt kommt die Erklärung wie man Fär und Entschlüsselt aber bitte nicht so machen denn genau so auf die Art und Weise wie wir es zeigen kriegt man die ganzen bekannten Angriffe wenn ihr das in Praxis benutzen wollt dann müsst ihr aufpassen wie man die Koeffizienten benutzen wie es M zum Beispiel wählt also nicht so machen und wir haben ein paar mehr Folien auf den gezeigt wird wie wir es machen also jetzt kommen wir zu dem Teil wo wir alles reinschmeißen machen etwas und kriegen dann am Ende das M zurück mit dem Geheimtext ist ganz einfach wir nehmen uns wieder so ein Polynom mit den Koeffizienten minus 1 und 1 und der Geheimtext ist dann einfach R mal h wobei h der öffentliche Schlüssel war dann wieder die Multiplikation die dafür sorgt, dass der Grad am Ende kleiner als n ist und wir addieren unsere Nachrichter drauf dann wieder die Multiplikation die dafür sorgt, dass der Grad am Ende kleiner als n ist und wir addieren unsere Nachrichter drauf das heißt wir müssen jetzt irgendwie unsere Nachricht in dieses Polynom das in diesen nur Koeffizienten minus 1 0 und 1 hat aber es gibt keine Einschränkungen auf die Dichte also es kann alles sein ohne Einschränkungen also wir nehmen zum Beispiel unsere Nachricht in intern und ersetzen einfach die Exponenten 3 durch x und wenn wir das also so machen dann war am Ende die Verschlüsselung ganz einfach wir haben also den die Verschlüsselung durchgeführt und dann können wir den Geheimtext rüberschicken und jetzt ist die Frage wie rekonstruieren wir unser m also wir möchten gerne durch h teilen sozusagen aber durch h teilen kann keine Lösung sein denn h ist ja öffentlich das könnte ja jeder machen und das m hängt ja hier auch rum also es wäre eine ungenaue Teilung also wenn wir die Reduktion nicht hätten modulo m minus 1 dann wäre es einfach das durch teilen aber weil wir diese Reduktion haben ist das tatsächlich nicht möglich und hier ist wie wir die Entschlüsselung durchführen wenn wir den Geheimentschlüssel haben wir nehmen einfach den Geheimtext und multiplizieren mit f das war unser erster Geheimerschlüssel und denkt an die Verbindung zwischen der Entschlüsselung und dem privaten Schlüssel nämlich h mal f ist 3g also wir nehmen jetzt alles rein also wir kleben auch c mit rein das war also ich muss nochmal dran erinnern also r mal h plus m wir können hier das Zeug ist alles distributiv das heißt wir können die verschieben also f mal h gibt jetzt also das erste multiplizier wird zu r mal 3g und der zweite Term jetzt haben wir f mal m aber es gibt jetzt eine 3 in dem ersten Term also wenn wir jetzt modulo 3 reduzieren können dann müssen wir uns über den r mal 3g Term keine Gedanken machen und wir haben das f3 was hier rumflie- und wenn wir das mit 3 multiplizieren dann kriegen wir 1 das heißt die 3 fällt hier durch Reduktion weg und dann habe ich am Ende das mal f3 ergibt f mal f3 was das 1 ist mal m also ergibt es m es gibt noch ein paar Dinge die man da beachten muss also ich also insbesondere muss man darauf achten dass es bei der Verschlüsselungsfunktion und bei der Entschlüsselungsfunktion muss man noch modulo q reduzieren denn diese Relation die funktioniert ja nur modulo q und ich muss außerdem meine Darstellung auch noch auf was Spezifisches umst ändern üblicherweise wenn ihr da modq dann hättet ihr halt einfach rechnen aber ich will jetzt dafür sorgen dass das symmetrisch zu 0 ist also schauen wir uns mal an wie das funktioniert also das ist jetzt der Moment in dem Wasserfallschema wo ich einfach 100 Seiten Dokumentation bei euch auf die den Schreibtisch geworfen habe und sage hier das haben die Designer so haben wollen implementiert das mal also hier werden wir jetzt natürlich kleinere Ns und Ds und so weiter benutzen kleinere Parameter die man tatsächlich benutzen kann aber dafür kann man es auf der Folie lesen also eine der Funktionen die man online finden kann das heißt RandomDPoly das ist keine Funktion von Sage die erzeugt ein Polynomen das D also 5 plus minus 1 Koeffizienten hat bis zu N minus 1 am Ende also 6 und dann gibt es ein zufälliges Polynom hier und das gibt jetzt eine andere Funktion die wir hier benutzen die erzeugt dieses F3 was soll dieses F3 machen naja wenn die Idee war wenn man F mal F3 multipliziert und wenn ich multipliziere dann meine ich natürlich diese Faltungsoperation über die wir gesprochen haben wenn wir F mit F3 multiplizieren dann muss es irgendwas sein was 1 Modulo 3 ist und wenn man sich das anguckt die Vielfachen von 3 hier rausläscht dann ist das einzige was übrig bleibt 1 also F mal F3 ist tatsächlich 1 und dann gibt es noch eine Funktion InversionModQ die dieses H ausrechnet und der öffentliche Key bei ein gewisser eine Formel und dieses FQ ist jetzt etwas ein Objekt dass wenn man wenn es F multipliziert dann kriegt man also 256 dann 257 Modulo 256 ist 1 und die anderen haben alle 256 als Faktor und dann G ist noch ein weiteres ein Geheimnis und dann haben wir hier noch dieses H was 3 mal FQ mal G Modulo Q ist und wenn man in C oder niedrigen Sprachen was macht ist die Modoperation so dass wenn man was Negatives reinwirft dann kriegt man negativen Output also wenn man da eine negative Zahl reinwirft dann kriegt man Minus 0 bis Minus K und das kann für Krypto kann das ein echtes Problem sein denn damit könnte man möglicherweise liegen ob der Wert negativ oder positiver wenn der Dokumentation steht ist natürlich drin, wählt die Werte da entsprechend und wenn man am Ende aber liegt dass die Eingabe positiv oder negativ war dann könnte man möglicherweise ein Sicherheitsproblem kriegen und statt die zu benutzen benutzen wir also die Funktion Balanced Mods die sorgt dafür dass dieses Vorzeichen nicht mehr rausgegeben wird also kann man nicht mehr ablesen ob der originale Input negativ oder positiv war und der einzige Punkt warum wir uns H angucken ist wenn wir H mit F multiplizieren Modulo Q dann kriegt ihr dasselbe zurück was 3 mal dieses zufällige G ist was wir uns vorhin ausgedacht haben also gucken wir mal ob wir jetzt verschlüsseln können hier ist eine Nachricht ein paar Zufällige Minus 1 und 1 und ein weiteres zufälliges R das in der Verschlüsselung mit aufgetaucht ist und der Geheimtext C ist jetzt H mal der geheime Schlüssel plus M und das ist jetzt diese Faltung in H und R und dann rechnen wir am Ende Modulo Q und dann kriegen wir Beids die irgendwie zufällig aussehen und die Endschlüsselung war wir multiplizieren den Geheimtext wir multiplizieren Modulo Q und Tanja hat schon erwähnt das ist jetzt 3 mal G mal R plus F mal M und wenn man das jetzt mit dem F3 multipliziert und Modulo 3 reduziert kriegen wir letztendlich das genau dasselbe zurück was der originale Eingabe war das System hat also tatsächlich funktioniert es hat erfolgreich eine Nachricht wieder entschlüsselt aus dem Geheimtext hat euch nicht jemand erzählt dass ihr Modulo P und Modulo Q nicht einfach reduzieren könnt also wenn ihr hier so ein Ausdruck habt und ihr hofft es gibt irgendwo eine 3 die da mit rumrennt dann nehmen wir mal an unser Q ist 5 und wir haben 6 6 ist wundervoll teilbar durch 3 aber dann reduzieren wir es Modulo 5 und das ist 1 das ist ja also nicht Modulo 3 und prinzipiell sollte das also nicht funktionieren aber der Grund warum es trotzdem funktioniert oder eben auf den Abhängig von den Parametern ist das liegt daran dass die Parameter so gewählt sind dass die Zahlen klein genug sind also das funktioniert nur wenn dieses Modulo Q auf der rechten Seite die 3 nicht raus nimmt also wenn da es keinen Grund gibt Modulo Q auszurechnen also wenn das Ding auf der rechten Seite schon von sich aus kleiner ist als cool das ist also das der Punkt wo man wo wir am Anfang gesagt haben man darf nur ein paar der Koeffizienten als nicht nullen wählen darf man darf nur minus 1 und 1 wählen denn dieses R mal 3G das hat R und G haben wenig Koeffizienten und dann haben wir diese 3 rumhängen das heißt der maximale Koeffizient den wir haben ist 1 von R trifft 1 plus 1 von G und wir multiplizieren und dann sumieren wir das N mal auf aber es kann nicht N solche Dinge geben sondern nur D Koeffizienten die selber nicht null sind das heißt der schlimmste Koeffizient dieses Produkt wäre D mal 1 1 und minus 1 minus 1 das heißt wenn wir also den maximalen Wert immer rauskriegen würden weil 3D und dann entsprechend wo es keine Einschränkungen für M gab aber auch für F gibt es eine Einschränkung und bei F war die Einschränkung eben nur D Koeffizienten das heißt wir kriegen also nur dann einen Summanz das heißt der maximale was wir daraus kriegen können in jedem Koeffizienten ist 4 mal D und unsere Wahl ist dass wir dieses Q halbe als 4D also wählen wir aber das Q groß genug also sagen wir mal eine große ein großes 2 hoch X und die Frage ist was hat das jetzt eigentlich mit Gittern zu tun ich hatte ja am Anfang versprochen das hat was mit Gittern zu tun und dann habe ich angefangen mit Polinomen und in Nadja's Teil hat der gesehen ihr könnt ein Gitter nehmen und dann die Basisvektoren benutzen aber ich muss immer noch erklären wie man das ursprüngliche Problem also wie man F sucht in ein Problem umwandelt dass man einen kurzen Vektor in einem Gitter sucht also hier ist also als allererstes wie man dieselbe Matrix hinschreibt also um die Matrix hinzuschreiben darf ich nur öffentliche Informationen benutzen ich kenne F nicht, ich kenne G nicht aber ich kenne H und diese Matrix hat diesen groß H-Block und dieser Block wird so aufgebaut sein dass er N-Spalten und N-Zeilen hat und darüber gibt es die Identitätsmatrix also Kuheinträge die alle einzeln auf der Hauptdiagonale und eine andere Matrix die nur 1 auf der Diagonalen hat und rechts oben ist alles 0 aber das Interessante ist dieses H bei H habe ich die ganzen Koefficienten von klein H reingetan sodass wenn ich irgendeinen Vektor nehme als ein Polinom also der erste Vektor ist 1, 0, 0 also Konstant 1 der andere wäre Konstant 3 sodass es der Multiplikation mit H entspricht mit dem Polinom H also als Beispiel ich habe diesen großen Vektor ich habe 2n mal N-Matrix hier drüben und ich nehme jetzt den ersten Teil also das ist einfach der Einheitsvektor das heißt ich bin vor der ersten Teil der Matrix nur Kuh mal I das heißt da kriege ich einfach nur ein Kuh raus weil der Rest ist 0 und der zweite Teil ist 3, 0, 0 der soll so sein dass wenn ich es mit irgendwas multipliziere dann ist es wie Multiplikation mit dem Polinom das heißt das wird genau einmal dieses Polinom H ausrufen das heißt das ist genau dann so wie ich das H hinschreibe und der nächste Koefficient wäre dann dieses hier aber rotiert und der nächste dann dieses hier 2 mal rotiert und so weiter und das ist also quasi die Matrix und die Frage ist jetzt der kurze Vektor in diesem Gitter um da irgendeinen Vektor zu kriegen sind ganz zahlige Vielfache von diesen Vektoren also irgendwelche ganz zahlige Vielfache von Polinomen und warum wir da G,f rauskriegen das liegt daran ich weiß nicht wie es aussieht aber es gibt einen Polinom K und es gibt einen Polinom F das ich kenne mal dieser Matrix ist G,f und G und F sind klein das heißt es gibt sehr wenige Nicht-Null-Einträge und die Einträge sind sehr klein also entweder minus 1 oder 1 also wenn ich Recht habe und ich werde das gleich detailliert darstellen dann ist dieser Vektor sehr wahrscheinlich der kürzeste Vektor im Gitter und dann kann ich also so was benutzen wie LLL um diesen Vektor auszurechnen das heißt wenn man da einmal durchläuft Modulo K bedeutet nur es gibt irgendein Vielfaches von K so dass H mal F gleich 3G ist Modulo K so dass es dann K mal K ist und das ist das K was ich da rein stecke nochmal vertrauten wir hier nicht implementiert das einfach mal schaut euch an dass es funktioniert implementiert es einfach implementiert es einfach sagt sie einfach wirklich schwierig ist also wir machen Sage auf das erste ist wir konvertieren erst H in H Modulo K wir haben wenig Zeit deswegen werde ich es einfach mal überspringen und die Frage ist was passiert wenn wir das jetzt multiplizieren was passiert ist dass H 3 was H geteilt durch 3 ist das wird jetzt mit X X² und so weiter multipliziert wenn man sich jetzt jede Zeile anguckt man sieht es in der zweiten Zeile der koffizierend taucht wieder auf eine Position weiter links das heißt hier gibt es jetzt eine Menge von Polinomen und was wichtig ist bei diesen Polinomen ist das einige Kombinationen dieser wenn man da einige addiert und dann subtrahiert dann bekommt ihr G Modulo K denn denkt dran F ist ja eine Menge von minus 1 1 X² und so weiter aufaddiert und wenn man das mit H multipliziert dann kriegt ihr H 3 und wenn man das jetzt mit G multipliziert dann gibt es wieder G das heißt wenn man jetzt diese dieses das geheime F war ja letztendlich hier erzeugt aus dem ich werde euch also nur die Matrix zeigen die da rauskommt ganz am Ende hier ist das 2n mal 2n Matrix unten links sind dieselben Zahlen die wir uns gerade angeschaut haben mit dem 58 und so weiter und dann die Diagonale runter da gibt es 0 und 1 und jetzt holen wir Algorithmus raus hier nehmen wir LLL Ergebnisse und plötzlich sind die Ergebnisse viel viel kürzer also LLL erzeugt hier nicht nur einen kurzen Vektor sondern viele kurze Vektoren und hier sieht man tatsächlich sehr sehr kurze Vektoren hier ganz oben diese erste Zeile ist tatsächlich eine sehr sehr kurze Kombination der ursprünglichen Vektoren und wenn man da jetzt die also hier die Null in Klammern nimmt die erste Zeile und dann das N gibt dann und so weiter da kriegt man jetzt 5 nicht null Koefficienten die konvertieren wir jetzt wieder in den Polinom und da kriegen wir genau das geheime F raus gut mit einem Minus Zeichen aber das ist für die Entschlüsselung egal also wenn man dieses F benutzt nur aus dem öffentlichen Schlüssel diesen Matrix aufsetzen LLL benutzen dann können wir NTRU brechen wir kriegen also jede Nachricht raus die damit verschlüsselt wurde das muss man jetzt skalieren können 7 Dimensionen ist sowieso nicht genug wenn man 150 Dimensionen und 101 Nicht-Null Einträge in F und so weiter und Q auf 2 hoch 32 vergrößert dann gibt es mehr als 2 hoch 200 Wahlen für das geheime F und wir versuchen es nochmal und in dem Fall findet die Attacke keine Minus 1 und 1 sondern immer noch ein kurzes Polinom das ist nicht notwendigerweise das kürzeste aber es macht immer noch das System kaputt und das macht einem wirklich Angst was man machen muss warum das tatsächlich das System immer noch kaputt macht ist weil Q tatsächlich zu groß ist also tatsächlich werden kryptografische Parameter nicht immer sicherer wenn sie größer werden wenn Q zu groß ist dann wird dieses F was so relativ groß ist immer noch in der Lage sein zu entschlüsseln wenn Q kleiner ist wird das in dem Fall tatsächlich sicherer um das System zu brechen und für eine gute Sicherheit muss N relativ groß sein also wenn ihr das macht dann muss man viel Sachen beachten großes Q großes N nehmen es gibt diese ganzen Attacke die ich am Anfang genannt habe und auf einer positiven Note zu enden wenn ihr das zu Hause probieren wollt über wo wir geredet haben es gibt viele Sachen die ihr tun könnt ihr wollt wahrscheinlich keine Gitter selber schreiben also alle NIST Einreichungen die eingegangen sind sind online und mehr als 90% haben eine Woche von Kryptoanalysen überlebt und ihr könnt jetzt hingehen und diese Implementierung überprüfen diese Kryptografie brechen das ist immer wenn ihr interessiert seid in Quanten Kryptografie in tatsächlichen Implementierung im Protokoll es gibt das Open Quantum Safe Project und ihr wollt das vielleicht jetzt gleich benutzen weil die Pläne obsolet werden könnten durch Kryptoanalytische Fortschritte es könnte viel Zeugs gebrochen werden aber wenn ihr viel wenn ihr etwas anwenden wollt zu Hause dann empfehlen wir euch elliptische Kryptografie und zusammen mit dem wo wir heute gesprochen haben zu nutzen und das ist ja etwas wie Google gemacht hat und das ist alles was wir haben und vielen Dank und wir hoffen dass wir noch mehr Attacken sehen