06 Feb
Geschrieben von LeSpocky in: Perl, Programmierung, Sicherheit
Aus der Reihe »Schnelles Kamel-Gehacktes« heute der Beitrag, wie man quick’n'dirty einen Passwortgenerator in Perl schreibt. Anforderungen vorher: 8 Zeichen, weil viele Linuxe sowieso dahinter abhacken; nur Zeichen, die in den ersten 7 Bit der ASCII-Tabelle stehen und dann auch nur welche, die man direkt oder mit Umschalttaste (Shift) eingeben kann, nichts wozu man AltGr oder ähnliches bräuchte. Dazu braucht man eine ASCII-Tabelle und dann geht’s los:
#!/usr/bin/perl -w # $Id: gen_passwd.pl 111 2008-02-06 13:45:24Z alex $ use strict; my @allowed_chars; # ASCII von 0x21 bis 0x3f # das sind die meisten Sonderzeichen und die Ziffern for (my $i=0x21; $i<=0x3f; $i++) { push @allowed_chars, chr($i); } # ASCII von A bis Z for (my $i=0x41; $i<=0x5a; $i++) { push @allowed_chars, chr($i); } # ASCII von a bis z for (my $i=0x61; $i<=0x7a; $i++) { push @allowed_chars, chr($i); } push @allowed_chars, chr(0x5f); # '_' my $char_count = scalar @allowed_chars; for (my $i=0; $i<8; $i++) { print $allowed_chars[int rand $char_count]; } print "\n";
Diese Passwörter eignen sich gut als initiale Passwörter für neue Nutzer. Die Nutzer sollten sodann aufgefordert werden, sich mit passwd ein neues zu setzen. Da so ein zufälliges Passwort mit Zahlen und Sonderzeichen sehr schwer zu merken ist, werden sie dieser Aufforderung sicher nachkommen.
12 Kommentare
Peter
6. February 2008, 23:43 Uhr 1Passwörter, die mit deutscher und englischer Tastaturbelegung die gleichen sind, wären noch interessant. Da gibt es ja doch ab und zu Probleme. Aber das nur am Rande. Lustige Sache.
LeSpocky
7. February 2008, 09:08 Uhr 2Ich habe schon drauf geachtet, dass man keine Probleme mit der Kodierung bekommt, also dass man nicht in die Situation gerät auf einer englischen Tastatur z.B. ein ‘Ä’ eingeben zu müssen, deswegen die Beschränkung auf 7-Bit-ASCII.
Wenn man jetzt noch alles ausschließen will, was nicht auf gleichen Tasten liegt, sieht’s schon finster aus. ‘z’ und ‘y’ fallen dann weg, weil die auf englischen und deutschen Tastaturen vertauscht sind und von den Sonderzeichen bleiben nur sehr wenige übrig: Punkt, Komma, Ausrufezeichen und vielleicht noch Dollar und Prozent. Kann man machen, aber dürfte nur in den seltensten Fällen relevant sein und dann darf man auch nicht noch anfangen französische oder noch andere Tastaturen zu berücksichtigen. ;)
LeSpocky
13. February 2008, 16:43 Uhr 3Angestoßen von den Suchergebnissen, mit denen die Leute hier landen, hab ich gerade eine Diskussion bei rubyforen.de gelesen. Die Frage, wie gut derartig erzeugte Passwörter sind, ist durchaus interessant. Das obige Skript generiert grundsätzlich Passwörter mit acht Zeichen. Mehr sind für den angedachten Zweck, Passwörter für eisfair-1, zwecklos, weil das dort verwendete System bei Eingabe von passwd folgendes ausgibt:
Password will be truncated to 8 charactersWeniger Stellen vermindern gleich die Sicherheit, kommen also auch nicht in Frage. Angenommen, Perl generiert mit der Funktion
randsaubere Zufallszahlen, dann bleiben von den theoretisch möglichen 256^8 = 2^64 möglichen Kombinationen abzüglich aller Steuer- und Sonderzeichen, die ich ausgeschlossen habe, noch 84^8 Kombinationen übrig. Das sind immerhin noch rund 2,48*10^15 Kombinationen und zur Basis 2 umgerechnet entspricht das 51 Bit.Dann hab ich mal kurz bei Wikipedia gesucht. Dort findet man unter Bruteforce die Angabe, dass aktuelle Rechner ungefähr 20 Millionen Kombinationen pro Sekunde durchprobieren können. Für einen kleinen Vergleich nehme ich einmal eine kleinere Schlüsselstärke von 40 Bit an und weiterhin eine, wo z.B. aus den 8 Bit der ISO8859-1-Kodierung alles außer die Steuerzeichen verwendet wird, das sind immerhin 62 Bit. Um alle (!) Kombinationen durchzurechnen, brauch man bei 40 Bit gerade mal 15,3 Stunden, bei 51 Bit sind es immerhin schon 1303 Tage. Das ließe sich mit ein wenig gekaufter verteilter Rechenpower noch in vertretbarer Zeit knacken, wenn man es will. Bei 62 Bit ist man allerdings schon bei etwa 7500 Jahren, wohl gemerkt alles auf Grundlage der 20 Millionen Kombinationen pro Sekunde mit heutiger Hardware.
Schlussfolgerung: für wirklich wichtige Systeme sollte man den Login wohl nur noch über Keyfiles erlauben und das Einloggen per Passwort verbieten. So ein einfacher SSH-Key nach DSA oder RSA wird per Default erstmal mit 1024 Bit angelegt. Das ist schonmal eine andere Qualität. ;-)
Peter
14. February 2008, 09:56 Uhr 4Mit dem Keylogin und der zugehörigen Sicherheit: Da kommen ja noch andere Dinge zum Tragen. Ein vernünftiges System erlaubt nur das “Probieren” von relativ wenigen Schlüsseln pro Zeiteinheit, sprich, nach dreimal falsch eingeben ist erstmal 10 Sekunden Pause, danach dreimal falsch, eine Minute Pause. Und so weiter. Und spätestens dann sollte sich das gehäufte Fehlverhalten in irgendwelchen Logfiles wiederfinden, bzw dem fleißigen Administrator eine eMail schreiben.
Für den Server bei meinen Eltern erlaube ich grundsätzlich nur drei Versuche pro halbe Stunde und fühle mich damit eigentlich relativ sicher, auch mit Einloggen per Passwort ;)
Tux
14. February 2008, 11:15 Uhr 5Ich schliesse mich Peter an: Die Sicherheit entsteht an dieser Stelle wieder dadurch, dass man eben nicht einfach probieren kann.
Der oben beschriebene Brute-Force-Angriff beruht eher darauf, dass man das verschluesselte Passwort besitzt und das Verschluesselungsverfahren kennt. Deswegen muss der Admin genau darauf achten, dass eben diese Informationen (und da wir security by obscurity nicht moegen, die erstgenannte Information) nicht in die falschen Haende geraten.
Auf alten Unix-Systemen gibt/gab es das Problem, dass die Passwoerter verschluesselt mit in der /etc/passwd abgelegt wurden, die ja jeder einsehen kann. Damit man an die Codes nicht mehr herandkommt, wurde unter die /ect/shadow eingefuehrt, die nur root sehen darf.
Interessant finde ich noch, wie viele Systeme wirklich nur die ersten 8 Zeichen auswerten. Damit werden zum Einen laengere Passwoerter sinnlos, zum Anderen kann man aber Umstehende und Laien damit verwirren/beeindrucken, indem man einfach noch ein paar Zeichen mehr eingibt. Welche das sind, ist ja dann egal. ;)
Peter
14. February 2008, 13:01 Uhr 6Und dann gibt es noch so “Leute” wie ebay, die bei Passwörter nichtmal nach Groß/klein-Schreibung unterscheiden …
LeSpocky
14. February 2008, 13:31 Uhr 7Tatsache, eBay ist Groß-/Kleinschreibung egal. Haua, das wusste ich auch noch nicht, aber wenigstens erlauben die Passwörter mit mehr als acht Zeichen (und prüfen die auch).
Sicherheitslücken beim Studentenausweis der OvGU von antiblau blog
29. April 2008, 23:08 Uhr 8[...] Punkt 2: Schlüssellänge. Mag das Mitte der 90er noch Stand der Technik gewesen sein, in »Kleiner Passwortgenerator in Perl« haben wir letztens erst Schlüssellängen diskutiert und 48 bit sind heutzutage [...]
Keys für Upgrade auf WordPress 2.6 von antiblau blog
16. July 2008, 18:52 Uhr 9[...] zufällige Zeichenketten zu erzeugen. Eine davon habe ich vor einigen Monaten im Beitrag Kleiner Passwortgenerator in Perl vorgestellt. Was der Beitrag verschweigt. Ich hatte wenige Tage später noch eine kleine [...]
LeSpocky
5. November 2008, 15:25 Uhr 10Geht natürlich alles noch kürzer, kennt man ja von Perl. Das Perl Kochbuch zeigt da eine schöne Möglichkeit:
Da fehlt natürlich noch bisschen drumrum, aber es ist eigentlich ähnlich gut verständlich und eben bedeutend kürzer. Cooles Buch. :D
Peter
5. November 2008, 15:57 Uhr 11Hübsch hübsch, und sogar noch gut lesbar.
Tux
5. November 2008, 16:49 Uhr 12Dann kann man doch bestimmt auch noch die 8 durch einen Parameter fuer die Laenge setzen.
Die Loesung ist auf jeden Fall Perl-ish – das Ganze in zwei Zeilen. :)
Hinterlasse einen Kommentar:
Suchen
Kategorien
Allgemein AntiVir Apache CLI DataMining Debian eBay Eclipse Eisfair GnuPG GTD Hardware HCI HowTo ICQ Ideen IMPULS Internet IRC Jabber KDE Kommunikation LaTeX Linux Literatur Lustiges Magdeburg MATLAB Mobiltelefon MSRS OpenSource Perl PIM Politik Programmierung RFID Shirt Sicherheit Software Umwelt Versionsverwaltung Video Virtualisierung WebUni Wikipedia Windows WordPress Zaurus
Letzte Beiträge
Letzte Kommentare
Autoren
Meta
Blogroll
Archiv
A design creation of Design Disease
Copyright © 2007–2010 – antiblau blog – Impressum
InSense 1.0 Theme by Design Disease translated by antiblau blog team.