it-swarm-vi.com

Cơ chế trao đổi khóa nào nên được sử dụng trong TLS?

Có nhiều cơ chế trao đổi chính có thể được sử dụng trong TLS. Trong số đó có RSA, ECDH_ECDSA, ECDHE_ECDSA, ECDH_RSA, ECDHE_RSA và những người khác. Cái nào trong số này an toàn hơn về mặt mật mã và có thể được sử dụng để bảo mật kết nối với trang web?

31
Andrei Botalov

Bạn chỉ có thể sử dụng trao đổi khóa (như một phần của bộ mật mã) nếu loại khóa máy chủ và chứng chỉ khớp. Để thấy điều này chi tiết, chúng ta hãy xem các bộ mật mã được xác định trong đặc tả TLS 1.2 . Mỗi bộ mật mã xác định thuật toán trao đổi khóa, cũng như các thuật toán kiểm tra tính toàn vẹn và mã hóa đối xứng được sử dụng sau đó; chúng tôi tập trung ở đây vào phần trao đổi quan trọng.

  • RSA: trao đổi khóa hoạt động bằng cách mã hóa một giá trị ngẫu nhiên (được khách hàng chọn) với khóa chung của máy chủ. Điều này yêu cầu khóa công khai của máy chủ là khóa RSA, rằng chứng chỉ máy chủ không cấm mã hóa (chủ yếu thông qua tiện ích mở rộng chứng chỉ "Sử dụng khóa": nếu có tiện ích mở rộng đó, thì phải có cờ "keyAgribution").

  • DH_RSA: trao đổi khóa là a static Diffie-Hellman: khóa công khai của máy chủ phải là khóa Diffie-Hellman; hơn nữa, chứng chỉ đó phải được cấp bởi Tổ chức chứng nhận đang sử dụng khóa RSA (khóa CA là khóa được sử dụng để ký chứng chỉ máy chủ).

  • DH_DSS: như DH_RSA, ngoại trừ việc CA sử dụng khóa DSA.

  • DHE_RSA: trao đổi khóa là một ephemeral Diffie-Hellman: máy chủ tự động tạo khóa công khai DH và gửi nó đến máy khách; máy chủ cũng dấu hiệu những gì nó gửi. Đối với DHE_RSA, khóa chung của máy chủ phải là loại RSA và chứng chỉ của nó phải phù hợp với chữ ký (phần mở rộng Sử dụng khóa, nếu có, phải bao gồm cờ DigitalSignature).

  • DHE_DSS: như DHE_RSA, ngoại trừ khóa máy chủ có loại DSA.

  • DH_anon: không có chứng chỉ máy chủ. Máy chủ sử dụng khóa Diffie-Hellman mà nó có thể được tạo động. Các bộ mật mã "anon" dễ bị tấn công mạo danh (bao gồm, nhưng không giới hạn ở "Người đàn ông ở giữa" ) vì chúng không có bất kỳ loại xác thực máy chủ nào. Trên cơ sở chung, bạn sẽ không sử dụng bộ mật mã "anon".

Các thuật toán trao đổi khóa sử dụng mật mã đường cong elip được chỉ định trong một RFC khác và đề xuất như sau:

  • ECDH_ECDSA: như DH_DSA, nhưng với các đường cong elip: khóa chung của máy chủ phải là khóa ECDH, trong chứng chỉ do CA cấp mà chính nó đang sử dụng khóa chung ECDSA.

  • ECDH_RSA: như ECDH_ECDSA, nhưng CA phát hành có khóa RSA.

  • ECDHE_ECDSA: máy chủ gửi khóa EC Diffie-Hellman được tạo động và ký tên bằng khóa riêng, phải có loại ECDSA. Điều này tương đương với DHE_DSS, nhưng với các đường cong elip cho cả phần Diffie-Hellman và phần chữ ký.

  • ECDHE_RSA: giống như ECDHE_ECDSA, nhưng khóa chung của máy chủ là khóa RSA, được sử dụng để ký khóa Diffie-Hellman đường cong hình elip.

  • ECDH_anon: một bộ mật mã "anon", với Diffie-Hellman đường cong hình elip động.


