Muss ich das Salz mit bcrypt aufbewahren?


189

Javadoc von bCrypt enthält den folgenden Code zum Verschlüsseln eines Kennworts:

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

Verwenden Sie die checkpw-Methode, um zu überprüfen, ob ein Klartextkennwort mit einem zuvor gehashten übereinstimmt.

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

Diese Codefragmente implizieren für mich, dass das zufällig erzeugte Salz weggeworfen wird. Ist dies der Fall oder handelt es sich nur um einen irreführenden Code-Ausschnitt?

Antworten:


214

Das Salz wird in den Hash eingearbeitet (in einem Base64-Format codiert).

In herkömmlichen Unix-Passwörtern wurde das Salt beispielsweise als die ersten beiden Zeichen des Passworts gespeichert. Die restlichen Zeichen repräsentieren den Hashwert. Die Checker-Funktion weiß das und zieht den Hash auseinander, um das Salz wieder herauszuholen.


59
Das Salz ist im Passwort enthalten. Sie müssen also nicht das Salz sparen.
Swapnonil Mukherjee

2
Dank dafür. Ich wünschte, sie hätten das im Javadoc gesagt :) (Ich habe mir die Quelle angesehen und bestätigt - aber ich wusste nicht, wonach ich vorher gesucht habe)
RodeoClown

1
Danke - ich habe auch versucht, das herauszufinden! Jetzt frage ich mich, ob das eine gute Idee ist. Gibt es einen Vor- / Nachteil, wenn das Salz im Hash bleibt, anstatt es separat zu lagern?
Adam

8
@Adam - Da das Salz zufällig generiert wird, benötigen Sie keine Methode, um die beiden Dinge in Ihrer Datenbank zu verknüpfen.
RodeoClown

Ich habe mir den Quellcode angesehen und festgestellt, dass JavaDoc für das Salt-Argument zwar "möglicherweise mit BCrypt.gensalt generiert" wurde, ich jedoch die genSalt () -Methode verwenden muss oder Ausnahmen = /
the_new_mr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.