Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cryptography 用于RSA私钥的PKCS#1和PKCS#8格式_Cryptography_Rsa_Pki_Pkcs#1_Pkcs#8 - Fatal编程技术网

Cryptography 用于RSA私钥的PKCS#1和PKCS#8格式

Cryptography 用于RSA私钥的PKCS#1和PKCS#8格式,cryptography,rsa,pki,pkcs#1,pkcs#8,Cryptography,Rsa,Pki,Pkcs#1,Pkcs#8,有人能帮我理解RSA密钥是如何以这些格式存储的吗?我想知道PKCS格式与编码(DER、PEM)之间的区别。据我所知,PEM更具可读性。密钥/证书的PEM/DER与字符的UTF-8/16类似吗?DER/PEM的意义是什么?对不起,问题太多了,但我受够了谷歌搜索和模糊的答案。谢谢。PKCS#1和PKCS#8(公钥加密标准)是管理特定加密原语、填充等使用的标准。两者都定义了用于存储密钥、证书和其他相关信息的文件格式 PEM和DER更有趣一点。DER是密钥和证书等的ASN.1编码,你可以在谷歌上搜索到很

有人能帮我理解RSA密钥是如何以这些格式存储的吗?我想知道PKCS格式与编码(DER、PEM)之间的区别。据我所知,PEM更具可读性。密钥/证书的PEM/DER与字符的UTF-8/16类似吗?DER/PEM的意义是什么?对不起,问题太多了,但我受够了谷歌搜索和模糊的答案。谢谢。

PKCS#1和PKCS#8(公钥加密标准)是管理特定加密原语、填充等使用的标准。两者都定义了用于存储密钥、证书和其他相关信息的文件格式

PEM和DER更有趣一点。DER是密钥和证书等的ASN.1编码,你可以在谷歌上搜索到很多。私钥和证书使用DER编码,可以像这样直接保存。但是,这些文件是二进制文件,不能轻松复制和粘贴,因此许多(如果不是大多数的话?)实现也接受PEM编码的文件。PEM基本上是base64编码的DER:我们添加了一个标题、可选元数据和base64编码的DER数据,我们有一个PEM文件。

(扩展的范围超出了我认为适合编辑的范围。)

PKCS1,以rfcs 2313 2437 3447的形式提供多个版本,主要是关于使用RSA算法进行加密,包括加密、解密、签名和验证。但由于加密通常在系统之间或至少在程序之间使用,因此有一个定义的、可互操作的密钥格式是很方便的,而PKCS1在附录a.1中为RSA公钥和私钥定义了相当小的格式。正如Luke所暗示的,这是一个用于对几乎任何类型的数据进行互操作编码的标准

另一方面,PKCS8是处理所有算法私钥的标准,而不仅仅是RSA。它还使用ASN.1 DER,首先简单地结合一个
算法标识符
,一个由X.509定义的ASN.1结构(第一个),它毫不奇怪地识别一个算法,以及一个
八位组字符串
,该字符串包含一个密钥的表示形式,具体取决于算法。对于算法RSA,由包含OID(表示RSA加密)的算法标识符标识,八进制字符串包含PKCS1私钥编码。 PKCS8还允许添加任意“属性”,但很少使用。 (例如)

PKCS8还提供了一个使用基于密码的加密来加密私钥的选项(在实践中,虽然没有明确要求)。这是常见的,尤其是当PKCS8用作PKCS12/PFX的私钥部分时,尽管不是通用的

由于目前大多数系统需要支持多种算法,并且希望在开发新算法时能够适应这些算法,因此PKCS8优先用于私钥,而X.509为公钥定义的类似any算法方案则优先用于公钥。尽管PKCS12/PFX通常比两者都好

这两者都与证书或其他PKI对象(如CSR、CRL、OCSP、SCT等)无关。这些对象由其他标准定义,包括PKCS系列的一些其他成员,尽管它们可能使用这些标准定义的密钥

