gpt4 book ai didi

ssl - pem 证书中的私钥是如何加密的?

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:59 24 4
gpt4 key购买 nike

作为尝试调试问题的一部分,我试图了解私钥是如何在 pem 证书中加密的,因为我想知道 curl 是否不设法解密私钥。

我的 pem 中有一个 -----BEGIN ENCRYPTED PRIVATE KEY----- 部分。

是否使用密码加密?是否涉及其他类型的加密方案?

更准确地说

一位同事建议即使没有密码也可以在 pem 中加密私钥。这是正确的吗?

最佳答案

私钥可以有几种不同的记录形式,但最常见的形式是 PKCS#8,在 RFC 5208 中定义。 .

RFC 定义了两种形式的结构。

PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL }

“这个结构的版本号,以防它演化”,“如何识别使用什么解析器来读取私钥”,“一些东西,希望你能读到它”,“关于这些东西的一些数据,也许” .

当 PEM 编码时,PrivateKeyInfo 获得标签“PRIVATE KEY”,如“BEGIN PRIVATE KEY”。你没有其中之一。

另一种形式是

EncryptedPrivateKeyInfo ::= SEQUENCE {
encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData }

“我如何加密东西”、“加密的东西”。

EncryptedPrivateKeyInfo 带有 PEM 标签“ENCRYPTED PRIVATE KEY”,这是您所拥有的。

研究其中之一:

$ openssl asn1parse -i -dump < rsa.enc.p8
0:d=0 hl=4 l= 710 cons: SEQUENCE
4:d=1 hl=2 l= 64 cons: SEQUENCE
6:d=2 hl=2 l= 9 prim: OBJECT :PBES2
17:d=2 hl=2 l= 51 cons: SEQUENCE
19:d=3 hl=2 l= 27 cons: SEQUENCE
21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
32:d=4 hl=2 l= 14 cons: SEQUENCE
34:d=5 hl=2 l= 8 prim: OCTET STRING
0000 - e9 37 68 99 cb 9c 4f 10- .7h...O.
44:d=5 hl=2 l= 2 prim: INTEGER :0800
48:d=3 hl=2 l= 20 cons: SEQUENCE
50:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
60:d=4 hl=2 l= 8 prim: OCTET STRING
0000 - 16 ad ce 41 47 e8 ba 85- ...AG...
70:d=1 hl=4 l= 640 prim: OCTET STRING
<data_omitted />

数据在基于密码的加密方案 2 (PBES2) 下加密。输入的密码/密码短语通过基于密码的 key 派生函数 2 ( PBKDF2 ) 和盐(在加密时随机选择,但必须相同才能解密)转换为 key Material e9 37 68 99 cb 9c 4f 10 并使用迭代计数 2048 (0x800)。该 key 用于 CBC 模式下的 TripleDES 加密,其 IV(在加密时随机选择,但必须与解密时相同)为 16 ad ce 41 47 e8 ba 85。加密后的内容为640字节,然后解析为PrivateKeyInfo结构。

除了 PKCS#8 之外,传输私钥的唯一真正的其他选择是 PKCS#12/PFX,但该数据结构没有标准的 PEM 表示。最新版本的 PKCS#12 允许以 EnvelopedCMS/PKCS#7 的风格将数据加密到证书中。

因此,对于一些简洁的答案:

  • ENCRYPTED PRIVATE KEY 形式已加密。
    • 它有 99.999% 的可能是用密码加密的。
    • 但是有人可能已经使用密码短语以外的东西向 OpenSSL 传授了 PBES2 KDF :)。
  • PRIVATE KEY 形式未加密。
    • RSA PRIVATE KEY 形式也未加密,但它是 PKCS#1 RSAPrivateKey,而不是 PKCS#8 PrivateKeyInfo。
  • 如果 curl 不提示您输入密码,则它不支持加密的私钥。
  • 虽然加密的私钥在没有密码的情况下存在并非不可能,但这绝对不常见,而且绝对不在 PEM 编码的有效负载中。

关于ssl - pem 证书中的私钥是如何加密的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com