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.