Discussion:
Berechnung Passwort-Hash
(zu alt für eine Antwort)
Wendelin Uez
2025-01-28 12:05:49 UTC
Permalink
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal berechnet
werden (müssen), damit die Passwörter selbst nicht erst zum Server
übertragen werden müssen, muß doch den berechnenden Clients der Algorithmus
bekannt sein - es kann ja nicht jeder irgendeinen beliebigen Algorithmus zur
Hash-Berechnung verwenden, es muß ja auf jedem Client derselbe Hashwert
herauskommen.

Dann muß aber logischerweise den Clients auch der Berechnungsalgorithmus
bekannt sein. Es kann zwar jeder Server seinen eigenen haben, aber der
Client muß ihn kennen, um den Hash korrekt berechnen zu können.

Ich möchte für meine private Software auch so einen Algorithmus haben. Ich
könnte zwar einen eigenen bauen, aber wenn es sowas wie genormte Algorithmen
gibt würde ich mich möglichst daran halten wollen. Gibt es dazu vielleicht
eine einigermaßen leicht verständliche Dokumentation?
Marcel Mueller
2025-01-28 18:50:42 UTC
Permalink
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal
berechnet werden (müssen), damit die Passwörter selbst nicht erst zum
Server übertragen werden müssen, muß doch den berechnenden Clients der
Algorithmus bekannt sein - es kann ja nicht jeder irgendeinen beliebigen
Algorithmus zur Hash-Berechnung verwenden, es muß ja auf jedem Client
derselbe Hashwert herauskommen.
Dann muß aber logischerweise den Clients auch der Berechnungsalgorithmus
bekannt sein. Es kann zwar jeder Server seinen eigenen haben, aber der
Client muß ihn kennen, um den Hash korrekt berechnen zu können.
Ich kenne keine API, die alleine aufgrund eines vom Client gesendeten
Hashes authentifiziert. Das größte Risiko dabei ist, dass man bei
erbeuteten, verschlüsselten Passwörtern diese nicht per Brute Force
knacken muss, sondern direkt zur Authentifizierung benutzen kann. Da
könnte man genausogut die Klartext-Passwörter speichern.

Das einzige, wo ich vergleichbares kenne, ist bei Seiten wie
haveibeenpwned. Dort liefert aber der Server auch den Code für die
Clientseitige Hash-Berechnung. Damit stellt sich die Frage nicht, dass
der Client das vorher kennen muss.

Ähnliche Verfahren kann man natürlich auch zur Authentifizierung nutzen.
Aber dabei sollte der Server immer eine individuelle, zufällige
Challenge an den Client senden, um Replay-Attacken zu verhindern. Damit
ist man aber nicht mehr bei einem klassischen Hash, sondern eher bei
etwas mehrstufigem.


Marcel
Peter J. Holzer
2025-01-28 19:24:20 UTC
Permalink
Post by Marcel Mueller
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal
berechnet werden (müssen), damit die Passwörter selbst nicht erst zum
Server übertragen werden müssen, muß doch den berechnenden Clients der
Algorithmus bekannt sein - es kann ja nicht jeder irgendeinen beliebigen
Algorithmus zur Hash-Berechnung verwenden, es muß ja auf jedem Client
derselbe Hashwert herauskommen.
Dann muß aber logischerweise den Clients auch der Berechnungsalgorithmus
bekannt sein. Es kann zwar jeder Server seinen eigenen haben, aber der
Client muß ihn kennen, um den Hash korrekt berechnen zu können.
Ich kenne keine API, die alleine aufgrund eines vom Client gesendeten
Hashes authentifiziert.
Das nicht, aber es gibt einige, die im Wesentlichen ein Hash aus dem
Passwort und einer vom Server generierten Nonce berechnen und das zum
Server schicken. Auf Anhieb fallen mir da Digest access authentication,
PostgreSQLs (veraltete) "MD5"-Methode ein und ich glaube, im
SMB-Protokoll gibt es das auch.
Post by Marcel Mueller
Das größte Risiko dabei ist, dass man bei
erbeuteten, verschlüsselten Passwörtern diese nicht per Brute Force
knacken muss, sondern direkt zur Authentifizierung benutzen kann. Da
könnte man genausogut die Klartext-Passwörter speichern.
So ist es. Das zu vermeiden ist einigermaßen komplex. Ich empfehle, sich
mal die Spezifikation von SCRAM durchzulesen und zu versuchen, das zu
knacken
Post by Marcel Mueller
Ähnliche Verfahren kann man natürlich auch zur Authentifizierung nutzen.
Aber dabei sollte der Server immer eine individuelle, zufällige
Challenge an den Client senden, um Replay-Attacken zu verhindern. Damit
ist man aber nicht mehr bei einem klassischen Hash, sondern eher bei
etwas mehrstufigem.
Siehe oben. Die meisten dieser Verfahren haben aber den von Dir oben
erwähnten Nachteil, dass am Server entweder ein Passwort im Klartext
oder ein Hash liegt, der direkt zur Authentifikation verwendet werden
kann.

