CMS/PKCS#7 读书笔记

本文深入探讨CMS(Cryptographic Message Syntax)和PKCS(Public Key Cryptography Standards),重点介绍数字信封的概念,用于数据加密和身份验证。通过实例解释了数字信封的工作流程,包括Key Transport算法和Key Agreement算法,并讨论了数据完整性验证的三个关键概念:Integrity、Authentication和Authenticity。此外,提供了丰富的参考资料和C#样例代码。

只写干货,不搞花活。

CMS和PKCS

CMS,全称Cryptographic Message Syntax,原始定义来自于RFC5652。
PKCS,全称Public Key Cryptography Standards,由一堆RFC文档组成:

PKCS名称RFC
#1RSA Cryptography Standard3447
#2已撤销N/A
#3Diffie–Hellman Key Agreement StandardNone
#4已撤销N/A
#5Password-based Encryption Standard2898
#6Extended-Certificate Syntax StandardNone
#7Cryptographic Message Syntax Standard2315 & 5652
#8Private-Key Information Syntax Standard5958
#9Selected Attribute Types2985
#10Certification Request Standard2986
#11Cryptographic Token InterfaceNone
#12Personal Information Exchange Syntax Standard7292
#13Elliptic Curve Cryptography StandardNone
#14Pseudo-random Number GenerationNone
#15Cryptographic Token Information Format StandardNone

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:只有签名,没有数据。此处比较常用。

参考文献

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值