Chap Authentifizierung
Frank
- programmiertechnik
0 Helmut Weber0 Michael Schröpl0 Helmut Weber0 Frank
Hi zusammen,
ich habe zwei Server, die sich gegenseitig mittels Chap authentifizieren sollen.
Dazu sendet Server A eine Zufallszahl, die Server B mit dem gemeinsamen secret mixt und diesen Mix md5 verschlüsselt zurückschickt.
Genau dieser Mix ist mein Problem. Wenn ich das secret einfach an die Zufallszahl anhänge, sehe ich spätestens nach dem dritten md5 Hash, welcher Teil Zufallszahl und welcher secret ist (der nämlich, der immer gleich bleibt...)
Da die Übertragung via SSL läuft, ist das nicht ganz so entsetzlich, aber ich würde trotzdem gerne wissen, wie man sowas richtig macht.
Ob es an der Hitze oder an sonstwas liegt, aber nichts von dem, wonach ich heute suche, finde ich. Also frag ich Euch...
Tausend Dank
Frank
Hallo Frank,
ich habe zwar keine Ahnung von Chap, aber wenn ich Dich richtig verstehe, fällt mir folgende Lösung ein:
Hoffentlich kannst Du mit meinen Gedanken etwas anfangen ;)
Gruß
Helmut Weber
Hi Helmut,
- Server A und B besitzen einen gleichen Schlüssel (Dein secret)
- Server A generiert eine Zufallszahl und schickt diese an Server B
unverschüsselt? Wer hier mitlauscht, kann später die gesamte Kommunikation ebenfalls mitlauschen.
Alternative: Verwendung eines reversiblen Verschlüsselungsverfahrens (ganz banales Beispiel: XOR).
A wendet den gemeinsamen Schlüssel auf die Zufallszahl an, B tut das ebenfalls und hat wieder das Original; ein Zuhörer, der nicht im Besitz des gemeinsamen Schlüssels ist, versteht Bahnhof.
Viele Grüße
Michael
Hallo Michael,
- Server A und B besitzen einen gleichen Schlüssel (Dein secret)
- Server A generiert eine Zufallszahl und schickt diese an Server B
unverschüsselt? Wer hier mitlauscht, kann später die gesamte Kommunikation ebenfalls mitlauschen.
Ist wohl zu warm :)
Klar, mein Vorschlag war eigentlich Quatsch. Ich hatte das ganze mal so ähnlich mit Schlüssel, Server-IP-Adresse, Zeitstempel und Benutzername realisiert. Waren aber andere Bedingungen.
Wünsch euch allen einen abkühlenden Abend ;)
Gruß
Helmut Weber
Hi Michael und Helmut,
unverschüsselt? Wer hier mitlauscht, kann später die gesamte
Kommunikation ebenfalls mitlauschen.
Ups? Unverschlüsselt bin ich doch sowieso. Ich gehe ja davon aus, dass die komplette Kommunikation belauscht wird. Verhindern möchte ich nur, dass jemand das gemeinsame secret errät und sich damit unberechtigt authentifiziert. Was ich da skizziert habe, ist ausschliesslich ein Anmeldevorgang, nicht mehr.
Ich tue exakt das, was Helmut beschrieben hat. Obendrein nutze ich einen timestamp, der die gesendete Zufallszahl auf Server A nach einer Minute ungültig werden lässt und ich lösche die Zufallszahl auf A nach jedem Anmeldeversuch. Bei einer erfolgreichen Anmeldung generiere ich eine neue Session und damit ist der Anmeldevorgang abgeschlossen.
Unter diesem Aspekt muss ich gestehen, dass ich gar nicht verstehe, was Du sagen willst. Es wird doch noch kompliziert???
Mein eigentliches Problem mit Helmuts Worten war:
- Server B setzt die Zufallszahl und den
secret zusammen und verschlüssel das Gesamte
Genau da hakte es, denn wenn ich einfach md5(Zufallszahl + Secret) sende, sehe ich ganz deutlich, wie ein Teil des md5 Hashes immer gleich bleibt, solange ich das secret nicht ändere. Das erleichtert eine brute force Attacke doch ungemein: Man beschaffe sich mehrere Kombinationen von Zufallszahl/md5Hash, stelle anhand des gleichbleibenden Anteils des Hashs fest, wie rum die Addition sein muss und probiere dann alle möglichen secrets zu Hause durch.
Wenn ich aber nicht md5(Zufallszahl + Secret) sondern z.B. md5(Zufallszahl XOR Secret) sende, muss man zusätzlich noch erraten, nach welcher Methode Zufallszahl und Secret zusammengesetzt wurde, und das erhöht die Sicherheit doch sehr ... glaube ich zumindest ... Im Chap RFC, das ich mittlerweile gefunden habe, steht ganz klar: use concat. Vielleicht bin ich ja nur paranoid... Trotzdem vielen Dank für Eure Beiträge.
Immer noch nur eingeschränkt aufnahmefähig (26 Grad... die Sonne ist seit über einer Stunde weg und es hat 26 Grad...)
Frank
Hallo Frank,
Genau da hakte es, denn wenn ich einfach md5(Zufallszahl + Secret) sende, sehe ich ganz deutlich, wie ein Teil des md5 Hashes immer gleich bleibt, solange ich das secret nicht ändere. Das erleichtert eine brute force Attacke doch ungemein: Man beschaffe sich mehrere Kombinationen von Zufallszahl/md5Hash, stelle anhand des gleichbleibenden Anteils des Hashs fest, wie rum die Addition sein muss und probiere dann alle möglichen secrets zu Hause durch.
MD5 verhält sich "chaotisch", d.h. Du kannst keinen "einfachen" Zusammenhang zwischen y1 = MD5(x1 + a) und y2 = MD5(x2 + a) herstellen. (das ist ja auch der Sinn von MD5) Daher reicht MD5 für Deine Zwecke durchaus aus.
Viele Grüße,
Christian
Hallo Frank,
Genau da hakte es, denn wenn ich einfach md5(Zufallszahl + Secret) sende, sehe ich ganz deutlich, wie ein Teil des md5 Hashes immer gleich bleibt, solange ich das secret nicht ändere. Das erleichtert eine brute force Attacke doch ungemein: Man beschaffe sich mehrere Kombinationen von Zufallszahl/md5Hash, stelle anhand des gleichbleibenden Anteils des Hashs fest, wie rum die Addition sein muss und probiere dann alle möglichen secrets zu Hause durch.
Dies sollte bei MD5 eigentlich nicht so sein, zumindestens habe ich keine solche Erfahrungen gemacht.
Du must dein String nur wie folgt zusammensetzen:
$string = md5(Zufallszahl + Secret) und nicht
$string = md5(Zufallszahl) + md5(Secret).
Gruß
Helmut Weber
Hallo Helmut,
Dies sollte bei MD5 eigentlich nicht so sein, zumindestens
habe ich keine solche Erfahrungen gemacht.
Ich dachte, ich hätte - bei meinen gestrigen vier Versuchen war es tatsächlich so:
$string = md5(Zufallszahl + Secret)
Die ersten beiden Strings waren in der zweiten Hälfte identisch, danach habe ich das secret geändert. Die beiden nächsten Strings waren in der zweiten Hälfte wieder identisch, aber unterschiedlich zu den ersten beiden.
Nachdem ich heute mal ein paar Strings mehr generiert habe, stelle ich fest, dass dieser Zusammenhang absolut nicht mehr auftaucht. Damit bin ich gestern einfach nur einem saublöden Zufall aufgesessen.
Drum merke: Läppische 4 Versuche reichen keinesfalls aus, um Aussagen empirisch zu belegen...
Liebe Grüsse
Frank