Was ist ein guter Weg, um ein zufälliges "Site Salt" zu erzeugen, das zum Erstellen von Token zum Abrufen von Passwörtern verwendet wird?

Ich möchte einen Site-weiten Hash erstellen, der als Salt beim Erstellen von Token zum Abrufen von Passwörtern verwendet wird. Ich habe mich im Stackoverflow herumgetrieben, um ein Gefühl dafür zu bekommen, wie das am besten funktioniert.

Hier ist der Rücksetzvorgang:

Wenn ein Benutzer eine E-Mail zum Zurücksetzen des Kennworts anfordert, generiert der Code ein Abruf-Token:

$token = hash_hmac('sha256', $reset_hash* , $site_hash)

* $ reset_hash ist ein Hash, der mit der Funktion phpass HashPassword () erstellt und in der Benutzertabelle gespeichert wurde.

Ich sende dann das Token in einer URL an die E-Mail-Adresse des Benutzers. Sie klicken, bevor das Zeitlimit des Tokens in einer Stunde abgelaufen ist. Ich stimme ihre Übermittlung mit dem serverseitig generierten Challenge-Token überein. Wenn dies zutrifft, müssen sie ein neues Passwort wählen und sich dann anmelden.

Ich würde gerne wissen, wie der $ site_key am besten generiert wird. Ich denke darüber nach, einen anderen HMAC-Hash zu verwenden, der durch Zufallszahlen gesetzt wird:

$site_key = hash_hmac('sha256', MCRYPT_DEV_RANDOM, MCRYPT_DEV_RANDOM);

Dies erzeugt so etwas:

98bb403abbe62f5552f03494126a732c3be69b41401673b08cbfefa46d9e8999

Wird dies ein geeigneter Zufall sein, um für diesen Zweck verwendet zu werden? Mache ich das zu kompliziert oder gehe ich es falsch an?

Ich wurde durch diese Antwort zur Verwendung von HMAC inspiriert

BEARBEITEN Ich versuche, einen Schritt zu vermeiden, der von einigen meiner Kollegen als "geheime Frage" bezeichnet wird. Daher möchte ich, dass der Link zum Zurücksetzen einen einzigen Schritt zum Zurücksetzen des Kennworts enthält. Daher ist es mir ein Anliegen, dass dieser Prozess sicher genug ist, um ein System mit vertraulichen Informationen zu schützen.

RESOLVED, vorerst: Ich werde mit einem Nonce, wie von The Rook beschrieben, als Reset-Token gehen. Vielen Dank an alle für die Kommentare und das Feedback.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage