发布网友 发布时间:2023-04-03 00:15
共1个回答
热心网友 时间:2024-12-06 00:04
最近有小伙伴们搞不清楚RSA的私钥PKCS1与PKCS8到底是什么区别。在应用中会有各种各样的疑问。这边文章就稍微详细的讲一下这两种格式的区别。
PKCS1:全名《Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications》最新版本2.2 (rfc8017, 有兴趣的同学可以读一下) ,从名称上可以看出它是针对RSA算法的一个规范。里面包含了RSA加密、解密、签名验签等所有的内容,当然也包含了私钥的格式。PKCS1的1.1版本是1991年发布的。
PKCS8:全名《Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification》最新版本1.2,从名称上可以看出它是一个专门用来存储私钥的文件格式规范。PKCS1的1.2版本是2008年发布的。
刚好它们两个有重合的部分,都定义了私钥的存储,那他们到底有什么关系呢?我们下面实际验证一下。
此时当前目录下就有一个pkcs1.pem文件,查看文件内容可以看到
此时当前目录下会多出一个pkcs8.pem文件,查看文件内容可以看到
那么之间有什么区别呢?我们先将两个PEM格式的文件转换为DER格式,这个二进制的数据容易做对比。
现在我们得到了两个DER格式的文件,我们可以先用hexdemp看看两个文件的内容:
此时如果从后往前看的话,其实可以发现PKCS8仅比PKCS1多了一个26自己的头,剩余的内容均完全一致。
我们可以使用以下的命令进行验证:
可以看到 22:d=1 hl=4 l= 608 prim: OCTET STRING这一行的输出就是pkcs1.der的内容。而上面的内容就是pkcs8比pkcs1多的内容。其实最主要的就是算法信息,这也是pkcs8能存储各种算法私钥的原因。
从时间顺序上可以看出来,PKCS标准也是在不断发展的,PKCS1的标准是先于PKCS8出来的,那时候甚至非对称算法还只有RSA是成熟的,在计算机领域刚刚得到应用,PKCS专门将RSA的算法作为一个标准输出就不难理解了。随着加密算法的发展才有了PKCS8出来专门做存储密钥这样一件事情。
PEM与DER有什么区别呢?其实PEM就是对DER的内容做了base64的编码并做了一下格式化的输出而已。
DER格式的存储使用了一种叫asn1的数据存储格式来存储各个数据项。我们可以看一下pkcs1.der的输出:
里面讲RSA私钥的所有数据都输出了。
本文仅对未加密的pkcs1与pkcs8私钥文件进行对比,未对比加密后的文件格式。
https://press.one/file/v?s=88e1e88832b525da091cfd1679e85312e0709cd87401ae7f11495bcd68138980105a69c480bc0e0309cb97fbee7736ff5ebd7d6d6ccb8b302bc8a1766e166b9f1&h=efa44ee9077828eda4000e7dc1050a678414617cf0bd8598f87bfd2470b1418b&a=28b6cefc3c00c7e355b435d4b5e7f58880564fa6&f=P1&v=3