Vì vậy, những gì bạn sẽ chọn, cho một trang web? Các ràng buộc chính của bạn là:

  • Bạn muốn có một bộ mật mã được hầu hết các khách hàng hỗ trợ; trong thực tế, quy tắc này loại trừ mật mã đường cong elip (đường cong elip có thể rất tuyệt, nhưng chưa được hỗ trợ tốt trong lĩnh vực này - hãy xem xét rằng theo gs.statcorer , tính đến tháng 9 năm 2011, 40% khách hàng các hệ thống vẫn sử dụng Windows XP và gần 5% sử dụng IE 7.0).

  • Bạn muốn có một bộ mật mã tương thích với loại và chứng chỉ khóa máy chủ của bạn. Đến lượt mình, điều này phụ thuộc vào những gì CA chấp nhận (CA bán cho bạn chứng chỉ). 99,9% thời gian, điều này có nghĩa là RSA. Mọi người đều làm RSA. Các khóa Diffie-Hellman trong các chứng chỉ và chữ ký DSA, từng được NIST (cơ quan liên bang Hoa Kỳ giải quyết các vấn đề như vậy) vì có bằng sáng chế về RSA; nhưng bằng sáng chế đó đã hết hạn vào năm 2000. Diffie-Hellman (như một phần của chứng chỉ) được chỉ định bởi ANSI X9.42 , một tiêu chuẩn không miễn phí (vì vậy các nhà phát triển thời gian mở miễn phí không muốn thực hiện nó) và không phải tất cả rõ ràng. Vì vậy, không ai thực sự sử dụng Diffie-Hellman trong chứng chỉ. DSA được hỗ trợ rộng rãi hơn ( tiêu chuẩn xác định là miễn phí và khá dễ đọc) nhưng không đến mức không phải là giai thoại khi so sánh với RSA.

  • Bạn không muốn sử dụng bộ "anon" vì điều đó không an toàn trước những kẻ tấn công đang hoạt động và hầu hết các trình duyệt máy khách đều có bộ "anon" bị tắt theo mặc định.

Vì vậy, sự lựa chọn của bạn về cơ bản là giữa "RSA" và "DHE_RSA". Cái sau có thể có chi phí tính toán cao hơn một chút, mặc dù bạn sẽ cần phải có ít nhất vài trăm kết nối mới mỗi giây để thực sự thấy sự khác biệt (tôi nhấn mạnh vào "mới": vì TLS bao gồm một cái bắt tay viết tắt có thể xây dựng trên trao đổi khóa của một kết nối trước đó, trao đổi khóa thực tế với mật mã bất đối xứng chỉ xảy ra một lần trên mỗi trình duyệt máy khách mới trong phút cuối). Vì vậy, trong thực tế, không có sự khác biệt có thể đo được về tải CPU giữa RSA và DHE_RSA.

DHE_RSA cung cấp một cái gì đó gọi là Bí mật chuyển tiếp hoàn hảo , một tên khoa trương cho thuộc tính sau: nếu máy chủ của bạn bị hack triệt để, đến mức kẻ tấn công có được một bản sao của khóa riêng của máy chủ, thì anh ta cũng sẽ có thể giải mã quá khứ Các phiên TLS (mà anh ta đã ghi lại) nếu các phiên này sử dụng RSA, trong khi anh ta sẽ không thể làm như vậy nếu các phiên này sử dụng DHE_RSA. Trong thực tế, nếu kẻ tấn công có thể đánh cắp khóa riêng của bạn, thì anh ta có thể có thể đọc 10000 số thẻ tín dụng trong cơ sở dữ liệu trang web của bạn, vì vậy có rất ít lý do tại sao anh ta thậm chí nên bận tâm ghi lại và giải mã các phiên trước đó vì điều này sẽ chỉ mang lại thêm hàng tá số hoặc như vậy. PFS là thanh lịch toán học, nhưng vượt qua. Nếu nó vẫn là một từ viết tắt tiện lợi và có thể tạo ấn tượng tuyệt vời cho những người có đầu óc yếu đuối, như là một phần của một chiến dịch quan hệ công chúng được suy nghĩ tốt.


Tóm tắt: sử dụng DHE_RSA.

62
Thomas Pornin