Inhalt

 



Menü Ausschalten

MEngelke.de / Projekte / Pwned Password (.kc)

Rocks 'n' Diamonds

zu HTTP wechseln Suchen Drucken RSS-Feed eMail

Pwned Password

Spätens seit Collection #1 bekannt wurde, fragt man sich, ob man selber betroffen ist. Auf der Webseite haveibeenpwned.com hat man die Möglichkeit es zu überprüfen, aber vielleicht möchte man einer fremden Webseite keine Persönlichen Kennwörter anvertrauen.
Die einzige sichere Möglichkeit ist es, die Überprüfung Lokal auf den eigenen Rechner durchzuführen. Das Problem dabei ist, dass der Datensatz knapp 30 GB groß ist, und schon alleine der Download und das entpacken schon eine Herausforderung ist. Im Internet gibt es einige Lösungen, aber die Prüfen entweder nur ungenau oder brauchen sehr lange und viele Ressourcen für die Überprüfung.

 

Ich habe eine Lösung entwickelt, das einen guten Kompromiss zwischen Geschwindigkeit und Ressourcen hat. Als Script-Sprache habe ich PHP gewählt, dass auf allen wichtigen Betriebssystemen verfügbar ist. Wenn die Suche sehr effizient sein soll kann man dies mit hilfe eine zusätzlichen Indexdatei erreichen (unter 3 Sekunden auf einen Raspberry Pi)

 

Für den Offlinebetrieb ist der komplette Datensatz in der SHA-1 Variante von knapp 30 GB erforderlich, der Lokal verfügbar sein muss.

ScriptOSHashOrdered by
chkpwned.batWindowsSHA-1Prevalence
chkpwned.phpMacOS/LinuxSHA-1Prevalence
chkpwnedidx.batWindowsSHA-1Hash
chkpwnedidx.phpMacOS/LinuxSHA-1Hash
checkpwned.phpWebserverSHA-1Hash

Den können Sie sich von der haveibeenpwned.com/Passwords herunterladen und entpacken. (Ich Empfehle die "Ordered by hash" für die Index-Variante, die sehr schnell ist)
Auf 32 Bit-Rechnern ist die Datenbank, mit einen vielfachen von der Maximalen Größe von 4 GB, zu groß und muss kleinere Stücke zerteilt werden. (Dies erfordert für Index-Erstellung und der Zerteilung der Datenbank, zusätzlichen Speicherplatz auf dem Datenträger! - Hinter kann der große Datensatz gelöscht werden!)
Zusätzlich brauchen Sie noch eine PHP-Version. (Ich Empfehle die neuste Version in 64 Bit. Ältere gehen auch, sind aber langsamer - Besonders Version 5.6 und älter).

Download

Installation

Für Windows ist die Installation relativ einfach:
Zuerst die Portable Version PHP Batch herunterladen, entpacken und anschließend die Scripte in das gleiche Verzeichnis kopieren.
Die Scripte werden in der Eingabeaufforderung gestartet, wie bei einer normalen Batchdatei: chkpwn.bat und chkpwnidx.bat

 

Getestet mit Windows 7 und Windows 10 (PHP 8.0 32/64 Bit)


Für Debian-Linux gibt man für die Installation von PHP je nach Linux-Distribution folgendes in der Konsole ein:
sudo apt-get install php-cli oder sudo apt-get install php7-cli
Anschließend kann man die Scripte herunterladen:
wget -O pwnedpassword.7z 'http://www.mengelke.de'`wget -q -O- http://www.mengelke.de/Projekte/PwnedPassword.html | grep -a -o -E '/Projekte;pwnedpassword.7z\?[a-f0-9]+'`
Und an einen beliebigen Ort entpacken:
7z x pwnedpassword.7z oder auch unar -d pwnedpassword.7z
Dann muss noch das Ausführen-Recht hinzugefügt werden:
chmod +x chkpwn.php && chmod +x chkpwnidx.php
Der Aufruf ist wie bei einer normalen Skriptdatei:
./chkpwn.php oder /<path>/chkpwnidx.php

 

Hinweis: In der Linux-Konsole muss man manchmal einige Parameter in Anführungszeichen setzen ("Doppelte" oder auch 'Einfache' )

 

Getestet mit Knoppix 9 (PHP 7.3), Ubuntu 18.04 (PHP 7.2) und mit Raspbian (Raspberry_Pi) (PHP 7.4)


