HL 2018. Zusammenfassung des Berichts „Machen Sie Passwörter wieder großartig! Wie man rohe Gewalt besiegt und Hackern nichts hinterlässt “

Passwörter sind wie Unterwäsche


Hallo Habr! Mein Name ist Akhmadeev Rinat, ich bin Sr. PHP-Entwickler.


Ich präsentiere Ihnen die Zusammenfassung des Berichts. Machen Sie Passwörter wieder großartig! Wie man Bruteforce besiegt und Hackern nichts von Alexey Ermishkin von Virgil Security mit HighLoad ++ 2018 hinterlässt .


Als ich zu dem Bericht ging, war ich pessimistisch. Aber seitdem Da es sich um Virgil Security handelt, habe ich mich trotzdem entschlossen zu gehen. Am Anfang schien der Bericht wirklich Kapitän zu sein, und ich verlor sogar das Interesse, aber wie sich herausstellte, fand ich sogar einige neue Ansätze für den Passwortschutz heraus, abgesehen vom üblichen Salt-Hashing.


In dem Bericht werden Möglichkeiten zum Schutz von Passwörtern vor Hashes für modernere Ansätze wie das Facebook-Passwort Onion, Sphinx und Pythia erörtert. Ganz am Ende werden die neuen Simple Password-Hardened Encryption Services (PHE) eingeführt.


Der Bericht hat mir so gut gefallen, dass ich ein Kompendium vorbereitet habe. Ich empfehle jedem, sich vertraut zu machen.


Alexey Ermishkin hat die Folien und den Videobericht in den Kommentaren geteilt:



Zusammenfassung


Eintrag


Folie 0. Machen Sie Passwörter wiederholen


Hallo allerseits, guten Morgen allerseits! Ich freue mich, Sie alle auf der Highload Conference zu sehen. Mein Name ist Alexey Ermishkin, ich arbeite für Virgil Security.


Virgilsecurity


Wir sind an der Entwicklung verschiedener kryptografischer Produkte für einzelne Entwickler und Unternehmen beteiligt. Wir konzentrieren uns auf End-to-End-Lösungen. In diesem Fall müssen Sie dem Service nicht vertrauen, um Aktionen wie Datenübertragung, Authentifizierung usw. ausführen zu können. Unsere SDKs sind offen und für alle zugänglich.


Folie 7. Leistung, Komfort, Sicherheit


Passwörter werden seit langem als Mittel zur Authentifizierung verwendet, um irgendwohin zu gelangen. Das war lange bevor Computer auftauchten. Aber mit dem Aufkommen von Computern und dem Aufkommen von IT-Systemen haben die Menschen die Gewohnheit, Passwörter zu verwenden, nicht aufgegeben. Dies wurde zu einem sehr großen Problem für Entwickler, da sie auf das Problem stießen, wie Systeme sowohl bequem als auch schnell und sicher gemacht werden können. Sehr oft, wenn zwei dieser Aspekte versuchen, gut abzuschneiden, ist der dritte nicht sehr gut. Wenn Sie das System produktiv und sicher machen, kann dies unpraktisch sein usw.


Folie 8. Wovor schützen wir uns?


Also, worüber werden wir heute sprechen?


Ich werde über den Schutz vor Offline-Angriffen sprechen. Wenn Passwörter in Ihre Datenbanken gelangen, kontrolliert der Benutzer sie nicht. Wenn Ihre Datenbank gehackt wird, leckt sie irgendwo und danach können Hacker alles damit machen. Selbst wenn Sie die Passwörter irgendwie geschützt haben, können sie damit beginnen, sie zu sortieren, und sie müssen dafür mit niemandem interagieren. Sie haben bereits alles dafür. Außerdem hören Benutzer nicht auf, schwache Passwörter zu verwenden. Passwortrichtlinien sind natürlich eine nützliche Sache, aber auch nicht immer bequem, d. H. Wenn sogar Personen ein sicheres Passwort eingeben, heißt es in der Richtlinie immer noch, dass Sie einen Buchstaben oder eine Zahl hinzufügen müssen. Für sie ist dies dann nicht bequem. Es ist auch offensichtlich, dass das Problem darin besteht, dass die vom Benutzer eingegebenen Daten mit denen in der Datenbank verglichen werden müssen. Wie geht das sicher? Vergessen wir nicht, dass es im Unternehmen auch Menschen gibt, die nicht ganz freundlich sind und sich auch vor ihnen schützen möchten.


Hashes


Folie 9. War es mit Passwichtig falsch?


