← RFC Reference

RFC 5751: Thông số kỹ thuật Thư S/MIME 3.2

Standards Track Content Security Published March 2026
ELI5: TLS mã hóa email trong quá trình truyền tải — giống như một chiếc xe bọc thép chở lá thư của bạn giữa các bưu điện. Nhưng ở mỗi bưu điện, lá thư được dỡ xuống và có thể đọc được. S/MIME mã hóa bản thân lá thư. Chỉ người nhận dự định, nắm giữ chìa khóa đúng, mới có thể mở và đọc nó. Ngay cả các máy chủ mail ở giữa cũng không thể nhìn trộm bên trong. Nó cũng cho phép bạn "đóng dấu sáp" lá thư của mình theo cách kỹ thuật số để người nhận có thể chứng minh nó đến từ bạn và không bị giả mạo.

Tại Sao Điều Này Tồn Tại

Bảo mật tầng vận chuyển (TLS, STARTTLS) bảo vệ email giữa các bước chuyển, nhưng nó có giới hạn:

S/MIME cung cấp mã hóa đầu cuối (chỉ người nhận có thể giải mã) và chữ ký số (người nhận có thể xác minh danh tính của người gửi và nội dung không bị thay đổi). Nó sử dụng chứng chỉ X.509 từ cơ sở hạ tầng PKI tương tự bảo vệ HTTPS.

Cách Nó Hoạt Động

Hai Hoạt Động

S/MIME bao bọc các tin nhắn MIME chuẩn trong các phong bì mã hóa bằng CMS (Cryptographic Message Syntax):

Hoạt Động Chức Năng Loại MIME
Chứng minh danh tính người gửi và tính toàn vẹn tin nhắn multipart/signed hoặc application/pkcs7-mime (không minh bạch)
Mã Hóa Mã hóa nội dung để chỉ người nhận có thể đọc application/pkcs7-mime (enveloped-data)

Bạn có thể ký chỉ, mã hóa chỉ hoặc ký rồi mã hóa (tổ hợp phổ biến nhất).

Ký Một Tin Nhắn

Người gửi sử dụng khóa riêng của họ để tạo chữ ký số trên nội dung tin nhắn. Hai định dạng tồn tại:

-- Cấu trúc tin nhắn ký mở --
Content-Type: multipart/signed;
  protocol="application/pkcs7-signature";
  micalg=sha-256; boundary="----sig"

------sig
Content-Type: text/plain

Đây là nội dung tin nhắn gốc.
Nó có thể đọc được bởi bất kỳ máy khách email nào.

------sig
Content-Type: application/pkcs7-signature
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBgl...
(CMS SignedData được mã hóa base64)
------sig--

Mã Hóa Một Tin Nhắn

Người gửi mã hóa bằng khóa công khai của người nhận (từ chứng chỉ X.509 của họ). Chỉ khóa riêng tương ứng của người nhận có thể giải mã:

-- Cấu trúc tin nhắn được mã hóa --
Content-Type: application/pkcs7-mime;
  smime-type=enveloped-data;
  name=smime.p7m
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7m

MIAGCSqGSIb3DQEHA6CAMIA...
(CMS EnvelopedData được mã hóa base64)

Trong thực tế, S/MIME sử dụng mã hóa lai: một khóa đối xứng ngẫu nhiên (ví dụ: AES-128-CBC) mã hóa tin nhắn, và khóa công khai RSA/EC của người nhận mã hóa khóa đối xứng đó.

Chi Tiết Kỹ Thuật Chính

Yêu Cầu Chứng Chỉ

S/MIME dựa vào chứng chỉ X.509 được cấp bởi Cơ Quan Cấp Chứng Chỉ (CA). Chứng chỉ phải:

Đây là rào cản thực tế lớn nhất đối với việc áp dụng S/MIME: mỗi người gửi cần một chứng chỉ, và mỗi người nhận cần chứng chỉ công khai của người gửi để xác minh chữ ký hoặc gửi phản hồi được mã hóa.

Yêu Cầu Thuật Toán (S/MIME 3.2)

Mục Đích PHẢI Hỗ Trợ NÊN Hỗ Trợ
Ký (tiêu hóa) SHA-256 SHA-384, SHA-512
Ký (khóa) RSA DSA, ECDSA
Mã hóa (nội dung) AES-128-CBC AES-192-CBC, AES-256-CBC
Vận chuyển khóa RSA ECDH

SHA-1 và 3DES vẫn được tham chiếu để tương thích ngược nhưng được coi là yếu. S/MIME 4.0 cập nhật các yêu cầu này một cách đáng kể.

Khám Phá Chứng Chỉ

Để mã hóa, người gửi cần chứng chỉ của người nhận. Phương pháp khám phá phổ biến:

Những Sai Lầm Phổ Biến

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

Related RFCs