Tôi đang cố gắng hiểu rõ hơn về cách thức hoạt động của TLS. Tôi hiểu rằng trong trường hợp sử dụng thông thường, bạn cần các giá trị ngẫu nhiên khác nhau được tạo và sử dụng trong quá trình trao đổi khóa, để ngăn một số MITM sử dụng lại đường truyền trước đó để giả mạo máy chủ hoặc máy khách.
Tuy nhiên, chúng ta hãy giả sử một số trường hợp suy biến trong đó có một máy chủ duy nhất có khóa công khai duy nhất đã được các máy khách của nó cũng như các đối thủ khác biết đến. Trong trường hợp này, tôi nghĩ rằng tất cả những gì cần thiết để thực hiện trao đổi khóa an toàn sẽ như sau:
- Máy khách sử dụng khóa RSA công khai của máy chủ để mã hóa khóa phiên đối xứng ngẫu nhiên
- Máy khách gửi khóa phiên được mã hóa cho máy chủ
- Máy chủ giải mã khóa phiên bằng khóa RSA riêng của máy chủ
- Máy chủ sử dụng khóa phiên để mã hóa thông báo "đã hoàn tất"
- Máy chủ gửi cho máy khách thông báo "đã hoàn thành" được mã hóa
- Khách hàng sử dụng khóa phiên để giải mã thông báo "đã hoàn thành"
- Khách hàng xác minh thông báo là "kết thúc", quá trình bắt tay hoàn tất
Vì vậy, trong quy trình đơn giản hóa này, giá trị duy nhất thay đổi mỗi phiên là chính khóa phiên, do đó không sử dụng ngẫu nhiên máy khách hoặc máy chủ trước đó; và không có bí mật tiền chính, một lần nữa chỉ có khóa phiên.
Điều này giống như một sự đơn giản hóa quá mức của mọi thứ, nhưng tôi gặp khó khăn khi nhìn thấy những gì tôi đang thiếu. Nếu mục đích chính của trao đổi khóa là để đảm bảo máy chủ là người duy nhất nhận được khóa phiên, thì điều này có vẻ an toàn. Bằng chứng ngược lại, theo dõi lại quá trình trên, nhưng từ quan điểm của một đối thủ:
- Đối thủ đã có khóa công khai của máy chủ, có thể mã hóa khóa phiên đối xứng của chính nó cho mục đích MITM
- Kẻ thù có thể thấy khóa phiên được mã hóa từ máy khách, nhưng không thể giải mã nó; có thể gửi cho máy chủ khóa phiên MITM được mã hóa của chính nó
- Máy chủ giải mã khóa phiên MITM, không biết nguồn gốc của nó
- Máy chủ sử dụng khóa phiên MITM để mã hóa "xong"
- Máy chủ gửi máy khách (thực tế là đối thủ) đã mã hóa "xong"
- Đối thủ có thể giải mã "xong", nhưng không thể mã hóa lại và gửi cho khách hàng bằng khóa phiên của khách hàng, mà đối thủ không thể giải mã
- Cuối cùng, khách hàng sẽ không bao giờ nhận được "hoàn thành" được mã hóa chính xác, từ máy chủ hoặc đối thủ
Vì vậy, có vẻ như điểm yếu tiềm ẩn duy nhất ở đây là máy chủ không có cách nào để biết liệu nó đang giao tiếp với khách hàng hợp pháp hay kẻ thù - nhưng theo tôi hiểu, việc xác thực ứng dụng khách chưa bao giờ được xem xét ngay từ đầu. Việc xác thực máy chủ là cần thiết, nhưng trong trường hợp này, đó không phải là vấn đề đáng lo ngại vì chỉ có một máy chủ duy nhất.
Vì vậy, tôi có đúng không khi hiểu rằng nếu một người sử dụng kế hoạch này, thì kẻ thù sẽ không thể thực hiện một cuộc tấn công MITM? Hoặc làm thế nào điều này có thể bị đánh bại?