Warum sind Passwörter im Prinzip ein so schmerzhaftes Thema, warum lohnt es sich, genauer mit ihnen zu arbeiten? Das Problem ist, dass das Passwort eine kleine Entropie hat . Was ist Entropie? Dies ist die Menge an Informationen, die in den Daten enthalten sind, d.h. Zum Beispiel sind im Highload-Wort 8 Buchstaben 8 Bytes, aber wenn wir die Entropie berechnen, sind es nicht 64 Bit wie das ganze Wort, sondern weniger als 30 Bit. Wenn sie heute über das Brechen des Passworts sprechen, sagen sie, dass es möglich ist, Passwörter mit Entropie in einer solchen Zeit zu knacken, nicht mehr oder nicht weniger als so viele Bits. Das heißt, Auch die Anzahl der Passwörter wird nicht berücksichtigt.


Folie 10.1.  Hashes


Wie haben die Leute mit der Passwortsicherheit angefangen? Das erste, was mir in den Sinn kam, war die Verwendung von unidirektionalen kryptografischen Hashes .


Folie 10.2.  Hashes


Ihr bemerkenswertes Merkmal ist, dass sie nicht zurückgedreht werden können. Das heißt, Wenn Sie einige Informationen in diesen Hash übertragen und am Wert einen Wert erhalten haben, können Sie diese Informationen nicht von diesem Wert zurückerhalten. Leider sind sie sehr schnell berechnet. Beispielsweise kann ein moderner Cluster von 4 NVidia-Grafikkarten mehrere Milliarden Passwörter pro Sekunde verarbeiten. Das heißt, Wenn die Entropie Ihres Passworts weniger als 40 Bit beträgt, wird es von einem Cluster von 4 Grafikkarten in einer Minute oder sogar weniger dort aufgenommen.


Regenbogentische


Folie 11.1.  Regenbogentische


Zusätzlich hat jeder knifflige Hash einen eigenen Regenbogentisch . Was ist dieser Tisch und wie werden sie hergestellt?


Folie 11.2.  Regenbogentische


Das heißt, Sie verwenden die beliebtesten Kennwörter und Zeichenkombinationen, die auf die Festplatte passen, berücksichtigen Hashes für sie und speichern sie für mehrere Terabyte. Wenn es eine Art Hash gibt, können Sie ihn nicht berechnen, aber anhand dieser Tabellen sehr schnell finden und mit dem zuvor berechneten Kennwort vergleichen. Das heißt, Die Vorteile von Tabellen sind, dass sie sehr schnell funktionieren, Sie jedoch viel Platz zum Speichern benötigen. Trotzdem gibt es Tabellen für die beliebtesten Hashes im Internet, die heruntergeladen oder sogar gekauft werden können.


Anmerkung des Autors der Inhaltsangabe: Wikipedia stimmt dem Sprecher nicht zu: "Die Rainbow-Tabelle ist eine spezielle Version von Suchtabellen zum Umkehren kryptografischer Hash-Funktionen unter Verwendung des Mechanismus eines vernünftigen Kompromisses zwischen der Suchzeit in der Tabelle und dem belegten Speicher." Das heißt, Es werden nicht die Hashes der beliebtesten Kennwörter gespeichert, die auf die Festplatte passen, sondern nur die Hashes einiger Kennwörter. Der Rest wird auf der Grundlage der vorhandenen Kennwörter berechnet. In der Tabelle sind mehrere Kennwörter pro Datensatz enthalten.


Salz


Folie 12.1.  Salz


Andererseits hat jeder Regenbogentisch sein eigenes Salz . Was ist Salz? Dies ist eine zufällige Menge von Bytes, die an das Passwort angehängt werden. Es wird in einem Tisch irgendwo in der Nähe des Hash gespeichert und schützt vor Regenbogentischen.


Folie 12.2.  Salz


Das heißt, Personen, die eine Basis mit gesalzenen Hashes in die Hände bekommen, müssen diese Hashes noch berechnen. Das Problem ist jedoch, dass diese Hashes sehr schnell berechnet werden und Salz hier nicht viel hilft.


Wie kann ich die Suche verlangsamen?


Folie 13.1.  Wie kann ich die Suche suchenamenamen?


Ein natürlicher Ausweg könnte darin bestehen, die Hash-Sortierung auf irgendeine Weise zu verlangsamen. Wie kann das gemacht werden?


Folie 13.2.  Wie kann ich die Suche suchenamenamen?


Der naivste Ansatz ist, dass wir eine Art Hash-Funktion, zum Beispiel sha256, verwenden und iterativ berechnen, d. H. Berechnen Sie den Hash, aus diesem Hash den Hash erneut usw. Sie können dies viele tausend und sogar millionenfach tun. Das Problem ist, dass wenn Sie eine solche Implementierung selbst schreiben, diese höchstwahrscheinlich langsamer ist als die Implementierung von Personen, die professionell mit dem Erraten von Passwörtern befasst sind.


Folie 14. Passwort-Hashing-Funktionen
SCrypt , Bcrypt , Argon2


Aus diesem Grund haben Kryptographen verschiedene Funktionen entwickelt, die speziell zur Verlangsamung der Kennwortsuche entwickelt wurden. Sie verbrauchen viel Speicher und alle möglichen modernen Prozessoranweisungen. Wenn das durch eine solche Funktion geschützte Passwort in die Hände von Angreifern fällt, müssen diese sehr leistungsfähige Hardware verwenden.


