- Nghiên cứu cho thấy đã phát hiện hơn 1.700 khóa DKIM công khai RSA có độ dài dưới 1.024 bit. RSA khóa dưới 1.024 bit bị cho là yếu về bảo mật và đã bị ngừng sử dụng kể từ RFC 8301 năm 2018.
- Mục tiêu thí nghiệm: trích xuất khóa riêng từ khóa công khai RSA 512 bit đã được công khai và kiểm tra xem chữ ký DKIM có vượt qua xác thực ở các dịch vụ email lớn (Gmail, Outlook, Yahoo Mail, v.v.) hay không
- Kiểm tra việc có thể ký email như thể là người gửi gốc hay không
Giải mã khóa công khai RSA và tạo khóa
- Khóa công khai là khóa RSA 512-bit của miền
Redfin.com, được mã hóa theo định dạng ASN.1 DER và sau đó mã hóa Base64 thêm một lần
- Quy trình giải mã khóa
- Dùng Python giải mã khóa công khai đã mã hóa Base64 trong thẻ
p
- Trích xuất
n (modulus) và e (số mũ công khai)
- Phân tích nhân tử của modulus RSA
- Sử dụng CADO-NFS: dựa trên thuật toán Number Field Sieve
- Cấu hình máy chủ đám mây: 8 vCPU, 32GB RAM (sử dụng Hetzner)
- Thiết lập thêm 32GB swap rồi chạy CADO-NFS
- Kết quả: sau khoảng 86 giờ, đã phân tích thành công n thành hai nhân tố nguyên tố p và q
- Tạo khóa riêng RSA
- Tạo khóa riêng RSA từ p và q
- Sử dụng Python cùng thư viện PyCryptodome để xuất khóa dưới định dạng PEM
Kiểm thử chữ ký DKIM
- Tích hợp khóa riêng vào OpenDKIM rồi gửi email
- Kiểm tra kết quả xác thực DKIM trên nhiều dịch vụ lưu trữ email
- Kết quả kiểm thử:
- DKIM pass: Yahoo Mail, Mailfence, Tuta
- DKIM fail: Gmail, Outlook, Zoho, Fastmail, v.v.
- Yahoo, Mailfence, Tuta đều thông qua mặc dù không nhận diện được điểm yếu của khóa 512 bit
Kết luận cuối cùng
- Tính dễ bị tấn công của khóa RSA 512 bit
- Công việc từng có thể làm bằng siêu máy tính cách đây 30 năm, giờ có thể thực hiện trong vài giờ trên máy chủ đám mây với chi phí dưới 8 đô la
- Tuyệt đối không dùng khóa dưới 1.024 bit cho chữ ký DKIM
- Khuyến nghị
- Các nhà cung cấp email nên tự động chặn chữ ký DKIM sử dụng khóa RSA dưới 1.024 bit
- Chủ sở hữu miền cần kiểm tra bản ghi DKIM và cập nhật lên ít nhất 1.024 bit
- Có thể xác thực khóa DKIM theo độ dài chuỗi Base64: khóa 1.024 bit có tối thiểu 216 ký tự
1 bình luận
Bình luận trên Hacker News
14 năm trước, có một bài viết rằng công việc này vẫn có thể làm được với khóa 512-bit. Người ta tự hỏi liệu có thư viện “đường tắt” nào giúp rút ngắn không gian tìm kiếm khi tìm nguyên tố hoặc Bitcoin không, và liệu thư viện như vậy có ảnh hưởng đến thiết kế dịch vụ mã hóa hay không.
Có đề xuất một thử nghiệm thú vị: đặt khóa DKIM 4096-bit. Hầu hết công cụ kiểm tra DKIM/SPF trực tuyến cho thấy việc kiểm tra DNS thì không vấn đề gì, nhưng khi gửi email thử nghiệm lại hiển thị là thất bại. Kết quả là bài học: khóa lớn hơn 2048-bit là được cho phép, nhưng không nhất thiết phải dùng.
Có câu hỏi về lý do không tăng gấp đôi/gấp ba kích thước khóa trong lĩnh vực mã hóa. Dù hiệu năng máy tính tăng nhanh và cuộc bàn về máy tính lượng tử vẫn tiếp tục, tại sao ở góc độ phòng thủ lại không dùng khóa lớn hơn.
Tác giả đã bẻ khóa RSA DKIM 512-bit bằng CADO-NFS chỉ trong 28 giờ bằng máy tính để bàn. Khóa 1024-bit vẫn khó ở cấp độ hobby, nhưng theo ông có thể được thực hiện trong môi trường học thuật.
Tiêu đề bài viết đã được chỉnh một chút. Bản gốc là "How We Cracked a 512-Bit DKIM Key for Less Than $8 in the Cloud".
Một số nhà cung cấp DNS chỉ cho phép thiết lập khóa 1024-bit, như wordpress.com.
Hover không hỗ trợ bản ghi TXT trên 255 ký tự nên phải ngừng quản lý DNS; vấn đề được giải quyết bằng Digital Ocean. Hy vọng mật mã đường cong elliptic sẽ trở thành chuẩn.
Hầu hết nhà cung cấp coi khóa 512-bit là không an toàn và từ chối chữ ký DKIM, nhưng Yahoo Mail, Mailfence, Tuta báo cáo kết quả dkim=pass. Tác giả đặt câu hỏi liệu Google có gặp lỗi do chữ ký DKIM hay do SPF fail.
Có lời khen cho cách tiếp cận thực tế. Bài này rõ ràng cũ rồi, nhưng có vẻ được viết lại ngày nay dựa trên bài nộp trước của tác giả.