web-dev-qa-db-ja.com

pubkeyとopensslでRSAビット長を取得するにはどうすればよいですか?

ssh-keygenで生成された公開鍵があり、opensslでキー長に関する情報を取得するにはどうすればよいですか。

87
Evan Carroll

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 [email protected]

マウスで中央のブロブの最初の文字を選択します(afterssh-rsa);これは Base64 であり、OpenSSLはそれをデコードできます。

echo "AAAAB3NzaC1yc2EAAAADAQABAAABAQDDo2xko99piegEDgZC" | openssl base64 -d | hd

OpenSSLはうるさいです、彼は1行として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であり、そのモジュラスの長さは257bytesですが、最初のバイトの値は "00"であるため、実際の長さは256です。バイト(その最初のバイトは、値が正と見なされるように追加されました。これは、内部エンコードルールがsigned整数を要求するため、最初のビットが符号を定義するためです) 。 256バイトは2048ビットです。

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

2048はキー長です

106
enigma