Folie 15. Argon2


Die modernste Argon2- Funktion funktioniert beispielsweise wie folgt: Im Diagramm sehen Sie, dass es viele verschiedene Speicherblöcke gibt, durch die der Hash ausgeführt wird. Er macht dies auf verschiedene Arten Roundtrip, der Speicher wird sehr intensiv genutzt, der gesamte Speicher wird genutzt. Es ist ziemlich schwierig, eine solche Funktion (Suchgeschwindigkeit) zu optimieren.


Folie 16. Passwort-Hashing-Funktionen


Diese Ansätze haben aber auch ihre Nachteile. Diese Funktionen sind speziell langsam gemacht, aber sie sind nicht nur für Angreifer besonders langsam, sondern auch für Sie besonders langsam. Sie werden Ihr Eisen laden. Diese Funktionen sind anpassbar, d.h. Sie können auswählen, wie viel Speicher verwendet wird, um den Hash eines einzelnen Kennworts zu berechnen, bis zu mehreren Gigabyte, wie viele Durchgänge auf diesem Speicher vorhanden sind. Wenn Sie diese Parameter sehr ernst nehmen, leidet Ihre eigene Hardware, und wenn sich viele Personen am System anmelden, müssen Sie nur erhebliche Ressourcen für den Kennwortschutz und einfache Kennwörter zuweisen. Nun, sehr einfache Kennwörter können immer noch abgerufen werden .


Facebooks Passwort Zwiebel


Folie 17. Und können Sie das Backend nicht laden?


Die Leute haben darüber nachgedacht und die Frage gestellt: Ist es möglich, dieselben Eigenschaften zu erzielen, ohne das Backend zu laden, ohne ihre eigenen Server zu laden?


Folie 18. Facebooks Passwort Zwiebel


Einer der Pioniere dabei war Facebook . Diese Zeilen, die Sie sehen, sind die historischen Phasen von Facebook, wie sie Passwörter schützten, zuerst gab es nur Passwörter, dann nahmen sie die alte md5- Funktion, die lange Zeit geknackt worden war, dann fügten sie dort Salz hinzu und nahmen den sha1- Hash, und dann passierte es Interessanterweise haben sie die Berechnung der hmac- Funktion (dies ist ein Hash mit einem Schlüssel) zum Remote-Dienst gebracht.


Folie 19. Facebook


Wie funktioniert es Es gibt ein Backend, es gibt einen Remote-Service. Es gibt eine Art geheimen Schlüssel für diesen Dienst. Eine Person betritt das Backend und gibt ihr Passwort ein. Dieses Kennwort wird mit dem in der Datenbank enthaltenen Salt gemischt, durch einen Hash ausgeführt und an den Dienst gesendet. Der Dienst nimmt seinen privaten Schlüssel, berechnet die hmac-Funktion und sendet alles zurück. Im Backend wird es in die Basis gestellt.


Folie 20. Facebook


Was gibt es? Wenn Facebook über eine Benutzerdatenbank verfügt, ist es nicht sinnvoll, Kennwörter darin zu sortieren, da sie keinen entfernten geheimen Schlüssel haben. Das Problem bei Facebooks Ansatz ist jedoch, dass sie große Probleme haben, wenn etwas mit ihrem privaten Remote-Schlüssel passiert. Sie können nichts dagegen tun, weil sie Hashes verwenden, sie verwenden hmac. Sie haben keine Möglichkeit, diese Situation irgendwie zu lösen, sodass Benutzer nichts bemerken und sich selbst in eine Ecke treiben.


Sphinx


Folie 21. Ist es besser?


Kryptographen schauten sich das Ganze an. Sie mochten die Idee, Remote-Dienste zu nutzen, und beschlossen zu überlegen: Ist es möglich, noch bessere Ergebnisse zu erzielen? Ist es möglich, ein ähnliches System zu erstellen, aber ohne die Minuspunkte, mit denen Facebook es ausgestattet hat?


Folie 22. Ist das Passwort eine Nummer?


Und sie beschlossen, dieses Problem wie folgt anzugehen: Was ist, wenn das Passwort oder der Passwort-Hash als Zahl dargestellt wird? Wenn wir das Wort passw0rd , besteht es aus 8 Bytes. In fast allen Programmiersprachen gibt es ganzzahlige Typen von acht Bytes, d.h. Im Prinzip ist dies ein und dasselbe. Das heißt, 8 Bytes, das Wort passw0rd und wir können es als reguläre Dezimalzahl darstellen. Was gibt uns das? Dies gibt uns eine völlig andere Handlungsfreiheit. Wir können Passwörter oder Hashes hinzufügen, multiplizieren und in andere Zahlen umwandeln. Wir können mit ihnen wirklich ernsthafte mathematische Operationen durchführen.


Folie 23.1. Sphinx - Passwort-Manager


Eines der ersten Systeme, das diese Technologie verwendete, war Sphinx . Sie erschien vor ein paar Jahren. Dies ist ein deterministischer Passwort-Manager. Es gibt viele verschiedene Programme wie keepass , bei denen Sie ein Hauptkennwort haben und für jede Site ein zufälliges generiert. Es gibt aber auch deterministische Dinge, bei denen Sie Ihr Hauptkennwort eingeben, die Site, zu der Sie gehen möchten, und dort etwas berechnet und für jede Site ein eindeutiges Passwort ausgibt. Es ist jedoch klar, dass, wenn dieses Hauptkennwort irgendwohin geht, alle Kennwörter Ihrer Websites dauerhaft kompromittiert werden.


Folie 23.2. Sphinx - Passwort-Manager


Wie ging Sphinx mit diesem Problem um? Er nimmt das Master-Passwort, nimmt die Domain, bei der Sie sich anmelden möchten, führt das Ganze durch einen Hash und wandelt es in eine Nummer um. Tatsächlich wird dort jedoch die elliptische Kryptographie verwendet. Der Einfachheit halber werde ich dies alles anhand gewöhnlicher Zahlen mit gewöhnlicher Mathematik erklären. Er verwandelt es in eine Nummer (nennen wir es a ) und was macht er als nächstes?


Folie 24. Sphinx - der "Manager" von Passwörtern, verkleiden!


Absolut wundervolle Sache, jedes Mal können wir eine große Zufallszahl r erzeugen. Wenn wir die Zahl a auf die Potenz von r erhöhen und einige Zeit später diese Zahl auf die Potenz invers zur Zahl r erhöhen, erhalten wir dieselbe Zahl a , oder? Das heißt, wir können etwas von Anfang an maskieren und dann entlarven.


Folie 25.1. Sphinx - Passwort-Manager


Und was macht die Sphinx? Wieder gibt es einen Benutzer, es gibt einen Remote-Dienst. Eine maskierte Nummer wird an diesen Remote-Dienst gesendet. Auf dem Remote-Dienst gibt es einen privaten Schlüssel. b Was macht er? Er multipliziert die gesendete Nummer a^r mit seinem geheimen Schlüssel b und sendet sie zurück. ( Anmerkung des Autors des Kompendiums: Auf der Folie wird die gesendete Zahl nicht mit dem privaten Schlüssel multipliziert, sondern auf den Grad des privaten Schlüssels angehoben, aber der Hauptpunkt ist ). Da die Nummer r jedes Mal anders ist, kann der Ferndienst nichts darüber sagen, welches Passwort und welche Domäne maskiert wurden, d. H. jedes Mal sieht er verschiedene Zufallszahlen. Und er multipliziert einfach mit seinem privaten Schlüssel b und sendet zurück.


Folie 25.2. Sphinx - Passwort-Manager


Der Benutzer entlarvt, was der Server ihm gesendet hat, und erhält eine Nummer - sein Hauptkennwort mit der Domäne multipliziert mit dem geheimen Schlüssel des Servers a^b . Es stellt sich heraus, dass er den geheimen Schlüssel des Servers nicht kennt, der Server nicht weiß, was der Benutzer ihm gesendet hat, aber am Ende erhält er auch eine Art deterministische Nummer. Jedes Mal, wenn Sie dieses Protokoll ausführen, ist die Verkleidung unterschiedlich, aber das Ergebnis ist immer das gleiche. Dieses Ergebnis kann dann wieder in ein Kennwort umgewandelt und zur Eingabe verschiedener Sites verwendet werden.


Folie 26. Sphinx - der "Manager" von Passwörtern


Wirklich wunderbare Technologie. Erstens können Sie große Passwörter generieren, d. H. es schützt vor dem Platzen. Zweitens, wenn ein Hacker Zugriff auf mehrere Passwörter erhält, kann er nichts über den Rest sagen, weil Sie werden unabhängig voneinander erzeugt. Drittens, wenn das Passwort des Benutzers irgendwo verschwindet, gibt dies auch nichts, da Hacker keinen geheimen Schlüssel haben. Viertens funktioniert es sehr schnell, weil Hier werden keine iterativen großen Hashes benötigt, d.h. Es werden buchstäblich 2-3 Multiplikationen durchgeführt und alles funktioniert sofort.


Dieses System hat jedoch seine Nachteile. Der Server, mit dem der Benutzer spricht, weiß nichts über ihn. Er empfängt einfach einige Zufallszahlen als Eingabe, multipliziert sie mit etwas und sendet sie zurück. Der Client weiß auch nichts über den Server, er sendet irgendwo etwas, empfängt das Ergebnis, es funktioniert - gut. Wenn jedoch etwas mit dem Dienst passiert, kann der Benutzer nichts dazu sagen, er hat keine Informationen dafür. Der geheime Schlüssel kann auch nicht geändert werden, nichts kann damit gemacht werden.


