PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UNIX, Java, MD5 Salt usw.



nylz
22-02-2006, 21:55
Ich suche eine Java-Klasse, die mir ein Passwort gegen den Hash aus der shadow-Datei (Gentoo-Linux) checkt. Encrypter habe ich gefunden, aber da die Dinger gesalzen sind brauche ich speziell eine Art CheckHash-Funktion. Wo kann ich sowas kriegen?

Ich brauche nur die reine Check-Routine. Ein Zugriff auf das System ist nicht erforderlich, da ich die gewünschten Passwörter in die Datenbank schaufel.

peschmae
23-02-2006, 08:11
So wie ich salzen bisher verstehe muss das Salz selber auch irgendwo gespeichert sein - logischerweise in der Shadow-Datei.

Siehe auch man 3 crypt - da steht wie das tut. Da kannst du dann auch gleich die funktion zum verifizieren benutzen.

MfG Peschmä

nylz
23-02-2006, 11:19
Salt in der shadow? Ist das so? Oder gibt es dafür unter Linux Standards? Ich habe keinen Zugriff auf die shadow-Datei. Ich bin in Sachen Kryptologie ein absoluter Laie. Gibt es nicht einfach eine Klasse mit einem Algoritmus, der mir ein String gegen einen UNIX-Passwort-Hash prüft? Gibt es da evtl. Standardmechanismen?

Ich erhalte nur username und passwort-hash aus der shadow-Datei. Mehr stellt man mir nicht zur Verfügung. Reicht das nicht aus um eine Verifizierung durchzuführen?

peschmae
23-02-2006, 17:57
Ich hab ja auch nicht wirklich viel Plan von Kryptozeugs (aber das haben die wenigsten - auch die die das Gegenteil behaupten ;)).

So wie ich das vorgehen bei Salt verstehe ist: Beim ersten Erstellen des Passworthashs kommen noch ein paar zufällige Bits dazu - vom ganzen wird dann der Hash erstellt. Mit einem "gewöhnlichen" Algorithmus. Damit man nun ein eingegebenes Passwort prüfen kann braucht man das Salt - weil die Algorithmen ja genau darauf getuned sind dass kleinste Veränderungen am Passwort einen komplett anderen Hash ergeben.
Dass das Salt bekant ist ist keine Sicherheitslücke - die Idee ist ja nur Wörterbuchattacken mit riesigen Passwort-Md5sum-Tabellen zu verhindern.

Fazit: Du brauchst das Salt. Aber eventuell ist das in dem was du "passwort-hash" nennst schon dabei. Zumindest in der Shadow-Datei sind das die ersten paar Stellen oder so dessen was man gemeinhin als Passwort-Hash idendifizieren würde.

MfG Peschmä

nylz
24-02-2006, 08:31
Gelöst gelöst gelöst (*FREU*):

Und jetzt für alle die Lösung:

Eine unglaublich gute Erklärung dazu gibt es hier:
http://www-128.ibm.com/developerworks/java/library/l-md5crypt/

(IBM ist manchmal doch zu was gut! ;-) )
Da kann man sich auch eine Klasse runterladen:
http://www-128.ibm.com/developerworks/java/library/l-md5crypt/#download

Ich gebe das mal kurz mit meinen Worten wieder für Leute, die es schnell brauchen:

Auszug aus der Shadow-Datei:
nylz:$1$iAl6SpZ4$z4bi2tGUUtDYapyvE5aT1.:13200:0:99 999:7:::

Das Password lautet test

Es gibt auch shadow-Files, die nicht 'salted' sind, aber daran, daß das Passwort mit $1$ anfängt sehen wir, daß hier doch Salz gestreut wurde.
Und zwar ist es unter UNIX i.d.R. so, dass nach dem $1$ ein 8 Character-Salt bis zum nächsten $ kommt und dann der MD5-Hash.
Also: $1$[8-character-salt]$salted-md5-hash

Der MD5Crypt-Klasse (s.o. download) muss ich den Hash halt da rauspflücken (hier 'iAl6SpZ4') und mitgeben - aber dann tut sie auch, was ich erwarte.

Beweis:
> java -classpath . MD5Crypt test iAl6SpZ4
$1$iAl6SpZ4$z4bi2tGUUtDYapyvE5aT1.

Naja... wenn man das mal weiss... ;-)