SCRAM ist sicher nicht der einzige Algorithmus, der das vermeidet, aber
viele gibt es nicht in freier Wildbahn.

hp
Peter J. Holzer
2025-01-28 19:01:48 UTC
Permalink
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal berechnet
werden (müssen), damit die Passwörter selbst nicht erst zum Server
übertragen werden müssen,
Du formulierst das so, als ob das immer oder zumindest meistens der Fall
sei. Das ist aber keineswegs der Fall. In vielen Fällen wird das
Passwort zum Server übertragen.

In manchen anderen muss das Passwort (oder ein passwort-äquivalenter
Hash) am Server gespeichert werden. Das ist aus naheliegenden Gründen
selten besser.

Algorithmen, die beide Probleme vermeiden, sind eher rar, aber die
wenigen inzwischen doch recht verbreitet.
Post by Wendelin Uez
muß doch den berechnenden Clients der Algorithmus bekannt sein - es
kann ja nicht jeder irgendeinen beliebigen Algorithmus zur
Hash-Berechnung verwenden, es muß ja auf jedem Client derselbe
Hashwert herauskommen.
Das ist korrekt.
Post by Wendelin Uez
Ich möchte für meine private Software auch so einen Algorithmus haben. Ich
könnte zwar einen eigenen bauen, aber wenn es sowas wie genormte Algorithmen
gibt würde ich mich möglichst daran halten wollen. Gibt es dazu vielleicht
eine einigermaßen leicht verständliche Dokumentation?
State of the art ist SCRAM: https://www.rfc-editor.org/rfc/rfc5802
Einen recht guten Überblick, wie das funktioniert, liefert auch der
Wikipedia-Artikel:
https://en.wikipedia.org/wiki/Salted_Challenge_Response_Authentication_Mechanism

hp
Marc Haber
2025-01-28 20:09:26 UTC
Permalink
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal berechnet
werden (müssen), damit die Passwörter selbst nicht erst zum Server
übertragen werden müssen, muß doch den berechnenden Clients der Algorithmus
bekannt sein
Du hast da irgendwas nicht richtig verstanden.
Post by Wendelin Uez
Dann muß aber logischerweise den Clients auch der Berechnungsalgorithmus
bekannt sein. Es kann zwar jeder Server seinen eigenen haben, aber der
Client muß ihn kennen, um den Hash korrekt berechnen zu können.
Ich möchte für meine private Software auch so einen Algorithmus haben. Ich
könnte zwar einen eigenen bauen, aber wenn es sowas wie genormte Algorithmen
gibt würde ich mich möglichst daran halten wollen. Gibt es dazu vielleicht
eine einigermaßen leicht verständliche Dokumentation?
man 5 crypt
--
----------------------------------------------------------------------------
Marc Haber | " Questions are the | Mailadresse im Header
Rhein-Neckar, DE | Beginning of Wisdom " |
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 6224 1600402
Peter J. Holzer
2025-01-28 22:27:17 UTC
Permalink
Post by Marc Haber
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal
berechnet werden (müssen), damit die Passwörter selbst nicht erst zum
Server übertragen werden müssen, muß doch den berechnenden Clients der
Algorithmus bekannt sein
Du hast da irgendwas nicht richtig verstanden.
Er stellt sich die Welt besser vor, als sie ist.
Post by Marc Haber
Post by Wendelin Uez
Dann muß aber logischerweise den Clients auch der
Berechnungsalgorithmus bekannt sein. Es kann zwar jeder Server seinen
eigenen haben, aber der Client muß ihn kennen, um den Hash korrekt
berechnen zu können.
Ich möchte für meine private Software auch so einen Algorithmus haben.
Ich könnte zwar einen eigenen bauen, aber wenn es sowas wie genormte
Algorithmen gibt würde ich mich möglichst daran halten wollen. Gibt es
dazu vielleicht eine einigermaßen leicht verständliche Dokumentation?
man 5 crypt
Nicht wirklich.

Crypt(3) setzt man sinnvollerweise am Server ein (am Client wär's eher
sinnlos) und dann erfordert es, dass das Passwort im Klartext zum Server
geschickt wird.