Pythia


Folie 27. Könnte es besser sein?


Könnte es besser sein?


Folie 28. ENDE-ZU-ENDE!


Kryptographen betrachteten dieses System und dachten, ist es möglich, das System zu verbessern und es durch Eigenschaften zu ergänzen, die es uns ermöglichen würden zu sagen, dass es den End-to-End-Prinzipien entspricht? Das heißt, Der Client kann mit dem Server kommunizieren, gleichzeitig aber auch authentifizieren und ihm in gewissem Maße vertrauen.


Folie 29.1. Pythia


Und sie kamen mit einem Protokoll namens Pythia .


Folie 29.2. Pythia


Es wurde von dem wunderbaren Mann Adam Everspaugh mit seinen Kollegen gemacht. Was macht es einzigartig? Erstens weiß der Dienst, wer das Passwort eingibt, d.h. Die Benutzer-ID wird nach dem Kennwort an den Server übergeben. Es kann sich um eine zufällige ID-Box handeln, die daneben liegt, oder nur um einen Benutzernamen. Nicht wichtig. Aber der Service weiß davon. Aber der Server weiß nicht nur ein wenig davon, er kann streng mathematisch beweisen, dass er es ist.


Folie 30.1. Pythia


Wie funktioniert es Es gibt ein Backend (eine Art Webdienst, Website) und einen Pythia-Dienst. Was macht das Backend und was macht der Service? Es gibt einen privaten Schlüssel k im Dienst, aber er überträgt auch seinen öffentlichen Schlüssel an das Backend. Das Service-Backend sendet nicht nur die maskierte Nummer a^r wie im Sphinx-Protokoll, sondern auch eine Art Benutzer- UserID ( UserID ). Der Dienst multipliziert die Benutzer-ID und das Kennwort mit seinem privaten Schlüssel und das Ergebnis (UserID, a)^(r*k) Benutzer-ID (UserID, a)^(r*k) sendet das Backend. Er sendet auch einen bestimmten Proof , mit dem das Backend den Server überprüfen kann, ob er nicht gehackt wurde und wie er reagiert.


Folie 30.2. Pythia


Dann gibt es eine Demaskierung und die Zahl y die sich als Ergebnis herausstellt, wird in eine Datenbank gestellt. In der Datenbank haben wir nicht nur einen Hash, sondern eine Zahl, einen Punkt einer elliptischen Kurve.


Folie 31. Pythia


Hier gibt es einige interessante Punkte:


  • Die Möglichkeit für den Server, die Benutzer-ID und das Kennwort in einer Nummer zu kombinieren. Dies wird als bilineare Operation oder bilineare Paarung bezeichnet. Dies ist eine relativ neue Mathematik, die seit kurzem verwendet wird. Sie hat alle Eigenschaften neuer Mathematiker in diesen 30 Jahren nicht vergangen, so dass jeder davon überzeugt wäre, dass damit alles normal ist.
  • Aber der Proof , der den Dienst sendet, ist eine ziemlich alte Technologie. Dies wird als Schnorr-Protokoll bezeichnet . Die Generierung öffentlicher Schlüssel ist die Multiplikation eines Basispunkts mit einem geheimen Schlüssel. Das Schnorr-Protokoll beweist, dass der geheime Schlüssel, der zum Generieren des öffentlichen Schlüssels verwendet wurde, verwendet wurde, um das Kennwort des Benutzers mit derselben Nummer zu multiplizieren. Dieses Protokoll gibt es schon seit langem, es wird häufig dort verwendet und es ermöglicht Ihnen, dies zu beweisen. Dies wird als Zero-Proof-Proof bezeichnet. Der Server zeigt seinen öffentlichen Schlüssel nicht an, aber es heißt, dass der von mir ausgeführte Vorgang von dem privaten Schlüssel ausgeführt wurde, auf den wir uns ursprünglich geeinigt hatten.

Folie 32.1. Vorteile von Pythia


Was sind die Vorteile dieses Systems?


Folie 32.2. Vorteile von Pythia


