 Hallo, guten Morgen. Hallo, guten Morgen. Wir fühlen uns alle noch ein bisschen als wir es morgen. Wir freuen uns sehr, dass wir hier in Hamburg und CCC sein dürfen und wir wollen jetzt über Kriptografie reden. Wir reden jetzt über unser Projekt, das heißt CISA. New Crypto Algorithms. I don't know how many of you have heard about CISA, the competition. Quite a few. How many of you have heard about Norx? That's good. So, the thing is, Norx may or may not be the future of authenticated encryption. But anyway, CISA will develop, will select the future of authenticated encryption. And we also here to convince you, because we hear a lot about encryption as CCC, about how important it is to protect your privacy and so on. So we hope to convince you maybe to just stop using encryption and to use authenticated encryption instead of basic encryption. So, Philipp, we'll start with an introduction, the very basics, no many questions, no math, we promise. And then we'll give all the details about these two guys. Okay, so, well, we are a team of three people. Ich bin Philipp. Ich bin Philipp. Und da gibt es noch einen Dritten. Der heißt, der ist leider gerade nicht da. Das ist der Samuel. Ich bin sicher, er schaut sich den Stream zu Hause an. Ich möchte anfangen mit einem Zitat von dem Kryptografen Matthew Green. So ziemlich alle symmetrischen Verschlüsselungsmodi, die man in der Schule, in Textbüchern oder bei Wikilea lernt, sind möglicherweise unsicher. Das ist ein Zitat aus seinem Blockpost über das Wählen von symmetrischen encryption-Modi. Was meinte er, bedeutet dieser Zitat? Eine Frage im Spublikum. Was gibt es jedes Mal in jeder Sprache über symmetrische Krypto? Natürlich der ECB-Pingwin. Also, die meisten haben bereits darüber gehört. Was ist das Problem mit diesen ECB-Modus? ECB ist ein Blockseifer-Modus, wo du nimmst ein Blockseifer und benutzt es um mehrere Blocks. Diese Blocks fügen sich zusammen zu den Nachrichten, aber BCB-Modus macht es blockweise. Du nimmst der erste Block, mache es durch das Blockseifer-Algorithmus, der nächste Block und so weiter und so fort. Also, das Problem, wenn du derselbe Block zum Blockseifer gibst, dann wirst du dasselbe Cyphertext rausbekommen. Und das Ergebnis, was du hier sehen kannst, sehr gut sehen kannst hier, du kannst immer noch sehen, dass diese Form, diese Pingwin. Danke Ange Albertini für diese hübsche Bilder, diese tolle Bilder. Der ist auch hier in Spublikum. Er hat nicht nur diese schöne Bilder gemacht, aber auch das nächste. Das hier, das BCB-Modus, das ist auch sehr benutzt heutzutage. Und das Problem hier mit BCB-Modus ist, dass es nimmt einen sogenannten IV, Initialisationsvektor, aber das Ding hier ist, wenn du verschlüsselst deine Nachricht oder zwei Nachrichten mit demselben Initialisationsvektor, dann hast du vielleicht Probleme. Du kannst hier sehen zum Beispiel, das linke Pingwin, ihm fällt ein Auge, und der andere fällt der rechte Auge. Und wenn du beide verschlüsselst, bekommst du sehr tolle Cyphertexten. Aber wenn du sie zusammen extraest, siehst du, dass der erste, der Kopf der Pingwin, wo keine Unterschiede sind, die sind genauso verschlüsselt. Also was wichtig ist hier für CBC, ist, dass dein Vektor muss randomisiert sein. Und das ist besonders wichtig, das kann nicht ein Zähler sein. Also sobald dein Vektor vorhörsehbar ist, dann hast du ein Problem. Nächste Modus ist CTR-Modus oder Kontra-Modus. Es benutzt ein Nons. Das ist etwas ziemlich ähnlich zu Initialisationsvektor, aber ein Nons muss unique sein. Nons, Number used once, ein Nummer, die man nur einmal benutzt. Du kannst nicht ein einfaches Zähler benutzen, aber du bekommst so auch ein Problem, weil du zwei ist zuvor Texten und du hast am Ende Informationen über deinem Pläntext, wenn man das am Ende vergleicht. Das kann man auch sehen hier mit dem Pingwin unten. Also wenn du extraest, am Ende siehst du die Form des Pingwins im Ergebnis. Also diese Blocksiefer-Modus, die waren diese zwei Modus, die waren diese zwei Modus, die waren diese zwei Modus, die waren diese zwei Modus, die waren diese zwei Modus, die war Design in die 70er Jahre. Und die sollten benutzt werden mit diesen ganz neuen DES Algorithmus. Es gab einen Haufen von diese Blockseifer-Modus, ECB, CBC, CFB, CTR. Und das Ziel von diese Blockseifer-Modus war ein bisschen anders, als was man heutzutage erwartet von Kryptografie. Also eine berühmte Zitat von Bruce Schneier in seinem Buch in der Plytyp-Typografie von 96 ist, eine dritte Konzideration ist Fehler, Toleranz. Manche Applikationen brauchen eine paralysierte Entschlüsselung und andere brauchen, müssen so viel wie möglich pre-Prozess und andere wieder brauchen ein Entschlüsselungsprozess, das kann Bit-Fehler vertragen in dem Cypher-Text-Stream, also falls Bits kippen. Also eine Sache, die viele Leute nicht so auf dem Radar haben, ist ein Term, der heißt auf Deutsch Formbarkeit oder auf Englisch-Maliabilität. Das bedeutet, wenn ein Angreifer ein Schiffretest abfängt, kann er ihn unter Umständen abändern und dadurch den Plaintext, also den Glatex in gewisser Weise abändern. Bei ECB geht es darum, die Maribirdie besteht darin, dass man die Blöcke beim Wiederabspielen neu arrangieren kann. Die echten Partner, also die eigentlichen Agenten, die die Nachrichtverschüsse und Entschlüsse kriegen das nicht mit dabei. Bei CTR und OFB kann man bittweise Modifikationen des Blocks vornehmen und die propagieren dann in den Glatex. Bei CVC liegt das Problem darin, dass wenn man bei der Entschlüsselung den Schiffretest abgernert hat, kann man auf nachvollziehbare Weise den nächsten Block verändern. Dann gibt es noch andere Probleme dabei. Das sind chosen boundary attacks, das heißt auf Deutsch. Man wählt sich eine Grenze und greift damit die Schiffe an. Bei ECB, CVC, CFB, ist es... Wir wählen, wie zu decryptate Cookies ... die wurden mit einem CVC-Verfahren verschlüsselt. Das ist auch das Problem mit diesen partiellen gewählten Plaintext-Kontrollern. Was wir wirklich haben wollen, ist authentizierte Inkryption und Verschlüsselung. Wir haben schon vor zwei Tagen eine sehr interessante Introduktion über ECB. Aber leider, ich habe kein Beispiel hier von Cook. Ich werde das beste Versuchen um euch zu erklären, was authentizierte Inkryption ist. So was ist das? Du hast ein Algorithmus, das ist authentizierte Verschlüsselung. Du hast als Input ein Key, ein nonzenden Nachricht. Und es benutzt die Key, um den Nachricht zu verschlüsseln, zu ein Cyphertext und ein Authentizierungstag. Der Cyphertext schützt die Konfidenzialität und die Authentication tag schützt die Integrität und die Echtheit. Authentizierte Inkryption, Verschlüsselung, wie JP gesagt hat, wenn wir darüber sprechen, über Verschlüsselung, bedeutet Authentizierte Inkryption. Weil wenn du geschickt hast, wenn du Daten schickst, über einen ungeschützten Kanal, du willst, dass die Daten nicht geändert wird unterwegs. Also das ist was authentizierende Verschlüsselung benötigt wird. Wofür es benötigt wird. Das wird in IPsec, TLS und so weiter, dort wird es benutzt. Und dann gibt es auch die zwei Variante. Authentizierte Inkryption mit additionale Data. Und da hat man eine Nachricht, aber du hast auch als Input eine additionale zusätzliche Data. Also es ist symbolisiert als diese h in dem Diagramm. Und dieses Data, das geht auch durch die Verschlüsselung, die Cyphertext und der Tag. Und es gibt auch ein Cyphertext, das du daraus kommst, und der Tag nicht nur die Nachricht, aber auch die Header. Die Header wird auch geschützt vom Tag. Die Header ist aber in Klartext vermittelt. Es ist zum Beispiel wichtig, wenn ein Teil von der Nachricht geschützt werden soll, aber ein Teil soll für Browsing in Klartext bleiben werden. Es gibt verschiedene Arten, wie man da zur Rande gehen kann bei Verschlüsselung. Die erste Variante ist geniärische Verschlüsselung, Verknüpfung von Verschlüsselung. Man nimmt eine symmetrische Schifre und eine Mac, das ist ein Message-Authentication-Code, ein Nachrichten-Authentifizierungsschifre. Man verwendet dabei die A, I, A, D-Konstruktion. Es gibt drei Varianten, das zu tun. Encrypt in Mac, Mac in Encrypt, oder Encrypt in Mac, was am besten ist. Bei Encrypt in Mac verschüsselt man es und macht man danach das Mac. Bei Mac in Encrypt macht man erst ein Mac auf den Klartext und verschüsselt es danach und verschwindet es dann zusammen. So ist der Tag ein Teil des Schifretexts. Das hat auch Probleme. Das Dritte, jedoch, das ist erst Verschlüsselung, dann Mac, das verschlüsselt man erst den Klartext in den Schifretext und darüber wiederum generiert man das Mac und schickt es zusammen weg. Es wurde schon sehr oft gezeigt, dass die ersten beiden Varianten schlecht sind. Man kann sie niemals, wenn ihr selber Anwendungen schreibt, bitte verwendet immer die dritte Variante. Beispiele dafür sind A, I, S, 128, C, W, C, plus H, Sch, A, 256, oder Cha, Cha, 20 und Poly, 13, 105. Eine andere Art, wie man eine A, I, D-Konstruktion aufbauen kann, sind dedizierte Methoden. Dazu nimmt man authentifizierte Blockschiffren-Modi und verschlüsselt mehrere Blocks mit einer Schockschiffre. Es gibt Blockschiffren, die man benutzen kann, um gleich eine Mac zu konstruieren. Es braucht keine extra Mac-Funktion dafür. Beispiele sind C, C, M, G, C, M, O, C, B und I, X. Die ersten beiden wurden von NIST inzwischen standardisiert. I, X ist die Variante, die heutzutage am meisten verwendet wird. G, C, M und C, C, M hat kleinere Probleme. Das wird euch nachher Jean-Philippe erklären. O, C, B ist auch eine sehr schöne Variante, das zu machen, aber leider ist es patentiert. Dass es nicht vollständig frei eingesetzt werden kann, auch wenn die Patente im Moment etwas abgeschwächt wurden, sodass man es inzwischen möglicherweise in Open Source Software ohne Probleme einsetzen kann, solange man nicht irgendwelche militärischen Anwendungen damit plant. Die vierte Variante ist I, X. Es gibt aber noch andere Varianten. Da hat man im Prinzip nur eine primitive, das ist üblicherweise eine Stromschiffere und eine Mac, also zum Beispiel Grain 128A. Das war einer der Finalisten der letzten NIST Challenge. Dann gibt es noch Helix und Felix und Hummingbird 1, 2, aber die letzten zwei sind schon nachgewiesen worden, dass sie fehlerhaft sind. Eine neue Variante sowas zu machen sind Sponchfunktionen, also Schwammfunktionen. Aber es ist nicht ohne Risiken, solche Authentizite Einkrüption zu benutzen. Man muss aufpassen, was du mit deinem Schema machst, sonst können sie in Problemen auftreten. Zum Beispiel in dem Fall, wo du diese generische Komposition hast, wo du kombinierst für metrische Süße und ein Mark, es ist nicht so einfach, die Interaktion zwischen diese zwei Primitives zu bekommen, die richtig zu bekommen. Also für den Mark der Verschlüsselung, die Verschlüsselungsoption, es gab mal... Es war immer und immer Problemen, um diese Markoptionen zu benutzen. Wenn du entkripsst, dann mag die meisten Problemen, die man in die letzte Jahre gesehen hat, wären nicht so gravierend gewesen. Eine andere Sache ist, die wir schon gesehen haben, CCM und GCM sind die einzige zwei echte Standardräder draußen, die es gibt. Falls diese zwei Varianten euch nicht passen für dein Produkt oder so, oft die Leute erfinden ihre eigene Schema, ihre eigene Süverschema, das ist wahrscheinlich nicht die beste Idee, aber es gibt eine andere Sache. Das ist viel Benutzung. Wir benutzen einen ganzen Anfang. Wenn du zweimal dieselben Nanz benutzt, zu verschlüsseln, um deine Daten zu verschlüsseln, dann kannst du diese Probleme haben, die wir am Anfang gesehen haben, mit CTR-Mode. Und dann gibt es auch falsche Auswahl von Parameter, im Fall von GCM, und das führt zu alle möglichen Problemen, die ich sicher davon bin, ihr schon davon gehört. Welche Probleme gibt es? Lass uns das anschauen. Ich brauche nicht darüber viel zu erzählen. Das Baryting Oracle Attack, das war erfunden in 2002 und es zielte ein Krypto-Code. Das ist das schlechte Code von den generischen Kompositionen, besonders, wenn es benutzen wurde mit CBC-Mode. Weil du hast mehrwürdige Detections zwischen der Zeife Authentication Tag und der Padding, was benutze ich zum Auffüllen die Stellen im Block, die nicht derselbe Größe sind wie der Block, der am Ende rauskommen soll. Und in 2002, die Leute haben gedacht, okay, das ist eine theoretische Attacke. Wir können diese nicht wirklich benutzen, gegen etwas Produktives. Aber zwölf Jahren später, in 2014, es wurde erfolgreich wiederholt und zum Beispiel die Mandeltag. Sie haben alle über Beast in Lucky 13 und Puddleburg das Padding Oracle und Don't Great Legacy Encryption. Wo man SSL und TLS attackieren kann. Ich denke, das haben Sie sich ja auch alle schon gehört. 2007 wurde eine Attacke auf WEP bekannt, die die Verschüsselung bei WLAN angreift. Die, der Angriff der folgischen Angriff der WLAN-Aktaktion, die die Verschüsselung der WLAN-Aktaktion der Angriff der vorgestellt wurde, war ein Angriff auf den Schlüssel selbst, sodass man innerhalb von wenigen Minuten tausende mitgeschnittenen Nachrichten entschlüsseln kann. An einen Austausenden. Nach einer Weile gab es inzwischen ein Tool, das heißt AircrackNG, sodass es inzwischen sogar wirklich jeder machen kann. Probieren Sie es bitte zu Hause aus, wenn Sie es interessiert. Später gab es einen weiteren Angriff. 2013 ging auch gegen RC4. Dabei wurden Bias ausgenutzt. Das sind Metrien in gewisser Weise. Wir wissen, dass RC4 nicht die beste Stromschiffe ist, die es gibt im Moment. Aber in 2013 wurde es dann wirklich gezeigt, dass man diese Bias ausnutzen kann, um den Strom zumindest teilweise zu entschlüsseln. Ein anderen Angriff auf RC4 gab es dieses Jahr noch mal. Kenny Patterson von der Universität London. Es hat getwittert, dass Leute wirklich aufhören, RC4 zu benutzen. Wir haben gerade ein anderes RC4-Abhängiges System gebrochen, das heißt Hive. Hive ist ein Hidden Volume Encryption System, aber das Problem war, die haben für ihre Pseudo-Random-Nummergenerator, die als RC4 Stream-Ziffer, und das hat die Leute ermöglicht. Rund um Kenny Patterson um eine Attacke zu bauen, um diese Hive-System. Aber es ist doch egal, Security, ja, wir sind schnell. Das ist von Apple Keynote, wo Sie zeigen, Swift ist das Beste und Schnellste. Die schnellste Sprache, wenn du mit RC4 Encryption Verschlüsselung benutzt. Und jetzt, wir wollen sehen ein paar Sachen, was die Krypto-Community-Gemeinde sich ausgedacht hat, um diese Probleme aus dem Welt zu schaffen, die wir vorher besprochen haben. Also bessere Ziffer, Leute sollen was darüber tun, das haben wir tun, das ist Caesar. Kompetition für authentisierte Verschlüsselung, Sicherheit, Applicabilität und Robust. Der Konzept ist einfach, Sie sind eine Organisation, wollt einen new Cypher finden, eine neue Hasch-Funktion, eine neue Blockziffer, nicht viel Zeit, der Krypto-Expert ist in einer, also du fragst Leute in der ganzen Welt, ihr seid ihr Experte, ihr wollt für uns gratis arbeiten, ihr wollt ihr eigenes Cypher, ihr wollt es zu uns schicken, und wir sind die Industrie. Also, die Leute von der Universität, die Leute machen ein neues Cypher, eine neue Spezifikation und 100 Seiten Dokumente, die machen es gratis für die Organisatoren von diesen Kompetitionen. Und jetzt versuchts alle, die Design der anderen Menschen, zu knacken. Also, du hast ein Cypher gegeben und wir in Demolition Derby, willst du die Ziffer der anderen kaputt machen. Vor der Ende, die Organisatoren machen eine Selektion, wir haben 50 Kandidaten und wir haben es runter zu 30 und dann runter zu weniger. Und das ist die Idee. Die Teilnehmer wurden selektiert. Es war total transparent. Die Teilnehmer sind sicher als Experten und es ist viel besser als irgendwelche undurchsichtbare Sachen, wie andere Länder machen. Die andere Sache mit CISA, typischerweise das Ziel ist, alte Standards zu ersetzen. Und CISA ist darüber ersetzen, besser machen wie ASGCM. Das ist das aktuelle de facto Standard. Das ist die einzige Authentizierung, die wir haben. SSGCM, Galway Counter Mode ist ein Modus für du, im Grunde AS Counter Cross. Und du machst Polinium Multiplikation über ein, und du füllst ein Authentizierungs-Tag. Der von allen Blocken im Klartext abhängt. Und das ist das Ende des Jahres. Einige Details von CISA möchte ich gerne vorstellen. Im März 2014, beziehungsweise noch im Jahr davor, haben die Leute angefangen. Und die ersten Einsendungen wurden jetzt veröffentlicht. Wir gehen davon aus, dass es Ende 2017 ein Modus für CISA wird. Es wurde initiiert von Daniel J. Bernstein mit einem Komitee von 22 anderen Krypto-Experten. Es ist gesponsert von NIST, aber wird nicht von den organisiert oder kontrolliert, was ein wichtiger Punkt sein kann. Es hängt nicht von der US-Regierung ab. Es ist überall geäußert. Die ISGCM ist überall. Sie haben eine der Psypherspecifizierungen in der Spezialpublikation. Eine dieser Schiffen, die in dem Standard spezifiziert sind. Also in Prinzip in allen, die da gelistet sind, NIST, NIST usw. Also was ist das Problem mit ISGCM? Eine Sache, es ist unnötig, unnötig komplex. Es tut Punkt Multiplikation. Du kannst dasselbe machen, diese Funktionalität ohne diese relativ komplexe Mathematik zu benutzen. Es ist schnell, wenn du native Befehle hast, Intel oder so ein Chip, der ISGCM unterstützt, das kann viel schneller gehen. Aber wenn du diese Chip nicht hast, diese Artweraksellerator, dann ist es viel, viel langsamer. Ein anderes Problem ist Timing. Das Problem ist, es gibt Zeitattacken, wenn man nicht aufpasst. Wenn man kein Nonz verwendet, ist es möglich, große Rainbow-Tabellen aufzustellen und kann dann den Schlüssel einfach nachsehen. Und das führt dann letztlich auch zu Zeitlacks, also das heißt, dass man eine Zeitattack gefahren kann aufgrund der Laufzeit der Verschlüsselung. In ISGCM kann man den Schlüssel wirklich zurückgewinnen, wenn man nicht aufpasst. Wenn man den Schlüssel gefunden hat, kann man im Prinzip alles kompromittieren, was mit dieser Verschlüsselung gemacht wurde. Also was ist jetzt bei IS wirklich kaputt? Also Leute sagen immer, dass die NSA IS kompromittieren würde. So weit wie ich es verstehe, das war einfach ein Undergrill-Projekt, also über sehr alte statistische Techniken. Es ist kein Milliarden-Dollar-Projekt, um das IS wirklich zu kompromittieren. Ich denke, dass ihr, wenn man das nicht aufpasst, kann man das nicht kompromittieren. Ich denke, dass nicht nur wir, sondern auch viele andere wissenschaftliche Franscher sich damit beschäftigen und wir alle versuchen es zu brechen, wenn wir was finden würden, wären wir schon informiert. Also im Prinzip zeigen wir nur, dass IS immer noch sicher ist, wir gehen auch davon aus, dass es auch in der Zukunft nicht kompromittiert werden kann, aber das ist nur eine persönliche Meinung. Es gab 57 Kandidaten, eigentlich 64 für 63, aber viel mehr als bei IS, wo es waren nur 15. Zum Beispiel ACORN, AGES, ISCMC, ASCOPRA, ASCOPPA, wie man auf dieser Seite sehen kann, ASCOPRA und ASCOPRA Keeping veux. Keywords. Alte man diese Wort ES gehört in mehrere Kandidaten. Dat heißt die Basieren auf dieses IFARn Ihre Sempre In manchen Fälle Modifikation zu AES, aber AES basiert. Die Motivation hier ist, die Geschwindigkeit von AES sich zu nutzen zu machen. Es gibt ungefähr 25 Kandidaten, die AES oder die Varianten von AES nutzen. Also die anderen sind Mambo, Julius, ich weiß nicht, ich weiß nicht, wie sie worauf sie basieren, aber vielleicht ein neuer Block-Cypher von Scratch oder Strom-Cypher oder etwas basiert. Und eine Sponschfunktion, was wir vorher erwähnt haben. Sponschfunktionen sind wir in die nächsten Slides. Also wie sicher sind die? Manche Leute haben schon Versur, die zu knacken. Wir haben 13, die sind kompromittiert worden und fünf für die, es wurde unperfektionsgefunden. Es heißt, es gibt, also für die anderen ist keine wesentliche Fehler gefunden worden. Die sind noch nicht geknackt worden. Ich will euch überzeugen, dass ich will euch überzeugen, dass sie sicher ist. Also bevor wir uns ein Nox anschauen, es gibt eine AES-Funktion genannt, Blake. Und jedes Mal, wo ich über Blake präsentiert gesprochen habe, die Leute hatten nur eine einfache Frage. Es war, warum hast du es Blake genannt? Hier gibt es eine Erklärung hinter den Namen Nox. Es kommt vom not ARX. Also was ist ARX? Es ist addition, es ist ein Art von Kryptografie, Algorithmus mit exklusiv oder eine Rotation von oder und exklusiv oder etwas zu machen, was nicht knackbar ist. Es ist universell. Du kannst jede Funktionalität, eine computable Touring berechnen. Warum haben wir uns entschieden, nicht ARX zu sein? Warum haben wir das weggemacht? Wir benutzen exklusiv oder unlogische Erkenntnisse. Der Grund ist, dass es nicht in sich mehr sicher ist, es ist noch einfacher zu analysieren. Es ist einfacher. Manche Ergebnisse, zum Beispiel Grenzen an der Sicherheit des Ziffern zu finden. Es ist auch viel einfacher, wenn man acht oder 16 Bittregister versuchen, die über die Karriere nicht kümmern. Es ist einfacher für die Hardware. Du brauchst nicht die richtige Adder. Was sind die Design-Ziele? Wie jeder Ingenieur-Projekt. Wir denken erst mal darüber, was soll es machen, was sind die Ziele? Also wir wollen unsere Ziffer zu be sicher, offensichtlich, das ist das wichtigste Kriterium, um schnell zu sein für den Output. Wir haben nicht für einen bestimmten Chip oder für einen bestimmten PGA optimiert. Wir wollen konstant gut sein für alle Plattformen. Wir wollen, dass ARX universell eingesetzt werden kann. Leute sind manchmal ein bisschen beeindruckt, wenn es komplex ist. Wir wollten das simple machen. So einfach wie möglich. Die Spezifikation oder der Code. Und wir wollen, dass Leute, die nicht Experte sind in Kryptografie, die keine Doktorarbeit haben, dass sie den Speck haben und implementieren, vielleicht in einem Nachmittag. Einfachkeit bedeutet auch Symmetrie. Wenn man noch die Encription sieht und die Decription, das ist ungefähr dieselbe Funktion. Es gibt noch ein kleines Twix, aber du musst nicht etwas vollkommen an das implementieren, wenn du verschlüsseln und entschlüsseln willst. Man muss es genau einmal anwenden. Es ist nicht so, dass man verschiedene Methoden braucht für die Verschlüsselung und Entschlüsselung. Wir wollen, dass man eine große Wendigkeit des Schlüssel hat. Man will keinen extra Key-Schlüssel haben, sondern wir geben ihn einfach in den Code als Info dran. Wir versuchen natürlich auf dem Level des Algorithmus zu verhindern, dass eine Side-Channel-Attacke wahrscheinlich ist. Also Norgs hat ein paar Parameter. Es handelt sich eigentlich um eine ganze Schiffern-Familie in dem Fall. Und je nachdem, was die Anwendung braucht, könnt ihr die Parameter wählen, sodass sie das tut, was ihr wollt. Das erste Parameter ist die Größe des Wortes, 32 aus 36 Wortgröße. Du musst zwei Betrotzationen machen. Offensichtlich, du kannst jener CPU, 64 aus 32, wie viele Cypher, das können die Anzahl der Zyklen und der Anzahl der Rounds machen, der Parallelismus, also wie viele Kurse hast du verfügbar für uns. Du musst die Tatsache nutzen, dass deine CPU-Parallelität kann machen sein. Die Größe vom Tag für Cezar, wir haben nur fünf Angebote. Wir haben noch mit sechs Rounds oder zwei Rounds. Es ist komplett serial, wenn es natürlich Parallelität 1 ist. Warum vier Rounds und sechs Rounds? Keine einfache Antwort, aber wir haben versuren, Norgs kaputt zu machen. Es ist einfach ein Tradoff zwischen Sicherheit und Effizienz. Also wir haben eine Version mit 120-Bits Schlüssel und 164. Der Modus ist im Wesentlichen, was wir nennen, eine Domain Extender, eine Kombination von der Core Funktionalität, um Input von verschiedenen Größen zu bearbeiten. Wir haben diese Funktion, die nimmt etwas von einem festen Größe, wir kombinieren es in eine Art, dass wir eine Nachricht von einer beliebigen Größe verarbeiten können. Die Sponge Funktion spezifisch, was wir nennen, der Monkey duplex, ist, dass wir eine Aschfunktion Mod nehmen und wir verändern sie ein bisschen, sodass du eine authentizierte Zeit von dieser Aksfunktion Modus rausmachen kannst. Es ist ziemlich einfach, du hast diese Funktion, es nimmt ein Input, es transformiert es in eine sehr kompetierte Weg und es bringt etwas von derselbe Größe und diese Permutation kannst du invertieren. Du willst normalerweise Dinge nicht invertieren in Krypto, aber das ist in dem Fall, was wir brauchen. Also du siehst einen Haufen von Exklusiv oder wir insizieren der Nachricht, wir insizieren die Parameter. Die Nachrichtinjection ist sehr einfach, du exklusiv oder die Nachricht und dann du änderst den State. Wir haben der Herder zum Beispiel etwas, was nicht verschlüsselt wird, wir initiieren es zum Status des Endes des Status und danach dessen ein anderer Status. Warum es geht hier, dass die Status so ändern, dass du etwas bekommst, das ist sicher nach einer gewählten Definition von Sicherheit. Die Details kannst du in den Parallel-Modus wiederum, das ist ungefähr dasselbe. Also du exklusiv oder die Nachricht, du kriegst ein Cybertext als Ausputter, aber der Unterschied, du hast zwei parallele Branchen, die vollkommen unabhängig von einander sind. Wenn du paralleler Branchen machen und die Effizienz optimieren, Nox ist wirklich über ein State ändern mit per Mutation. Der State ist einfach ein String von Bits. Der String von Bits ist 16 Wörter und 32 ist 64 Bit und das ist natürlich eine Betriebe von 4 mal 4. Ich erinnere euch daran, dass 20 die ganzen Verfahren haben. Wir haben zwei verschiedene Wörter, die blauen wir, die Nachricht initiieren, das ist die Red-Wort und den grün, die Kapazität, die Wörter, die lassen wir einfach so, die fassen wir nicht schon. Du kannst kontrollieren die blaue Wörter zu einem gewissen Grad, indem du die auswählst, aber die Segurität kommt davon, dass die grüne sich nicht ändern. Wir vereinfachen daran, je mehr grüne, desto je mehr sicher in Theorie wir den Algorithmus sein. Also wir haben diese Unterscheidung von Wörtern nicht gemerkt, das ist ein Fahrer in die Literatur zu finden. Der State ist 12 Bits oder 1 K. Das ist ein Adaptiert und Sprechend. Also Philippi Deutschex erklärt, wie wir dieser State verändern. Also dieses Ding haben wir schon gesehen, was ihr noch nicht gesehen habt ist, JP hat schon erwähnt, es gibt verschiedene Phasen, in denen die Schiffe erarbeitet. Wir schauen jetzt mal die erste an. Die erste ist natürlich Initialisierung. Das ist dieses rote Vier-Eck. Lass uns mal genau rein schauen, wie es funktioniert. Zu einem gewissen Zeitpunkt muss man natürlich irgendwann mal den geheimen Schüssel verwenden. Was genau passiert ist, man nimmt diese 4x4-Matrix und man lädt den Schüssel in diesen gelben Teil. Die Nonz, das ist diese Zeit, die man einmal verwenden darf, die steckt man in den grünen Teil und der Rest, die sind der blaue Teil, das sind einfach nur Konstanten. Nichts weiter. Was man danach macht, wenn man das alles geladen hat ist, man muss jetzt die Parameter irgendwie integrieren in diesen Zustand. Man will, es ist ja so, dass Nonz einfach eine ganze Familie von Schiffern ist und wir wollen sicherstellen, dass jede Instanz dieser Familie eine einzigartige Schlüssel-String produziert. Dazu verwenden wir die gleiche im ersten Zustand. Wenn wir den dann hinterher transformieren, dann ist sichergestellt, dass der Schlüsselstrom, der danach entsteht, eindeutig ist. Der letzte Schritt in der Initialisierung ist, wir wenden die Rundenpermutation F hoch R auf S an. Dadurch erhält man dann einen neuen Status S, der also wieder S heißt, das ist jetzt die erste Variante. Ihr seht schon, die Parameterintegration ist etwas unordentlich und wir haben uns gedacht, wir machen es einfach viel leichter und haben jetzt die Parameter anders eingebaut. Ihr müsst euch einfach nur die untere Zeile der Matrix angucken. Also es ist im Prinzip genau dasselbe, aber es ist, wir verwenden die Parameter einfach nur ein bisschen anders. Das ist deutlich einfacher. Der letzte Schritt ist immer noch dasselbe. Also wir wenden die Rundenpermutation an. Das ist schon alles, die Initialisierung ist damit schon fertig. Der nächste Teil ist, Hader und Trailerdaten einbauen. Normalerweise Kuprykypto-Verfahren unterstützen additionelle Data. Du machst einfach die additionelle Data, bevor du das Plaintext entzufirst. Aber manchmal ist es nützlich, einen Trailer zu haben, die du irgendwie processieren kannst nach deinem Plaintext und Notch hat diese zwei Phasen. Erstmal den Hader und dann der Trailer in dieser rote Quadrate. Im Grunde, es ist genau ein identisches Verfahren, except für eine kleine Konstante, diese Domainseparation Konstante. Die Domainseparation Konstante hier 0, 1, 0, 4 und X sagt einfach, okay, ich produziere jetzt, ich absorbere Hader Data, das ist 0, 1 oder ich absorbiere die Trader Data, das wäre 0, 4, 0, 4. Also du hast nachdem die Domainseparation Konstante absorbiert hast, dann machst du die Rundenpermutation, das ist die mittlere Teil und dann am Ende du nimmst der Hader, der Trailerblocker, das ist hier der gelbe Teil und X und der blaue Part und was du kriegst, ist diese orange Teil und hier du siehst schon, diese importante Sache ist, dass diese grüne Teil ist nicht angefasst von dem Datenverarbeitung und das ist es für der Hader und Trailer. Wie verschüßtet man dann den eigentlichen Payload? Das sieht man jetzt hier in dem roten Vierig in der Mitte. Im Prinzip ist es ganz ähnlich dazu, wie man den Hader und Trailer einbaut. Wir haben diesmal als Trennungskonstante 2, dann muss man nur wieder die Rundenpermutation anwenden, man absorbiert die Daten, die Nachricht ist diesmal gelb und was man jetzt aber noch machen muss ist, man extrahiert den roten Teil als neuen Schiffertextblock. Der letzte Schritt ist in unserer Datenverarbeitung ist das Tag generieren, das ist die letzte Phase. Wir integrieren wieder eine Domain separat Trennungskonstante, das ist hier 8, dann wenn man die Rundenpermutation 2 mal an und mal extrahiert wieder den roten Teil und das ist diesmal das Tag. Hier setzen wir die ersten vier Wörter als Tag. Jetzt habt ihr ungefähr ein Gefühl dafür, wie es funktioniert und was ich jetzt noch nicht gesagt habe ist, wie funktioniert diese Permutation, FOR. Im Prinzip transformiert ist den Zustand in verschiedene Schritte erst in einen Spalten Schritt, da wendet man immer eine Funktion G auf die Spalten an und dann verwendet man dieselbe Funktion G, um das auf die Diagonalen anzuwenden. Die G-Funktion ist der eigentliche Kern unseres Algorithmus und wie wir schon gesagt haben, es ist eine Nicht-Arks-Konstruktion, also man benutzt nur bitweise logische Operationen und man sieht hier die acht Schritte, die da vernötigt sind, bei einer Anwendung von G. Man sieht H ist der nicht-in-jahre Teil, das ROTR, es ist eine Rotation nach rechts und man sieht das hier am Ende der Folie, man rotiert das Wort einfach um einen konstanten Teil nach rechts und man wendet dann jetzt immer wieder abwechselnd an, eine non-lineare Funktion, eine Rotation und wir verwenden hier vier verschiedene Rotations-Offsets, das sind die roten, je nachdem wie groß die Wortgröße ist des CPUs, aus dem es läuft, hat man andere Konstanten, also 8, 11, 16, 31 für den 32-Bit-Wörter-Computer und 8, 19, 40, 33 für den 67-Bit-Computer. Okay, das ist alles Integer-Operationen, von denen wir hier reden. Wir haben auch erwähnt, die proprietät von dieser Permutationen, die wurde inspiriert von Blake Two and the Chacha Stream Cipher, wie ich schon gesagt habe, die H-Funktion ersetzt die Integer-Adition, also es ist fast eine Integer-Adition. Die Lustige da drin ist, wenn wir diese Permutationen entworfen haben, diese Permutationen, wir sind weitergegangen und wir wollten, wir wollten die Integer-Adition ersetzen, aber wir wussten nicht, was wir benutzen können, also wir haben viele Bitweise, logische Operationen probiert, probiert, die kriegt zum Beispiel Eigenheiten. Wir könnten nichts finden, was richtig gut war für unsere Ziele, bis wir, ich glaube Samuel, diese H-Funktion, die ist eine Approximation von Integer-Adition, was Sattergemachter fand, in einem alten Buch von Knut, diese Equation für Integer-Adition und es ist X oder Y plus, also Integer-Adition plus dieser Teil hier, diese nonlinearer Part, was wir gemacht haben in dieser H-Funktion, ist diese plus, ersetzt durch einen Exklusiv oder und jetzt haben wir sehr schöne kryptografische Beschaffenheit und so haben wir es weiter benutzt. Die schöne Sache ist, was ich schon gesagt habe, es ist nur Bitweise-Operationen, du brauchst es nicht über Carry kümmern, du musst nicht Tabellenboxes schauen, es ist einfacher um Konstantzeit-Operationen, es ist sehr gut für die Hardware, es ist softwarefreundlich, weil dieser Layout von der F-Funktion, erinnert euch, ihr habt vier parallele Applikationen auf G zu der Reihe und das ist sehr gut für die Software. Die große Frage natürlich ist noch sicher, hier die größte Bedrohung ist eine technik-differenzielle Kryptoanalyse, ich werde nicht in die Details reingehen, aber es ist im Grunde das erste Typ von Attack, jede Kryptografische primitive Hase, die sich wiederstehen. Wir haben viele Experimente gemacht von NOx und wir haben herausgefunden, dass für einen Rund einen Round, es gibt Charakteristiker, die man irgendwie, es ist eine Analogie für diese Bias ist, erinnert diese vier Bilder, wo wir diese Spitzen hatten und eine Charakteristik ist im Grunde ein dieser Spitze und in ein Rund nur, dieses Pike verschwindet mit einer Wahrscheinlichkeit größer, dann zwei hohe 584, minus 500. Es gibt keine Anwendungen, die eine höhere Wahrscheinlichkeit haben, es zu brechen als diese und dann haben wir noch andere Charakteristiken gefunden, die noch viel unwahrscheinlich sind, also zwei 64 Bit Rechner, zwei auf minus 836, es ist eigentlich unmöglich, dass man das anwenden kann. Was ich auch erwähnen will, ist, um das ein Attack am Nord zu finden, du musst irgendwie durch die Initialisation durchgehen und diese Initialisation hat hier mindestens 8 Rounds und wir haben gesehen, dass für vier Rounds die Wahrscheinlichkeit, diese Bias, es ist so, so niedrig, also wir sind sehr sicher, dass es sehr hart zu finden, gute Differenzial zu finden in diese Initialisation und auch ein neuer Ergebnis, wo wir rausgefunden haben, die Parameter, die wir wählen, sind sehr konservativ, wir könnten sogar Kapazität austauschen, um ein bisschen bessere Geschwindigkeit zu haben. Das ist auch in dieser Security Marge von Norgs. Wir haben nur noch 10 Minuten. Es ist ziemlich langweilig, ich habe bestgestellt, meine Tochter ist gerade schon eingeschlafen. Okay, nur noch ganz kurz, also Geschwindigkeit. Auf einem 86-Bitzen-Rechner AMD 64, wir haben 593 Mbps pro Sekunde verschlüsselt, auf einem Haswell sogar 1390. Wir haben dabei immer A4X oder A4X2 Erweiterungen verwendet. Funktioniert wunderbar mit Norgs. Es ist wirklich sehr einfacher, portabler Code und wenn man diese A4X2 nicht verwendet, ist es immer noch sehr, sehr schnell. Wenn man A4X1 verwendet, ist das ganz was anderes. Jetzt auf einem ARM, wir haben hier einen ARM 8, der hat 111 Mbps geschafft, der hat die Neon Erweiterungen, das der ISA benutzt, wenn man es auf einem iPad Air laufen lässt. Das ist nur die A7. Der schnellste Code ist nicht der Neon Code, das ist der Referenz Code, weil er hat 4 Integer, drinnen ist mehr der Code ein bisschen schneller als der Neon Code. So wie vergleichen Norgs zu die andere CISA. Zum Beispiel, jede Spalte hier ist eine Maschine in verschiedenen CPU und die Farben sind in Norgs Instanzen. In vielen Fällen ist Norgs ganz oben oder es kann auch in der Mitte sein. Das sind die Maschinen, die IS-native Instruktionen haben und manche sind viel schneller. Aber Norgs ist nicht nur sehr schnell, compariert zu IS-instruktionen. Das ist auch die schnellste Sponge-basierte Schema in die meiste Fälle. Der Referenz-Code ist genauso schnell wie der Optimierte. Wenn man vergleicht mit SCM-GCM, der Referenz-Code und der Optimier-Socode und im Fall vom Norgs, in mancher Fälle, unsere Referenz-Code ist sogar schneller, dann die optimierte ESG-CM-Code. Das ist die Open Source Version. Eine selbe Sache auf der ARM-Plattform mit anderen Ergebnisse. Also für IS muss man die richtige Assemblies, Adware-Achseriatoren benutzen in Norgs. Du kannst die Portable-Code und du könntest eine sehr große Schnelligkeit erreichen. Wir haben nicht nur eine Simulation und Software, aber wir haben eigentlich ein Chip, das wurde von Etihad gemacht. Vielen Dank hier an den Studentinnenproffs. Es wurde gemacht an UMC Chip und Norgs. 125 Megahertz. Die Bereich ist 60K. Was ist gut? Und mit diesen Figuren. Es kriegt einen Rade von 10 Gigabit pro Sekunden. Das ist für sehr, sehr gut. Es ist Zeit, diese Talk zu beenden. Also erst mal durch diese Talk wollen Sie sich vielleicht erinnern, dass dieser ist eine neue Krypto-Kompetition. Das startet dieses Jahr, des Ende 2017. Es ist über authentisierten Krypto-Ziffer und es gibt 57 Participant-Teilnehmer in ein paar Wochen. Die werden veröffentlichen, die zweite Reihe. Ich weiß nicht, wie viel selektiert werden, aber es wird interessant sein. Gehen Sie zu, geht zu unserer Webseite hier auf die Folie. Und es gibt eine andere Kompetition über Passwort Hashing. Hier ist den Link dazu und zu Ende den Norgs. Es ist ein Kandidat in dieser Kompetition, die wir vorher erwähnt haben. Der interessanteste ist, dass es innovativ, es benutzt Orks in ein anderer Art. Es ist parallelisierbar, wir versuchen, die Seitenkannellangriffe zu minimieren. Wir haben keine Abhängigkeit von IS-Instruktionen und Beschleunigern und wir benutzen es einfach gar nicht. Es ist ziemlich einfach zu implementieren, sehr schnell, sowohl in Software und Hardware. Wir haben zwischendurch gedacht, wir machen das jetzt in Python, es gibt es inzwischen auch. Wir haben eine eigene Webseite Norgs.io, wir haben ein Code schon fertig in C, C++, Go, Python, Rust. Also wenn ihr es benutzen wollt, wir empfehlen es noch nicht, aber wenn ihr es benutzen wollt, wir haben es schon mal hochgestellt, wir haben es unter einer sehr freien Dezense abgelegt. Wenn ihr was mitmachen wollt, macht es einfach. Jetzt noch eine letzte Sache, vielleicht könnten wir euch erzeugen, dass Norgs eine großartige Sache ist, aber bitte benutzt es noch nicht in Produktionen. Es braucht einfach noch eine Weile, um sicher zu sein, dass es wirklich funktioniert. Es kann wirklich passieren, dass es uns nächste Woche gebrochen wird. Bitte wartet einfach noch ab. Wir haben Vertrauen in Norgs, aber wir bitten euch nicht in Produktion zu benutzen, zumindest für jetzt. Vielen Dank. Hab Spaß beim Tonzen. Okay, also vielen Dank normal für unsere Sprecher. Wir haben vielleicht fünf Minuten übrig für Fragen. Falls du eine Frage hast, einfach hinter den Mikrofonen stellen, aber bitte, sei präzise und kurz, fast echt kurz. Okay, ich habe diese unterschiedliche EDX, EDX 2. Falls, sorry, falls ruhig sein beim Verlassen des Raumes, damit wir die Möglichkeit Frage-Antwort-Session haben können. Okay, EDX gegen EDX 2, Implementation, der andere Tag. Hattest du ein Problem, dass der Integer ist dumm, aber ich habe, ich will darüber nicht zu viel reden, aber ich habe realisiert, der X1 hat exklusiv oder nicht, und alles was ich brauche, und ich habe mich gefragt, warum haben abtiert das nicht? EDX 2 ist wie EDX 1, wenn du nur X1 und nicht brauchst, ein Orn oder... Wir wussten, dass A4X irgendwann rauskommt und wenn Norgs gewählt wird, dann wird sowieso soweit kommen, dass die CPUs dafür Unterstützung sind. Deswegen haben wir gar nicht erst versucht auf A4X 2 zu optimieren. Ich werde euch senden, es ist ein header-File, du benutzt es, du benutzt es einmal. Okay, danke, danke. Danke, das ist wirklich cool. Okay, eine kurze Frage von RFC, keine Frage. Okay, das ist an. Wir können auch Fragen beantworten nach der Session. Auch E-Mail schicken, Twitter. Okay, der Mik funktioniert. Die erste Frage ist im Internet. Wie viele Wissenschaftler außerhalb eures Teams haben euren Code schon angesehen auf Verwundbarkeit? Wir sind die Einzige, die etwas veröffentlicht haben. Wir sind die Einzigen, die nicht gefunden haben, aber es gibt eine Arbeit, die wir zusammen gemacht haben mit Leuten und wo wir im Grunde zeigen, was ich vorhin gesagt habe, die Parameter, wenn sie gut gewählt, dann kriegt man eine gute Speed-Up, wenn man ein Trade-off zwischen Kapazität und Geschwindigkeit macht. Und das wurde gemacht mit Leuten von Leuten. Wir haben Security-Proofs in diesem Paper gemacht. Ich meine, diese gezielte Cryptanalysis wurde noch nicht gemacht, aber vielleicht in den nächsten Wochen wird etwas dazu gemacht. Also die Ergebnisse, die wir gezeigt haben bis jetzt, das sind unsere Eigener. Ja, das ist es. Meine Frage ist, war der Faire-Mod von Norx, wenn man da Key and Ivy wieder verwendet, wenn man denselben Klartext und denselben Initialisationsvektor verwendet? Wenn du denselben Vektor benutzt, dann kriegst du den Key nicht zurück, dann schüße dich zurück, aber wenn du zwei verschiedene Nachrichten derselbe Präfix, dann wirst du herausfinden, dass du derselben Präfix hast. Es ist ein großes Sicherheitsproblem. Es kompromittiert der Süfer. Das versuchen wir zu minimieren, aber was du kriegst im Grunde ist, du kannst exklusiv oder der Süfertextblock und du kriegst dann der Extor vom Plentextblock. Das ist was passiert, wenn du benutzt normal Schlüssel und Vektoren für denselben Nachrichten. Ist es dasselbe bei den Counter-Mods? Ja. Für Konfidenzialität. Und wie ist das dann besser als die GM? Ich denke wir diskutieren die Details offline. Okay, also wir sind nur eine Minute über Zeit. Wir müssen jetzt aufhören mit Fragen und Antworten hier. Diese zwei werden hier bleiben. Ihr könnt ja auch weitere Fragen einfach vornestellen. Vielen Dank für dabei sein. Bitte nehmt.