Ein paar Jahre habe ich hier auf Stackoverflow gefragt, wie PHP Password Storage sicher zu machen. Die main answer schlägt folgende Hash-Algorithmus:PHP Passwortspeicher mit HMAC + nonce - Ist Nonce Zufälligkeit wichtig?
function hash_password($password, $nonce) {
global $site_key;
return hash_hmac('sha512', $password . $nonce, $site_key);
}
Die Antwort deutet auf eine zufällige nonce verwenden. Gibt es einen Vorteil darin, eine zufällige Nonce über einfache eindeutige Nonces zu haben?
Zum Beispiel kann jeder Benutzer seine eigene ID haben, die sich nicht ändert. Nehmen wir jedoch an, Benutzer-IDs sind sequenziell (mit der automatischen Inkrementierung von MySQL) und daher nicht zufällig. Wäre die Benutzer-ID eine gute Nonce oder ist die Zufälligkeit wichtig?
Jetzt kann jeder Benutzer einen Benutzernamen auswählen. Jeder Benutzer hat seinen eigenen Benutzernamen, der sich nicht ändert, und zwei verschiedene Benutzer können nicht den gleichen Benutzernamen haben. Benutzernamen sind immer noch nicht zufällig, aber sie sind auch nicht sequentiell. Würden Benutzernamen als Nonce gut genug sein? Wäre es besser, als die Benutzer-ID zu verwenden?
Ihre Nonce sollte ein Salz sein. Ein Salz ist per Definition zufällig. Ich habe eine lange Antwort über das Salzen hier geschrieben: http://stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190 – Jacco