Und sie hat nicht viele davon.


  • Das System lädt das Backend nicht. Da das Backend alles tut, verwandelt es das Passwort in eine Zahl, verschleiert es, sendet es und entlarvt dann auch das Ergebnis.
  • Wenn Ihnen eine Datenbank mit solchen Nummern gestohlen wird, ist das Sortieren von Passwörtern auch ohne einen privaten Schlüssel nicht sinnvoll.
  • Der Pythia-Dienst kann Brute-Force-Versuche blockieren, was bedeutet, dass das Backend dies im Prinzip nicht tun muss. Wenn er sieht, dass sie unter derselben Benutzer-ID mehrmals versuchen, diesen Transformationsvorgang auszuführen, kann er ihn einfach abschneiden und an der Ratengrenze blockieren.
  • Dank der Verkleidung weiß der Dienst nichts über das Passwort. Jedes Mal, wenn eine neue Zufallszahl an ihn gesendet wird. Nur die Benutzerkennung bleibt konstant.
  • Dank ZKP (Zero-Knowledge Proof) weiß das Backend immer, dass es genau der Service war, den er einmal kontaktiert hatte.
  • Wenn Sie beispielsweise eine Datenbank mit Hashes und Salt haben, können Sie für Benutzer nahtlos auf eine solche Lösung migrieren. Sie können nicht einmal etwas bemerken. Anstelle des Benutzerpassworts nehmen Sie seinen Hash, fahren ihn in Pythia und verwenden in Zukunft einfach dieses Protokoll, erhalten die Nummer y und fügen es erneut in Ihre Datenbank ein. Der Hash kann dann gelöscht werden. Jedes Mal, wenn sich ein Benutzer bei Ihrem System anmeldet, wird dieses Protokoll ausgeführt. Als Ergebnis wird eine Nummer abgerufen, die Sie mit der Datenbank vergleichen. Das Authentifizierungssystem selbst bleibt unverändert Benutzer melden sich früher an und melden sich mit denselben Passwörtern an, auch mit schwachen. In diesem Fall ist das System viel sicherer.

Folie 33.1. Das ist noch nicht alles


Aber das sind nicht alle Leckereien.


Folie 33.2. Das ist noch nicht alles


Eine der Hauptfunktionen ist, dass selbst wenn der Pythia-Dienst gehackt wird, ein neuer privater Schlüssel generiert werden kann. In unserer Datenbank wird eine Nummer gespeichert, kein Hash. Wenn wir den alten Schlüssel als die Zahl k und den neuen als die Zahl k' , können wir eine Zahl berechnen, die als Aktualisierungstoken bezeichnet wird. Dazu multiplizieren wir die neue Zahl mit der Zahl umgekehrt zur alten. Mit diesem Update-Token können Sie die Datenbank für jeden Benutzer durchsuchen und diese Zahl y mit dem Update-Token multiplizieren. Nachdem Sie dies getan haben, arbeitet Ihr System weiterhin mit dem neuen privaten Schlüssel auf dem Remote-Dienst. Es passiert alles sofort. Wenn eine Katastrophe eintritt, wird Ihnen Ihre Datenbank mit Passwörtern gestohlen, Sie geben per Mausklick ein Update-Token frei und die Tatsache, dass Hacker Ihnen gestohlen haben, wird sofort unbrauchbar. Sie gehen einfach leise durch alle Datensätze im Hintergrund, aktualisieren sie und sie arbeiten mit dem neuen geheimen Schlüssel für Sie. Benutzer bemerken im Allgemeinen gar nichts. Das heißt, Die nahtlose Aktualisierung und sofortige Ungültigmachung der Kennwortdatenbank sind einige der wichtigsten innovativen Merkmale dieses Systems.


Folie 34.1. Bonus


Das ist aber noch nicht alles.


Folie 34.2. Bonus


Die Zahl, die in der Basis liegt, ist groß y , sie ist im Grunde groß und sieht ziemlich pseudozufällig aus, d.h. Es ist so einfach, es nicht aufzuheben. Wenn wir die Funktionen, die wir im Backend haben, beispielsweise auf Clientgeräte oder auf Telefone übertragen, können wir mit diesem y Schlüssel generieren. Wir haben dieses Ding BrainKey genannt. Dies bedeutet, dass der Benutzer das Kennwort irgendwo auf dem Telefon eingibt, es auch verschleiert und an den Remote-Dienst sendet. Der Dienst gibt eine bestimmte Zahl y und dann können Sie dieses y , um einige asymmetrische Schlüssel zu generieren. Somit kann der Benutzer von seinem Passwort ein Schlüsselpaar erhalten. Dies wird in allen Arten von BrainWallets verwendet . In diesem Fall geben Sie das Passwort ein und erhalten die dafür generierte Bitcoin-Brieftasche. Diese Anwendung ist jedoch nicht auf Kryptowährungen beschränkt, sondern eine digitale Signatur, einige Sicherungen und die Wiederherstellung von Konten, d. H. Überall dort, wo asymmetrische Kryptographie verwendet wird und asymmetrische Schlüssel benötigt werden. All dies kann verwendet werden, aber gleichzeitig ein Schlüsselpaar, und sie können je nach Bedarf so viele generiert werden, wie Sie möchten. Sie hängen also alle vom Passwort des Benutzers ab, und dies ist sehr praktisch.


Folie 35.1. Nachteile?


In einem Fass Honig ist es nicht ohne eine Fliege in der Salbe.


Folie 35.2. Nachteile?


