DKIM — DomainKeys Identified Mail (Xác định thư từ Khóa Miền)
RFC Tồn Tại Vì Lý Do Gì
SPF xác minh rằng thông điệp đến từ một địa chỉ IP được phép, nhưng nó không nói gì về nội dung thông điệp. Thông điệp có thể vượt qua SPF, sau đó bị sửa đổi bởi một relay bị xâm phạm. SPF cũng bị hỏng khi thư được chuyển tiếp, vì IP gửi sẽ thay đổi.
DKIM giải quyết cả hai vấn đề. Bằng cách đính kèm chữ ký mật mã vào chính thông điệp, nó cung cấp khẳng định danh tính cấp độ miền mà vẫn tồn tại khi chuyển tiếp (chữ ký đi cùng với thông điệp) và đảm bảo tính toàn vẹn nội dung (bất kỳ sửa đổi nào cũng làm chữ ký vô hiệu).
RFC 6376, được công bố năm 2011, là đặc tả DKIM hiện tại. Nó thay thế RFC 4871 và giới thiệu cải tiến cho canonicalization, quản lý khóa và ngữ nghĩa chữ ký. Nó vẫn là nền tảng của xác thực email hiện đại cùng với SPF và DMARC.
Cách Hoạt Động
Ký (Phía Người Gửi)
- Máy chủ thư gửi (hoặc một tác nhân ký phía trước) chọn tiêu đề nào và phần nội dung để ký.
- Nó chuẩn hóa nội dung được chọn bằng các thuật toán
simplehoặcrelaxedđể bình thường hóa khoảng trắng và chữ hoa. - Nó tính hash của phần nội dung đã chuẩn hóa, sau đó là hash của các tiêu đề được chọn cộng với hash nội dung.
- Nó ký hash tiêu đề bằng khóa riêng tư của miền (RSA hoặc Ed25519).
- Nó thêm tiêu đề
DKIM-Signaturevào thông điệp chứa chữ ký, miền ký (d=), bộ chọn (s=) và siêu dữ liệu về những gì được ký.
Xác Minh (Phía Người Nhận)
- Người nhận trích xuất các giá trị
d=(miền) vàs=(bộ chọn) từ tiêu đềDKIM-Signature. - Nó truy vấn DNS cho khóa công khai tại
<selector>._domainkey.<domain>. - Nó chuẩn hóa lại các tiêu đề ký và nội dung bằng cùng một thuật toán được chỉ định trong chữ ký.
- Nó xác minh chữ ký dựa trên khóa công khai. Nếu hợp lệ, kết quả là
pass.
Tiêu Đề DKIM-Signature Ví Dụ
Bản Ghi Khóa Công Khai DNS
Chi Tiết Kỹ Thuật Chính
Chuẩn Hóa
Thư có thể bị sửa đổi tinh tế trong quá trình truyền tải (khoảng trắng ở cuối bị xóa, tiêu đề được gấp lại). Chuẩn hóa bình thường hóa nội dung trước khi hash để những thay đổi vô hại không làm hỏng chữ ký. Có hai thuật toán khả dụng, được chỉ định riêng cho tiêu đề và nội dung:
| Thuật Toán | Tiêu Đề | Nội Dung |
|---|---|---|
simple |
Không thay đổi ngoại trừ khoảng trắng ở cuối giá trị tiêu đề | Không thay đổi ngoại trừ dòng trống ở cuối |
relaxed |
Viết thường tên tiêu đề, mở dòng, nén khoảng trắng | Nén khoảng trắng, xóa khoảng trắng ở cuối mỗi dòng |
Cài đặt phổ biến nhất là c=relaxed/relaxed, có thể chịu đựng những sửa đổi thường xuyên nhất trong quá trình truyền tải.
Loại Khóa
RFC 6376 định nghĩa chữ ký RSA. RFC 8463 sau này đã thêm hỗ trợ Ed25519. Khóa RSA phải có ít nhất 2048 bit; các khóa 1024-bit được coi là yếu và bị một số người nhận từ chối. Khóa Ed25519 nhỏ hơn nhiều (44 ký tự trong DNS) và nhanh hơn để xác minh.
Bộ Chọn
Bộ chọn (thẻ s=) cho phép một miền xuất bản nhiều khóa DKIM cùng một lúc. Điều này rất cần thiết để xoay khóa: xuất bản khóa mới dưới bộ chọn mới, bắt đầu ký bằng nó, sau đó xóa bản ghi DNS của bộ chọn cũ sau khoảng thời gian chuyển tiếp.
Thẻ l= (Giới Hạn Độ Dài Nội Dung)
Thẻ tùy chọn l= giới hạn có bao nhiêu byte của nội dung được ký. Điều này dự định cho phép danh sách gửi thư thêm chân mà không làm hỏng chữ ký. Trên thực tế, nó tạo ra lỗ hổng bảo mật: kẻ tấn công có thể thêm nội dung độc hại sau phần được ký. Hầu hết các bản triển khai có ý thức bảo mật tránh sử dụng l=.
Ký Tiêu Đề
Thẻ h= liệt kê những tiêu đề nào được đưa vào chữ ký. Thực hành tốt nhất là ký ít nhất: From, To, Subject, Date, Message-ID, MIME-Version và Content-Type. Tiêu đề From được yêu cầu theo đặc tả. Ký tiêu đề không tồn tại ngăn nó bị thêm sau khi ký (một biện pháp chống lặp lại quan trọng).
Những Sai Lầm Phổ Biến
- Sử dụng khóa RSA 1024-bit: Những khóa này yếu về mặt mật mã theo tiêu chuẩn hiện đại. Gmail và các người nhận lớn khác có thể hạ thấp lòng tin. Luôn sử dụng RSA 2048-bit hoặc Ed25519.
- Không xoay khóa: Khóa riêng tư DKIM phải được xoay định kỳ (mỗi 6-12 tháng). Bộ chọn giúp điều này trở nên liền mạch — xuất bản khóa mới, chuyển sang ký, loại bỏ khóa cũ.
-
Ký với miền không phù hợp: Để DMARC vượt qua thông qua DKIM, miền
d=trong chữ ký phải phù hợp với miền tiêu đềFrom:(khớp chính xác hoặc miền phụ, tùy thuộc vào chính sách DMARC). Nếu ESP của bạn ký làd=esp.com, căn chỉnh DMARC sẽ thất bại trừ khi bạn định cấu hình ký DKIM tùy chỉnh. -
Ký quá mức vs ký dưới tiêu đề: Không ký tiêu đề quan trọng (như
Subject) cho phép kẻ tấn công sửa đổi chúng. Ký quá mức tiêu đề mà các bên trung gian hợp pháp thêm có thể gây ra những lỗi sai. - Độ trễ lan truyền bản ghi DNS: Sau khi xuất bản khóa DKIM mới, chờ lan truyền DNS trước khi ký với bộ chọn mới. Chữ ký tham chiếu khóa công khai không tồn tại sẽ không xác minh được.
-
Sử dụng thẻ độ dài nội dung
l=: Điều này cho phép nội dung không được ký được thêm vào thông điệp. Tránh nó.
Tác Động Khả Năng Gửi Thư
- Nền tảng cho DMARC: Căn chỉnh DKIM là một trong hai đường dẫn để DMARC vượt qua (đường dẫn kia là căn chỉnh SPF). Vì DKIM tồn tại khi chuyển tiếp trong khi SPF không, DKIM thường là đường dẫn xác thực đáng tin cậy hơn.
-
Ràng buộc danh tiếng: DKIM liên kết thông điệp với miền ký (thông qua thẻ
d=). Nhà cung cấp hộp thư sử dụng điều này để xây dựng danh tiếng miền. Ký DKIM nhất quán xây dựng danh tiếng tích cực theo thời gian. - Yêu cầu của các nhà cung cấp lớn: Gmail và Yahoo yêu cầu hoặc SPF hoặc DKIM vượt qua cho tất cả người gửi. Những người gửi hàng loạt (5.000+ thông điệp/ngày cho Gmail) phải có SPF và DKIM vượt qua, cộng với chính sách DMARC.
- Tồn tại khi chuyển tiếp: Không giống như SPF, chữ ký DKIM đi cùng với thông điệp. Khi thư được chuyển tiếp thông qua danh sách gửi thư, quy tắc .forward hoặc mở rộng bí danh, DKIM vẫn có thể xác thực (với điều kiện là hệ thống chuyển tiếp không sửa đổi nội dung được ký). Điều này làm cho DKIM cần thiết cho khả năng tương thích danh sách gửi thư.
- Tính toàn vẹn nội dung: Vượt ra ngoài xác thực, DKIM chứng minh thông điệp không bị giả mạo trong quá trình truyền tải. Điều này bảo vệ chống lại các sửa đổi man-in-the-middle và tăng sự tin tưởng của người nhận.