即使我知道密码也无法解密私钥


9

我认为我的问题归结为一个事实,那就是密钥有问题,但是我不能仅仅解密它就解密,以供进一步研究,而无需对其进行解析。但我不确定。

我正在尝试使用标准方法:

openssl rsa -in ./id_rsa -out ./id_rsa.decrypted

我想我知道密码短语,因为当我输入错密码时,我会得到:

Enter pass phrase for ./id_rsa:
unable to load Private Key
140256774473360:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:544:
140256774473360:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:483

坏解密 ”非常清楚。现在,当我输入看似好的密码短语时,我会回来:

Enter pass phrase for ./id_rsa:
unable to load Private Key
139662870623888:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:153:
139662870623888:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1314:
139662870623888:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=RSA
139662870623888:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
139662870623888:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:153:
139662870623888:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1314:
139662870623888:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO
139662870623888:error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:132:

它也无法加载密钥,但是现在在asn1解析器上失败了,与密码短语无关。

我可以以某种方式获取未加密的密钥版本并使用其他工具来查看问题所在吗?

我见过一些帖子,这些帖子有所更改,并且可能无法解析看似好的密钥的原因,但是它们都适用于未加密的版本。但是他们我见过的唯一解密密钥的方法就是上述方法。


名称暗示该文件可能是由生成的ssh-keygen。您是否也尝试过使用ssh-keygen解密功能?ssh-keygen -p -f keyfile将更改密钥文件上的密码(它将覆盖文件,因此请先创建一个副本)。通过将空密码短语指定为新密码短语,它将解密文件。
kasperd

@kasperd是的,它说错了密码。除openssl之外,所有其他工具都说这是一个坏短语。但是从openssl的行为来看,我认为这是一个好习惯,一段时间以来我都没有使用它们的密钥,但这是我的“标准”密码之一,因此很合适。不要ssh-keygen在引擎盖下使用openssl吗?
luk32

@dawud我尝试过,但是我认为该工具假定输入已被解码,不要求输入密码,并立即说“标题太长”。我认为这是下一步,我获得解密版本,看看它们的密钥有什么问题。
luk32

1
我本可以要求提供文件副本和正确的密码短语才能重现症状。但是我可以看到这种方法存在一些问题。因此,我只是在这里猜测,除了询问您以外,我没有很好的方法来检验我的猜测是否会起作用。
卡巴斯德,2015年

1
当在故意损坏的文件上测试您的openssl解密命令时,无论是正确密码还是无效密码,我都遇到相同的错误。这使我怀疑是否存在由于随机位翻转而导致加密文件随时间损坏的情况。
卡巴斯德,2015年

Answers:


9

我相信您的私钥已被修改,因为我能够通过更改刚创建的示例密码短语受保护的密钥中的单个字符来复制相同的错误消息。

您可以按以下方式重现此内容-

  1. 创建受密码保护的私钥
  2. 解密私钥以确保它可以工作。
  3. 更改包含加密私钥的文件内的单个字符。
  4. 现在尝试解密它。
[testuser @ whitehat .ssh] $ openssl rsa -in id_rsa -out id_rsa.decrypted
输入id_rsa的密码:
编写RSA密钥
[testuser @ whitehat .ssh] $ ls -al id_rsa *
-rw ------。1个testuser testuser 951 Mar 24 15:01 id_rsa
-rw-rw-r--。1个testuser testuser 887 Mar 24 15:02 id_rsa.decrypted
-rw-r--r--。1个testuser testuser 236 3月24日14:52 id_rsa.pub
[testuser @ whitehat .ssh] $ vim id_rsa
[testuser @ whitehat .ssh] $ openssl rsa -in id_rsa -out id_rsa.decrypted
输入id_rsa的密码:
无法加载私钥
139900595279688:错误:0D07207B:asn1编码例程:ASN1_get_object:标头太长:asn1_lib.c:150:
139900595279688:错误:0D068066:asn1编码例程:ASN1_CHECK_TLEN:错误对象标头:tasn_dec.c:1306:
139900595279688:错误:0D07803A:asn1编码例程:ASN1_ITEM_EX_D2I:嵌套的asn1错误:tasn_dec.c:381:Type = RSA
139900595279688:错误:04093004:RSA例程:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
139900595279688:错误:0D07207B:asn1编码例程:ASN1_get_object:标头太长:asn1_lib.c:150:
139900595279688:错误:0D068066:asn1编码例程:ASN1_CHECK_TLEN:错误对象标头:tasn_dec.c:1306:
139900595279688:错误:0D07803A:asn1编码例程:ASN1_ITEM_EX_D2I:嵌套的asn1错误:tasn_dec.c:381:Type = PKCS8_PRIV_KEY_INFO
139900595279688:错误:0907B00D:PEM例程:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:132:
[testuser @ whitehat .ssh] $ 

操作系统和openssl版本信息

[testuser @ whitehat /] $ lsb_release -a
LSB版本::core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
发行人编号:Scientific
说明:科学版Linux 6.2(碳)
发行:6.2
代号:碳
[testuser @ whitehat /] $ rpm -q openssl
openssl-1.0.1e-30.el6_6.5.x86_64

1

我到这里结束是因为我遇到了同样的问题,但是我的问题是由AWS ACM证书导出接口引起的。(可以使用密码导出专用的CA证书)

关于我使用的特定密码短语的信息...不确定是什么引起了问题,但可能是长度或所用符号。

最终结果是我有一个密钥,其密码短语与我期望的不同/缩短了。

希望能帮助某人...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.