Die Idee, sichere Passwörter zu generieren und sich diese zu merken

    Ich denke, jeder weiß, wie wichtig es ist, komplexe, nicht übereinstimmende, unterschiedliche, regelmäßig geänderte Passwörter zu verwenden und wie schwierig es ist, sich diese Passwörter zu merken. Grundsätzlich gibt es eine relativ gute Lösung für dieses Problem - Programme, die die Passwortdatenbank verschlüsselt speichern. Ich möchte eine alternative Lösung vorstellen, die einige Vorteile gegenüber solchen Kennwortnotizen bietet. Insbesondere ist kein Zugriff auf eine Datei mit einer verschlüsselten Kennwortdatenbank erforderlich. Die Hauptidee besteht darin, sich ein sehr starkes Hauptkennwort zu merken und Kennwörter für einzelne Konten mithilfe von kryptografischen Funktionen daraus zu generieren. Für wen Details interessant sind - frage ich unter einer Katze.

    Passwortanforderungen

    Zunächst müssen Sie wissen, welche Anforderungen ein gutes Passwort erfüllen muss:
    1. Muss schwer zu fassen sein. Es sollte lang genug sein und Zeichen unterschiedlicher Art (große / kleine Buchstaben, Zahlen, Sonderzeichen) enthalten, damit es nicht durch eine umfassende Suche ausgewählt werden kann. Muss durch Wörterbuch, Wörterbuch mit Kombinationen und Mutationen abgewählt werden.
    2. Es muss für jedes Konto eindeutig sein, damit nicht unbefugter Zugriff auf andere Konten erfolgt, wenn das Kennwort von einem Konto aus kompromittiert wird.
    3. Muss sich regelmäßig ändern.

    Zuerst dachte ich mir, was man so machen könnte: Erinnere dich an eine zufällige Folge von Zeichen und docke für jede Site einen für diese Site spezifischen String an. Nehmen Sie zum Beispiel jedes dritte Zeichen der Site-Adresse. Kennwort für Habr (Eingang id . Tm t m. R u) sieht folgendermaßen aus: "Q9y: y> 1W.tr", wobei "Q9y: y> 1W" die Zeichenfolge ist, die auf allen Websites verwendet wird, und ".tr" ist ein Zusatz, der spezifisch für id.tmtm.ru ist. Tatsächlich gibt es zwei geheime Komponenten: den Generierungsalgorithmus selbst und eine zufällige Zeichenfolge. Um ein Passwort zu erhalten, müssen Sie beide kennen. Das Passwort ist ziemlich unempfindlich gegen Busting, Sie können den Zufallsablauf regelmäßig ändern - die Anforderungen (1) und (3) sind erfüllt. Das Problem ist, dass beide Komponenten relativ einfach zu erraten sind, da sie die Kennwörter von zwei Sites kennen.

    Allgemeiner Algorithmus

    Der nächste Schritt ist die Verwendung irreversibler kryptografischer Funktionen. Das Geheimnis hier wird nur eine zufällige Zeile sein - das Master-Passwort.
    Die anfänglichen Daten zum Generieren des Passworts sind:
    • Das Master-Passwort ist die geheime Linie für die langfristige Verwendung. Es muss komplex genug sein, um jeder rohen Gewalt auf einem Cluster standzuhalten.
    • Standort - Standortadresse / Computername - Anmeldestelle
    • Kennwortversionsnummer für diese Site - Erforderlich, wenn Sie das Kennwort für diese bestimmte Site ändern müssen.
    • Anmeldung - Dies kann nützlich sein, wenn sich mehrere Konten auf derselben Site / auf demselben Computer befinden (sodass die Kennwörter verschiedener Konten nicht übereinstimmen). Auch das Login wirkt wie ein Salz zum Schutz vor Aufzählungen nach Regenbogentabellen.
    Über Tabellen
    Dies bedeutet einen Angriff, wenn ein Eindringling in irgendeiner Weise (Phishing, Social Engineering, Sicherheitslücke auf der Website, ...) Kennwörter von einer beliebigen beliebten Website erhalten kann. In diesem Fall kann es Regenbogentabellen generieren und sortieren, um Hauptkennwörter für Benutzer zu erhalten, die einen solchen Kennwortgenerator verwenden, das Anmeldefeld jedoch nicht ausfüllen. Natürlich ist ein solcher Angriff nur dann sinnvoll, wenn die Verwendung dieses Passwortgenerators weit verbreitet ist.

    Diese Daten werden dem Eingang der Hash-Funktion zugeführt, der Ausgang wird als lange Ganzzahl betrachtet, die in einem 95-Zahlen-System codiert ist. Für eine 160-Bit-Hash-Funktion erhalten wir eine pseudozufällige Zeichenfolge mit einer Länge von 25 Zeichen. Es ist besser, den Hauptcharakter zu falten, weil es kann weit von allen Werten entfernt sein (genauer gesagt nur 5 Werte). Wir erhalten 24 pseudozufällige Simovol.
    Genauer gesagt über die Verteilung der Zeichen
    Tatsächlich ist die Wahrscheinlichkeitsverteilung über die möglichen Werte der Zeichen dort nicht vollständig einheitlich, da 2 ^ 160 keine Potenz von 95 ist. Es stellt sich heraus, dass einige der Zeichen mit einer höheren Wahrscheinlichkeit erscheinen als andere. Diese Ungleichmäßigkeit nimmt jedoch sehr schnell (exponentiell) von den höchsten zu den niedrigsten Stellen ab. (Unter der Annahme, dass die Hash-Funktion ideal ist und alle Werte ihrer Ausgabe gleich wahrscheinlich sind), erscheinen Symbole an der 24. (höchsten) Position mit Wahrscheinlichkeiten von 1. 1 58011% und 1. 0 51510%. Auf der 23. Position - mit Wahrscheinlichkeiten 1,05 3 724%, 1,05 1 753% und 1,05 1 510%. Auf dem 22. Platz - mit Wahrscheinlichkeiten 1.0526 5 2%, 1.0526 3 9% und 1.0526 29% Weiterhin wird der Unterschied noch geringer sein. Bei Passwörtern spielen solche Abweichungen von der Gleichverteilung praktisch keine Rolle.


    Konkrete Umsetzung

    Hier liegt ein einfaches Konsolenprogramm in Python3, das so Passwörter generiert.
    Sie können eine der folgenden Optionen angeben:
    -m - Generiert viele Kennwörter aus einem Hauptkennwort (um das Hauptkennwort nicht mehrmals einzugeben).
    -r - ein zufälliges Passwort generieren (die Quelle der Zufälligkeit sind die Systemgeneratoren für zufällige Sequenzen und eine über die Tastatur eingegebene Zeile);
    ohne Parameter - ein Passwort generieren und beenden.
    Unmittelbar nach Eingabe des Master-Passworts zeigt das Programm einen 2-Byte-Hash aus dem Master-Passwort an. Dies ist erforderlich, um die Richtigkeit der Eingabe zu überprüfen. Wenn der Hash nicht bekannt zu sein scheint, wurde das Master-Passwort falsch eingegeben.
    В этой программе используются 2 разные хэш-функции (ripemd160 и sha512) и несколько более замороченный порядок скармливания им исходных данных, чем просто конкатенация строк. Использование двух функций — ход для параноиков — позволяет (насколько я вижу) сохранить криптостойкость алгоритма даже при обнаружении очень серьёзной уязвимости в одной из них (понятно, что это практически невероятно, но накладные расходы на такую «параною» тоже минимальны).
    Точный алгоритм
    SitePwd = ripemd160(ver2str(version) + sha512_hex(ver2str(version) + master_password + site + login) + site)
    Все текстовые строки кодируются UTF-8; ' + ' означает конкатенацию строк.
    Функция ver2str(n) возвращает строку, состоящую из записанных подряд n+1 последовательных чисел от n до 0, например:
    ver2str(0) = '0'
    ver2str(4) = '43210'
    ver2str(12) = '1211109876543210'

    SitePwd дальше преобразуется в длинное целое число, которое записывается в 95-ричной системе счисления. В качестве 95-ричных цифр используются символы из массива chars (всего 95 символов):
    chars = "`1234567890-=\~!@#$%^&*()_+|qwertyuiop[]QWERTYUIOP{}asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>? "
    (Ohne externe Anführungszeichen ist das letzte Zeichen ein Leerzeichen.) Die
    24 niedrigstwertigen Bits des empfangenen Datensatzes, die von links nach rechts vom niedrigstwertigen bis zum ältesten angezeigt werden, sind das generierte Passwort.


    Praktisch Probleme mit solchen Passwörtern

    Für einige Dienste gelten Einschränkungen hinsichtlich des Zeichensatzes, der im Kennwort enthalten sein kann. Wenn das generierte Passwort verbotene Zeichen enthält, müssen Sie diese überspringen. Dementsprechend müssen Sie sich bei der späteren Nutzung des Dienstes merken, welche Zeichen übersprungen wurden.

    Vergleich mit Passwortnotizen

    Vorteile eines solchen Algorithmus gegenüber Passwortnotizen:
    • Keine Notwendigkeit, eine Kennwortdatenbank zur Hand zu haben. Ich brauchte ein Passwort, um es auf einem anderen Computer zu bekommen - ich habe gerade das Programm vom Github heruntergeladen, mein Master-Passwort eingegeben - und die gesamte Passwortdatenbank dabei.
    • Es gibt keine Datei, die ein Angreifer stehlen und entschlüsseln könnte. Die Wahrheit ist, dass in einem guten Memo mit einem guten Master-Passwort auch das Entschlüsseln einer Passwort-Datenbank fast unglaublich ist.
    • Selbst wenn Sie vollen Zugriff auf Ihren Computer haben (mit dem Lesen aller Dateien und dem Installieren von Keyloggern), muss der Angreifer die Daten Ihrer Konten erraten (insbesondere die, auf die nicht von diesem Computer aus zugegriffen wird).
    • Es garantiert die Verwendung von unterschiedlichen und zufälligen Passwörtern. Und Sie müssen nicht jedes Mal ein Passwort erfinden.

    Vorteile von "Auswendiglernen":
    • Wenn das Hauptkennwort gefährdet ist, muss der Cracker immer noch eine verschlüsselte Datei abrufen, um auf die Konten zugreifen zu können. Im Falle eines Passwortgenerators muss er nur die Details der Konten herausfinden, die die generierten Passwörter verwenden. Richtig, IMHO, wenn ein Angreifer ein Hauptkennwort erhalten konnte, ist es wahrscheinlich auch für ihn einfach, eine verschlüsselte Kennwortdatenbank zu erhalten.
    • Sie können vorhandene Passwörter verwenden.
    • Sie ermöglichen es Ihnen, sich ein Passwort einer beliebigen Struktur aus einem beliebigen Zeichensatz zu merken. Es gibt kein Problem mit Passworteinschränkungen auf bestimmten Sites.

    Was weiter

    Ich möchte hier auch eine Kontodatenbank hinzufügen. Damit war es notwendig, nur ein Master-Passwort und optional ein Passwort zum Entschlüsseln der Datenbank einzugeben; Der Site-Name, die Anmeldung, die Versionsnummer, die Kennwortlänge und die Liste der übersprungenen Zeichen können aus der Datenbank entnommen werden.

    Ähnliche Programme

    In den Kommentaren wurde darauf hingewiesen, dass es noch
    Folgendes gibt: MasterPassword - ein Hack von FanKiLL hawk
    pwdhash.com - dasselbe in JavaScript von einem Team der Stanford University. Es gibt Plugins für Browser. Nach dem Hashing wird das Passwort so ergänzt, dass es den Standard-Komplexitätstest besteht.

    Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte komm rein .

    Wie lösen Sie das Problem, sich Kennwörter zu merken?

    • 36,9% Verwendung starker Passwörter , die in dem Kennwort gespeichert werden zapominalka 138
    • 19,8% Für jedes Konto erstelle ich ein Passwort nach einem bestimmten Mnemonikschema 74
    • 2,6% Für jedes Konto habe ich ein Passwort eingegeben, das mir in den Sinn gekommen ist 10
    • 3,2% Ich benutze eine Hash-Funktion, um Passwörter zu generieren (wie im Artikel) 12
    • 20,6% Ich verwende ein Passwort für [fast] alle Konten 77
    • 44,5% Ich verwende ein Passwort für unwichtige Konten, für wichtige auf andere Weise 166
    • 6.4% Ich speichere Passwörter auf einem Blatt Papier 24
    • 2,1% Eine weitere Option (ich werde in den Kommentaren schreiben) 8

    Jetzt auch beliebt: