如何使用 pubkey 和 openssl 获取 RSA 位长?

信息安全 SSH openssl
2021-08-24 03:24:35

我有一个生成的公钥ssh-keygen,我只是想知道如何使用 openssl 获取有关密钥长度的信息?

2个回答
ssh-keygen -lf /etc/ssh/rsa_key.pub 
2048 d1:cb:15:df:5d:44:...

2048 是密钥长度

openssl,如果您的私钥在文件id_rsa,那么

openssl rsa -text -noout -in id_rsa

将打印私钥内容,输出的第一行包含以位为单位的模数大小。如果密钥受密码保护,您当然必须输入该密码。

如果您只有公钥,那么 OpenSSL 将无法直接提供帮助。@Enigma 显示正确的命令行(带有ssh-keygen -lf id_rsa.pub)。您仍然可以通过以下方式使用 OpenSSL 执行此操作:

使用文本编辑器打开公钥文件。你会发现这样的东西:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDo2xko99piegEDgZCrobfFTvXUTFDbWT
ch4IGk5mk0CelB5RKiCvDeK4yhDLcj8QNumaReuwNKGjAQwdENsIT1UjOdVvZOX2d41/p6J
gOCD1ujjwuHWBzzQvDA5rXdQgsdsrJIfNuYr/+kIIANkGPPIheb2Ar2ccIWh9giwNHDjkXT
JXTVQ5Whc0mGBU/EGdlCD6poG4EzCc0N9zk/DNSMIIZUInySaHhn2f7kmfoh5LRw7RF3c2O
5tCWIptu8u8ydIxz9q5zHxxKS+c7q4nkl9V/tVjZx8sneNZB+O79X1teq7LawiYJyLulUMi
OEoiL1YH1SE1U93bUcOWvpAQ5 thebear@isgreat.com

选择中间 blob 的第一个字符(after ssh-rsa);这是Base64,OpenSSL 可以解码:

echo "AAAAB3NzaC1yc2EAAAADAQABAAABAQDDo2xko99piegEDgZC" | openssl base64 -d | hd

OpenSSL 很挑剔,它要求您每行输入不超过 76 个字符,并且字符数必须是 4 的倍数。上面的行将打印出以下内容:

00000000  00 00 00 07 73 73 68 2d  72 73 61 00 00 00 03 01  |....ssh-rsa.....|
00000010  00 01 00 00 01 01 00 c3  a3 6c 64 a3 df 69 89 e8  |.........ld..i..|
00000020  04 0e 06 42                                       |...B|

内容如下:

00 00 00 07             The length in bytes of the next field
73 73 68 2d 72 73 61    The key type (ASCII encoding of "ssh-rsa")
00 00 00 03             The length in bytes of the public exponent
01 00 01                The public exponent (usually 65537, as here)
00 00 01 01             The length in bytes of the modulus (here, 257)
00 c3 a3...             The modulus

因此密钥的类型为 RSA,其模数的长度为 257字节,除了第一个字节的值为“00”,因此实际长度为 256 个字节(添加第一个字节以使该值被认为是正数,因为内部编码规则要求有符号整数,第一位定义符号)。256 字节是 2048 位。