ScusiBlog

background emmission of scusi

Jun 3, 2011 - 2 minute read - digital self-defense IT-Security Man lernt nie aus! this blog

sichere Passwörter unter Unix erzeugen

Schnell mal auf einem Unix-artigen Betriebssystem ein sicheres Passwort erzeugen, geht so:

echo `cat /dev/urandom | tr -cd [:alnum:] | head -c 12`;

Erklärung:

/dev/random ist unter Unix ein virtuelles Gerät welches zufällige Werte erzeugt. Allerdings ist /dev/random blocking, Das heißt es blockiert wenn alle Werte aufgebraucht sind und keine neuen zur Verfügung stehen. /dev/urandom ist wie /dev/random blockiert aber nicht, desshalb ist es hierfür die bessere Wahl.

Der Befehl cat gibt einfach den Inhalt von irgendwas (Datei, Input,…) auf der Konsole aus. cat /dev/urandom gibt also einfach die von /dev/urandom erzeugten Zeichen aus.

Mit einem Pipesymbol ( | ) lenkt die Ausgabe vom vorangestellten Ausdruck (also von cat /dev/urandom) an den nachfolgenden Ausdruck also tr -cd [:alnum:].

Der Befehl tr -cd [:alnum:] schneidet alles aus dem Stream (von /dev/urandom) raus was kein alphanumerisches Zeichen ([:alnum:]) ist. /dev/urandom spucken nicht nur druckbare Zeichen aus sondern beliebige bytes, also auch Zeichen die man nicht so einfach Darstellen kann und eben auch nur schwer eingeben. Für Passwörter ungeeignet, eingeben muss man es ja meistens irgendwie.

Den nur noch aus alphanumerischen Zeichen bestehende Stream von zufälligen Bytes wird nun wider mit einem Pipesymbol an den Befehl head übergeben.

Der Befehl head zeigt den Beginn einer Datei an. Mit der Option -c 12 sagt man head dass es 12 Zeichen anzeigen soll.

So erhält man also ein zufälliges 12 stelliges Passwort. Durch ändern des Wertes der Option kann man auch längere oder kürzere Passwörter generieren. Wer gerne auch Sonderzeichen im Passwort haben möchte kann als Option von tr statt [:alnum:] einfach [:print:] nutzen.

Hinweis für Mac User

Unter Mac OS X muss man die Sprache auf C setzen damit das funktioniert, ansonsten bekommt man eine Fehlermeldung wie die folgende tr: Illegal byte sequence

Das folgende Beispiel zeigt wie es auch unter Mac OS geht:

echo `LANG=C tr -cd ‘[:alnum:]‘</dev/urandom|head -c 12`

Einrichten

Damit man nicht jedes mal die ganze Zeile tippen muss kann man sich das natürlich auch in die profile datei seiner Shell schreiben.

## aliases to generate passwords
alias mkpasswd_strong='echo `LANG=C tr -cd ‘[:alnum:]‘</dev/urandom|head -c 64`'
alias mkpasswd_hex='echo `LANG=C tr -cd ‘[:xdigit:]‘</dev/urandom|head -c 64`'
alias mkpasswd='echo `LANG=C tr -cd ‘[:alnum:]‘</dev/urandom|head -c 12`'

Nach einem Neustart, oder nachdem man die profile datei neu eingelesen hat (source ~/.bash_profile) kann man dann mit einem shell kommando passwörter erzeugen. Zum Beispiel so:

$> mkpasswd
SAufK6usdhwd 
$>