Gegenmaßnahmen gegen Passwort-Angriffe via Wörterbuch oder Brute Force

Hintergrund: Wie ein Backup Taste funktioniert

In TKLBAM die Backup-Schlüssel ist ein Geheimnis mit einer Passphrase, die an den Hub hochgeladen verschlüsselt. Entschlüsseln der Backup-Schlüssel liefert das Geheimnis, das an Doppelzüngigkeit übergeben wird (und schließlich zu GnuPG) als der symmetrische Schlüssel, mit dem Backup-Volumes verschlüsselt auf Backup-und entschlüsselt wieder verwendet werden.

Wenn Sie ein neues Backup erstellen oder ändern Sie die auf einer bestehenden Backup-Passwort, wird eine neue Backup-Taste, um den Hub, wo es in das Schlüsselfeld für die Backup-Datensatz gespeichert hochgeladen.

Beim Wiederherstellen Downloads tklbam die Backup-Schlüssel aus dem Hub-und entschlüsselt sie lokal auf dem Computer, der die Wiederherstellung. Beachten Sie, dass der Hub können Sie nur die Backup-Taste für Backup-Datensätzen, auf die Sie Zugriff haben (z. B., Sie sind der Besitzer) herunterladen.

Nur Sie können entschlüsseln Ihre Passphrase geschützt Backups

All dies ist wichtig, weil es, dass, solange Sie ein Passwort verwenden, um den Schlüssel zu schützen bedeutet, auch der Hub nicht entschlüsseln können Sie Ihre Backups können nur Sie – vorausgesetzt, Sie erinnern die Passphrase (oder ersatzweise zumindest dem Treuhandkonto Schlüssel abgelegt an einem sicheren Ort).

In anderen Worten, geschieht die Entschlüsselung der Backup-Schlüssel lokal und an keiner Stelle die Passphrase erreichen Hub, so dass wir nicht entschlüsseln können Ihre Backup, auch wenn Sie uns gebeten,. Weder kann ein Angreifer theoretisch die Hub oder eine Regierungsbehörde, die Tritte hinunter kommt unsere Tür mit einem Gericht rechtfertigen beeinträchtigt wurde.

Das Problem mit kryptographischen Passphrasen

Aber warten. Wenn ein Angreifer lokalen Zugriff auf den Schlüssel, ist seine Fähigkeit, Wörterbuch-Attacken ausführen, um die Passwort des Schlüssels nur durch die Rechenressourcen er um sich werfen können, beschränkt.

Denken Sie daran, es gibt einen entscheidenden Unterschied zwischen einem Passwort zur Authentifizierung verwendet Zwecke (z. B. um einen Online-Dienst) und eine für kryptographische Zwecke verwendet Passphrase.

Im Gegensatz dazu wird ein Passwort für die Authentifizierung verwendet, um einen Online-Dienst nicht erforderlich, so stark sein wie ein Passwort, das kryptografisch denn mit einem Online-Dienst verwendet, auch wenn keine explizite Gegenmaßnahmen verwendet werden (zum Beispiel IP-Blacklisting von zu vielen fehlgeschlagenen Versuchen ) gibt es noch ein Netz zwischen dem Angreifer und dem Service. Die verfügbare Bandbreite Orten eine schwächende oberen Limit, wie viele Passwörter pro Sekunde ausprobiert werden. Auch in der Praxis gibt es normalerweise Engpässe in anderen Orten, die langsamer ein Online-Wörterbuch-Angriff sogar noch weiter hätte.

Aber eine Passphrase verwendet für kryptographische SSL-Zertifikate Zwecke nimmt der Angreifer Zugriff auf den Geheimtext, und das ist ein ganz anderes Spiel.

Um besser zu verstehen, was wir zu tun haben, hier ist die Formel für die Berechnung der Größe der Passphrase Suchraum:

log(howmany_different_possible_values ** howmany_values) / log(2)

Betrachten wir zum Beispiel eine typische 6 Buchstaben vergessen.

6 ASCII druckbaren Buchstaben = maximal 42-Bit Suchraum.

