Passwortsicherheit, Länge, Komplexität

Die Sicherheit von Passwörten = Aufwand für Angreifer um das Passwort herauszufinden.

Angriffsmethoden auf Passworthashes im Vergleich

Methoden zum Herausfinden:BeispielErfolgAufwand
Wissensbasierter AngriffName des Haustiers, der Ehefrau, Geburtstage...?gering
Wörterbuch-Anrgiffenicht mehr als 10..20 Mio Wörter,sehr effizient?gering
Brute ForceAlle Kombinationen von Zeichen ausprobierenSICHERsehr hoch
Beim Erraten mit Brute Force ist Erfolg sicher. Wörterbuchangriffe funktionieren nur bei Passwörtern die man in Wörterbüchern findet, sind aber äusserst schnell durchführbar.

Abwehrmassnahme des Benutzers

Aufwand zum Erraten hoch treiben. Es gibt dazu folgende Parameter:

*kann der Benutzer meist nicht wählen.

Zeichenraum

RaumGrösse
a-z 26
a-z,A-Z 52
a-z,A-Z,0-9 64
a-z,A-Z,0-9,$%&/()=... 88*
* Der Raum ist theoretisch sehr gross wenn man alle UTF-8 Zeichen voraussetzen würde. Es lassen sich aber rein praktisch nur Zeichen verwenden die man an der jeweiligen Tastatur direkt eingeben kann. Übliche Sonderzeichen sind ! $ % ( ) * + , - . / : ; = ? @ [ \ ] _ { | } also 24 an der Zahl.

Brute-Force Aufwand

Die mögliche Kombination aus gegebenem Zeichenraum und Wortlänge muss möglichst so gross sein, dass das ausprobieren länger dauert als die geschützte Information von Wert ist. Die Anzahl der möglichen Passwörter X berechnet sich aus Länge N und Zeichenraum K : X = KN Das bedeutet: Die Anzahl steigt linear mit der Zeichenraum K, aber exponetiell mit der Länge N !

Beispiel: Wortlänge N = 12 Zeichen mit dem Zeichenraum K = 64 (a-z,A-Z,0-9) X1 = 6412 = 4 722 366 482 869 645 213 696 = 4,7×1021 Wird der Zeichenraum K vergrössert (übliche Sonderzeichen dazu) erhöht sich die Anzahl auf: X2 = 8812 = 215 671 155 821 681 003 462 656 = 215×1021 47-Fach

Wird die Länge N nur um eins erhöht, erhöht sich die Anzahl auf: X3 = 6413 = 302 231 454 903 657 293 676 544 = 302×1021 65-Fach Also: Mit Länge gewinnt man mehr Sicherheit als mit Sonderzeichen.

Was kostet es den Angreifer?

Nichts ist Umsonst. Der Aufwand für einen Passwortbruch kostet Geld. Angenommen der Angreifer arbeitet mit einem PC mit einer GPU. Und dieser dreht dann bei Vollast mit 500 W am Stromzähler. So kostet das incl. der Anschaffung über 5 Jahre Nutzungsdauer ca 4,– EUR pro Tag. Die Rechenleistung liegt dan in der Grössenordnung von 50 Millionen Hashes / s (MD5). Supercomputer kommen in die Grössenordnung von 50 Billiarden (50×1015) Hashes/s, damit wird es aber nicht günstiger, nur schneller.

Ein konkretes Beispiel

Passwort X2 erfordert 215×1021 Hashberechnungen. o.g. PC benötig dafür 4,3×1015 s. also 136 Mio Jahre und es kostet 199 Mrd EUR. Mit einem Supercomputer geht das 1 Mio mal schneller, also 136 Jahre, aber wie erwähnt nicht günstiger. Daran sieht man, dass sich Brute-Force nur für kurze Passwörter eignet. Es sind schon sehr viel längere Passwörter in sehr viel kürzerer Zeit geknackt worden, aber mit Wörterbuch-Angriffen.

Bitcoin-Netzwerk wird mit einer Leistung von 69×1018 SHA256 Hashes/s (2019) angegeben. Das kann man zwar nicht einfach mal so zum Passwortknacken umfunktionieren, aber wenn man das könnte, wäre dieses Passwort in einer Stunde geknackt.

Stolperfallen, Angriffspunkte

Bequemlichkeit: häufigster Schwachpunkt der meisten Menschen, nicht nur wenn es um Sicherheit geht. Schwache Passwörter:

Aufwand zum Knacken: beängstigend gering! Als Beispiel sind hier die Daten bei Verwendung einer Liste aus dem OpenWall Projekt aufgetragen. Diese enthält 40 Mio Wörter und dazu Namenslisten aus mehr als 20 Sprachen und gängige Passwörter und Tastaturmuster. Diese Methode wird immer bevorzugt verwendet, damit sind schon schwache Passwörter mit mehr als 40 Zeichen in kurzer Zeit geknackt worden.

Fazit

Wenn möglich ist die Verwendung eines Passwormanagers sinnvoll, zum Beispiel KeePassXC Damit ist die Verwendung sehr langer Passwörter handhabbar selbst wenn diese nicht-mnemonische Zufallsfolgen sind. Solche kann man übrigens auch sehr gut mit openssl selber erzeugen:


openssl rand -base64 32
Base64 bedeutet also einen Zeichenraum von 64, aber wie gesagt man kann ja dafür ein paar Zeichen mehr nehmen. Oder man eliminiert konsequent Sonderzeichen (+/)wobei sich der Zeichenraum auf 62 vermindert:

LAENGE=32; openssl rand -base64 $((LAENGE*2)) |sed -e 's/[^[:alnum:]]//g' |cut -c -${LAENGE}