2013-07-09 48 views
6

Tôi chịu trách nhiệm thực hiện xác thực trong Ứng dụng web .NET MVC 4 của chúng tôi và tôi đã gặp phải một sự cố liên quan đến băm mật khẩu, lưu trữ và xác thực.Nơi để lưu trữ muối mật khẩu và cách lấy mật khẩu

Gói hiện đang sử dụng 2 Salts, 1 Dynamic (Per User) và 1 Static (Web App Constant) và chức năng Hashing mạnh.

Cho một bảng người dùng đơn giản có chứa một tên người dùng và mật khẩu:

  • Tôi lưu trữ cho mỗi người dùng muối trong một cột trong bảng tài khoản?

Lo ngại của tôi là khi làm như vậy, tôi sẽ phải đưa người dùng từ cơ sở dữ liệu vào bộ nhớ ứng dụng web chỉ với tên người dùng của nó. Có loại tấn công nào có thể có vấn đề không? Lý tưởng nhất tôi muốn có điều này là xác thực Yêu cầu SQL một bước/một.

Tôi có lo lắng quá nhiều không? Có thay thế cho muối "Mỗi người dùng" mà tôi vẫn có thể thực hiện xác thực một bước không?

+0

Cũng giống nhau: http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings – user956584

Trả lời

3

Muối có thể được lưu trữ cùng với mật khẩu băm, vì vậy bạn có thể tạo một muối cho mỗi mật khẩu thay vì cho mỗi người dùng. Nó là một thực tế phổ biến cho các hàm băm mật khẩu (hàm khởi tạo chậm như BCrypt hoặc PBKDF2), để trả về hàm cleartext của muối như một phần của mật khẩu băm, điều đó có nghĩa là bạn có thể lưu trữ muối và băm cùng nhau trong một trường cơ sở dữ liệu duy nhất.

Để xác minh mật khẩu đã nhập, trước tiên bạn phải tìm kiếm mật khẩu băm (sử dụng tên người dùng hoặc email), và sau đó hàm có thể trích xuất muối đã sử dụng từ băm mật khẩu được lưu trữ và sử dụng nó để so sánh băm . Điều đó thực sự nên trả lời câu hỏi của bạn, cơ sở dữ liệu thường không có các hàm phù hợp để băm mật khẩu, do đó bạn không thể thực hiện xác minh trong truy vấn SQL, việc xác minh sẽ được thực hiện trong mã.

Muối thứ hai được gọi là hạt tiêu, cách tốt nhất để thêm bí mật phía máy chủ này là mã hóa mật khẩu đã băm với bí mật này. Ngược lại với băm, đây sẽ là mã hóa hai chiều, điều này cho phép trao đổi khóa này một khi cần thiết.

+0

Cảm ơn rất nhiều. Tôi đã sử dụng thư viện SimpleCrypto.Net cho các phương thức băm PBKDF2. Tôi sẽ tiếp tục nhìn vào Pepper. – Alexandre

1

Bạn không cần thư viện bên ngoài để thực hiện việc này. Khuôn khổ có triển khai thực hiện PBKDF2 của riêng nó. Tôi thích lưu trữ muối trong một trường riêng biệt trong cơ sở dữ liệu nhưng đó chỉ là vấn đề về hương vị mà tôi đoán. Tôi đã viết ra những suy nghĩ của mình về băm mật khẩu here

Các vấn đề liên quan