Der kryptografische Hash-Algorithmus MD5 hat bereits begonnen, zu brechen, vor allem in Bezug auf seine Kollisionsresistenz-Eigenschaft, sowie Pre-Bild-Widerstand leicht. Siehe the Wikipedia article, in the security section.
Daher würde ich MD5 nicht für etwas Sicherheitsrelevante verwenden. Eine ähnliche Geschichte mit SHA-1, in der es begann gebrochen zu sein, also würde ich SHA-2 verwenden, wenn Sie tatsächlich einen Hash-Algorithmus benötigen.
Das Problem mit Ihrem Ansatz ist, dass Sie das Token nicht einfach von einzelnen Geräten widerrufen können. Wenn ein Passwort als Eingabe für Ihren Algorithmus verwendet wird, kann es anfällig für einen Hash-Crack-Angriff werden, sollten die anderen Werte bekannt sein. Verlassen Sie sich auch nicht darauf, dass Ihre Methode geheim ist. Kerckhoffs's principle gibt an "Ein Kryptosystem sollte sicher sein, auch wenn alles über das System, außer dem Schlüssel, öffentlich bekannt ist."
Ein weiteres Problem mit Ihrem Ansatz besteht darin, dass Ihr Hashalgorithmus Klartextzugriff auf das Kennwort benötigt, was darauf hindeuten könnte, dass Sie Kennwörter unsicher speichern. Kurz ensure you are using bcrypt for password storage. Natürlich erstellen Sie möglicherweise den Cookie und speichern eine serverseitige Version an einem Punkt, an dem der Benutzer sein Passwort eingibt. Wenn Sie jedoch Cookies bei einer Passwortänderung automatisch ungültig machen wollen, denke ich nicht daran.
Die sicherste Methode zum Verwalten von Geräten mit Token besteht darin, ein zufälliges 128-Bit-Token pro Gerät zu generieren und diesen Hash-Code mit SHA-2 in Ihrer Datenbank zu speichern. Stellen Sie sicher, dass ein CSPRNG zum Generieren des Tokens verwendet wird.
Deshalb:
Cookie value: 128-bit token
Database value: SHA-2(128-bit token)
Bitte beachte, dass Salze sind nicht für die Werte solchen Bitstärke erforderlich. Wenn ein Benutzer sein Kennwort ändert, löscht er einfach alle serverseitigen Tokens für den Benutzer. Darüber hinaus können Sie dem Benutzer erlauben, Token für verschiedene Geräte einzeln zu sperren, ohne dass eine Passwortänderung erforderlich ist.
Der Grund für das Hashing auf der Serverseite ist die Verringerung von Session-Hijacking, falls ein Angreifer Zugriff auf Ihre Sitzungstabelle erhält.
gut wie Cookies auf der Maschine gespeichert sind, wie würden Sie nur eine verwenden? –
@Dagon Was? Ja, sie sind auf der Client-Seite gespeichert. – stack
gut, wenn sie auf mehreren Geräten sind, wird jedes Gerät einen Cookie benötigen. –