Für MacOS X ist es fast identisch wie unter Linux, mit den einzigen Unterschied, dass PHP schon zu den Bordmitteln von MacOS gehört.

 

Nun laden wir das komprimierte Script herunter:
curl -o pwnedpassword.7z 'http://www.mengelke.de'`curl -s http://www.mengelke.de/Projekte/PwnedPassword.html | grep -a -o -E '/Projekte;pwnedpassword.7z\?[a-f0-9]+'`
Nach dem herunterladen und entpacken, das Script im Terminal mit:
chmod +x /<path>/chkpwn.php && chmod +x /<path>/chkpwnidx.php
ausführbar machen und wie eine normale Skriptdatei starten:
./chkpwn.php oder /<path>/chkpwnidx.php

 

Leider ungetestet :-(


Abfrage

Die Scripte werden in der Konsole aufgerufen und haben folgende Eingabeschablone:
chkpwn <pwned-passwords-sha1-ordered-by-count.txt> [password]
Die Angabe der großen Datenbank ist optional, wenn sich die Datei im selben Ordner befindet und nicht umbenannt wurde. Das abzufragende Kennwort ist Pflicht. Die Suche kann einige Minuten dauern, da jedes mal die komplette Datenbank abgesucht werden muss. (Unter 64 Bit hat man eine primitive Fortschrittsanzeige) Wird das Kennwort gefunden, wird die Zeile in der Datenbank und die Häufigkeit des Kennworts ausgegeben.

 

chkpwnidx <pwned-passwords-sha1-ordered-by-hash.txt> [password]
Die Angabe der großen Datenbank (SHA-1 Ordered by Hash) ist optional, wenn sich die Datei im selben Ordner befindet und nicht umbenannt wurde. Das abzufragende Kennwort ist Pflicht. Beim ersten Aufruf, wird eine Index-Datei erstellt. (ca. 1 MB mit max 65536 Einträgen) Auf einen 32 Bit Rechner wird zusätzlich die Datenbank in 256 Stücke aufgeteilt. Dies dauert einige Minuten. (Abhängig von der Lese/Schreib-Geschwindkeit Ihrer Datenträger)
Danach dauert die eigentliche Suche nur wenige Sekunden. Wird das Kennwort gefunden, wird nur die Häufigkeit des Kennworts ausgegeben.

Webserver

Als Bonus gibt es noch eine Webserver-Variante, die im Grunde identisch mit der Index Variante chkpwnidx ist.
Für diese Version brauchen Sie auch keinen eigenen Webserver, da neuere PHP-Versionen einen eigenen Webserver mitbringen. Dazu kopieren Sie das Script checkpwned.php in das PHP-Verzeichnis zusammen mit Datenbankdatei (SHA-1 Ordered by Hash). In der Konsole wechseln Sie mit cd zum entsprechenden Verzeichnis. Nun starten Sie den Webserver mit folgenden Befehl: php -S localhost:8080 (Die Portnummer 8080 kann Theoretisch eine beliebige Zahl zwischen 1 und 65535 sein, solange der Port nicht anderweitig belegt ist). Im Browser öffnen die dann folgende Url: http://localhost:8080/checkpwned.php
Wenn Sie die Index-Datei nicht vorab mit chkpwnidx.php erstellt haben, müssen sich bei der ersten Kennwort-Abfrage, um einige Minuten gedulden - Sobald die Index-Datei fertig erstellt ist, dauern die Kennwortabfragen nur noch Sekunden...
Die Suche benutzt JavaScript, um das Kennwort mit SHA-1 zu hashen, und schickt den kompletten Hash zum Webserver, diese mit Hilfe der Index-Datei schnell ermittelt, ob es Treffer gibt. (Es wird automatisch ermittelt, ob das Kennwort in ISO-8859-1 und/oder in UTF-8 kodiert werden muss.)

Benutzte Bibliotheken:

  • SHA1-HMAC.js © 2012 Jordi Boggiano, 2020 Michael Engelke
 

Live OnlineDemo: https://home.mengelke.de/beispiele/checkpwned.php (32 Bit)

Kategorie: PHP, PHPBatch, Konsole, Password, 7-Zip


 << Links | Home | Serien >> << Pm Wiki - Variable | Projekte | Rocks 'n' Diamonds >>