Tin ngành
Tôi đã bẻ khóa thành công khóa RSA của một cơ quan chứng thực (CA) từ thập niên 90
(giờ Việt Nam)
Tóm tắt AI
Tác giả chia sẻ quá trình phân tích thừa số nguyên tố trên một khóa RSA cũ từ những năm 90, minh chứng cho sự suy giảm tính bảo mật của các thuật toán mã hóa lỗi thời theo thời gian.
Bản dịch AI
07-09-2026
… từ những năm 90.
Gần đây tôi đã suy nghĩ về tính bảo mật của RSA. Mật mã học RSA dựa trên độ khó của việc phân tích một số bán nguyên tố (semiprime) lớn, nhưng "lớn" nghĩa là gì lại là một câu hỏi thú vị. Web PKI đã ngừng hỗ trợ RSA 1024-bit từ hơn một thập kỷ trước, và mặc dù tôi không biết ai đã phân tích được một khóa có kích thước đó, nhưng điều này hoàn toàn nằm trong khả năng của một chính phủ hoặc tổ chức nào đó sở hữu số lượng máy tính lớn. Chỉ vài ngày trước, có người đã phân tích thành công khóa RSA-260 862-bit từ thử thách phân tích RSA. Đó là quá trình phân tích thừa số lớn nhất mà tôi biết. Ngày nay, thế giới sử dụng RSA ít nhất là 2048-bit, nhưng ngay cả tiêu chuẩn đó cũng sẽ sớm bị loại bỏ do rủi ro từ máy tính lượng tử trong tương lai.
Điều này khiến tôi tự hỏi: các khóa RSA nhỏ thậm chí có thể bị phân tích trên một máy tính để bàn thông thường. Và trong những ngày đầu của Web PKI, không có tiêu chuẩn nào, cũng không có yêu cầu tối thiểu nào cả. Netscape đã tích hợp hỗ trợ SSL vào năm 1994, và IE cũng làm điều tương tự ngay sau đó. Đây vẫn là thời kỳ của các hạn chế xuất khẩu đối với mật mã học. Liệu có khóa nào đủ nhỏ để tôi có thể phân tích không? Tôi không có lý do chính đáng nào để làm việc đó, nhưng có vẻ khá thú vị.
Tất nhiên là có, nhưng trước tiên chúng ta cần tìm một khóa để bẻ.
May mắn thay, các chứng chỉ gốc (root certificates) đã được gửi kèm với các trình cài đặt trình duyệt, và có các kho lưu trữ của cả Internet Explorer lẫn Netscape trên archive.org. Các kho lưu trữ này không đầy đủ, nhưng chúng cung cấp phạm vi khá tốt về các CA gốc cũ. Tôi đã tải xuống cả hai bộ sưu tập và sử dụng Claude Code để trích xuất tất cả các root. Tôi đã lưu trữ một trang web do Claude tạo ra với tất cả những root cổ xưa đó. Mặc dù tôi chưa xác minh liệu kết quả đầu ra của LLM này có hoàn toàn đáng tin cậy hay không, nhưng nó trông khá hợp lý.
Sử dụng các bộ lọc trên trang web đó, chúng ta có thể tìm thấy những khóa nhỏ nào được tin tưởng cho SSL.
Aha! Chúng ta đã có mục tiêu. Vào tháng 3 năm 1999, Netscape 4.51 đã phát hành một cơ quan cấp chứng chỉ (CA) RSA 512-bit được tin tưởng cho SSL, và một cái khác cho S/MIME. Cả hai root này đều đến từ cơ quan cấp chứng chỉ Canada đã ngừng hoạt động từ lâu có tên là E-Certify.
Cuối năm đó, khóa RSA-155 512-bit đã bị phân tích, vì vậy ngay cả trong thời đại đó, nó đã quá yếu và có lẽ ngay từ đầu không nên được phát hành.
Các root 512-bit của E-Certify đã bị Netscape loại bỏ vào năm 2002. Thật không may, Internet Explorer dường như chưa bao giờ phát hành bất kỳ root 512-bit nào cho SSL, vì vậy niềm vui của chúng ta sẽ chỉ giới hạn ở Netscape trong một khoảng thời gian tương đối ngắn.
Việc phân tích các khóa công khai trong các chứng chỉ gốc sẽ cho tôi hai số nguyên tố cần thiết để tái tạo khóa cá nhân. Tôi đã chạy CADO-NFS trên máy tính để bàn Ryzen 9 5950X của mình; mất 32 giờ để phân tích E-Certify RSA 512 Gold Server cho SSL, và thêm 29 giờ nữa cho E-Certify RSA 512 Gold Client cho S/MIME. Bạn có thể lấy các khóa cá nhân thu được ở bên dưới.
Giả sử bạn bằng cách nào đó đang chạy Netscape 4.51 với đồng hồ được đặt trước khi các root của E-Certify hết hạn vào ngày 16-10-2003, bạn có thể sử dụng các khóa cá nhân này để cấp chứng chỉ. Điều này mô tả chính xác không một ai trên hành tinh này… ngoại trừ cái máy ảo (VM) mà tôi đã thiết lập.
Việc xác minh rằng các chứng chỉ được cấp sẽ hoạt động trong Netscape 4.51 là một cuộc phiêu lưu thực sự, vì không có sự trùng lặp nào về khả năng TLS giữa Netscape 4.51 và bất kỳ ngăn xếp TLS hiện đại nào. Vì vậy, tôi lại quay lại với Claude Code để tạo một máy chủ TLS cổ điển tùy chỉnh bằng Go. Trang web này được lưu trữ công khai tại e-certify.fly.dev, bạn có thể thử với bản sao Netscape của riêng mình, nhưng nó sẽ không tải được trên bất kỳ trình duyệt hiện đại nào.
Hoặc, nếu bạn muốn lưu trữ trang web của riêng mình bằng cách sử dụng các khóa cổ điển này, các khóa và công cụ đều nằm trong repo tại https://github.com/mcpherrinm/ancientroots. Hoặc làm điều gì đó tệ hơn, như thực hiện tấn công MitM vào SSL của tất cả những người dùng Netscape 4.51 với đồng hồ của họ được đặt lùi lại 25 năm trước…
Như một phần thưởng, Internet Explorer 3.02 đã phát hành một CA ký mã có tên là OU=Test VeriSign Commercial Software Publisher CA. Tôi không chắc nó dùng để làm gì, nhưng nó cũng dễ dàng bị phân tích. Có một vài khóa RSA 512-bit khác trông giống như khóa thử nghiệm trong repo ancient roots, vì vậy bạn nên thử phân tích thêm một vài khóa nữa, hoặc xem chúng có thể được sử dụng để làm gì!
Steve Weis đã phân tích khóa này trong khoảng một giờ bằng cách sử dụng một cụm GPU.
Và cuối cùng, SSL Labs cho rằng trang web thử nghiệm của tôi rất tuyệt.
Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.