- Trong cuộc cạnh tranh trình duyệt giữa Netscape và Microsoft vào giữa thập niên 1990, giao thức SSL đã ra đời
- SSL 2 có các khiếm khuyết về mật mã học và thực tiễn, và dựa trên đó Microsoft đã đưa ra giao thức PCT
- Netscape phát triển SSL 3.0 như một đối sách để giành thế chủ động
- Ngành công nghiệp và cộng đồng muốn duy trì khả năng tương thích giữa các trình duyệt nên đã giao vai trò tiêu chuẩn hóa cho IETF
- Trong quá trình này, tên giao thức được đổi thành TLS 1.0 và được duy trì cho đến ngày nay
Bối cảnh: cuộc chiến trình duyệt và sự ra đời của giao thức bảo mật
- Vào giữa thập niên 1990, Netscape và Microsoft tạo nên thế cạnh tranh cực kỳ khốc liệt trên thị trường trình duyệt
- Trong quá trình cạnh tranh đó, Netscape đã phát triển giao thức SSL
SSL 2 và các vấn đề
- Phiên bản SSL đầu tiên không được phát hành vì nhanh chóng bị vô hiệu hóa do các lỗ hổng mật mã học
- SSL 2 được triển khai thực tế đã được sử dụng trong vài năm, nhưng tồn tại nhiều khiếm khuyết về mật mã học và thực tiễn
- Những khiếm khuyết này không tạo ra khủng hoảng nghiêm trọng ngay lập tức, nhưng nhu cầu cải thiện liên tục được đặt ra
Phản ứng của Microsoft: giao thức PCT
- Khi cạnh tranh trở nên gay gắt hơn, Microsoft đã bổ sung các tính năng riêng vào SSL 2 và giới thiệu giao thức PCT
- PCT chỉ được hỗ trợ trên Internet Explorer(IE) và IIS
Chiến lược mới của Netscape: SSL 3.0
- Netscape cũng muốn khắc phục các vấn đề của SSL 2, nhưng không muốn để Microsoft nắm quyền chủ đạo
- Vì vậy, hãng đã phát triển SSL 3.0, theo đuổi những thay đổi khác biệt rõ rệt so với trước đó
Đàm phán tiêu chuẩn hóa trong ngành trình duyệt
- Các thành viên trong ngành và cộng đồng không muốn giao thức bị chia tách thành hai nhánh khác nhau (tránh hiện tượng fork)
- Consensus Development (nơi tác giả làm việc) đã dẫn dắt cuộc họp giữa đại diện Netscape và Microsoft
- Cuộc họp này có sự tham dự của Bruce Schneier(thời điểm trước khi trở nên nổi tiếng), Paul Kocher(người thiết kế SSL 3), Barbara Fox(đại diện Microsoft) cùng nhiều người khác
IETF tiêu chuẩn hóa và đổi tên
- Cả Netscape và Microsoft đều đồng ý để IETF(Internet Engineering Task Force) dẫn dắt quá trình tiêu chuẩn hóa giao thức
- Tác giả phụ trách biên tập tài liệu tiêu chuẩn IETF(RFC)
- Như một phần của thỏa hiệp mang tính chính trị, cần áp dụng một số thay đổi cho SSL 3.0 và cũng phải đặt tên mới cho nó (để tránh tạo ấn tượng rằng IETF chỉ đơn thuần “phê duyệt nguyên trạng” giao thức hiện có)
- Kết quả là cái tên TLS 1.0 ra đời, và trên thực tế đây là giao thức tương ứng với SSL 3.1
Kết luận
- Nhìn lại hiện tại, toàn bộ quá trình tranh luận về tên gọi và tiêu chuẩn hóa này có phần khá khôi hài
1 bình luận
Ý kiến trên Hacker News
Giải thích về tình huống dễ gây nhầm lẫn khi chỉ nhìn số phiên bản thì khó biết giao thức đã thay đổi nhiều đến mức nào. SSLv2 là phiên bản SSL đầu tiên được dùng rộng rãi nhưng có nhiều vấn đề. SSLv3 là một giao thức gần như được làm lại hoàn toàn. TLS 1.0 rất giống SSLv3, nhưng trong quá trình tiêu chuẩn hóa bởi IETF đã có một vài chỉnh sửa nhỏ. TLS 1.1 là bản sửa đổi quy mô nhỏ của TLS 1.0 để khắc phục vấn đề trong cách dùng block cipher. TLS 1.2 là bản có các sửa đổi ở mức trung bình để theo kịp sự phát triển của kỹ thuật mật mã, bổ sung hỗ trợ hash mới nhất để ứng phó điểm yếu của MD5 và SHA-1, cũng như các bộ mã AEAD như AES-GCM. TLS 1.3 là giao thức phần lớn được làm mới, nhưng vẫn tiếp thu một số đặc điểm của TLS 1.2 trở xuống. Mỗi giao thức đều được thiết kế với cơ chế tự động thương lượng phiên bản để client và server có thể nâng cấp độc lập mà không làm mất khả năng kết nối.
Nếu xét việc Microsoft thời đó là một công ty hoàn toàn khác bây giờ thì điều này ngay cả theo tiêu chuẩn hiện nay cũng không có gì lạ. Khi ấy, 'M$' đã dùng mọi cách để kiềm chế các công nghệ Internet mã nguồn mở, và thái độ đó còn kéo dài tới đầu thập niên 2010. Có cảm giác Java Applets cũng vì thế mà không thể phát triển rồi bị loại khỏi thị trường. Sự phát triển của JavaScript và CSS cũng có cảm giác bị chậm lại nhiều năm. Dù công ty ép phải hỗ trợ các công nghệ mới nhất của IE, tôi đã chọn Mozilla 3.0 thay thế, và sau khi sửa lỗi JS thì áp dụng Mozilla cho phát triển SPA doanh nghiệp. Sau đó, ngay cả ở các công ty Fortune 500, việc dùng Mozilla/Firefox cho ứng dụng nội bộ cũng tăng lên, và nhìn lại thì đó là một lựa chọn tốt.
Có ý kiến rằng tên phiên bản tiếp theo, nếu muốn, cứ đổi lại thành SSL cũng không sao. Lập luận là đến giờ mọi người vẫn đều dùng tên gọi 'SSL', nên tiếp tục dùng cũng không vấn đề.
Cũng nhắc rằng trên thực tế tên gọi "TLS" đã được dùng ở nhiều nơi khác. Việc cập nhật cấu hình và function signature là chuyện rất phiền phức nên cũng đáng cân nhắc.
Nhấn mạnh rằng kiểu ý kiến này thì không muốn gợi ý cho bất kỳ ai.
Khi hướng dẫn ai đó làm cho việc truy cập website an toàn hơn, tức là khi phải dùng thuật ngữ TLS/SSL, tôi thường hỏi mọi người dùng tên gọi nào. Cũng hỏi thêm họ bao nhiêu tuổi và có đi làm trước năm 1999 hay không. Tôi cũng sẽ đăng câu trả lời của mình ngay sau đó.
Tôi gọi là SSL (27 tuổi). Còn trong code thì dùng
tls, và trong tài liệu thì thích ghi SSL/TLS để tránh nhầm lẫn.Phần lớn mọi người triển khai giao tiếp an toàn bằng các thư viện có chữ ssl trong tên như OpenSSL nên có xu hướng dùng tên SSL nhiều hơn. Ngoài OpenSSL còn có BoringSSL, LibreSSL, wolfSSL... Các thư viện mang tên TLS thì kém nổi tiếng hơn, ví dụ như GnuTLS, mbedTLS, s2n-tls, RustTLS.
Lý do chính dùng thuật ngữ SSL là vì có vẻ nó dễ được hiểu hơn. Nói chính xác thì phải là TLS, vì thật ra chẳng ai còn dùng SSL 3.0 nữa, nhưng vì cả thư viện tiêu biểu cũng vẫn giữ chữ SSL nên tôi cứ tiếp tục dùng. Thực sự là tôi học tên gọi SSL từ thời chiến tranh mật mã thập niên 90, và khi đó để có SSL encryption đúng nghĩa còn phải tải lậu bản Netscape “US only”, nên chắc là cứ quen miệng vậy thôi.
Tôi thường nói là "https". Người bình thường cũng hay hiểu đại khái ý nghĩa của nó nên tôi thích cách đó.
Tôi mới lần đầu nhận ra mình trước giờ đã vô thức không phân biệt đúng giữa SSL và TLS. Thật lạ khi sau 20 năm mới biết lý do thật sự.
Tôi nghĩ "Transport Layer Security" rõ ràng là tên gọi tốt hơn. Tôi cũng thích từ TLS. Phát âm hai lần chữ S liên tiếp nghe như tiếng rắn nên cũng thấy vui.
Nhưng TLS cũng đã được dùng rộng rãi cho thuật ngữ "Thread Local Storage". Dù Transport Layer Security chính thức được dùng từ năm 1999, Thread Local Storage đã tồn tại từ trước 1996 trong môi trường phát triển của MS hay IBM. Trong giới Unix cũng có xu hướng chuộng thuật ngữ thread-specific data từ khi pthread xuất hiện năm 1995. Có lẽ tài liệu ABI của Itanium năm 2001 cũng là một phần khiến "TLS" phổ biến hơn, và Sun Microsystems có thể cũng đã dùng trước đó. Nếu ai còn giữ manual OS/2 thì mong chia sẻ tư liệu tham khảo.
Theo tôi thì ngược lại SSL mới là tên phù hợp hơn. Về lý thuyết, TLS đáng ra phải là một biện pháp bảo mật tổng quát hoạt động ở nhiều tầng khác nhau, ví dụ có thể kết hợp với IPSec, nhưng trên thực tế nó chủ yếu chỉ được dùng cho TCP socket. Biến thể cho UDP là DTLS, còn QUIC thì không nằm trong bản thân TLS. Gần đây cũng có Linux kernel TLS hay hạ tầng chuyên biệt của Windows, nhưng không phải kiểu chỉ bật một socket flag là xong. Và nói thật thì âm S nghe như “rắn” lại khá ngầu.
"SSL" dễ phát âm hơn "TLS". Khi phát âm S-S-L thì lưỡi hầu như không phải di chuyển vị trí, nên nhanh và tự nhiên hơn.
Nếu Kaa trong The Jungle Book nói về bảo mật TCP và cái tên S~S~L thì chắc sẽ rất hợp. Thật ra thêm một âm S nữa thành SSSL nghe cũng vui.
Những người phân biệt TLS và SSL một cách quá nghiêm ngặt thường muốn thể hiện rằng họ hiểu rõ sự khác nhau, hoặc thích người khác cũng phải nói như vậy. Việc phân biệt này khá giống sự khác nhau giữa .doc và .docx: về cơ bản là khác, nhưng với người dùng phổ thông thì gần như tương thích. Đa số chỉ cần HTTPS chạy tốt là được, chứ không quá quan tâm cấu trúc hay cách hoạt động bên trong.
Liên kết liên quan: chia sẻ bài viết 'Randomness and the Netscape Browser' (Dr. Dobb's Journal) được viết năm 1996 https://people.eecs.berkeley.edu/~daw/papers/ddj-netscape.html Vì là bài từ năm 1996 nên không khí ngôn ngữ rất khác so với paper hay bài báo hiện đại, đọc có cảm giác già dặn.
Có phải TLS 1.0 thực tế đã có rất nhiều cải tiến so với SSL 3.0 không? Trong bài viết, nó dường như chỉ được diễn đạt là “những điều chỉnh nhỏ để tạo khác biệt”, nên tôi thấy thắc mắc.
Trên Internet hiện vẫn còn hơn 300.000 dịch vụ hỗ trợ SSLv2. Liên kết: https://shodan.io/search/report/… Biểu đồ xu hướng: https://trends.shodan.io/search?query=ssl.version%3Asslv2#overview Con số này đã giảm mạnh trong nhiều năm, nhưng có lẽ vẫn cần thêm thời gian để biến mất hoàn toàn.