Was ist Unix Crypt Format?
Der Dicki
- sonstiges
0 Linksetzer0 Christian Kruse0 Wizard
Hallihallo!
Ich habe ein kleines Problemchen:
Ich möchte, nur um mal ein bisschen rumzuprobieren, ein Verzeichnis mittels Passwortschützen.
Mein Provider (ewetel.net) hat mir dafür auch ein bisschen Info gegeben, wie die .htaccess auszusehen hat.
Man sagte mir auch, daß ich eine .htpasswd brauche, in der die Daten in der Form
Name:Passwort abzulegen sind.
Kein Problem...
Aber jetzt kommt mein Problem:
Es heisst: "Die .htpasswd enthält die Benutzernamen und die Kennwörter im Unix Crypt Format".
Es hiess weiter: "Um die Datei zu erstellen, können Sie unter Linux z.B. den Befehl htpasswd verwenden".
Ich habe aber kein Linux, sondern nur Windows 98 SE.
Stellt das ein Problem dar? Wenn ja: wie kann ich das lösen?
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...
Viele liebe Grüße,
Der Dicki
Ich habe ein kleines Problemchen:
Ich möchte, nur um mal ein bisschen rumzuprobieren, ein Verzeichnis mittels Passwortschützen.
http://selfhtml.teamone.de/diverses/htaccess.htm#verzeichnisschutz
Stellt das ein Problem dar? Wenn ja: wie kann ich das lösen?
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...
Hallihallo, Linksetzer ;)
http://selfhtml.teamone.de/diverses/htaccess.htm#verzeichnisschutz
Cool, damit kann ich was anfangen, danke!
(Hätte ich aber auch selber drauf kommen können, grmblfrx...)
Für diesen link gilt das Gleiche wie für den ersten. Auch das Eingeklammerte...
Naja, manchmal habe ich echt ein mächtiges Brett vorm Kopf...
Danke, und die üblichen lieben Grüße,
Der Dicki
Hoi,
Man sagte mir auch, daß ich eine .htpasswd brauche, in der die Daten in der
Form Name:Passwort abzulegen sind.
Richtig.
Aber jetzt kommt mein Problem:
Es heisst: "Die .htpasswd enthält die Benutzernamen und die Kennwörter im
Unix Crypt Format".
Richtig.
Es hiess weiter: "Um die Datei zu erstellen, können Sie unter Linux z.B. den
Befehl htpasswd verwenden".
Richtig.
Ich habe aber kein Linux, sondern nur Windows 98 SE.
Dumm :)
Stellt das ein Problem dar?
Unter Umstaenden...
Wenn ja: wie kann ich das lösen?
Hast du PHP auf dem Rechner? Wenn ja, dann in etwa so:
<?php
$salt = '';
$array = Array('A','B','C','D',....,'Z','a','b',...,'z',0,1,2,...,9);
for($i=0;$i<2;$i++) {
$salt .= $array[rand count($array)];
}
echo crypt($_GET['pw'],$salt);
?>
Mit Perl ginge es einfacher, aber leider haben nicht alle Perl-Versionen unter
Windows 'crypt' implementiert.
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung
an...
'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
verschluesselte kann nicht wieder entschluesselt werden.
Gruesse,
CK
Hallihallo, Christian!
Als Erstes einmal: vielen Dank für Deine Antwort.
Ich habe aber kein Linux, sondern nur Windows 98 SE.
Dumm :)
Was soll ich sagen? Es läuft mittlerweile über ein Jahr ohne Bluescreen und/ oder größere Probleme ;)
Hast du PHP auf dem Rechner? Wenn ja, dann in etwa so:
<?php
$salt = '';
$array = Array('A','B','C','D',....,'Z','a','b',...,'z',0,1,2,...,9);
for($i=0;$i<2;$i++) {
$salt .= $array[rand count($array)];
}
echo crypt($_GET['pw'],$salt);
?>
Leider habe ich auf meinem Rechner kein PHP, aber vielleicht sollte ich mal drüber nachdenken. Aus irgendwelchen unerfindlichen Gründen habe ich mich davor bisher immer gescheut...
Zum Glück ist es für dieses Problem erstmal nicht nötig, der Linksetzer hat mich auf eine wunderschöne Seite geleitet.
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung
an...
'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
verschluesselte kann nicht wieder entschluesselt werden.
Das ist ja cool. Wusste gar nicht, daß sowas geht. Bedeutet das nach meinen (ohne überheblich wirken zu wollen) nicht besonders geringen Mathematikkenntnissen dann aber nicht, daß es sich dabei dann nicht um eine bijektive Abbildung vom Klartext ins Verschlüsselte hat, und demzufolge dann mehrere Klartexte ein und dasselbe Verschlüsselungsergebnis haben können?
Gruesse,
CK
Viele liebe Grüße zurück, und vielen Dank nochmal,
Der Dicki
Hallo,
'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
verschluesselte kann nicht wieder entschluesselt werden.
Das ist ja cool. Wusste gar nicht, daß sowas geht.
Offensichtlich doch :)
Bedeutet das nach meinen (ohne überheblich wirken zu wollen) nicht besonders
geringen Mathematikkenntnissen dann aber nicht, daß es sich dabei dann nicht
um eine bijektive Abbildung vom Klartext ins Verschlüsselte hat,
Wie genau das funktioniert, weiss ich nicht. Lies den Quelltext :)
und demzufolge dann mehrere Klartexte ein und dasselbe
Verschlüsselungsergebnis haben können?
Doch, das kann passieren. Deshalb wird der Schluessel ($salt in meinem Beispiel)
auch immer zufaellig gewaehlt.
Gruesse,
CK
Hallihallo!
Bedeutet das nach meinen (ohne überheblich wirken zu wollen) nicht besonders
geringen Mathematikkenntnissen dann aber nicht, daß es sich dabei dann nicht
um eine bijektive Abbildung vom Klartext ins Verschlüsselte hat,
Wie genau das funktioniert, weiss ich nicht. Lies den Quelltext :)
Och Männo... Hab doch von php so viel Ahnung wie ein Dicki von php... *g
und demzufolge dann mehrere Klartexte ein und dasselbe
Verschlüsselungsergebnis haben können?
Doch, das kann passieren. Deshalb wird der Schluessel ($salt in meinem Beispiel)
auch immer zufaellig gewaehlt.
Aaaaahja. Dann ist das ja gar nicht mal so schlimm. Aber im Endeffekt bleibt dann doch das Problem, daß es zu jedem Nutzernamen mehrere Passwörter gibt, oder?
Ich habe grade mal danach gesucht, aber nichts gefunden. Vielleicht bin ich heute einfach nur mal wieder zu blöd zum Lesen...
Viele liebe Grüße,
Der Dicki
Hallo,
Wie genau das funktioniert, weiss ich nicht. Lies den Quelltext :)
Och Männo... Hab doch von php so viel Ahnung wie ein Dicki von php... *g
Dann lies eine Beschreibung :) Es gibt sicher Beschreibungen zum
crypt-Algorithmus.
und demzufolge dann mehrere Klartexte ein und dasselbe
Verschlüsselungsergebnis haben können?
Doch, das kann passieren. Deshalb wird der Schluessel ($salt in meinem
Beispiel) auch immer zufaellig gewaehlt.
Aaaaahja. Dann ist das ja gar nicht mal so schlimm. Aber im Endeffekt bleibt
dann doch das Problem, daß es zu jedem Nutzernamen mehrere Passwörter gibt,
oder?
Ja, das Problem besteht. Aber die Chance, dass es zu einem Passwort ein
sinnvolles Aequivalent gibt, ist AFAIK doch relativ klein.
Ich habe grade mal danach gesucht, aber nichts gefunden. Vielleicht bin ich
heute einfach nur mal wieder zu blöd zum Lesen...
Vielleicht hilft dir die Tatsache, dass crypt() AFAIK einen DES-Algorithmus
benutzt.
Gruesse,
CK
Hi,
und demzufolge dann mehrere Klartexte ein und dasselbe
Verschlüsselungsergebnis haben können?
Doch, das kann passieren.
da bin ich mir gar nicht sicher.
Denn die Ausgabe einer crypt()-Verschlüsselung (11+2 Zeichen) ist
deutlich _länger_ als deren Eingabe (8+2 Zeichen).
Nicht jede Zeichenkette, die in der entsprechenden Länge darstellbar
ist, kann also das Ergebnis einer crypt()-Operation gewesen sein -
insofern wären reichlich Möglichkeiten vorhanden, die tatsächlichen
Eingaben disjunkt im Ergebnisraum unterzubringen (3 Byte überzählig,
also nur ein echtes Passwort auf 16 Millionen möglicher Werte).
Aaaaahja. Dann ist das ja gar nicht mal so schlimm. Aber im Endeffekt
bleibt dann doch das Problem, daß es zu jedem Nutzernamen mehrere
Passwörter gibt, oder?
Es gibt zu jedem Passwort so viele crypt()-Ergebnisse, wie es
salt-Werte gibt (und das sind zwei Byte, also offenbar 65536 Stück).
Da das salt jedoch im Ergebnis der Verschlüsselung drin steht, weißt
der Server, wie er das neu ankommende Passwort verschlüsseln muß, um
es mit dem verschlüsselten vergleichen zu können (ohne Kenntnis des
salt hätte er dazu keine Chance), ohne daß der Server wissen muß
wie das gespeicherte Passwort im Klartext lautet.
Viele Grüße
Michael
Hallihallo!
Danke für diese ausführliche Antwort, bin schon etwas "beruhigter".
Wenn ich Dich richtig verstanden habe, läuft das Ganze dann so ab:
Übertragung im Klartext
|
Entschlüsselung des Passwortes,
das zum übermittelten Nutzernamen gehört.
|
Vergleichen und entsprechend reagieren.
Aber eine kleine, dumme Frage habe ich denn doch noch:
Was ist dieses ominöse "salt"? Ist das sozusagen ein "dynamischer Verschlüsselungscode"?
Viele liebe Grüße,
Der Dicki
Moin,
Übertragung im Klartext
ja
Entschlüsselung des Passwortes,
das zum übermittelten Nutzernamen gehört.
nein
Vergleichen und entsprechend reagieren.
ja
Das Passwort kann prinzipbedingt nicht wieder entschlüsselt werden, wenn es erst mal ge-crypt()-ed ist, da die Abbildung (zumindest potentiell) nicht ein-eindeutig ist. (Michael: Die Ausgabe hat zwar mehr Zeichen, aber weniger relevante Bits pro Zeichen.)
Also das zu überprüfende Passwort muss im Klartext vorliegen. Dann wird das verschlüsselte Passwort rausgesucht und daraus der Salt extrahiert (der wird zusammen mit dem crypt()-Ergebnis gespeichert). Der crypt()-Algorithmus basiert im Prinzip auf DES mit ein paar Veränderungen, die das effiziente Ausführen einer Schlüsselsuche in Hardware erschweren sollen. Der Salt-String besteht aus zwei Zeichen aus der Menge [a-zA-Z0-9./] und verändert die Verschlüsselungsfunktion in einer von 4096 Arten.
Dann werden die 7 niederwertigsten Bits der ersten 8 Buchstaben des Passworts genommen und daraus wird dann ein 56 Bit-Schlüssel. Der wird dann benutzt um mit dem modifizierten DES-Algorithmus einen festen String (in der Regel alles Nullen) mehrfach hintereinander zu verschlüsseln, wobei 11 druckbare ASCII-Zeichen entstehen (plus 2 Zeichen Salt, die vorangestellt werden).
Dieser Algorithmus wird also einmal beim Festlegen des Passworts (mit zufälligem Salt) durchgeführt und das Ergebnis gespeichert. Ausserdem wird er jedesmal bei der Überprüfung eines Passworts (mit dem bekannten Salt) durchgeführt und das Ergebnis mit dem gespeicherten Ergebnis verglichen.
--
Henryk Plötz
Grüße aus Berlin
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...
'cypt' ist ein One-Way-Verschluesselungs-Algorithmus. Das heisst, das
verschluesselte kann nicht wieder entschluesselt werden.
Das ist ja cool. Wusste gar nicht, daß sowas geht.
Die Bezeichnung Verschlüsselung ist hier auch etwas fehl am Platze, denn was man verschlüsselt, sollte man per Definition auch immer wieder Entschlüsseln können (ok, wenn man nicht gerade den Schlüssel verschludert, soll ja vorkommen :).
Ich für meinen Teil finde es sinnvoller, diese Einwegverschlüsselungen ganz einfach als das zu bezeichnen, was sie im Kern doch eigentlich auch sind: Prüfsummen. Und dazu gehören dann natürlich auch MD5 oder CRC32. Oder Dein eigener Bitquirl, der sich auch als ganz ordinäre Addition der einzelnen Eingangsbytes entpuppen kann.
Das besondere Geheimnis dabei ist nur, daß dieser Algorythmus so angelegt sein muß, daß auch kleinste Änderung der Eingangsdaten zu einer Änderung in den Ausgangsdaten führt.
Gruß,
soenk.e
Hallihallo!
Die Bezeichnung Verschlüsselung ist hier auch etwas fehl am Platze, denn was man verschlüsselt, sollte man per Definition auch immer wieder Entschlüsseln können (ok, wenn man nicht gerade den Schlüssel verschludert, soll ja vorkommen :).
Ich für meinen Teil finde es sinnvoller, diese Einwegverschlüsselungen ganz einfach als das zu bezeichnen, was sie im Kern doch eigentlich auch sind: Prüfsummen. Und dazu gehören dann natürlich auch MD5 oder CRC32. Oder Dein eigener Bitquirl, der sich auch als ganz ordinäre Addition der einzelnen Eingangsbytes entpuppen kann.
Das fand ich jetzt aber mal anschaulich.
Jetzt, wo Du das Wort "Prüfsummen" ins Spiel gebracht hast, fällt mir die Vorstellung des Ganzen gleich viel leichter.
Danke für die Aufklärung!
Viele liebe Grüße,
Der Dicki
Moin,
Stellt das ein Problem dar? Wenn ja: wie kann ich das lösen?
Und was ist das Unix Crypt Format überhaupt? Hört sich nach Verschlüsselung an...
Richtig, das passwort wir in Unix verschlüßelt ( gecrypted ) and dann
in der passwd Datei gespeichert.
Ich habe im Netz mal ein Javascript gesehen, welches das gemacht hat.
Speziel für die .htaccess Datei.
Leider weiß ich nicht mehr wo das stand. Gehe doch mal auf die Suche.
regds
Wiz
Hallihallo, Wiz!
Auch Dir erstmal herzlichen Dank für die Antwort.
Ich habe im Netz mal ein Javascript gesehen, welches das gemacht hat.
Speziel für die .htaccess Datei.
Hätte ich eigentlich auch selber drauf kommen können: SelfHTML hält auch hierfür das Passende bereit, wie der Linksetzer mir mitgeteilt hat...
Viele liebe Grüße,
Der Dicki