← RFC Reference

DKIM — DomainKeys Identified Mail (Xác định thư từ Khóa Miền)

Internet Standard Email Authentication Published March 2026
ELI5: Hãy coi DKIM như một con dấu sáp chứng minh không bị can thiệp trên một lá thư. Trước khi gửi, máy chủ thư dán một con dấu riêng lên tin nhắn (một chữ ký mật mã). Khi nó đến, người nhận có thể kiểm tra con dấu đó dựa trên khóa công khai được công bố trong DNS. Nếu con dấu còn nguyên vẹn, tin nhắn không bị thay đổi trong quá trình truyền tải và thực sự đến từ ai đó có quyền truy cập vào khóa riêng củ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 SPFDMARC.

Cách Hoạt Động

Ký (Phía Người Gửi)

  1. 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ý.
  2. Nó chuẩn hóa nội dung được chọn bằng các thuật toán simple hoặc relaxed để bình thường hóa khoảng trắng và chữ hoa.
  3. 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.
  4. Nó ký hash tiêu đề bằng khóa riêng tư của miền (RSA hoặc Ed25519).
  5. Nó thêm tiêu đề DKIM-Signature và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)

  1. 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.
  2. Nó truy vấn DNS cho khóa công khai tại <selector>._domainkey.<domain>.
  3. 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ý.
  4. 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ụ

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=mtg20240101; h=from:to:subject:date:message-id:mime-version:content-type; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=LjIEJLNOTAREALSIGh8gAiGVQOr3K7...truncated...

Bản Ghi Khóa Công Khai DNS

mtg20240101._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB...truncated..."

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-VersionContent-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

Tác Động Khả Năng Gửi Thư

Related RFCs