Und das Merkmal dieser Technologie ist, dass sie sehr neu ist. Es wird eine elliptische Kurve für bilineare Operationen verwendet ( BLS12-381 ). Die Mathematik selbst existiert schon seit einiger Zeit, aber diese spezielle Kurve, die insbesondere in unserer Implementierung verwendet wird, wird nur in ZCash außer uns verwendet. Dementsprechend können Bibliotheken, die diese neue Mathematik verwenden, an den Fingern einer Hand gezählt werden. Um dies in den Produktionszustand zu bringen, müssen Sie einige Zeit und Mühe aufwenden. Trotzdem steht die Branche nicht still und all diese Nachteile sind vorübergehend. Infolge der ersten beiden Eigenschaften stimmt die Geschwindigkeit dieser bilinearen Operationen nicht sehr mit der modernen Mathematik überein, insbesondere der elliptischen, die wir alle jetzt verwenden, wenn wir das TLS-Protokoll verwenden, wenn wir einige Standorte verwenden. Dies sind ungefähr mehrere hundert Operationen an einem Dienst auf einem Kern. Tatsächlich hat uns das nicht aufgehalten, und im Frühjahr haben wir dieses Protokoll implementiert, es in der Produktion veröffentlicht, alle unsere Aufzeichnungen übersetzt und sie mit diesem Protokoll geschützt. Im Prinzip sind wir mit der Leistung für unsere aktuellen Aufgaben zufrieden. Bei Bedarf werden wir mit dem Pythia-Dienst einen weiteren Knoten errichten, und im Prinzip können Sie bereits mit all dem spielen.


PHE


Folie 36. Ist es noch besser?


Aber wir haben darüber nachgedacht, ob wir es noch besser machen können? Ist es möglich, die Eigenschaften, die Pythia bietet, mithilfe der Mathematik von gestern zu erreichen? Nicht morgen, nicht heute, sondern auch gestern, das seit vielen Jahren genutzt wird.


Folie 37.1. Einfache passwortgehärtete Verschlüsselungsdienste (PHE)


Und buchstäblich im Juli dieses Jahres veröffentlichten Wissenschaftler ein neues Protokoll namens Simple Password-Hardened Encryption Services, kurz PHE.


Folie 37.2. Einfache passwortgehärtete Verschlüsselungsdienste (PHE)


Dies ist Russell Lai , ein Wissenschaftler aus Europa.


Was ist der Vorteil dieses Service? Erstens wird die Standard- P-256- Kurve verwendet, die überall verwendet wird, in allen Browsern, Produkten und überall die Standardkurve, die es seit vielen Jahren gibt. Zweitens funktioniert dieses Ding ungefähr zehnmal schneller als Pythia und verwendet Standardprimitive. Es ist etwas schwierig, aber Sie können es mit Ihren eigenen Händen implementieren, ohne obskure Bibliotheken zu verwenden. Sie können OpenSSL oder Bouncy Castle verwenden .


Folie 38. Einfache kennwortgehärtete Verschlüsselungsdienste (PHE)


Aber es funktioniert etwas anders. Wieder gibt es ein Backend, es gibt einen PHE-Dienst. Das Backend hat einen öffentlichen Schlüssel, der Dienst hat einen privaten Schlüssel y . Im Gegensatz zu Pythia unterscheiden sich der Registrierungsprozess und der Passwortüberprüfungsprozess etwas. Was macht das Backend, wenn ein neuer Benutzer zum Dienst kommt und sich registrieren möchte? Von Anfang an fragte er den PHE-Dienst, bitte geben Sie mir einige Daten, die ich zur Registrierung verwenden kann, eine Art Registrierungsdatensatz. Der Dienst sagt OK und beantwortet das Backend mit den folgenden Dingen. Es wird zufälliges 32-Byte-Salz ( sNonce ) erzeugt. Basierend auf diesem Salt und seinem privaten Schlüssel y generiert es zwei Zahlen, nennen wir sie C0 und C1 . Es werden auch Beweise ( Proof ) generiert, dass diese beiden Zahlen oder 2 Punkte genau unter Verwendung seines privaten Schlüssels y unter Verwendung des Schnorr-Protokolls (wie in früheren Protokollen) generiert wurden. Das Backend prüft Proof . Hier gibt es noch kein Passwort. Was macht das Backend? Er seinerseits hat auch seinen eigenen privaten Client-Privatschlüssel x und nachdem er das Passwort vom Benutzer erhalten hat, macht er ungefähr das Gleiche wie der Dienst und fügt dort nur das Passwort hinzu. Es benötigt zufälliges cNonce (zufälliges Client-Salt), ein Passwort und generiert erneut 2 Zahlen HC0 und HC1 . Warum 2? Da der erste HC0 zur Authentifizierung verwendet wird und die zweite Zahl HC1 eine Zufallszahl M multipliziert mit dem privaten Schlüssel x ( MC ) HC0 . Die Nummer M ist ebenfalls 32 Byte groß und kann später zum Verschlüsseln von Benutzerdaten verwendet werden (wir haben Verschlüsselungsdienste) ( Hinweis des Autors des Hinweises: Der Verschlüsselungsschlüssel ist in diesem Fall MC ). Die MC Nummer ist erst als Schlüssel verfügbar, nachdem der Benutzer das richtige Passwort eingegeben hat. Bei der Registrierung stellt sich heraus, dass Sie nicht nur einen Autorisierungsdatensatz, sondern auch einen für jeden Benutzer eindeutigen Verschlüsselungsschlüssel erstellen können, mit dem Sie sein Profil, einige Daten und etwas anderes verschlüsseln können. Dann addiert das Backend einfach, was der Dienst gesendet hat und was er getan hat - addiert diese Punkte und erhält T0 und T1 . Im ersten Fall addiert es zwei ( C0 + HC0 ) und im zweiten drei ( C1 + HC1 + MC ). Und er setzt in die Basis 2 Salze ( sNonce , cNonce ) ein, mit deren Hilfe diese Zahlen erhalten wurden, und 2 Zahlen ( T0 und T1 ), die sich als Ergebnis der Summe herausstellten.