Das ist ein Maximum von 4 Billionen Kombinationsmöglichkeiten. Welche klingt nach einer Menge. Aber es ist wirklich nicht, denn:

  1. Sie können sich wahrscheinlich Squeeze-out über 1 Million lokalen Passphrase Tests pro Sekunde von einem modernen Multi-Core-Workstation, vorausgesetzt, ein typisches Passwort-Verschlüsselung Methode verwendet wird.
  2. Dies ist eines jener Probleme, die trivial zu parallelisieren sind.

    Wenn Sie nur 100 Rechnern (zB in der Wolke) mieten konnte man ausführlich über 42-Bit-Suche in etwa 5 Tage.

    Und denken Sie daran, heute die bösen Jungs haben oft Millionen von Computern zur Verfügung über Botnetze.

  3. Die Leute sind sehr schlecht bei der Wahl wirklich zufällige Passwörter. Ein cleverer Angreifer wird die niedrig hängenden Früchte zuerst versuchen, so werden sie wahrscheinlich, um herauszufinden, Ihr viel früher als mit Brute zwingen blind durch die volle Suchraum Passphrase.

    Zum Beispiel, sagen Sie, eine 6 Buchstaben Passwort ist viel zu kurz für einen Schlüssel und stattdessen die Sie verwenden einen längeren zufällige Kombination von 10.000 gemeinsame englische Wörter:

    • 2 Worte = 18-Bit Werte in Suchraum.
    • 3 Worte = 27-Bit Werte in Suchraum.
    • 4 Worte = 36-Bit Werte in Suchraum.

    Englisch Worte sind nicht sehr zufällig so Ihre “paranoid” 3 Wort, 17 Buchstaben Passphrase kann tatsächlich einfacher zu knacken als eine wirklich zufällige Kombination von nur 4 ASCII druckbare Zeichen (28-Bit).

    Zum Vergleich, mal sehen, was passiert, wenn Sie 6 zufällige einzelnen Zeichen verwendet werden.

    Wenn Sie nur zufällige Kleinbuchstaben der Suchraum bis 27-Bits, die 32.768-mal leichter zu durchsuchen, als die volle 42-Bit-Suchraum von 6-Brief ASCII printable Passwörtern wird verringert.

    Wenn Sie nur zufällige Kleinbuchstaben und Zahlen, ist der Suchraum 30-Bits, die 4.096 Mal leichter durchsuchbar ist.

    Wenn Sie gerade zufällig Groß-und Kleinbuchstaben und Zahlen, ist der Suchraum 35-Bit, 128-mal leichter durchsuchbar ist.

Die gute Nachricht ist, dass jedes Bit der Suchraum der Aufwand für den Angreifer verdoppelt.

Die schlechte Nachricht ist, dass es eine wirklich zufällige Kombination von 11 Großbuchstaben, Kleinbuchstaben und Zahlen nimmt, nur um 64-Bit-Wert von Suchraum zu erreichen, und eine 10M stark Botnetz könnte sogar, dass Crack in durchschnittlich 10 Tagen.

Bottom line: Auch Ihre vermeintlich ultra-paranoid Passphrase (zB r0m4n14nv4mp1r344rdv4rkn3st) von 4 zufällige Wörter aus einem Wörterbuch von 150K Worten (in l33t sprechen) hat nur etwa 50-Bit Werte der Entropie, obwohl sie 27 Zeichen lang. Sicherheitsupdates Ein 10.000-Botnet könnte, dass in etwa einem Tag zu knacken.

Gegenmaßnahmen: Erhöhung Rechenaufwand

Obwohl es unmöglich ist, diese Angriffe völlig verhindern Ich habe ein paar von Gegenmaßnahmen in die Wege TKLBAM erzeugt Passphrase geschützt Schlüssel implementiert:

1) Der erste Trick: Erhöhung, wie rechenintensiv ist die Chiffre-Schlüssel aus dem Passwort berechnet wird:

Das Prinzip besteht darin, dass die Berechnung eines Hash-Kosten CPU-Zeit so durch die Fütterung der Hash in sich selbst oft genug haben wir linear ansteigen kann, wie teuer es um die Passphrase-Raum, um den Schlüssel-Raum-Karte ist.

Zum Beispiel, Wiederholung der Hash-Routine 100.000 Mal dauert etwa eine viertel Sekunde auf einen der Kerne von meinem Computer. Wenn ich alle 4 Kerne nutzen diese Grenzen mir zu 16 Chiffre-Schlüssel pro Sekunde erzeugen. Runter von 1,6 Mio. Chiffre Schlüssel pro Sekunde. Also das ist ein Weg, um drastisch reduzieren die praktische Umsetzbarkeit eines Wörterbuchs oder Vollständigkeit Brute Force Attacke.

