Sorry, aber du beweist immer nur, dass du entweder aus Trotz etwas nicht lernen willst, weil dir von irgendwem die Nase nicht passt oder dass du wirklich nicht verstehst, warum 7 Wörter aus knapp 8000 öffentlich bekannten Wörtern auszuwählen sicher ist, es dafür aber zwingend nötig ist, die Auswahl nicht dem voreingenommenen menschlichen Gehirn zu überlassen.
Hier ist mein Wörterbuch:
http://world.std.com/~reinhold/Diceware_German.pdf
Daraus hab ich 7 Wörter gewürfelt. Mit dem folgenden Perl-Schnipsel kannst du alle Passwörter berechnen, die ich je verwendet habe und verwende. Die 7 Wörter platzierst du einfach kleingeschrieben und ohne Leerzeichen direkt hintereinander in $masterpassword.
Als Beispiel wäre mein hardwareluxx-Account folgendermaßen:
Code:
$account->{user}=TCM
$account->{domain}=hardwareluxx.de
$account->{iteration}=2015053001
$account->{length}=32
$account->{charset}=[[:alnum:]]
Hätte ich heute mein Passwort geändert (Iteration: 2015053001), wäre das Passwort für heute: 17x6Uh5oXO391SDWQzA5xrk01bLYGXAx. Dieses Passwort ist mit meinem echten Masterpasswort und dem u.g. Code berechnet. Einzig die Iteration ist natürlich nicht die meines tatsächlichen hwluxx-Passworts. Die echte Iteration ist 2014122501.
Ich könnte dir von allen meinen Accounts - darunter mein Bankkonto, alle meine Mietserver, mein Bitcoin-Wallet, alles - jeweils User, Domain, Iteration, Länge, Zeichensatz nennen und es würde dir nichts bringen. So sicher sind 7 einfache Wörter aus 7776 bekannten. Ein guter Teil Sicherheit kommt natürlich auch durch die 128K Iterationen noch dazu. Aber schon das Masterpasswort alleine würde völlig ausreichen.
Code:
my $salt = '';
my $iterationcount = 131071;
my $derivedkeylength = 64;
my $prf = \&hmac_sha512;
my $password = '';
$salt .= ':';
$salt .= $account->{user} // '';
$salt .= ':';
$salt .= $account->{domain} // '';
$salt .= ':';
$salt .= $account->{iteration};
$salt .= ':';
{
use bigint;
my @alphabet = pack('C*', 0..255) =~ m/$account->{charset}/g;
my $base = @alphabet;
my $hmac = unpack('H*', pbkdf2($masterpassword, $salt, $iterationcount, $derivedkeylength, $prf));
$hmac = hex($hmac);
while (length($password) < $account->{length}) {
$password = $alphabet[$hmac % $base] . $password;
$hmac = int($hmac / $base);
}
}
Du würdest mir nicht mal dein Wörterbuch nennen, weil du die Zusammenhänge absolut nicht verstehst, wie man immer wieder sieht. Das ist ja auch OK. Aber dann sag besser zum Thema nichts mehr, was irgendwie allgemeingültig klingt und von anderen falsch aufgeschnappt werden könnte.
Halbwissen ist Gift in der Kryptografie.
Edit: Wie man das mit "echtem Zufall" vs. "ich denk mir was" vielleicht auch noch deutlich machen kann: beim selbst ausgedachten muss man immer dem Reflex entgegensteuern, das erstbeste Wort zu nehmen, was einem in den Sinn kommt. Man muss immer gucken, dass man keine Wörter nimmt, die irgendjemand erraten könnte, der einen kennt. D.h. im Endeffekt muss man in Richtung "echter Zufall" steuern, den man aber objektiv nie hinkriegt, es sei denn, man nimmt einfach mal Würfel in die Hand und lässt das eigene Unterbewusstsein komplett außen vor.
Wenn du nicht das Würfeln mit "Finger im Duden" simulierst, ist dein Wörterbuch ja prinzipiell schonmal auf deinen Wortschatz begrenzt. Ein Würfel liefert dir ja auch Wörter, auf die du gar nicht kommen würdest.