只写干货,不搞花活。
CMS和PKCS
CMS,全称Cryptographic Message Syntax,原始定义来自于RFC5652。
PKCS,全称Public Key Cryptography Standards,由一堆RFC文档组成:
| PKCS | 名称 | RFC |
|---|---|---|
| #1 | RSA Cryptography Standard | 3447 |
| #2 | 已撤销 | N/A |
| #3 | Diffie–Hellman Key Agreement Standard | None |
| #4 | 已撤销 | N/A |
| #5 | Password-based Encryption Standard | 2898 |
| #6 | Extended-Certificate Syntax Standard | None |
| #7 | Cryptographic Message Syntax Standard | 2315 & 5652 |
| #8 | Private-Key Information Syntax Standard | 5958 |
| #9 | Selected Attribute Types | 2985 |
| #10 | Certification Request Standard | 2986 |
| #11 | Cryptographic Token Interface | None |
| #12 | Personal Information Exchange Syntax Standard | 7292 |
| #13 | Elliptic Curve Cryptography Standard | None |
| #14 | Pseudo-random Number Generation | None |
| #15 | Cryptographic Token Information Format Standard | None |
PKCS #7
这东西是一个安全服务,独立于实现和具体的加密算法。主要包括两部分内容:
- 数据加密(Data Encryption)
- 用数字信封(Digital Envelopes)来实现
- 身份验证和数据完整性验证(Entity Authentication & Data Integrity)
- 用数字签名(Digital Signatures)来实现,支持多用户同时签名。
以上两部分内容可以包括一些额外的属性,这些属性可以是未加密的。
数字信封(Digital Envelopes)
实现流程:
- 发送方
- 生成session_key
- 用session_key对数据进行加密
- 用接收方公钥对session_key进行加密
- 信封 = 加密后的数据 + 加密后的session_key
- 接收方
- 解密session_key
- 用session_key解密数据
实际例子:S/MIME邮件
如何生成session_key,有两个方法:
- Key Transport算法:一般就是RSA算法
- Key Agreement算法:Diffie-Hellman 密钥一致性算法(PKCS#3),也是基于大数分解。具体算法在参考文献中。
身份验证和数据完整性验证(Entity Authentication & Data Integrity)
三个基本概念:
- Integrity:数据没有被“动”过,“动”包括修改、删除、冗余等等
- Authentication:指的是这个数据“有很大可能性”是来自于它声称自己来自的地方
- Authenticity:副署签名,类似现实生活中“公证服务”的东西。PKCS#7只支持一级“公证”。
实际例子:S/MIME邮件
此处仍然是允许多方对一组数据进行签名的。
对于一个数据的签名,可以有以下两种情况:
- Nondetached:数据和签名在一起
- Detached:只有签名,没有数据。此处比较常用。
参考文献
- MSDN:
- Wikipedia:
- StackExchange:
- Key Transport:
- Key Agreement:
- Sample Code (C#)
- Others:
本文深入探讨CMS(Cryptographic Message Syntax)和PKCS(Public Key Cryptography Standards),重点介绍数字信封的概念,用于数据加密和身份验证。通过实例解释了数字信封的工作流程,包括Key Transport算法和Key Agreement算法,并讨论了数据完整性验证的三个关键概念:Integrity、Authentication和Authenticity。此外,提供了丰富的参考资料和C#样例代码。
1631

被折叠的 条评论
为什么被折叠?