Folie 39. PHE-Login


Dementsprechend erfolgt der Benutzerauthentifizierungsprozess in umgekehrter Reihenfolge. Der Benutzer gibt sein Passwort im Backend ein. Das Backend berechnet HC0 und HC0 von dem, was es in der Datenbank hat, HC0 von T0 und sendet das resultierende C0 zusammen mit dem HC0 an den Dienst. Der Dienst, der das Serversalz kennt, berechnet den gleichen Punkt an sich und sieht so aus, als ob er das Backend gesendet hat oder nicht. Wenn es übereinstimmt, ist das Passwort korrekt und Sie können es mit der zweiten Nummer C1 beantworten, die er zusammen mit HC1 von der Nummer abzieht T1 und erhalten Sie den Verschlüsselungsschlüssel. Somit verschwindet das Passwort für den PHE-Dienst nicht einmal. Er verlässt nicht einmal das Backend. Es besteht aus einigen Punkten multipliziert mit dem privaten Schlüssel des Backends. Es existiert nicht einmal als solches, aber gleichzeitig kann der Ferndienst eine strikte Schlussfolgerung darüber ziehen, ob dieses Passwort korrekt ist oder nicht, und außerdem nachweisen, dass er alle Berechnungen mit seinem privaten Schlüssel y .


Folie 40.1. PHE-Funktionen


Welche Funktionen hat dieses System?


Folie 40.2. PHE-Funktionen


Das Passwort verlässt, wie gesagt, das Backend nicht. Im Gegensatz zu Pythia benötigen Sie jedoch einen privaten Schlüssel im Backend. Nun, wir brauchen und müssen irgendwo sparen. PHE hat alle Grundfunktionen von Pythia:


  • Sie können auch ein Update-Token ausgeben, wenn Ihnen mit dem privaten Schlüssel etwas passiert ist.
  • Sie können auch die gesamte Datenbank durchsuchen, aktualisieren und alles wird so sein, wie es war.
  • Suchschutz;
  • Der Dienst weiß nichts über das Passwort.
  • (Pythia , , , , PHE );
  • .

41. ...


...


42. passw0rd.io


… . . passw0rd.io . password , 18- , , zero trust, .. . , , .. Let's encrypt . , . CLI , . 2 SDK , GO .Net, .


43. Passwords are like underwear


:


  1. .
  2. .
  3. .

44.



, .


?


37. ?


45. ?


.


Q: , ! . , Pythia update token, ? private key . update token? Oder nicht?
A: , update token- .
Q: . - update token-, Private key ?
A: , update token-, , - , , , update token. , .. .
Q: , , , .
A: .. .


Q: , , , - Pythia - , , , ?
A: .
Q: ?
A: , Pythia . Das heißt, , .
Q: ( ) bcrypt ?
A: , , , .


Q: , . ? , …
A: password
Q: password ? Feuer! Im Allgemeinen.
A: 123456 , 12345, 123456.
Q: . Pythia , PHE .
A: , .
Q: . . ? production ?
A: . ! Pythia.
Q: Pythia, , ?
A: .
Q: , ?
A: .
Q: , , !
A: SDK, .


Q: , , , , .. - , ? ? ?
A: , , , .. PHE, , 5 2 , 2 5 . , . PHE ( , ), , 10 , .
Q: .. - , - ? ?
A: . rate limiting, , .
Q: .. , ?
A: .


Q: . , .. Pythia (), , ? ?
A: , , .
Q: , update ?
A: , Pythia , , - - , , , )


A: ? ! . , , PHE, , .


Schlussfolgerungen


PHE ( ) + — ( , , ) ( ). PHE , .


:


  • ( ) ;
  • ( ).

, .


Scratch Virgil Security , , !


( )?


UPD : Scratch . . , . .

Source: https://habr.com/ru/post/de434708/


All Articles