PKCS7的基础总结
一、什么是PKCS7?
P7定义了一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息。
在PKI技术框架中,许多方面都需要经过严格的定义,如用户的注册流程、数字证书的格式、CRL的格式、证书的申请格式以及数字签名格式等。这些格式需要规定统一的标准。PKCS是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关标准。PKCS7就是PKCS众多标准中的一个。以下是PKCS各个标准的作用范围的简单描述:
- 1、 PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。
- 2、 PKCS#3:定义Diffie-Hellman密钥交换协议。
- 3、 PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。
- 4、 PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式。
- 5、 PKCS#7:定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息。
- 6、 PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。
- 7、 PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型。
- 8、 PKCS#10:描述证书请求语法。
- 9、PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。
- 10、PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法。
- 11、PKCS#13:椭圆曲线密码体制标准。
- 12、 PKCS#14:伪随机数生成标准。
- 13、 PKCS#15:密码令牌信息格式标准。
二、PKCS7和X509的关系?
X509协议,是PKI技术体系中应用最为广泛、也是最为基础的一个国际标准。它的主要目的在于定义一个规范的数字证书的格式。
X509和PKCS都遵循ASN.1的语法。
X509,公钥证书,只包含公钥信息和一些基础信息。
P7,签名或加密。可以往里面塞x509,同时没有签名或加密内容。
P12,含有私钥,同时可以有公钥,有口令保护。
三、P7的结构
3.1 六种内容类型
3.1.1 Data内容类型 ----->明文信息
Data ::= OCTET STRING
Data内容类型只是一字节串。
感觉这一块儿可以存放明文,用于验签时候的校验
3.1.2 Signed-data内容类型 ----->数字签名
由任意类型的内容和该内容的签名数据组成。
SignedData内的结构信息
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
digestAlgorithms | DigestAlgorithmIdentifiers | 消息摘要算法标识 |
contentInfo | ContentInfo | 待签名内容 |
certificates | ExtendedCertificatesAndCertificates | PKCS#6扩展证书和X.509证书的集合 |
crls | CertificateRevocationLists | 证书撤销列表的集合 |
signerInfos | SignerInfo集合 | 每个签名者信息的集合 |
SignerInfo的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
issuerAndSerialNumber | IssuerAndSerialNumber | 通过颁发者的可辨别名和颁发序列号来指定签名者的证书 |
digestAlgorithm | DigestAlgorithmIdentifier | 摘要算法 |
authenticatedAttributes[0] | Attributes | Attributes 签名者签名属性的集合 |
digestEncryptionAlgorithm | DigestEncryptionAlgorithmIdentifier | 摘要加密算法 |
encryptedDigest | EncryptedDigest | 签名结果 |
unauthenticatedAttributes | Attributes | 不被签名的属性的集合 |
3.1.3 Enveloped-data 内容类型 ----->数字信封
数字信封是由加密密钥和由该密钥加密后的数据组成。
明文经过对称加密算法得到加密密钥,用非对称算法和公钥,对该加密密钥进行加密,得到加密后的数据
EnvelopedData的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
recipientInfos | RecipientInfos | 每个接收者信息的集合 |
encryptedContentInfo | EncryptedContentInfo | 加了密的内容信息 |
EncryptedContentInfo的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
contentType | ContentType | 六种内容类型中的其中一种内容类型 |
contentEncryptionAlgorithm | ContentEncryptionAlgorithmIdentifier | 内容对称加密算法。 |
encryptedContent | EncryptedContent | 内容加密的结果:指的是加密密钥 |
RecipientInfos的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
issuerAndSerialNumber | IssuerAndSerialNumber | 通过颁发者的可辨别名和颁发序列号来指定签名者的证书 |
keyEncryptionAlgorithm | KeyEncryptionAlgorithmIdentifier | 非对称加密算法 |
encryptedKey | EncryptedKey | 最终加密结果 |
3.1.4 Signed-and-enveloped-data 内容类型 ----->带签名的数字信封
由签名和内容加密组成
数字信封生成过程:
SignedAndEnvelopedData 的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
recipientInfos | RecipientInfos | 每个接收者信息的集合 |
digestAlgorithms | DigestAlgorithmIdentifiers | 摘要算法 |
encryptedContentInfo | EncryptedContentInfo | 加了密的内容 |
Certificates[0] | ExtendedCertificatesAndCertificates | 扩展证书和X509证书的集合 |
crls | CertificateRevocationLists | 证书撤销列表的集合 |
signerInfos | SignerInfos | 每个签名者信息的集合 |
3.1.5 Digested-data内容类型 ----->信息摘要
由内容和内容的消息摘要组成
DigestedData 的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
digestAlgorithms | DigestAlgorithmIdentifiers | 摘要算法 |
contentInfo | ContentInfo | 明文 |
digest | Digest | 摘要结果 |
3.1.6 Encrypted-data内容类型 ----->加密数据
由加密内容组成
EncryptedData 的数据结构:
属性 | 数据类型 | 解释 |
---|---|---|
version | Version | 语法的版本号 |
encryptedContentInfo | EncryptedContentInfo | 加了密的内容信息 |
3.2对象标识符号
pkcs-7 OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) 7 }
上面定义了pkcs-7的OID, 下面就可以直接引用
data OBJECT IDENTIFIER ::= { pkcs-7 1 }
signedData OBJECT IDENTIFIER ::= { pkcs-7 2 }
envelopedData OBJECT IDENTIFIER ::= { pkcs-7 3 }
signedAndEnvelopedData OBJECT IDENTIFIER ::= { pkcs-7 4 }
digestedData OBJECT IDENTIFIER ::= { pkcs-7 5 }
encryptedData OBJECT IDENTIFIER ::= { pkcs-7 6 }
四、总结:
- 1、数字信封和带签名的数字信封。主要是包括接收者信息和内容加密信息。
接收者信息中的加密结果为最终加密结果,内容加密信息的结果是生成的对称密钥的结果 - 2、只有和签名(数字签名和带签名的数字信封)相关的结构中才有crl的信息。应该是判断签名证书的有效性。