Điểm:1

Có an toàn khi sử dụng RSA để trao đổi khóa AES không?

lá cờ jp

Tôi phải tạo Ứng dụng Máy khách-Máy chủ bằng Java và tôi muốn đảm bảo an toàn cho giao tiếp. Tôi nghĩ sẽ sử dụng AES để mã hóa tin nhắn và để trao đổi khóa, tôi thực hiện các bước tiếp theo:

  • Máy khách tạo khóa RSA và gửi khóa công khai đến máy chủ
  • Máy chủ sẽ mã hóa khóa AES bằng khóa Công khai RSA (Khóa AES được tạo ngẫu nhiên cho mọi máy khách)
  • Máy khách giải mã tin nhắn bằng khóa riêng RSA của nó và sau đó tất cả các tin nhắn sẽ được mã hóa bằng AES

Câu hỏi của tôi là: đó có phải là một thực hành tốt?

Swashbuckler avatar
lá cờ mc
Về cơ bản, những gì bạn đã mô tả là gói khóa bằng khóa chung/riêng. Nó cũng có thể được thực hiện với các phím đối xứng. Thay vì phát minh ra cách làm của riêng bạn và có thể mắc lỗi, bạn nên thực hiện triển khai hiện có từ một thư viện tiền điện tử tốt và sử dụng nó.
Maarten Bodewes avatar
lá cờ in
Câu hỏi thực sự là: bạn sẽ tin tưởng vào khóa công khai mà bạn nhận được như thế nào? Nó có thể được tạo ra bởi một đối thủ. Đây thường là nơi PKI phát huy tác dụng - thường là PKIX với chứng chỉ X.509 như được sử dụng trong ví dụ: trình duyệt của bạn để xác thực TLS (máy chủ).
Maarten Bodewes avatar
lá cờ in
Mặt khác, có, RSA có thể được sử dụng để thực hiện thiết lập khóa, với nhược điểm chính là việc tạo cặp khóa khá chậm - vì vậy nếu bạn muốn sử dụng một cặp khóa mới cho mỗi kết nối để bảo mật chuyển tiếp, thì bạn có thể gặp vấn đề về hiệu quả. Đây là lý do tại sao (EC)DH thường được sử dụng thay thế.
kelalaka avatar
lá cờ in
Điều này có trả lời câu hỏi của bạn không? [Mã hóa RSA trực tiếp của khóa AES có an toàn không?](https://crypto.stackexchange.com/questions/76855/is-direct-rsa-encryption-of-aes-keys-secure)
Điểm:2
lá cờ kr

Không, nó không phải là một thực hành tốt.

  1. Nó có xu hướng người đàn ông ở giữa tấn công. Khi máy chủ nhận được khóa công khai, nó không biết liệu khóa này đến từ máy khách hay từ "người ở giữa". Do đó, "người ở giữa" có thể chặn lưu lượng giữa máy khách và máy chủ, đối với máy khách, nó có thể mô phỏng máy chủ, đối với máy chủ, nó có thể mô phỏng máy khách. Do đó, toàn bộ giao tiếp sẽ được 1) MitM biết và 2) dữ liệu được gửi theo cả hai hướng có thể được sửa đổi bởi MitM.
  • -> Bạn có thể tránh được, nếu bạn xác thực ứng dụng khách với máy chủ hoặc xác thực máy chủ với ứng dụng khách bằng cách sử dụng chứng chỉ khóa công khai.
  1. Nó có xu hướng tấn công lại. Giả sử khách hàng gửi lệnh "chuyển 1000 USD vào tài khoản 123456789". Đây có thể là hoạt động hợp pháp. Nhưng nếu kẻ tấn công chặn lưu lượng và gửi lại trong thời gian tương đối ngắn (để máy chủ vẫn sử dụng cùng một khóa để mã hóa AES cho máy khách này), thì máy chủ sẽ không thể phân biệt được liệu lưu lượng này có đến từ máy khách hay không. kẻ tấn công, và sẽ thực hiện lệnh.Ngay cả khi bạn xác thực ứng dụng khách với máy chủ hoặc xác thực máy chủ với ứng dụng khách, sự cố này vẫn sẽ tiếp diễn.
  • -> Bạn có thể tránh nó, nếu bạn sử dụng nonce.
  1. Điều tốt: Cách tiếp cận hiện tại của bạn đã tương đối tốt chuyển tiếp bí mật: các phiên trước đây được bảo vệ chống lại sự xâm phạm các khóa máy khách hoặc mật khẩu phiên trong tương lai. Nhưng nếu bạn giải quyết vấn đề 1 đã đề cập ở trên (xác thực) và bắt đầu sử dụng cùng một khóa RSA trong nhiều phiên, thì bạn sẽ mất tính bảo mật về phía trước. Nếu kẻ tấn công có được khóa riêng, tất cả các phiên trước đó có thể được giải mã. Để ngăn chặn nó, bạn sẽ cần các biện pháp khác, ví dụ: không lâu Trao đổi khóa Diffie-Hellman.

  2. Không phụ thuộc vào tất cả các vấn đề trên, điều quan trọng là sử dụng RSA đúng cách, như @kelalaka đã đề cập. Xem chi tiết đâyđây.

Do đó, có thể an toàn hơn nhiều khi sử dụng triển khai TLS do Java cung cấp, thay vì triển khai giao thức của riêng bạn.

lá cờ cn
Có lẽ bạn có thể thêm: đối với TLS 1.3, ủy ban tiêu chuẩn hóa đã loại bỏ hoàn toàn RSA cho thỏa thuận chính. Lịch sử xung quanh các cuộc tấn công PKCS#1 và Bleichenbacher đã chỉ ra điều gì: RSA có thể chỉ là một lựa chọn tồi để trao đổi khóa và không đáng để làm cho đúng, khi tất cả các vấn đề đều dễ khắc phục hơn rất nhiều khi sử dụng các phương pháp khác

Đă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.