PKCS #7 / Cryptographic Message Syntax (CMS)
标准编号:RFC 5652 (STD 70, 淘汰 RFC 3369) – 基础规范; 也作为 S/MIME (RFC 8551) 的一部分。
发布组织:IETF
摘要:Cryptographic Message Syntax (CMS) 是 PKCS #7 的后继标准,用于对任意消息进行数字签名、摘要、认证、加密等加密保护封装。它定义了多种数据结构(称为内容类型),如 SignedData, EnvelopedData, EncryptedData, DigestedData, AuthenticatedData 等。CMS 被广泛应用于 S/MIME 电子邮件加密、数字签名、带附件的 SOAP 消息、PDF 签名(PAdES)和代码签名等。该语法使用 ASN.1 描述,支持多种加密算法,可与 X.509 证书体系无缝集成。
主要内容类型:
- Data: 原始数据(任意八位元组)。
- SignedData: 包含零个或多个签名,以及可选的数据内容、证书链和证书撤销列表 (CRL)。
- EnvelopedData: 用接收者的公钥加密内容加密密钥,再用该密钥加密内容,实现保密性。
- DigestedData: 包含内容的哈希值,用于完整性校验。
- EncryptedData: 用对称密钥直接加密内容(无密钥传输)。
- AuthenticatedData: 提供数据源认证和完整性,使用 MAC(如 HMAC)。
常见使用场景:PKCS#7 签名常用于 Java 的 JAR 签名(jarsigner)、Windows 可执行文件签名(Authenticode),以及许多电子签名标准。
官方资源: RFC 5652 – CMS | RFC 8551 – S/MIME 4.0
关联工具: ASN.1 解析器 | 对称加密工具 | 非对称加密工具 | 哈希摘要工具
PKCS #7 / CMS 规范详解
PKCS #7(RFC 5652 CMS,Cryptographic Message Syntax)定义了加密消息的语法标准,广泛用于数字签名、数字信封和数据加密。S/MIME 邮件安全标准就建立在 CMS 之上。
数据类型
CMS 定义了六种内容类型:Data(无加密的普通数据);SignedData(带签名的数据,包含签名者信息和签名值);EnvelopedData(数字信封,用接收方公钥加密对称密钥);SignedAndEnvelopedData(先签名后加密);DigestedData(带摘要的数据);EncryptedData(仅加密,无密钥交换)。其中 SignedData 和 EnvelopedData 是最常用的类型。
SignedData 结构
SignedData 的 ASN.1 结构包含:版本号;摘要算法标识;待签名内容;签名者信息集合(每个签名者包含签发者序列号、摘要算法、签名算法、签名值和可选认证属性)。签名过程:对认证属性做 DER 编码后计算摘要,用私钥签名。验签方用签发者证书中的公钥验证签名。
EnvelopedData 结构
EnvelopedData 的结构包含:版本号;加密算法标识;接收者信息集合(每个接收者有一个 RecipientInfo,包含接收者证书序列号/issuer、密钥加密算法和加密后的对称密钥);加密后的内容。发送方生成随机对称密钥加密内容,然后用每个接收者的公钥加密对称密钥。接收方用私钥解密获得对称密钥,再解密内容。
在智能卡场景中,PKCS #7 常用于卡个人化数据的加密传输——发卡系统将初始数据用 PKCS #7 封装后通过安全通道发送给卡片。CMS 也用于 S/MIME 安全邮件和代码签名证书。