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内的结构信息

属性数据类型解释
versionVersion语法的版本号
digestAlgorithmsDigestAlgorithmIdentifiers消息摘要算法标识
contentInfoContentInfo待签名内容
certificatesExtendedCertificatesAndCertificatesPKCS#6扩展证书和X.509证书的集合
crlsCertificateRevocationLists证书撤销列表的集合
signerInfosSignerInfo集合每个签名者信息的集合

SignerInfo的数据结构:

属性数据类型解释
versionVersion语法的版本号
issuerAndSerialNumberIssuerAndSerialNumber通过颁发者的可辨别名和颁发序列号来指定签名者的证书
digestAlgorithmDigestAlgorithmIdentifier摘要算法
authenticatedAttributes[0]AttributesAttributes 签名者签名属性的集合
digestEncryptionAlgorithmDigestEncryptionAlgorithmIdentifier摘要加密算法
encryptedDigestEncryptedDigest签名结果
unauthenticatedAttributesAttributes不被签名的属性的集合

3.1.3 Enveloped-data 内容类型 ----->数字信封

数字信封是由加密密钥和由该密钥加密后的数据组成。
明文经过对称加密算法得到加密密钥,用非对称算法和公钥,对该加密密钥进行加密,得到加密后的数据
EnvelopedData的数据结构:

属性数据类型解释
versionVersion语法的版本号
recipientInfosRecipientInfos每个接收者信息的集合
encryptedContentInfoEncryptedContentInfo加了密的内容信息

EncryptedContentInfo的数据结构:

属性数据类型解释
contentTypeContentType六种内容类型中的其中一种内容类型
contentEncryptionAlgorithmContentEncryptionAlgorithmIdentifier内容对称加密算法。
encryptedContentEncryptedContent内容加密的结果:指的是加密密钥

RecipientInfos的数据结构:

属性数据类型解释
versionVersion语法的版本号
issuerAndSerialNumberIssuerAndSerialNumber通过颁发者的可辨别名和颁发序列号来指定签名者的证书
keyEncryptionAlgorithmKeyEncryptionAlgorithmIdentifier非对称加密算法
encryptedKeyEncryptedKey最终加密结果

3.1.4 Signed-and-enveloped-data 内容类型 ----->带签名的数字信封

由签名和内容加密组成
数字信封生成过程:
在这里插入图片描述
SignedAndEnvelopedData 的数据结构:

属性数据类型解释
versionVersion语法的版本号
recipientInfosRecipientInfos每个接收者信息的集合
digestAlgorithmsDigestAlgorithmIdentifiers摘要算法
encryptedContentInfoEncryptedContentInfo加了密的内容
Certificates[0]ExtendedCertificatesAndCertificates扩展证书和X509证书的集合
crlsCertificateRevocationLists证书撤销列表的集合
signerInfosSignerInfos每个签名者信息的集合

3.1.5 Digested-data内容类型 ----->信息摘要

由内容和内容的消息摘要组成
DigestedData 的数据结构:

属性数据类型解释
versionVersion语法的版本号
digestAlgorithmsDigestAlgorithmIdentifiers摘要算法
contentInfoContentInfo明文
digestDigest摘要结果

3.1.6 Encrypted-data内容类型 ----->加密数据

由加密内容组成
EncryptedData 的数据结构:

属性数据类型解释
versionVersion语法的版本号
encryptedContentInfoEncryptedContentInfo加了密的内容信息

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的信息。应该是判断签名证书的有效性。
  • 5
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值