PEM格式正如Luke所说,是一种格式化或(超级)编码(几乎任何)二进制/DER数据的方式,更方便。它源于20世纪90年代一次名为“隐私增强邮件”(Privacy Enhanced Mail)的安全电子邮件尝试,因此被称为PEM。在那些日子里,电子邮件系统通常只能传输或至少可靠地传输有限字符集的可打印文本,并且通常只能传输有限的行长,因此PEM将二进制数据编码为base64,行长为64。PEM方案本身并不十分成功,已经被PGP和S/MIME等其他方案取代,但它定义的格式仍在使用。如今,电子邮件系统通常可以传输二进制数据,但正如卢克所说,复制和粘贴通常只能处理显示的字符,因此PEM仍然有用,而且更易于人类识别

更准确地说,PEM将一些数据(例如但不限于PKCS1或PKCS8密钥或证书、CSR等)编码为:

  • 一行由5个连字符、单词BEGIN、定义数据类型的一个或几个(空格分隔)单词以及5个连字符组成

  • 可选(且罕见)rfc822样式的标头,以空行结尾

  • 数据的base64,分为64个字符的行(最后一个字符除外);有些程序使用76个字符(稍新)的MIME限制

  • 一条类似于开始线但带有结束的线

有些读者检查/强制执行行长度和结束行,有些读者则不这样做,因此,如果你弄错了,你可能会创建一些文件,这些文件有时有效,有时无效,这对调试来说很烦人

