Xác thực thông báo là gì?


101

Xác thực thông báo khác với Xác thực cơ bản như thế nào ngoài việc gửi thông tin xác thực dưới dạng văn bản thuần túy?


1
Lời giải thích tuyệt vời của @Gumbo ngay tại đây: stackoverflow.com/a/5288679/591487
inorganik

2
Một cái gì đó bạn KHÔNG BAO GIỜ nên sử dụng. Không bảo vệ mật khẩu khi chuyển tiếp và yêu cầu máy chủ lưu trữ mật khẩu nguyên bản.
CodesInChaos

2
Digest cung cấp bảo mật trong quá trình vận chuyển tốt hơn so với Xác thực cơ bản cho lưu lượng không được mã hóa , nhưng nó yếu. Thay vào đó, sử dụng Xác thực cơ bản kết hợp với SSL / TLS sẽ an toàn hơn RẤT NHIỀU, bởi vì bằng cách đó, bạn cũng có thể giữ mật khẩu trên máy chủ được mã hóa.
gỉ vào

Câu trả lời:


179

Sự khác biệt chính là nó không yêu cầu gửi tên người dùng và mật khẩu qua dây ở dạng bản rõ. Nó cũng miễn nhiễm với các cuộc tấn công phát lại, vì nó sử dụng số một lần từ máy chủ.

Máy chủ cung cấp cho máy khách một số sử dụng một lần (số không) mà nó kết hợp với tên người dùng, lĩnh vực, mật khẩu và yêu cầu URI. Máy khách chạy tất cả các trường đó thông qua một phương pháp băm MD5 để tạo ra một khóa băm.

Nó gửi khóa băm này đến máy chủ cùng với tên người dùng và lĩnh vực để cố gắng xác thực.

Phía máy chủ, phương pháp tương tự được sử dụng để tạo mã băm, chỉ thay vì sử dụng mật khẩu được nhập vào trình duyệt, máy chủ sẽ tra cứu mật khẩu mong đợi cho người dùng từ DB người dùng của nó. Nó tra cứu mật khẩu được lưu trữ cho tên người dùng này, chạy qua cùng một thuật toán và so sánh nó với những gì khách hàng đã gửi. Nếu chúng khớp thì quyền truy cập được cấp, nếu không nó có thể gửi lại 401 Không được phép (không đăng nhập hoặc đăng nhập không thành công) hoặc 403 Bị cấm (truy cập bị từ chối).

Xác thực thông số được chuẩn hóa trong RFC2617 . Có một cái nhìn tổng quan về nó trên Wikipedia :

Bạn có thể nghĩ về nó như thế này:

  1. Khách hàng đưa ra yêu cầu
  2. Khách hàng nhận lại một nonce từ máy chủ và yêu cầu xác thực 401
  3. Ứng dụng khách gửi lại mảng phản hồi sau (tên người dùng, cảnh giới, create_md5_key (nonce, tên người dùng, cảnh giới, URI, password_given_by_user_to_browser)) (vâng, điều đó rất đơn giản)
  4. Máy chủ lấy tên người dùng và cảnh giới (cộng với nó biết URI mà khách hàng đang yêu cầu) và nó tra cứu mật khẩu cho tên người dùng đó. Sau đó, nó đi và thực hiện phiên bản create_md5_key của riêng mình (nonce, tên người dùng, cảnh giới, URI, password_I_have_for_this_user_in_my_db)
  5. Nó so sánh kết quả đầu ra của create_md5 () mà nó nhận được với đầu ra mà khách hàng đã gửi, nếu chúng khớp với mật khẩu mà khách hàng đã gửi. Nếu chúng không khớp với mật khẩu đã gửi là sai.

Lời giải thích hay. Tên người dùng & pwd có dành cho người dùng windows không? Chúng được tạo ra từ đâu?
SoftwareGeek

Chúng là bất cứ thứ gì người dùng nhập vào trình duyệt. Mật khẩu cần phải khớp với bất kỳ thứ gì mà máy chủ đã lưu trữ để làm mật khẩu cho người dùng đó. Nhiều khả năng đó không phải là thứ cụ thể cho ứng dụng web đó chứ không phải mật khẩu Windows của bạn. Nó phụ thuộc rất nhiều vào cách ứng dụng web được kết hợp với nhau.
Ian C.

14
Câu trả lời này đã được 6 năm tuổi, nhưng tôi đoán tất cả các hệ thống nhận biết bảo mật đều lưu trữ mật khẩu ở định dạng muối băm. Không có, và không nên có bất kỳ phương pháp nào để lấy mật khẩu ban đầu từ cơ sở dữ liệu khiến cho phép thông báo không thể thực hiện được.
Ramon de Klein

3
Nếu tiêu hóa băm của tên người dùng và mật khẩu được lưu trữ trong db thay vì mật khẩu đơn giản, sau đó nó vẫn có thể sử dụng tiêu hóa auth @RamondeKlein
karakays

1
@BlueBockser Tôi nghĩ karakays có nghĩa là thay vì sử dụng mật khẩu đơn giản, một hàm băm kết quả từ việc kết hợp cả tên người dùng và mật khẩu của nó sẽ được lưu trữ trong máy chủ khi đăng ký và được tính toán ở phía máy khách trước khi xác thực. Nó cũng có thể được thực hiện chỉ với một hàm băm của mật khẩu.
logo_writer

14

Một băm của thông tin xác thực được gửi qua dây.

HA1 = MD5(username:realm:password)

Wikipedia có một bài viết xuất sắc về chủ đề này


từ máy khách đến máy chủ? Bạn có thể vui lòng cung cấp các bước cho tương tác không? Bài viết trên Wikipedia là tốt nhưng tôi cần giải thích hoặc ví dụ tốt hơn.
SoftwareGeek

Có, máy khách tạo giá trị băm và gửi nó đến máy chủ. Bài viết trên Wikipedia mô tả chi tiết về giao thức, tôi khuyên bạn nên tham khảo bài viết đó để biết thêm thông tin.
Philip Fourie

1

Cách duy nhất để lấy mã băm HA1 của thông tin đăng nhập là biết mật khẩu. Máy chủ biết HA1 nhưng không biết mật khẩu đã tạo ra nó. Nếu kẻ tấn công biết HA1, nó có thể xâm nhập vào hệ thống. Vì vậy, nó không được gửi xuống dây. Một băm khác dựa trên nonce, v.v. được thực hiện trước khi thực hiện việc này và điều này phải đồng ý với một phép tính tương tự được thực hiện trên máy chủ. Do đó, miễn là máy chủ giữ HA1 ở chế độ riêng tư thì hệ thống vẫn an toàn.


Đây là lời giải thích cho việc xác thực Digest, nơi mật khẩu không được gửi trong văn bản đơn giản (đó là trường hợp cho Basic Auth)
Erik Oppedijk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.