Passwörter sind die älteste Authentifizierungsmethode in der Informationstechnologie, die bis heute weit verbreitet ist. Leider ist es einfach unmöglich, Passwörter für alle Internetressourcen im Speicher zu behalten, vorausgesetzt, sie sind alle unterschiedlich und komplex! Hier helfen Passwortmanager einer Person und übernehmen diese Aufgabe selbst: Eine Person merkt sich nur ein Hauptpasswort, das den Zugriff auf alle anderen ermöglicht.
Die vorhandenen Kennwortmanager haben mir nicht gefallen: Es ist unpraktisch, die Kennwortdatenbank zwischen verschiedenen Geräten und Betriebssystemen zu synchronisieren. Außerdem sind Managerprogramme häufig offen schlecht geschützt . Nachdem ich Artikel über Kryptographie gelesen hatte, kam mir der Gedanke: Warum nicht einen Passwort-Manager erstellen, der diese anstelle des Speicherns von Passwörtern berechnet?
Die erste Möglichkeit, diese Idee umzusetzen, sind kryptografische Hash-Funktionen. Auf den ersten Blick ist alles cool: Wir wählen eine dauerhafte Funktion (z. B. SHA-3 in der 224-Bit-Version), geben ihr das Hauptkennwort qwerty und den vk- Kontotyp als Eingabe und erhalten sofort 56 Zeichen aus dem Satz 0123456789abcdef. Ich habe sofort zwei ähnliche Projekte gefunden: gehackt und möglicherweise gehackt... Bei diesem Ansatz gibt es ein großes Problem: Kryptografische Hash-Funktionen sind unter anderem so konzipiert, dass sie so schnell und ressourcenschonend wie möglich sind. Daher ist es möglich, ein Wörterbuch oder einen vollständigen Brute-Force-Angriff des Hauptkennworts mithilfe des abgefangenen Kennworts für einen Standort auf der CPU (relativ langsam), GPU, zu arrangieren , FPGA (viel schneller), ASIC (sehr schnell). Um solche Angriffe auf gängige Hashing-Algorithmen ohne Salting auszuführen, können auch Regenbogentabellen verwendet werden, was den Hacking-Prozess auf der CPU erheblich beschleunigt.
Glücklicherweise gibt es eine andere Implementierungsoption - Funktionen zum Abrufen von Schlüsseln. Kurz gesagt, sie führen Hashing durch, jedoch relativ langsam (z. B. eine Sekunde auf einem normalen Prozessor) und einen relativ hohen Ressourcenverbrauch (z. B. 16 Megabyte RAM), um Brute-Force- und Brute-Force-Angriffe so schwierig wie möglich zu machen. Unter den modernen PBKDF2- , bcrypt- und scrypt- Funktionen, die mir vertraut sind , sah scrypt am besten aus: Es wurde unter Berücksichtigung der Erfahrungen der ersten beiden erstellt, widerstand erfolgreich dem Computing auf GPUs und Mikroschaltungen (sowohl FPGA als auch ASIC) und wurde für Flexibilität bei der Anpassung für jede Aufgabe entwickelt. Ich habe über die Umsetzung dieses Projekts nachgedacht, aber aus irgendeinem Grund habe ich es in den Hintergrund gedrängt. Und vergebens.
Kryptograph Nadim Kobeissimachte gerade einen solchen Passwort-Manager npwd in JavaScript (funktioniert als Desktop-Anwendung über Node.JS). Ich habe das Dienstprogramm auf einem Linux- und Windows-Computer sowie auf einem Linux-Laptop installiert, es im Kampf eingesetzt und es hat mir sehr gut gefallen. Sie geben das einzige Hauptkennwort und den Kontotyp (z. B. "Twitter") in die Anwendung ein. Nach einigen Sekunden enthält Ihre Zwischenablage bereits ein speziell für dieses Konto berechnetes komplexes Kennwort und hacken Ihr Hauptkennwort (lesen Sie: alle Ihre Kennwörter) durch Passwort für ein Konto wird sehr, sehr schwierig sein.
Es gab aber auch ein Problem. Die Windows-Version gab nach ein paar Sekunden wirklich ein Passwort heraus, aber unter Linux (auch auf demselben Computer!) Dauerten die Berechnungen 15 Sekunden, was ärgerlich war. Zuerst habe ich nur eine Konstante reduziert, um das Master-Passwort weniger sicher zu machen, aber dann dachte ich mir - warum nicht die Anwendung in C umschreiben, weil sie wahrscheinlich viel schneller funktioniert! Ich war besonders ermutigt von dem Gedanken, dass ich lange Zeit einen Plan für dieses Projekt hatte, aber ich war langsam und jemand hatte ihn vor mir umgesetzt.
Nach ein paar Tagen gemächlicher Arbeit habe ich meinen eigenen Passwort-Manager cpwd erstelltvoll kompatibel mit dem Original. Es hat Spaß gemacht! Nach einer kleinen Optimierung gelang es mir, die gewünschte hohe Geschwindigkeit zu erreichen. Ich habe nicht versucht, cpwd nach Windows zu portieren, aber es sollte einfach sein. Auf der GitHub-Seite des Projekts habe ich eine Sammlung von Links zu ähnlichen Projekten in der akademischen Welt und darüber hinaus gesammelt - es stellte sich heraus, dass die Idee tatsächlich ziemlich alt ist.
Natürlich ist dies keine Silberkugel, aber es funktioniert für mich. Bei der Verwendung bin ich auf ein Problem gestoßen: Einige Websites haben interessante Anforderungen an Kennwörter wie "nicht mehr als 20 Zeichen", "Es muss einen großen Buchstaben, einen kleinen Buchstaben, eine Zahl und ein Sonderzeichen geben". Daher erfordert das von npwd / cpwd generierte Kennwort manchmal manuelle Arbeit vor der Eingabe ... Glücklicherweise gibt es nicht viele solcher Websites.
Das Original wurde am 7.08.15 in meinem Blog veröffentlicht. 5 Jahre sind vergangen und ich benutze dieses Dienstprogramm immer noch.