Die Schwäche, auf die Sie anspielen, ist real. Ein wichtiger Punkt ist, dass der Angreifer nach einer Gefährdung des Servers kaum einen Anreiz hat, Kennwörter abzurufen, die Zugriff auf diesen Server gewähren - er ist bereits vor Ort. Menschliche Benutzer haben jedoch die Angewohnheit, Kennwörter wiederzuverwenden, und das ist ein großes Problem, da ein wiederverwendetes Kennwort dazu führt, dass sich Kompromisse auf einem Server genau so "verbreiten", wie Sie es erklären: Der Angreifer greift nach dem Kennwort P für Benutzer U und vermutet (leider meistens meistens), dass derselbe Benutzer U auf einigen anderen Servern dasselbe Kennwort verwendet hat.
Das Hashing auf der Clientseite ist eine gute Idee, aber es gibt Details :
Was auch immer der Client an den Server sendet, sei es das Das Passwort selbst oder das Hash-Passwort gewährt Zugriff. Es ist passwortäquivalent . Wenn der Server diese Hashes "wie sie sind" in seiner Datenbank speichert, befindet er sich in der gleichen Situation wie ein Server, der Klartextkennwörter speichert, und das ist schlecht. Daher MUSS der Server auch Hashing durchführen.
Clientseitiges Hashing tritt nur auf, wenn auf der Clientseite Code vorhanden ist, der das Hashing ausführt. In einem Webkontext bedeutet dies JavaScript. Leider ist JavaScript bei kryptografischen Implementierungen schlecht. Insbesondere ist es ziemlich langsam, sodass das clientseitige Hashing nicht die vielen Iterationen verwenden kann, die normalerweise für ein gutes Kennwort-Hashing erforderlich sind (siehe dies für Details). Dies würde auch für Clients ohne JavaScript nicht funktionieren.
In einem Webkontext wird das clientseitige Hashing, falls es auftritt, durch den gesendeten JavaScript-Code durchgeführt vom Server . Wenn der Server unter feindliche Kontrolle geraten ist, sendet er möglicherweise schädliches JavaScript, das vorgibt, das Hashing durchzuführen, dies jedoch nicht. Der Benutzer wird nicht klüger sein. Somit ist das Grundproblem nicht gelöst.
Clientseitiges Hashing wird normalerweise unter dem Namen "Server Relief" ins Auge gefasst, um nicht die Sicherheit gegen böse Server zu erhöhen, sondern um dem Server die Verarbeitung vieler gleichzeitiger Benutzer zu ermöglichen, ohne die gesamte CPU für viel Hashing aufzuwenden. Da JavaScript das ist, was es ist, wird dies heutzutage nicht mehr häufig durchgeführt.