Post by Paul EbermannPost by Daniel UrbanPost by Paul EbermannWenn einfach alle möglichen Passwörter durchprobiert
werden, muss man (wenn kein Nutzername dabei ist) nur
schauen, ob bei den x gespeicherten Hashs das Ergebnis
dabei ist.
Da ist kein Unterschied. Gleiches muß man auch tun, wenn der
Nutzername drin ist.
Da sind es aber mehr.
Mmm, Du bist doch Mathematiker, oder? Ich will Dir deswegen nicht
widersprechen. ;-)
Aber ich habe auch noch einmal nachgedacht und bin zu einer Erkenntnis
gekommen, die hoffentlich nicht falsch ist. ;-)
a) Wenn ich einen konkreten Account knacken will:
password = username + phrase --> wenn username bekannt ist und a die Länge
des Alphabets, dann ist der Aufwand a ^ length(phrase)
Wobei je nach Hashwertfunktion, es natürlich auch sein kann, daß kürzere
Paßworte ebenfalls den gesuchten Hashwert erzeugen können. Den Fall würde
ich aber aus meiner Betrachtung erst mal ausschließen.
Daraus folgt für mich, daß sowohl bei BF als auch bei DA kein Unterschied
besteht zwischen mit und ohne Benutzername.
b) Wenn ich alle Accounts knacken will:
- mit Nutzernamen:
Der Gesamtaufwand ist die Summe der einzelnen Aufwände wie oben, also
a^length(phrase1) + a^length(phrase2)+...+a^length(phraseN), wenn man die
zusätzlich Information nutzt.
Oder wenn man die Information nicht nutzt: a^(passwordMax), wobei
passwordMax das Password mit der größten Länge unter den Nutzern ist.
- ohne Nutzernamen (password = phrase):
Der Gesamtaufwand beträgt a^(phraseMax), wobei phraseMax die größte Länger
hat unter den Nutzern.
Daraus folgt (für Nutzeranzahl > 1), daß durch die Verlängerung des
Paßwortes - wie Du sagtest - der Aufwand höher wird.
Außer Acht lasse ich dabei, daß es auch möglich wäre, daß zwei verschiedene
Paßwörter auf den gleichen Hashwert abgebildet werden. Also das ich beim
erraten des ersten Paßwortes zufällig das zweite errate. Was aber unabhängig
von der Verwendung des Nutzernamens ist.
c) Wenn ich einen beliebigen Account knacken will:
- ohne Nutzername (password = phrase):
Der Aufwand ist a^length(passwordMin), wobei passwordMin das kürzeste
Paßwort von allen Nutzern ist.
- mit Nutzername:
Im Besten Fall ist es a^length(phraseMin) und im schlechtesten Fall
a^length(phraseMax). Leider weiß man nicht, welche Nutzer das kürzeste
Paßwort hat. Der Hashwert sollte darüber keinen Aufschluß geben.
Wenn man die Information nicht nutzt, dann ist der Aufwand
a^length(passwordMin).
In der Regel wird der Aufwand also größer sein.
Außer Acht lasse ich auch hier, daß es auch möglich wäre, daß zwei
verschiedene Paßwörter auf den gleichen Hashwert abgebildet werden.
Also 2:1 für Dich. ;-)
Gruß,
Daniel