Beachten Sie, dass ein Angreifer kann nicht umgangen werden diese Berechnung durch die Suche durch das Schlüsselloch Raum direkt, denn selbst nachdem wir die Kosten für die Erzeugung der Passphrase Raum eine 100.000-fach erhöht, die Kosten zu versuchen, bruteforce die 256-Bit-Schlüssel-Raum direkt noch unzählige Billionen mal größer.

Die Schwäche dieser Technik ist, dass ein Angreifer müsste die Kosten für die Kartierung der Passphrase-Raum (zB ein Wörterbuch), um den Schlüssel-Raum nur einmal bei dem Versuch, mehrere Schlüssel knacken zu zahlen.

2) Der zweite Trick: Erhöhung, wie rechenintensiv es zum Entschlüsseln der Schlüssel-Paket wird durch eine Erhöhung der Anzahl der Zeiten, die wir passieren sie durch Verschlüsselung:

def _cipher(cipher_key):
    return AES.new(cipher_key, AES.MODE_CBC)

ciphertext = _repeat(lambda v: _cipher(cipher_key).encrypt(v),
                     _pad(plaintext), cipher_repeats)

Dieser Teil der Rechenaufwand ist der Schlüssel-spezifischen so Trading-off-Speicher vor, berechnen die zugeordneten Schlüssel-Raum wird nicht gutes Webdesign helfen Ihnen bei diesem Schritt.

Hinweise zur Umsetzung

Embedding wiederholen Parameter in der Schlüssel-Paket

Die aktuelle Implementierung hardwires 100.000 Wiederholungen des Hash, und weitere 100.000 Wiederholungen der Chiffre.

Dies macht die Suche durch die Passphrase-Raum rund 200.000-mal teurer. Auf meinem Rechner dauert es 0,5 Sekunden zum Verschlüsseln oder Entschlüsseln eines Schlüssels (pro Kern).

Ich bin mir nicht sicher, das sind die optimalen Parameter, aber sie sind in den Ball Park, wie viel Sie können den Rechenaufwand zu erhöhen, bevor Usability leidet.

Das ist nicht zu sagen, man konnte nicht mehr gehen, aber es gibt eine praktische obere Grenze für das auch. Wenn Sie bereit sind, über eine Minute für die Schlüsselgenerierung / Entschlüsselung warten bist du könnte der Rechenaufwand etwa 100 mal Steigerung gegenüber und würde Ihnen 100 Mal besser zu schützen oder lassen Sie ein Kennwort, dass 100-mal schwächer ist mit den gleichen Schutz verwenden .

Nur für den Fall, damit die Anzahl der Wiederholungen zu ändern oder vom Anwender konfigurierbar in Zukunft der Schlüssel Formatierer Routine bettet das wiederholen Parameter in den unverschlüsselten Teil des Schlüssels Paket. Dadurch kann der Schlüssel Parsingroutine, um diese Parameter aus den Schlüssel selbst zu extrahieren, so kann es genauso gut analysiert eine 0,5 Sekunden Schlüssel (dh der aktuelle Standard) als 5 Sekunden oder 50 Sekunden drücken.

Einbetten einer Version id

Nur um sicherzugehen, den Schlüssel-Format ist zukunftssicher, ich bin auch die Einbettung einer Version id hinein.

Einbetten einer Version kostet fast nichts (ein zusätzliches Byte) und macht es einfacher, inkompatible Änderungen an den Schlüssel-Format unterstützen die Notwendigkeit entstehen sollte (zB Wechsel von cipher / hash, das Ändern des Formats, etc.).

Worst-Case-Szenario, erhöhen wir die Version und Umsetzung eines neuen unvereinbar Schlüssel-Format. Alte Clients können nicht auf den neuen Schlüssel-Format verstehen, aber zumindest nicht zuverlässig, und neue Kunden in der Lage, sowohl neue als auch alte Schlüssel-Formate unterstützen.

Letztelich dreht sich alles um eine gute Zahnzusatzversicherung. Diese kann man auch online abschließen.