hp
Arno Welzel
2025-02-01 11:31:56 UTC
Permalink
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal berechnet
werden (müssen), damit die Passwörter selbst nicht erst zum Server
übertragen werden müssen, muß doch den berechnenden Clients der Algorithmus
bekannt sein - es kann ja nicht jeder irgendeinen beliebigen Algorithmus zur
Hash-Berechnung verwenden, es muß ja auf jedem Client derselbe Hashwert
herauskommen.
Die Annahme ist schon mal falsch. Passwort-Hashes werden üblicherweise
*nicht* im Client berechnet.

Deswegen ist ja auch HTTPS bzw. TLS notwendig, damit die Passwörter auf
dem Übertragungsweg geschützt sind. Erst im Server wird dann aus dem
empfangenen Passwort der Hash berechnet und dann verglichen, ob das der
selbe Hash ist, der auf dem Server für ein Benutzerkonto gespeichert ist.

[...]
Post by Wendelin Uez
Ich möchte für meine private Software auch so einen Algorithmus haben. Ich
könnte zwar einen eigenen bauen, aber wenn es sowas wie genormte Algorithmen
gibt würde ich mich möglichst daran halten wollen. Gibt es dazu vielleicht
eine einigermaßen leicht verständliche Dokumentation?
Als Einstieg:
<https://www.elektronik-kompendium.de/sites/net/1910161.htm>
--
Arno Welzel
https://arnowelzel.de
Wendelin Uez
2025-02-02 14:14:38 UTC
Permalink
Post by Arno Welzel
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal berechnet
werden (müssen), damit die Passwörter selbst nicht erst zum Server
übertragen werden müssen, muß doch den berechnenden Clients der Algorithmus
bekannt sein - es kann ja nicht jeder irgendeinen beliebigen Algorithmus zur
Hash-Berechnung verwenden, es muß ja auf jedem Client derselbe Hashwert
herauskommen.
Die Annahme ist schon mal falsch. Passwort-Hashes werden üblicherweise
*nicht* im Client berechnet.
Eben. Dann muß das Passwort zum Server übertragen werden. Wozu dann einen
Hash berechnen, wenn das Passwort ohnehin sicher übertragen werden kann?
Post by Arno Welzel
<https://www.elektronik-kompendium.de/sites/net/1910161.htm>
Danke!
Peter J. Holzer
2025-02-02 19:19:24 UTC
Permalink
Post by Wendelin Uez
Post by Arno Welzel
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal
berechnet werden (müssen), damit die Passwörter selbst nicht erst
zum Server übertragen werden müssen, muß doch den berechnenden
Clients der Algorithmus bekannt sein - es kann ja nicht jeder
irgendeinen beliebigen Algorithmus zur Hash-Berechnung verwenden, es
muß ja auf jedem Client derselbe Hashwert herauskommen.
Die Annahme ist schon mal falsch. Passwort-Hashes werden üblicherweise
*nicht* im Client berechnet.
Eben. Dann muß das Passwort zum Server übertragen werden. Wozu dann einen
Hash berechnen, wenn das Passwort ohnehin sicher übertragen werden kann?
Weil man das Passwort nicht im Klartext am Server speichern will.

hp
Arno Welzel
2025-02-02 19:54:44 UTC
Permalink
Post by Wendelin Uez
Post by Arno Welzel
Post by Wendelin Uez
Nachdem die Hashes für die Passwörter gängiger Plattformen lokal berechnet
werden (müssen), damit die Passwörter selbst nicht erst zum Server
übertragen werden müssen, muß doch den berechnenden Clients der Algorithmus
bekannt sein - es kann ja nicht jeder irgendeinen beliebigen Algorithmus zur
Hash-Berechnung verwenden, es muß ja auf jedem Client derselbe Hashwert
herauskommen.
Die Annahme ist schon mal falsch. Passwort-Hashes werden üblicherweise
*nicht* im Client berechnet.
Eben. Dann muß das Passwort zum Server übertragen werden. Wozu dann einen
Hash berechnen, wenn das Passwort ohnehin sicher übertragen werden kann?
Damit das Passwort auf dem Server nicht im Klartext *gespeichert* ist,
sondern nur ein Hash davon. Aus dem Hash kann man das Passwort nämlicht
nicht mehr herstellen. Man kann nur vergleichen, ob ein von außen an den
Server übermitteltes Passwort den richtigen Hash ergibt.

Das sind *Grundlagen*!
--
Arno Welzel
https://arnowelzel.de
Loading...