因此,例如,PEM中的PKCS1私钥(未加密)如下所示:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCjcGqTkOq0CR3rTx0ZSQSIdTrDrFAYl29611xN8aVgMQIWtDB/
lD0W5TpKPuU9iaiG/sSn/VYt6EzN7Sr332jj7cyl2WrrHI6ujRswNy4HojMuqtfa
b5FFDpRmCuvl35fge18OvoQTJELhhJ1EvJ5KUeZiuJ3u3YyMnxxXzLuKbQIDAQAB
AoGAPrNDz7TKtaLBvaIuMaMXgBopHyQd3jFKbT/tg2Fu5kYm3PrnmCoQfZYXFKCo
ZUFIS/G1FBVWWGpD/MQ9tbYZkKpwuH+t2rGndMnLXiTC296/s9uix7gsjnT4Naci
5N6EN9pVUBwQmGrYUTHFc58ThtelSiPARX7LSU2ibtJSv8ECQQDWBRrrAYmbCUN7
ra0DFT6SppaDtvvuKtb+mUeKbg0B8U4y4wCIK5GH8EyQSwUWcXnNBO05rlUPbifs
DLv/u82lAkEAw39sTJ0KmJJyaChqvqAJ8guulKlgucQJ0Et9ppZyet9iVwNKX/aW
9UlwGBMQdafQ36nd1QMEA8AbAw4D+hw/KQJBANJbHDUGQtk2hrSmZNoV5HXB9Uiq
7v4N71k5ER8XwgM5yVGs2tX8dMM3RhnBEtQXXs9LW1uJZSOQcv7JGXNnhN0CQBZe
nzrJAWxh3XtznHtBfsHWelyCYRIAj4rpCHCmaGUM6IjCVKFUawOYKp5mmAyObkUZ
f8ue87emJLEdynC1CLkCQHduNjP1hemAGWrd6v8BHhE3kKtcK6KHsPvJR5dOfzbd
HAqVePERhISfN6cwZt5p8B3/JUwSR8el66DF7Jm57BM=
-----END RSA PRIVATE KEY-----
PKCS8中的同一密钥未加密:

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKNwapOQ6rQJHetP
HRlJBIh1OsOsUBiXb3rXXE3xpWAxAha0MH+UPRblOko+5T2JqIb+xKf9Vi3oTM3t
KvffaOPtzKXZauscjq6NGzA3LgeiMy6q19pvkUUOlGYK6+Xfl+B7Xw6+hBMkQuGE
nUS8nkpR5mK4ne7djIyfHFfMu4ptAgMBAAECgYA+s0PPtMq1osG9oi4xoxeAGikf
JB3eMUptP+2DYW7mRibc+ueYKhB9lhcUoKhlQUhL8bUUFVZYakP8xD21thmQqnC4
f63asad0ycteJMLb3r+z26LHuCyOdPg1pyLk3oQ32lVQHBCYathRMcVznxOG16VK
I8BFfstJTaJu0lK/wQJBANYFGusBiZsJQ3utrQMVPpKmloO2++4q1v6ZR4puDQHx
TjLjAIgrkYfwTJBLBRZxec0E7TmuVQ9uJ+wMu/+7zaUCQQDDf2xMnQqYknJoKGq+
oAnyC66UqWC5xAnQS32mlnJ632JXA0pf9pb1SXAYExB1p9Dfqd3VAwQDwBsDDgP6
HD8pAkEA0lscNQZC2TaGtKZk2hXkdcH1SKru/g3vWTkRHxfCAznJUaza1fx0wzdG
GcES1Bdez0tbW4llI5By/skZc2eE3QJAFl6fOskBbGHde3Oce0F+wdZ6XIJhEgCP
iukIcKZoZQzoiMJUoVRrA5gqnmaYDI5uRRl/y57zt6YksR3KcLUIuQJAd242M/WF
6YAZat3q/wEeETeQq1wrooew+8lHl05/Nt0cCpV48RGEhJ83pzBm3mnwHf8lTBJH
x6XroMXsmbnsEw==
-----END PRIVATE KEY-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIkErtXjGCalMCAggA
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBApOUG3MKrBC/5bDBH/s5VfBIIC
gN5o1aJxvJYbp2oA/quz+BnCFn8ts3wPPOcqarHddy0L/VH3BdqFNbnPZEaDnvDl
kqChRsti4AAeX18ItMeAyNLNFv0J4mfI8Q5E7iEnPp+dTsZqNfVIJe2NGxOS7zp2
oQQIZVgjW0akDehv6ZDN796qDBlMY2g80wbBrzVgMJu/byG9IQQjngUE9QNGwrsj
7lYSprxjfTZOk1aGBD0d/HsmetIJvCeJ2i/5xAiGgZRrSWMC6aN7Zlra3eIvHQTB
aKZ8/0IT3iKSr6FpkEopOQae8biiTEVGw9D339P3qOSs2ChWWF+OV2sEA67w6q5j
pz6Poc5jgq4FOcf06GdcVa4tst2uykNJCW0wHpcUR1Tr9ILLhrZPYBYVQWW53Eee
o4+mqW2YORdG3a/jLHpEjL0Vdg95QNpdZoMv8plotN1MUBLebd05aCe5hJUb/x74
3GTwmRGmKoHOhOO3hhUaMCmZIg1xPlNT3jqxrZDoATBeONbaFP8OOkeucVYHbdUO
Ad7z6J8XuZDoxM0BVrGykEiQL2nAOccdsGoC33C9hjkqgU8G9jWElbynJlVqv+1a
lFHWjX5lB6ueiY/rClpVlLmXGB83OVPlo70FV0B9rhRChyB1IJJRYPFDJHSHJNu+
Pqay8zw82Gh/G+TWH/JCLm5YjX55ZSFMUmvwOLaxyQpmAGNH6dIBTAaSctVA7UrV
jm7m+5T7seiNYNEi19vDJipgr0GbX8+np47VrsJDxsS20wTeA/9ltD0xXwNrEKHd
2Nv/1OaCgnBQHIGULgEn9pT3/vU87bBHYjVdrWoUmqd9zFYtdImQE9u8IKTxTe4R
UPRGHqltz4uOjbD1epkSGe0=
-----END ENCRYPTED PRIVATE KEY-----
和PKCS8加密:

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKNwapOQ6rQJHetP
HRlJBIh1OsOsUBiXb3rXXE3xpWAxAha0MH+UPRblOko+5T2JqIb+xKf9Vi3oTM3t
KvffaOPtzKXZauscjq6NGzA3LgeiMy6q19pvkUUOlGYK6+Xfl+B7Xw6+hBMkQuGE
nUS8nkpR5mK4ne7djIyfHFfMu4ptAgMBAAECgYA+s0PPtMq1osG9oi4xoxeAGikf
JB3eMUptP+2DYW7mRibc+ueYKhB9lhcUoKhlQUhL8bUUFVZYakP8xD21thmQqnC4
f63asad0ycteJMLb3r+z26LHuCyOdPg1pyLk3oQ32lVQHBCYathRMcVznxOG16VK
I8BFfstJTaJu0lK/wQJBANYFGusBiZsJQ3utrQMVPpKmloO2++4q1v6ZR4puDQHx
TjLjAIgrkYfwTJBLBRZxec0E7TmuVQ9uJ+wMu/+7zaUCQQDDf2xMnQqYknJoKGq+
oAnyC66UqWC5xAnQS32mlnJ632JXA0pf9pb1SXAYExB1p9Dfqd3VAwQDwBsDDgP6
HD8pAkEA0lscNQZC2TaGtKZk2hXkdcH1SKru/g3vWTkRHxfCAznJUaza1fx0wzdG
GcES1Bdez0tbW4llI5By/skZc2eE3QJAFl6fOskBbGHde3Oce0F+wdZ6XIJhEgCP
iukIcKZoZQzoiMJUoVRrA5gqnmaYDI5uRRl/y57zt6YksR3KcLUIuQJAd242M/WF
6YAZat3q/wEeETeQq1wrooew+8lHl05/Nt0cCpV48RGEhJ83pzBm3mnwHf8lTBJH
x6XroMXsmbnsEw==
-----END PRIVATE KEY-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIkErtXjGCalMCAggA
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBApOUG3MKrBC/5bDBH/s5VfBIIC
gN5o1aJxvJYbp2oA/quz+BnCFn8ts3wPPOcqarHddy0L/VH3BdqFNbnPZEaDnvDl
kqChRsti4AAeX18ItMeAyNLNFv0J4mfI8Q5E7iEnPp+dTsZqNfVIJe2NGxOS7zp2
oQQIZVgjW0akDehv6ZDN796qDBlMY2g80wbBrzVgMJu/byG9IQQjngUE9QNGwrsj
7lYSprxjfTZOk1aGBD0d/HsmetIJvCeJ2i/5xAiGgZRrSWMC6aN7Zlra3eIvHQTB
aKZ8/0IT3iKSr6FpkEopOQae8biiTEVGw9D339P3qOSs2ChWWF+OV2sEA67w6q5j
pz6Poc5jgq4FOcf06GdcVa4tst2uykNJCW0wHpcUR1Tr9ILLhrZPYBYVQWW53Eee
o4+mqW2YORdG3a/jLHpEjL0Vdg95QNpdZoMv8plotN1MUBLebd05aCe5hJUb/x74
3GTwmRGmKoHOhOO3hhUaMCmZIg1xPlNT3jqxrZDoATBeONbaFP8OOkeucVYHbdUO
Ad7z6J8XuZDoxM0BVrGykEiQL2nAOccdsGoC33C9hjkqgU8G9jWElbynJlVqv+1a
lFHWjX5lB6ueiY/rClpVlLmXGB83OVPlo70FV0B9rhRChyB1IJJRYPFDJHSHJNu+
Pqay8zw82Gh/G+TWH/JCLm5YjX55ZSFMUmvwOLaxyQpmAGNH6dIBTAaSctVA7UrV
jm7m+5T7seiNYNEi19vDJipgr0GbX8+np47VrsJDxsS20wTeA/9ltD0xXwNrEKHd
2Nv/1OaCgnBQHIGULgEn9pT3/vU87bBHYjVdrWoUmqd9zFYtdImQE9u8IKTxTe4R
UPRGHqltz4uOjbD1epkSGe0=
-----END ENCRYPTED PRIVATE KEY-----

观察每个文件(或其他数据单元)中的数据类型,从开始/结束行很容易识别。数据中的实际密钥值在没有工具的情况下是不容易读取的,尽管只有第三个实际需要机密信息(用于加密的密码)

在PKCS8加密私钥中,我读到它通常是AES-256-CBC加密的。静脉输液器在哪里?我问,因为我有一个加密密钥,我需要通过编程解密。@DevilCode:PKCS8的(外部)结构在RFC I链接中定义,加密形式通常使用rfc2898中定义的PKCS5,参数语法见附录A。对于PBES1方案,IV与密钥一起由PBKDF1派生;一些PBES2方案见附录B.2,您使用的方案(aes-256-cbc)是其明显的扩展。但实际上你并不需要IV,因为JDK或Bouncy都会为你处理它