Tôi đã bắt gặp một cuộc thảo luận trong đó tôi biết rằng những gì tôi đang làm thực tế không phải là mật khẩu muối mà là tiêu chúng và tôi đã bắt đầu thực hiện cả hai với một chức năng như:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Bỏ qua thuật toán băm đã chọn (tôi muốn đây là một cuộc thảo luận về muối và ớt và không phải là thuật toán cụ thể nhưng tôi đang sử dụng một thuật toán an toàn), đây có phải là một lựa chọn an toàn hay tôi nên làm gì đó khác đi? Đối với những người không quen thuộc với các điều khoản:
Một muối là một giá trị được tạo ngẫu nhiên thường được lưu trữ với các chuỗi trong cơ sở dữ liệu được thiết kế để làm cho nó không thể sử dụng bảng băm để crack mật khẩu. Vì mỗi mật khẩu đều có muối riêng, tất cả chúng phải được ép buộc riêng lẻ để bẻ khóa chúng; tuy nhiên, vì muối được lưu trữ trong cơ sở dữ liệu với hàm băm mật khẩu, thỏa hiệp cơ sở dữ liệu có nghĩa là mất cả hai.
Một tiêu là một giá trị tĩnh trang web rộng lưu trữ riêng biệt từ cơ sở dữ liệu (thường là mã hóa cứng trong mã nguồn của ứng dụng) được dự định là bí mật. Nó được sử dụng để thỏa hiệp cơ sở dữ liệu sẽ không khiến bảng mật khẩu của toàn bộ ứng dụng bị cưỡng bức.
Có bất cứ điều gì tôi thiếu và đang muối và tiêu mật khẩu của tôi là lựa chọn tốt nhất để bảo vệ an ninh người dùng của tôi? Có bất kỳ lỗ hổng bảo mật tiềm năng để làm điều này theo cách này?
Lưu ý: Giả sử cho mục đích thảo luận rằng ứng dụng và cơ sở dữ liệu được lưu trữ trên các máy riêng biệt, không chia sẻ mật khẩu, v.v ... vì vậy vi phạm máy chủ cơ sở dữ liệu không tự động có nghĩa là vi phạm máy chủ ứng dụng.