Tôi đang học Rails, tại thời điểm này, nhưng câu trả lời không nhất thiết phải là Rails.Làm thế nào để sử dụng một muối làm cho một mật khẩu an toàn hơn nếu nó được lưu trữ trong cơ sở dữ liệu?
Vì vậy, như tôi hiểu nó, một hệ thống mật khẩu an toàn các công trình như thế này:
- Người dùng tạo mật khẩu
- Hệ thống mã hóa mật khẩu với một thuật toán mã hóa (nói SHA2).
- Lưu trữ băm mật khẩu được mã hóa trong cơ sở dữ liệu.
Sau khi nỗ lực đăng nhập:
- dùng cố gắng đăng nhập
- Hệ thống tạo hash của nỗ lực với thuật toán mã hóa cùng
- Hệ thống so sánh hash của nỗ lực với hash của mật khẩu trong cơ sở dữ liệu.
- Nếu phù hợp, họ sẽ vào. Nếu không, họ phải thử lại.
Như tôi đã hiểu, cách tiếp cận này tùy thuộc vào cuộc tấn công cầu vồng - trong đó những điều sau đây có thể xảy ra.
Kẻ tấn công có thể viết tập lệnh cố định mọi hoán vị ký tự, số và ký hiệu, tạo băm với cùng thuật toán mã hóa và so sánh chúng với băm trong cơ sở dữ liệu.
Vì vậy, cách xung quanh nó là kết hợp băm với một muối duy nhất. Trong nhiều trường hợp, ngày và giờ hiện tại (xuống đến mili giây) mà người dùng đăng ký.
Tuy nhiên, muối này được lưu trữ trong cột cơ sở dữ liệu 'muối'. Vì vậy, câu hỏi của tôi là, làm thế nào điều này thay đổi thực tế rằng nếu kẻ tấn công có quyền truy cập vào cơ sở dữ liệu ở nơi đầu tiên và có băm tạo ra cho mật khẩu 'thực' và cũng có băm cho muối, làm thế nào là điều này không chỉ là tùy thuộc vào một cuộc tấn công cầu vồng? Bởi vì, lý thuyết sẽ là anh ta cố gắng mỗi hoán vị + băm muối và so sánh kết quả với băm mật khẩu. Có thể mất nhiều thời gian hơn, nhưng tôi không thấy nó thật dễ dàng.
Tha thứ cho sự thiếu hiểu biết của tôi, tôi chỉ học những thứ này và điều này không bao giờ có ý nghĩa với tôi.
bản sao có thể có của [Nơi bạn lưu trữ chuỗi muối của mình?] (Http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings) – blowdart
Không. Tôi không ủng hộ hoặc yêu cầu nếu nó có ý nghĩa hơn để lưu trữ muối ở nơi khác ngoài db. Tôi đang cố gắng khám phá ý tưởng về việc muối thực sự an toàn hơn như thế nào, trong một thời đại khi tài nguyên máy tính rẻ đến vậy. – marcamillion
SHA-2 là một thuật toán băm. Hashing là một khái niệm khác để mã hóa. – wulfgarpro