假设我可以访问 RSA 密钥对的私有部分。如何检查此密钥是否具有关联的密码?
如何检查 SSH 私钥是否有密码?
信息安全
公钥基础设施
SSH
密码
2021-08-29 03:23:54
4个回答
如果受密码保护,密钥文件将具有不同的标题。这是没有密码的密钥的顶部:
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3qKD/4PAc6PMb1yCckTduFl5fA1OpURLR5Z+T4xY1JQt3eTM
这是受密码保护的密钥的顶部:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,556C1115CDA822F5
AHi/3++6PEIBv4kfpM57McyoSAAaT2ECxNOA5DRKxJQ9pr2D3aUeMBaBfWGrxd/Q
不幸的是,这只适用于查看文件。我知道服务器无法判断提供给它的密钥是否受密码保护,这是能够利用此类信息的最有用的地方。
它并不总是像其他答案中描述的那么容易。它仅适用于旧的 PEM 密钥。如果您检查标题,则密钥的新openssh
格式(使用选项生成,更安全,因为 openssh-6.5)看起来相同:-o
$ head rsa_enc
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCYdi7MhY
$ head rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
在这种情况下,最简单的方法是使用ssh-keygen
. 如果它会要求输入密码,它有一个(或者它不是 ssh 密钥),如果不是,它没有密码:
$ ssh-keygen -yf rsa_enc
Enter passphrase:
$ ssh-keygen -yf rsa
ssh-rsa AAAAB3NzaC1y...
下面的例子可能更好,因为它不要求输入: -P 指定要使用的密码,一个未受保护的密钥以空密码打开。
$ ssh-keygen -y -P "" -f rsa_enc
Load key "path_to_key": incorrect passphrase supplied to decrypt private key`
$ ssh-keygen -y -P "" -f rsa
ssh-rsa AAAAB3NzaC1y...
“RSA 密钥”实际上是以标准化 DER 二进制格式存储为 ASN.1 结构的一组值,然后以 base-64 编码以获得最终的 PEM 文件。
确定密钥是否已编码的一种非常简单的方法是检查 ASN.1 标头是否存在,这通常就像检查“密钥”是否以字母开头一样简单,MII
如下例所示:
-----开始 RSA 私钥-----
MII CWwIBAAKBgQCWxk9djtgA/t7n6M8g1d2fk3exyCSu1uubpxUkoFLJBKjLYiaa
[...]
eCrpRFHxhPICHI4db+I8GZ9QDmlbCN/bl3BBNNTn3w==
-----结束 RSA 私钥-----
在受密码保护的文件中,整个 ASN.1 结构被加密,它都显示为随机字符。
私钥应该是安全的,尝试设置密码只是声明它是否还受密码保护。在ssh-keygen
受保护的密钥上:
~/.ssh$ ssh-keygen -p -f id_rsa_password_protected
Enter old passphrase:
并且不受保护:
~/.ssh$ ssh-keygen -p -f id_rsa_not_protected
Enter new passphrase (empty for no passphrase):
因此,如果它没有密码保护,只需设置密码。
其它你可能感兴趣的问题