Sau đây là một vấn đề trong thế giới thực.
Trong một giao thức được tiêu chuẩn hóa, các máy khách có thể kết nối với máy chủ bằng cách sử dụng xác thực 4 bước lẫn nhau trên kênh TCP không được bảo mật:
- pass-1: Máy khách gửi Thử thách C ngẫu nhiên đến máy chủ
- pass-2: Máy chủ trả lời bằng cách gửi ngẫu nhiên thử thách S cho máy khách
- pass-3: Client chuẩn bị res(S, K) và gửi cho S
- pass-4: Server trả lời client với res(C, K)
res(.) là thẻ GCM-GMAC phụ thuộc vào khóa đối xứng K (thực tế là AES128, nhưng điều này có thể không liên quan ở đây)
Sau khi xác thực lẫn nhau thành công, máy khách và máy chủ có thể tiếp tục giao tiếp dưới cái gọi là "hiệp hội", ví dụ: khách hàng có thể yêu cầu một số dữ liệu từ máy chủ.
Tuy nhiên, điều gì sẽ xảy ra nếu kẻ tấn công (không có khóa) đang lắng nghe trên mạng và bắt đầu một kẻ trung gian cũng như một máy khách độc hại (màu đỏ).
Khi client thật bắt đầu pass-1 và gửi C1 đến server, đồng thời client xấu gửi C2. Máy chủ đáp ứng cả hai yêu cầu, nhưng MitM quản lý để tiêm S2 để gửi đến máy khách tốt, máy khách này sẽ chuẩn bị res(S2) và gửi nó đến máy chủ. Nhưng MitM nắm bắt độ phân giải (S2) và thêm nó dưới dạng pass-3 để gửi đến máy chủ. Bây giờ, máy chủ xác thực ứng dụng khách xấu và gửi lại res(C2), mà ứng dụng khách xấu bỏ qua. Vì vậy, một kết nối dường như được xác thực lẫn nhau đã được thiết lập giữa máy khách và máy chủ xấu.
Tôi tự hỏi, liệu loại xác thực lẫn nhau này có thực sự hiệu quả hay không.