PKCS 是什么

公钥密码学标准(PKCS)由RSA实验室与多家公司共同开发,旨在标准化公钥密码学的各项功能。PKCS支持RSA算法、Diffie-Hellman密钥交换等多种算法,定义了从数字签名到密钥管理等一系列标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:https://www.jianshu.com/p/b98b12de85f3


公钥密码学标准(PKCS)是由RSA实验室与一个非正式联盟合作共同开发的一套公钥密码学的标准,这个非正式联盟最初包括Apple, Microsoft, DEC, Lotus, Sun 和 MIT。PKCS已经被OIW(OSI 标准实现研讨会)作为一个OSI标准实现。PKCS是基于二进制和ASCII编码来设计的,也兼容 ITU-T X.509 标准。已经发布的标准有PKCS #1, #3, #5, #7, #8, #9, #10 #11, #12, and #15。PKCS #13 and #14 正在开发中。

PKCS包括算法指定(algorithm-specific)和算法独立(algorithm-independent)两种实现标准。多种算法被支持,包括RSA算法和 Diffie-Hellman 密钥交换算法,然而只有后两种才特别详尽。PKCS也为数字签名、数字信封、可扩展证书 定义了一种算法独立(algorithm-independent)的语法;这就意味着任何加密算法都可以实现这套标准的语法,并且因此获得互操作性。

以下是公钥加密标准(PKCS):

  • PKCS #1 定义了基于RSA公钥密码系统 加密和签名数据的机制
  • PKCS #3 定义了 Diffie-Hellman 密钥协商协议
  • PKCS #5 描述了一种 通过从密码衍生出密钥来加密字符串的方法
  • PKCS #6 被逐步淘汰,取而代之的是X.509的第三版本
  • PKCS #7 为信息定义了大体语法,包括加密增强功能产生的信息,如数字签名和加密
  • PKCS #8 描述了私钥信息的格式,这个信息包括某些公钥算法的私钥,和一些可选的属性
  • PKCS #9 定义了在其他的PKCS标准中可使用的选定的属性类型
  • PKCS #10 描述了认证请求的语法
  • PKCS #11 为加密设备定义了一个技术独立的(technology-independent )编程接口,称之为 Cryptoki。比如智能卡、PCMCIA卡这种加密设备
  • PKCS #12 为 存储或传输用户的私钥、证书、各种秘密等的过程 指定了一种可移植的格式
  • PKCS #13 的目的是为了定义使用椭圆曲线加密和签名数据加密机制
  • PKCS # 14正在酝酿中,涵盖了伪随机数生成
  • PKCS # 15是一个PKCS # 11的补充,给出了一个存储在加密令牌上的加密证书的格式的标准

RSA实验室的意图就是要时不时修改PKCS文档以跟得上密码学和数据安全领域的新发展,以及当机会出现时转变文档成开放标准的研制计划。详细的PKCS标准可以在RSA安全的web服务器上获取到,可以访问网站 或者直接匿名访问FTP



作者:乔伯
链接:https://www.jianshu.com/p/b98b12de85f3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
### PKCS5与PKCS7的定义 #### PKCS5 PKCS5是一种用于密码学操作的数据填充标准,主要用于分组加密算法中的数据块填充。该标准规定了如何处理输入数据长度不是分组大小整数倍的情况。具体来说,当使用基于分组的加密方法时,如果最后一个数据块不满足所需的字节数,则需要按照特定的方式对其进行填充。 对于PKCS5而言,其仅适用于8字节(即64位)的分组长[^1]。 #### PKCS7 相比之下,PKCS7是一个更为通用的标准,它不仅涵盖了填充机制还涉及到了其他方面如证书管理等内容。就填充部分来讲,在PKCS7中可以支持更广泛的分组尺寸——从1到255字节之间的任何数值都可以作为有效的填充参数被采用。这意味着无论所使用的加密算法要求多大的分组大小,都能找到合适的填充方案来适应。 ### 区别和用途 主要差异体现在适用范围上: - **分组大小**:PKCS5限定于8字节;而PKCS7允许更大的灵活性,能够应对不同规格的要求。 - **应用场景**:由于历史原因以及某些传统系统的兼容性考虑,可能会看到一些地方仍然沿用着PKCS5的做法。然而,在现代实践中更多推荐使用PKCS7,因为它提供了更好的扩展性和安全性保障。 ```python def pkcs7_padding(data, block_size): padding_len = block_size - (len(data) % block_size) return data + bytes([padding_len]) * padding_len def pkcs7_unpadding(padded_data): padding_len = padded_data[-1] return padded_data[:-padding_len] data = b'example' block_size = 16 padded = pkcs7_padding(data, block_size) unpadded = pkcs7_unpadding(padded) print(f"Padded Data: {padded}") print(f"Unpadded Data: {unpadded.decode()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值