Điểm:1

Hàm password_verify() lấy muối từ mật khẩu được lưu trữ trong DB như thế nào?

lá cờ sg

Tôi đang tạo một biểu mẫu Đăng ký và Đăng nhập đơn giản bằng PHP. Khi đăng ký, tôi tạo hàm băm bằng hàm password_hash() rồi lưu trữ trong DB. Tại thời điểm Đăng nhập, ban đầu những gì tôi đã làm là tạo lại một hàm băm mới bằng cách sử dụng hàm password_hash() và sau đó so sánh nó với hàm băm Mật khẩu được lưu trữ.

Điều này luôn thất bại vì theo tôi hiểu bây giờ, một loại muối mới được sử dụng mỗi khi bạn tạo hàm băm mật khẩu bằng hàm password_hash(). Sau khi nghiên cứu, tôi biết rằng một người nên sử dụng hàm PHP password_verify(<plain_text_password>,<password_fetched_from_DB>).

Điều tôi không hiểu là tại sao hàm password_verify lại biết giá trị muối đã được sử dụng trước đó tại thời điểm đăng ký? Nếu muối không được biết thì password_verify cũng sẽ thất bại giống như hàm password_hash khi được sử dụng để so sánh.

Tôi đã đọc thêm về nó và điều tôi biết là khi hàm password_hash() được sử dụng để tạo hàm băm, nó cũng lưu trữ giá trị muối bên trong hàm băm? Chẳng hạn, nếu hàm băm được tạo là abcde12345, thì 12345 có thể là giá trị muối không?

Nếu điều này là đúng, thì bằng cách nhìn vào hàm băm, chúng ta có thể nói rằng phần "này" của hàm băm thực sự là giá trị muối không? Có phải giá trị muối luôn được đặt ở vị trí nhất định trong hàm băm không? Tôi sẽ đánh giá cao nếu ai đó có thể chia sẻ một ví dụ.

kelalaka avatar
lá cờ in
Bạn đã đọc hết [trang web PHP](https://www.php.net/manual/en/function.password-hash.php) chưa? Trong phần Giá trị trả lại hoặc xem thêm phần, bạn sẽ thấy [password_verify()](https://www.php.net/manual/en/function.password-verify.php) thank nhận đầu vào mật khẩu hiện tại và hàm băm được lưu trữ và trả về T/F!
Điểm:2
lá cờ si

Đầu ra của bất kỳ hàm băm mật khẩu thông thường nào bao gồm các cài đặt độ khó, muối và thông báo mật khẩu, được mã hóa thành một số định dạng mà hàm băm mật khẩu chỉ định. Chức năng xác minh mong đợi định dạng tương tự và chỉ cần đọc muối ra khỏi định dạng đó. trang web này có một lời giải thích tốt cho các hàm băm Argon2. Ví dụ: đối với argon2id (tùy chọn được đề xuất cho PHP password_hash) với mật khẩu 12345, salt qwertyuiop, 1 lần lặp, bộ nhớ 1024, độ dài băm 32, xử lý song song 1, đầu ra là $argon2id$v=19$m=1024,t=1,p=1$cXdlcnR5dWlvcA$dSEO3lF0tmBRi3/HZFZqPJGv38CW35xf9Fcs+8ti0yk

Bạn có thể thấy các tham số khác nhau, được phân tách bằng $ dấu hiệu.

Z3R0 avatar
lá cờ jp
Xin chào, tôi có một câu hỏi về muối.Là muối được lưu trữ với mật khẩu băm quá hay nó ở dạng văn bản rõ ràng? Ví dụ: Nếu tôi có hàm băm 1234.abcde và 1234 là muối được trả về bởi password_hash(), thì nó cũng được băm hay ở dạng văn bản rõ ràng? Vì vậy, khi tôi muốn kiểm tra hàm băm, tôi chỉ cần thêm 1234 vào mật khẩu ở dạng văn bản rõ ràng và thực hiện lại chức năng băm.
SAI Peregrinus avatar
lá cờ si
Muối (tất nhiên) ở dạng văn bản rõ ràng: đó không phải là bí mật (theo định nghĩa của "muối"). Trong hàm băm ví dụ sử dụng Argon2, đó là "cXdlcnR5dWlvcA", được mã hóa BASE64 nhưng chắc chắn không được mã hóa. Mã hóa là cần thiết để chuyển đổi các byte tùy ý (có thể bao gồm 0 byte) thành một "chuỗi" ký tự ASCII có thể in được không bao gồm 0 byte.
Điểm:1
lá cờ in

Có, muối và hàm băm được lưu trữ cùng nhau và hàm băm luôn được lưu trữ ở một nơi xác định - bạn chỉ cần tra cứu định dạng cho thuật toán băm cụ thể được sử dụng để tìm thông tin chi tiết.

Muối không nhằm mục đích bí mật hơn hàm băm, vì vậy không có vấn đề gì khi lưu trữ chúng cùng nhau.Việc sử dụng muối không nhằm mục đích làm cho một cuộc tấn công vũ phu không thể thực hiện được nếu kẻ tấn công lấy được bản sao cơ sở dữ liệu mật khẩu của bạn, nhưng những gì nó làm là ngăn chặn việc sử dụng các bảng băm được tính toán trước, được gọi là bảng cầu vồng và ngăn chặn bẻ khóa cùng một mật khẩu cho nhiều người dùng cùng một lúc.

Những cuộc tấn công đó không hoạt động với hệ thống mật khẩu muối vì tất cả những người chọn "p455w0rd" làm mật khẩu của họ sẽ được băm bằng một loại muối khác, vì vậy kẻ tấn công cần bẻ khóa riêng cho từng người trong số họ. Sẽ không mất nhiều thời gian với một mật khẩu tệ như vậy, nhưng lâu hơn nhiều so với khi không có muối.

Z3R0 avatar
lá cờ jp
Xin chào, tôi có một câu hỏi về muối. Là muối được lưu trữ với mật khẩu băm quá hay nó ở dạng văn bản rõ ràng? Ví dụ: Nếu tôi có hàm băm 1234.abcde và 1234 là muối được trả về bởi password_hash(), thì nó cũng được băm hay ở dạng văn bản rõ ràng? Vì vậy, khi tôi muốn kiểm tra hàm băm, tôi chỉ cần thêm 1234 vào mật khẩu ở dạng văn bản rõ ràng và thực hiện lại chức năng băm.
lá cờ in
Muối được lưu trữ trong bản rõ, nó không được băm. Nó được mã hóa bằng một lược đồ mà theo thiết kế, mọi người có thể dễ dàng đảo ngược, tương tự như ví dụ: mã hóa base64, vì mọi thứ nhị phân phải được mã hóa để được lưu dưới dạng văn bản thuần túy. Bạn có thể xem chi tiết trong trường hợp của bcrypt tại https://en.wikipedia.org/wiki/Bcrypt#Description
Z3R0 avatar
lá cờ jp
Thực sự cảm ơn bạn

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.