← RFC Reference

RFC 8551: S/MIME 4.0 消息规范

Standards Track Content Security Published March 2026
ELI5: S/MIME 3.2 加密你的电子邮件就像把它放在一个带好锁的保险箱里。S/MIME 4.0 用现代锁替换了那个锁,它不仅能保持内容秘密,还能检测是否有人试图篡改保险箱本身。它将密码学算法升级到当前最佳实践:用 AES-GCM 替代 AES-CBC、椭圆曲线与 RSA 并行使用,以及 SHA-256 作为最低标准。概念相同,数学更强。

为什么存在这个

S/MIME 3.2(RFC 5751,2010年发布)在其时代是可靠的,但密码学在进步:

工作原理

MIME结构和CMS包装与S/MIME 3.2相同。变化在于发送方和接收方协商的算法和功能。

从3.2到4.0的变化

功能 S/MIME 3.2(RFC 5751) S/MIME 4.0(RFC 8551)
内容加密 AES-128-CBC(必须) AES-128-GCM(必须)
签名摘要 SHA-256(必须) SHA-256(必须)
签名算法 RSA(必须) ECDSA with P-256(必须)、RSA(必须)
密钥传输 RSA(必须) ECDH with P-256(必须)、RSA-OAEP(推荐)
签名用SHA-1 允许(向后兼容) 已弃用
3DES加密 允许(向后兼容) 已弃用
头部保护 未处理 定义的机制
EdDSA(Ed25519) 未定义 通过配套RFC引用

认证加密(AES-GCM)

最重要的变化是从AES-CBC迁移到AES-GCM作为必须的内容加密算法:

椭圆曲线密码学

S/MIME 4.0要求将ECDSA(用于签名)和ECDH(用于密钥协议)与RSA并行强制实现:

算法 曲线 等效RSA强度 密钥大小
ECDSA / ECDH P-256(secp256r1) RSA-3072 256位
ECDSA / ECDH P-384(secp384r1) RSA-7680 384位
ECDSA / ECDH P-521(secp521r1) RSA-15360 521位

EC密钥在等效安全级别上比RSA密钥小得多。对于电子邮件,这意味着更小的签名和更小的加密密钥传输块,从而减少了消息大小。

头部保护

S/MIME 4.0定义了一种方式,将电子邮件头部(Subject、From、To、Date)的受保护副本包含在签名或加密的MIME正文中。外部头部保持可见以用于路由和显示,但内部受保护副本让接收方验证头部在传输中未被修改:

-- 在S/MIME加密正文内 --
Content-Type: message/rfc822

Subject: 机密季度成果
From: cfo@example.com
To: board@example.com
Date: Wed, 12 Mar 2025 09:00:00 -0400

(加密正文内容...)

接收方的客户端比较内部头部与外部头部,如果不同则发出警报。

关键技术细节

RSA-OAEP vs. RSA PKCS#1 v1.5

S/MIME 3.2使用RSA PKCS#1 v1.5进行密钥传输。此填充方案容易受到Bleichenbacher型攻击。S/MIME 4.0推荐RSA-OAEP(最优非对称加密填充),对选定密文攻击具有可证明的安全性。当接收方通过其S/MIME功能指示支持时,发送方应使用RSA-OAEP。

S/MIME功能属性

签名消息时,发送方包含列出其支持的算法的SMIMECapabilities属性。接收方使用此来为加密回复选择最强的互相支持的算法。S/MIME 4.0更新了推荐的功能排序:

  1. AES-256-GCM
  2. AES-128-GCM
  3. AES-256-CBC(用于向后兼容)
  4. AES-128-CBC(用于向后兼容)

向后兼容性

S/MIME 4.0代理必须能够接收和处理S/MIME 3.2消息。发送时,当接收方的功能指示支持时应使用S/MIME 4.0算法(AES-GCM、ECDSA),否则退回到3.2算法。SMIMECapabilities属性驱动此协商。

常见错误

可传递性影响

Related RFCs