Điểm:0

Có thể xác thực độ mạnh mật khẩu phía máy chủ bằng băm mật khẩu phía máy khách không?

lá cờ in

Giả sử tôi muốn thiết lập chiến lược xác thực mật khẩu và tên người dùng cổ điển trên máy chủ. Tất cả thông tin liên lạc được mã hóa thông qua TLS. Nhưng lý tưởng nhất là tôi vẫn không muốn máy chủ có thể đọc mật khẩu ở dạng văn bản thuần túy, dù chỉ là tạm thời. Cuối cùng, khách hàng có thể gửi mật khẩu được băm và thêm muối bằng một số khóa (để đơn giản, hãy giả sử đó là tên người dùng). Hãy gọi đây là một nguồn gốc mật khẩu mở khóa. Sau đó, máy chủ sẽ lần lượt băm và thêm mật khẩu dẫn xuất bằng thuật toán như Bcrypt hoặc PBKDF2 và lưu trữ mật khẩu đó cho các yêu cầu trong tương lai.

Cho đến nay không có gì trong số này là mới lạ và có rất nhiều cuộc thảo luận về chủ đề này. Nhưng điều tôi không thể tìm thấy trong các cuộc thảo luận này là cách thực hiện xác thực phía máy chủ của sức lực sau đó văn bản thô mật khẩu trong câu hỏi? Mọi xác thực cường độ phía máy khách đều có thể bị bỏ qua hoặc ứng dụng khách có thể có lỗi xác thực không đủ cường độ, do đó, việc xác thực cường độ phải được thực hiện trên máy chủ. Nhưng đồng thời tôi không muốn máy chủ có quyền truy cập vào mật khẩu văn bản thuần túy.

Vì vậy, câu hỏi của tôi là, 2 yêu cầu đó loại trừ lẫn nhau hay có cách nào để đạt được cả hai yêu cầu? Việc xác thực độ mạnh có thể được thực hiện dựa trên mật khẩu dẫn xuất không? Ít nhất, có thể kiểm tra độ dài của mật khẩu văn bản thuần túy bằng cách sử dụng mật khẩu dẫn xuất để ngăn đăng ký bằng mật khẩu trống không? Hay tôi, với tư cách là chủ dự án, phải chấp nhận rằng một số người dùng có thể bỏ qua xác thực phía máy khách và không chịu trách nhiệm nếu tài khoản của họ bị xâm phạm do bỏ qua xác thực độ mạnh phía máy khách?

Tôi nhận ra rằng người ta có thể sử dụng một chiến lược hỗn hợp, trong đó mật khẩu được gửi từ máy khách ở dạng văn bản thuần túy chỉ trong quá trình đăng ký/đặt lại mật khẩu và ở dạng băm, muối cho bất kỳ yêu cầu nào tiếp theo. Đây là một cải tiến so với việc gửi mật khẩu ở dạng văn bản thuần mọi lúc, nhưng vẫn không đáp ứng yêu cầu không bao giờ để lộ mật khẩu ở dạng văn bản thuần cho máy chủ.

Điểm:3
lá cờ ca

Trên thực tế, bạn không thể kiểm tra độ mạnh của bất kỳ mật khẩu nào đã được băm khi gửi cho bạn. Hàm băm là Hàm một chiều theo thiết kế, nghĩa là bạn không được phép đảo ngược hàm băm và nhận bất kỳ thông tin có ý nghĩa nào về đầu vào.

Tuy nhiên, bạn có thể dễ dàng xác minh rằng mật khẩu không thuộc danh sách ngắn các mật khẩu phổ biến, yếu, chẳng hạn như chuỗi trống "", "abc", "123", "password", v.v. Bạn làm điều đó đơn giản bằng cách lặp lại quy trình băm phía máy khách với phía máy chủ đầu vào này và kiểm tra sự bằng nhau. Độ dài của danh sách mật khẩu yếu như vậy sẽ bị giới hạn bởi các ràng buộc về hiệu suất. Vì hàm băm do khách hàng gửi đã được thêm muối, nên máy chủ sẽ phải xây dựng lại danh sách này cho mỗi lần đăng ký và thay đổi mật khẩu.

Do đó, phần lớn các kiểm tra độ chính xác của mật khẩu sẽ phải được thực hiện phía máy khách, với điều kiện là mật khẩu chỉ được gửi dưới dạng giá trị băm.

Ý tưởng của bạn về sơ đồ đăng ký kết hợp, trong đó mật khẩu được gửi dưới dạng văn bản thuần túy đến máy chủ chỉ để kiểm tra nhanh, không lý tưởng, như bạn đã đề cập. Để bắt đầu, bạn không thu được nhiều lợi ích khi yêu cầu khách hàng gửi mật khẩu văn bản thuần túy, thay vì một hàm băm đơn giản của cùng một mật khẩu. Hầu hết các kiểm tra độ chính xác được hưởng lợi từ việc có mật khẩu văn bản thuần túy, có thể dễ dàng được thực hiện phía máy khách. Phần lớn thử nghiệm phía máy chủ có lẽ nên được thực hiện tốt nhất dưới dạng tìm kiếm trong cơ sở dữ liệu băm của các mật khẩu yếu phổ biến (Bảng cầu vồng).

Điều đó nói rằng, không tìm thấy hàm băm trong bảng cơ sở dữ liệu như vậy, không đảm bảo rằng mật khẩu đủ mạnh.Mật khẩu dài là sự kết hợp của ba hoặc bốn từ ngẫu nhiên trong từ điển, có thể dễ dàng bị phát hiện nếu bạn có quyền truy cập vào mật khẩu văn bản thuần túy, nhưng có thể không phải là mục nhập ngay cả trong bảng cầu vồng khá lớn.

arslancharyev31 avatar
lá cờ in
"Bạn làm điều đó đơn giản bằng cách lặp lại quy trình băm phía máy khách với phía máy chủ đầu vào này và kiểm tra sự bằng nhau." - Tôi chưa nghĩ đến cách tiếp cận này, nhưng bây giờ tôi thấy cách nó có thể được sử dụng hiệu quả để ngăn đăng ký mật khẩu từ danh sách các trường hợp đặc biệt (chẳng hạn như chuỗi rỗng). 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.