 Ja, RSA benutzen ja, wisst ihr ja, Verschlüsselung und solche Sachen, aber dann ist Beyond des Ganzen, ist halt eben doch ein bisschen Mathematik und wie das Ganze funktioniert, ich bin da sehr gespannt drauf, erklärt uns zu, sie hat Mathes studiert, sie sagte erfolgreich abgebrochen. Ja, ich versuche immer noch so Mathe-Dinge irgendwie zu greifen, aber sie kann das ziemlich gut. Ja, take us away und Applaus. Dankeschön. Ja, Rechnungschlüssel in Authentifizieren, ich habe mir da was schönes Akkundim für ausgedacht, beziehungsweise ich habe mir schöne Wörter für ausgedacht, eigentlich ist das natürlich irgendwas anderes, ich habe es aber nicht nachgeguckt tatsächlich. Ich gebe euch jetzt heute einen Einblick in die Mathematik hinter der RSA-Verschlüsselung. Ich bin zu, ich bin 21 Jahre alt, habe ein erfolgreich abgebrochenes Mathematikstudium, wie Sarah eben so schön gesagt hat. Ich bin seit circa vier Jahren im Chaos und das hier ist mein erster Talk, Leira ist schuld. Ja, wie ihr vielleicht wisst, Leira hat letztes Jahr vier Talks und einen Workshop halten müssen, weil das Content-Team alle angenommen hat und er vier eingereicht hat und hat dann bei jedem Talk gesagt, dass doch bitte Leute sich trauen sollen, Talks einzureichen. Leira, hier ist meiner. Wir fangen jetzt an mit ein paar Definitionen, die wir brauchen, da ich in der Beschreibung des Talks gesagt habe, ich mache das ganze auf Grundrechenarten, das heißt, Additionen, Subtraktionen, Multiplikationen und Division, brauchen wir ein paar kleine Definitionen, die wir vorher uns angucken, um alle auf den gleichen Stand zu bringen, auf jeden Fall. Wir fangen an mit den Prim-Zahlen. Prim-Zahlen sind alle diejenigen Zahlen, die nur Teilbar sind durch Eins und durch sich selbst. Die Eins selbst ist keine Prim-Zahl, weil sie durch Eins und durch Eins Teilbar ist und die Eins nur einmal vorkommen darf. Hier habe ich euch ein schönes Feld aufgezeichnet. Da sind alle Prim-Zahlen von Eins bis 100 Türkees auf dem Biberblau markiert. Genau. Relativ selbstverständlich. Die sind tatsächlich sehr besonders, weil es eine sogenannte Prim-Zahl-Zerlegung gibt. Eine Prim-Zahl-Zerlegung ist, man kann jede Zahl in Prim-Zahlen aufteilen. Das sind dann immer Faktoren. Das heißt, beispielsweise die 12 könnte ich jetzt aufteilen in 3, 2, 2, weil es viermal die 3 ist und dann ist es im Prinzip 2, 2, 3. Die ist eindeutig und deswegen funktioniert das Ganze auch überhaupt nur. Dann machen wir weiter mit Modulo. Modulo ist im Prinzip den Rest errechnen. Wir hatten das alle in der Grundschule mal. Da haben wir so schön die Division gelernt und dann haben wir gesagt 5 durch 3 ist 1, Rest 2. Beim Modulo ist das Ganze, wir wollen eigentlich nur den Rest haben. Das heißt, 5, Modulo 3 wäre dann gleich 2. Hier ist ein schönes Bild, was eine Freundin von mir gewalt hat, wo es schön erklärt ist mit 3 Nerds, 5 Chunks. Passt leider nicht ganz, man kann Chunks schlecht teilen. Außer natürlich, man gibt sie anderen Nerds oder trinkt sie einfach aus. Machen wir weiter mit Potenzen. Bei Potenzen ist es folgendermaßen, Cookie mal Cookie ist gleich Cookie hoch 2. Cookie mal Cookie mal Cookie ist gleich Cookie hoch 3. Ich habe schöne Cookies gemalt. Ich hoffe, ihr seid stolz auf mich. Diese Hochzahl nennt man dann Exponenten und der Cookie ist die Basis. Das wird später noch ein bisschen interessant bei der RSA, da das Ganze halt auf Exponenten basiert. Als letztes zu den Definitionen kommen wir noch zum größten gemeinsamen Teiler. Der ist im Prinzip genau das, was es aussagt, der größte gemeinsame Teiler zweier zahlen. Das heißt, wenn ich 12 und 18 nehme, ist der größte gemeinsame Teiler 6. Wenn ich jetzt 24 und 12 nehme, ist der größte gemeinsame Teiler 12. Das wird nachher auch noch ganz lustig. Dann machen wir jetzt weiter mit RSA und steigen da mal ein. Als Überblick vorweg, ich erkläre euch zuerst das RSA-Modul, dann den Verschlüsselungsexponenten, wie gesagt, Exponenten werden noch wichtig, den Entschlüsselungsexponenten und danach, wie man Nachrichten fair und entschlüsselt. Das Ganze mache ich wie in der Informatik klassisch mit Alice und Bob. Ich habe sie schön gezeichnet. Das RSA-Modul, das wird meistens mit N bezeichnet und es besteht aus zwei Primzahlen. Diese Primzahlen wählt man möglichst hoch, weil desto höher die Primzahlen sind, desto größer ist das RSA-Modul, desto größer kann man später auch die Nachricht wählen, die man da reinpacken möchte. Die Primzahlen müssen ungefähr die gleiche Größenordnung haben. Welche Definition der Größenordnung steht hier unten links hinter mir? Relativ irrelevant, aber ich habe es mal hingeschrieben für diejenigen, die sich ja wissen wollen. Genau, das RSA-Modul wird dann am Ende berechnet mit P mal Q. P und Q sind dabei die Primzahlen, die nicht gleich sein dürfen. Der Verschlüsselungsexponent. Bei den Verschlüsselungsexponenten ist es so, wir müssen erst mal eine eulerische Funktion aufstellen. Das klingt sehr kom-, sehr mathematomatisch, klingt sehr kompliziert. Es ist eigentlich gar nicht. Die eulerische Funktion von der Zahl N ist die Primfaktor-Zerlegung und jeden Primfaktor nimmt man minus 1 und multipliziert sich dann aufeinander. Bei der Zahl N ist es relativ einfach, weil wir die Primfaktoren ja schon haben, nehmen wir einfach unsere Primzahlen, P und Q, nehmen jede Primzahlen minus 1 und multiplizieren sie dann nochmal aufeinander. Das heißt, die eulerische Funktion phi von N ist gleich P minus 1 mal Q minus 1. Jetzt müssen wir uns eine teilerfremde Zahl zu phi von N suchen. Teilerfremd bedeutet, dass phi von N Modulo e ungleich 0 sein muss. Das klingt wieder kompliziert. Modulo haben wir eben schon gelernt. E darf einfach kein Teiler von phi von N sein. Also darf nicht, nicht in der ganzen Zahl teilbar sein. Und dann muss E noch die folgende Größe haben. Es muss größer als 1 sein und kleiner als phi von N minus 1. Das ist dann unser Verschlüsselungsexponent, der in den Publiki reinkommt. Der Publiki besteht dann aus N und unserem Verschlüsselungsexponenten. Publiki kennt ihr bestimmt alle von SSH. Da wird beispielsweise auch RSA genutzt, mittlerweile auch andere Verschlüsselungen wie ED25519. Das ist aber Mathematisch ein bisschen komplizierter. Deswegen habe ich mehr SSH ausgesucht. Dann haben wir noch den Entschlüsselungsexponenten. Da ist dieser größte gemeinsame Teiler wieder wichtig. Denn mit diesem größten gemeinsamen Teiler ist es so, dass wir den größten gemeinsamen Teiler von E und phi von N suchen. Den kann man errechnen mit dem erweiterten neuklitischen Algorithmus. Der erweitete Algorithmus ist ziemlich komplex zu verstehen, weshalb ich ihn nicht inkludiert habe. Das ist relativ einfach. Das Konzept von größten gemeinsamen Teiler bleibt trotzdem bestehen, wie ich es vorhin erklärt habe. Der erwartete Algorithmus ist nur dazu da, um das sinnvoll zu errechnen. Der besagt dann, dass die beiden Zahlen, von denen man den größten gemeinsamen Teiler haben möchte, beispielsweise E und phi von N, A mal E plus B mal phi von N müssen dann gleich ein sein und damit hat man dann einen der größten gemeinsamen Teile bei einer der Zahlen negativ sein muss. Wie gesagt, ein bisschen komplizierter das zu errechnen. Lassen wir einfach weg. Jetzt möchte ich ganz gerne Nachrichten verschlüsseln bzw. eigentlich nicht ich, sondern eigentlich möchte Bob Ellis eine Nachricht schicken. Die Nachricht, auch schön gezeichnet, soll verschlüsselt verschickt werden. Das können wir machen, aber um sie verschlüsselt zu verschicken, muss erst mal Ellis Bob ihren Publiki schicken, damit dann niemand mitlesen kann. Damit kann nämlich Boah seine Nachricht verschlüsseln. Hier haben wir die schöne Nachricht. Die Nachricht darf wie gesagt nur kleiner als N sein, deswegen wollen wir diese Primzahlen möglichst groß wählen, damit unsere Nachricht möglichst groß sein kann. Dann nehmen wir die Nachricht und potenzieren sie mit dem Verschlüsselungsexponenten. Deswegen heißen diese Teile Verschlüsselungsexponent und Entschlüsselungsexponent. Sowohl die Größe der möglichen Nachricht als auch der Verschlüsselungsexponent sind ja im Publiki enthalten, deswegen kann Bob das ohne Probleme machen. Und nehmen dann diese Potenz von Nachricht hoch Entschlüsselungsexponent, Modolo N. Das ist dann unsere geheime Nachricht, deswegen steht da auch ein schöner Brief im Schlag, Briefgeheimnis und so was. Und dann, wenn Ellis diese Nachricht bekommt, dann kann Ellis diese Nachricht entschlüsseln mit ihrem Private Key. Der Private Key soll ja auch bei SSH immer nicht weitergegeben werden. Dort ist der N-Schlüsselungsexponent enthalten und auch wieder das RSA-Modul N. Ellis bekommt diese Nachricht und kann dann mit ihrem Private Key die Nachricht entschlüsseln, nimmt also die verschlüsselte Nachricht hoch den Entschlüsselungsexponenten, Modolo N, also dem RSA-Modul und hat dann die entschlüsselte Nachricht. So können alles und Bob also Nachrichten austauschen. Das Konzept ist relativ einfach, mathematisch gar nicht so anspruchsvoll und hat sehr, sehr lange, sehr, sehr gut funktioniert, bis dann irgendwann jemanden festgestellt hat, ich kann das knacken. Bisschen unpraktisch gewesen. Na ja, wird heutzutage häufig noch genutzt. Dann ist jetzt ja natürlich noch die Frage, wie kann man denn jetzt Nachrichten signieren, beziehungsweise wie komme ich denn jetzt mit meinem SSH Key beispielsweise auf mein Server drauf, so dass mein Server genau weiß, dass ich das bin. Dazu wird Folgendes gemacht. Die Nachricht wird im Klartext unverschlüsselt mit dem Private Key versendet. Das heißt, ich nehme jetzt mal GitHub, ich gebe GitHub meinen Public Key und lade den auf GitHub hoch, so dass GitHub weiß, das ist mein Public Key. Ich habe ja mein Private Key und behalte auch mein Private Key und wenn ich dann auf GitHub etwas pushen will, dann nehme ich eine Nachricht, ist vollkommen egal welche. Meistens wird da irgendetwas verwendet und schicke diese Nachricht sowohl im Klartext als auch verschlüsselt mit meinem Private Key, das heißt im Prinzip genau anders als hier. Ich nehme die Nachricht und verschlüsse sie nicht mit meinem Public Key, sondern mit meinem Private Key sieht dann genau so aus, nur dass Nachricht und Geheimer Text vertauscht sind und verschlüsse sie wie gesagt mit meinem Private Key und schicke sie die Nachricht im Klartext und verschlüsselt zusammen an GitHub und GitHub kann dann die Nachricht, die verschlüsselte Nachricht entschlüsselt und gucken ob der Klartext das gleiche ist wie die entschlüsselte Nachricht. Damit kann man im Prinzip überprüfen, ob Dinge übereinstimmen und ob das so stimmt, was man und ob man halt die Person ist, die dann tatsächlich auch da ist. Das ist eigentlich schon alles was zu RSA gehört. Mehr mathematisch braucht man da gar nicht. Es macht es relativ einfach. Dadurch wurde es auch mathematisch so viel benutzt, dadurch dass es so einfach ist wurde es auch viel benutzt. Das einzige was da dran tatsächlich ziemlich schwierig ist, ist große Primzahlen zu finden. Weil das ziemlich viel Rechenleistung erfordert, diese Primzahlen zu finden und deswegen ist es auch tatsächlich relativ schwierig das ganze zu brechen, weil die Primfaktorzerlegung so schwierig ist, da man nicht weiß welche Primzahlen dahinter liegen. Man ja erst mal wissen müsste, welche, was für Primzahlen es überhaupt gibt und dann zu gucken, ob das ganze in der Primfaktorzerlegung richtig ist. Naja man hat trotzdem irgendwann herausgefunden, brechen geht trotzdem. Kann man machen. Und da ich diesen Vortrag tatsächlich nie geübt habe, bin ich schon fertig. Ist total simpel. Ja klar, logisch. Habt ihr noch irgendwelche Fragen? Zählen und schiff draus Nachrichten. Ja ich hab Fragen. Und zwar noch mal zum Signieren. Weil man sendet ja Github nicht seinen Private Key, enthalten wir ja nicht. Ja man sendet Github den Public Key. Lustigerweise ist das so, dass diese Funktion genauso andersrum funktioniert. Ach so das heißt man kann auch mit dem Entschlüsselungsexponenten verschlüsseln. Genau. Er heißt zwar Entschlüsselungsexponent, aber es kommt im Prinzip immer das Gleiche raus, egal ob du die Nachricht entschlüsselst oder verschlüsselst. Deswegen funktionieren diese Methoden relativ einfach. Okay und noch eine Frage, ich hoffe ich habe das. Und zwar, soweit ich weiß kann man ja, man kann ja zumindest in der Praxis aus dem Private Key den Public Key generieren. Darum wollte ich fragen, das heißt, dass der Private die Datei, die den Private Key enthält, enthält ja nicht nur den Private Key dann oder da muss er ja auch N enthalten. Die Datei enthalten alle, also sowohl Public Key und Private Key enthalten N. Und man errechnet aus dem Private Key diesen Public Key dementsprechend braucht man nicht den, also kann man den Public Key tatsächlich, man kann vom Public Key nicht auf den Private Key schließen, aber man kann vom Private Key auf den Public Key schließen, deswegen steht ja nicht doppelt in der Datei drin, weil es einfach errechnen könnte. Ach so, ja okay, ja ich glaube soweit. Du hast gemeint, das wurde geknackt irgendwie? Ja. Einfach durch Brutforcen oder gibt es da einen anderen Weg? Es gibt tatsächlich einen Weg dazu, davon habe ich aber tatsächlich keine Ahnung. Ich weiß, dass man auf jeden Fall mindestens eine Zahl raten muss. Das funktioniert aber dann mit einer Funktion, mit der man das annähern kann und dadurch auf diese Zahl, die man eigentlich raten müsste, dran kommt. Mehr kann ich dir aber dazu tatsächlich nicht sagen. Ich habe noch eine Frage, nämlich beim Fair- und Entschlüsseln wird er exponentiert mit der großen Zahlen wahrscheinlich. Ja. Soweit ich weiß, ist ja exponentieren zumindest mit beliebigen großen Zahlen sehr rechenintensiv. Ja. Ist das, der Algorithmus ist ja quadratisch dann oder also, weil mit sehr großen Zahlen muss es ja schon ziemlich lange dauern, dann eigentlich zu verschlüsseln oder zu entschlüsseln? Ich weiß, quadratisch dürfte er wahrscheinlich nicht sein, je nachdem ob die Zahlen, die dann Verschlüsselungs- oder Entschlüsselungs exponent ist, quadratisch ist oder nicht, also beziehungsweise gerade oder nicht gerade ist. Das dürfte relativ lange dauern, ich glaube aber, dass es tatsächlich mit dem Modulo ein Weg geht, um das Ganze abzukürzen. Ah, ja, stimmt, ja, ja, genau. Wenn es keine weiteren Fragen gibt, kürzt es der Vortrag ever.