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

评论

快速而肮脏:模数位〜= Pub密钥字节* 6

#1 楼

使用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的第一个字符(在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位。

评论


哇,那很复杂。但是,做得好。我本来以为有一种读键并输出所有东西的方法。

–埃文·卡洛尔(Evan Carroll)
2013年9月11日18:10

对于OpenSSL,公钥仅存在于证书或证书请求中,其基于ASN.1的类型称为SubjectPublicKeyInfo,与SSH有所不同。在加密级别,RSA公钥是几个大整数。如何将公共密钥编码为字节超出了RSA“ stricto sensu”的范围,并且取决于使用它的协议。 SSH,X.509,OpenPGP ...都有自己的编码约定。 OpenSSL遵循“ X.509”原则。

–汤姆韭菜
2013年9月11日18:33

有关Stackoverflow的答案将深入探讨血腥的格式和二进制细节。 TLDR:SSH使用的二进制Blob不是DER(ASN.1),因此OpenSSL不会直接读取它们。如果您真的想浪费10分钟,则可以使用openssl asn1parse -genconf来适应这些示例之一,以构建可以用OpenSSL解析的DER格式...

–purpur先生
2013年9月11日18:43

什么是高清以及如何获取(在OS X上)?

– ja'
2014-2-15的3:32

hd是hexdump(通常的Linux工具)的专用键。在OS X上,尝试:od -t x1

–汤姆韭菜
2014年2月15日14:02

#2 楼

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


2048是密钥长度

评论


有趣的是,因为它只是rsa公钥,我也可以用openssl来做吗?

–埃文·卡洛尔(Evan Carroll)
2013年9月11日17:16

对于一次检查文件中所有公共密钥的脚本,请参见〜/ .ssh / authorized_keys格式的给定密钥,您可以轻松确定密钥强度吗?

–马克·斯托斯伯格
2015年8月11日下午13:10