跳到主要内容
ecdsa.com

CMS(加密消息语法)

IETF 制定的 PKCS #7 后继标准(RFC 5652),用于已签名数据、数字信封数据和已认证数据,被 S/MIME、Authenticode、PDF 签名、RFC 3161 时间戳以及许多固件格式采用。
其他写法PKCS #7PKCS7Cryptographic Message SyntaxSignedData

最常见的内容类型是 SignedData:包含内容(分离签名时只包含对内容的引用)、签名者证书,以及每个签名者各一个 SignerInfo。SignerInfo 通常包含已签名属性——至少有内容类型和内容的 messageDigest,常常还有签名时间——签名是对这些属性的 DER 编码计算的,而不是直接对内容计算。

EnvelopedData 为接收方加密内容,每个接收方分别使用密钥传输(RSA)、密钥协商(ECDH),或者自 RFC 9629 起使用 ML-KEM(RFC 9936)等 KEM。AuthEnvelopedData 增加了 AEAD 内容加密(RFC 5083)。PEM 标签为 PKCS7 和 CMS。

大多数验证失败源于细节:分离的内容与签名时的字节不完全一致(S/MIME 中的行尾符)、缺少证书链、已签名属性按不同的 SET OF 顺序重新编码,或者验证方已不再接受所用的摘要算法。openssl cms -verify 和 S/MIME 签名验证工具可以显示是哪一步出了问题。

标准与参考资料

全部术语