Inhalt

 


Menü Ausschalten

MEngelke.de / Projekte / Pwned Password

Rocks 'n' Diamonds

zu HTTPS 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 über 20 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 (unter 3 Sekunden), ist ein 64 Bit Rechner erforderlich, da der Datensatz weit über 4 GB groß ist. Auf ein 32 Bit Rechner ist das durchsuchen Möglich, aber leider extrem Langsam (einige Minuten).

 

In beiden Fällen ist der komplette Datensatz in der SHA-1 Variante von über 20 GB erforderlich, der Lokal verfügbar sein muss.

ScriptOSBitsHashOrdered by
chkpwned.batWindows32/64SHA-1Prevalence
chkpwned.phpMacOS/Linux32/64SHA-1Prevalence
chkpwnedidx.batWindows64SHA-1Hash
chkpwnedidx.phpMacOS/Linux64SHA-1Hash
checkpwned.phpWebserver64SHA-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)
Zusätzlich brauchen Sie noch eine PHP-Version. (Ich Empfehle die Version 7.3 in 64 Bit. Ältere gehen auch, sind aber langsamer - Besonders Version 5.6 und älter).

Download

pwnedpassword.7z (exe)6.2 KBAlle drei Script-Arten für Windows, Linux und MacOS
php73batch.7z (exe)2.39 MBPHP Batch 7.3 (32 Bit) für Windows 7 - 10
php73x64batch.7z (exe)2.72 MBPHP Batch 7.3 (64 Bit) für Windows 7 - 10 (64 Bit)

Installation

Für Windows ist die Installation relativ einfach:
Zuerst die Portable Version PHP Batch 7.3 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 7.3 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 an einen beliebigen Ort entpacken:
7z x /<path>/pwnedpassword.7z
Dann muss noch das Ausführen-Recht hinzugefügt werden:
chmod +x /<path>/chkpwn.php && chmod +x /<path>/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ührungzeichen setzen ("Doppelte" oder auch 'Einfache' )

 

Getestet mit Knoppix 8.3 (PHP 7.0), Ubuntu 18.04 (PHP 7.2) und mit Raspbian (Raspberry_Pi) (PHP 7.0)


Für MacOS X ist es fast identisch wie unter Linux, mit den einzigen Unterschied, dass PHP schon zu den Boardmitteln von MacOS gehört. 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 folgene Eingabeschablone:
chkpwn <pwned-passwords-sha1-ordered-by-count.txt> [password] (32 und 64 Bit)
Die Angabe der großen Datenbank ist optional, wenn sich die Datei im selben Ordner befindet und nicht umbenannt wurde. Das abzufragene Kennwort ist Pflicht. Die Suche kann einige Minuten dauern, da jedesmal die komplette Datenbank abgesucht werden muss. (Unter 64 Bit hat man eine primitive Fortschrittsabzeige) 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] (Nur 64 Bit)
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 abzufragene Kennwort ist Pflicht. Bei den ersten Aufruf, wird eine Index-Datei erstellt. (ca. 1 MB mit max 65536 Einträgen) Dies dauert einige Minuten. 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 64 Bit-Index Variante chkpwnidx ist. (Auch hier wird 64 Bit vorausgesetzt)
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 folgene 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.

Benutzte Bibliotheken:


 << Links | Home | Serien >><< PHP Batch | Projekte | Rocks 'n' Diamonds >>