2つのssh公開鍵の始まりが同じであるのはなぜですか?


25

私が手に入れた新しいラップトップの公開鍵でサーバー上のauthorized_keysファイルを更新していましたが、2つの公開鍵が同じように始まったことに驚きました。

# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....

AAAAB3...などの話は何ですか?一部のオンライン検索では、他のキーも同じように起動することがわかります。アルゴリズムやバージョンなどについて説明していますか?


1
何それの価値について、私は7つのキーが様々なコンピュータ上で、数年間の空間に生成されており、それらのすべてのスタートAAAAB3NzaC1yc2EAAAA私はそれを推測しているので、共通のアルゴ種類/バージョン識別子のいくつかの種類の...
fukawi2

回答:


24

これは実際には、これがどの種類のキーであるかを定義するヘッダーです。RFC 4253の公開鍵アルゴリズムのセクションをチェックアウトすると、RSA鍵について確認できます。

「ssh-rsa」キー形式には、次の特定のエンコーディングがあります。

 string    "ssh-rsa"
 mpint     e
 mpint     n

ここで、「e」および「n」パラメータは署名キーblobを形成します。

実際、Base64で文字列「B3NzaC1yc2E」をデコードすると、「ssh-rsa」としてASCIIに変換されます。おそらく「AAAA」は何らかの種類のヘッダーを表しているため、アプリケーションはデータストリームのどこでキーの処理を開始するかを正確に知ることができます。


これは、RFCへのリンクを含め、私が言ったことと非常に似ているようです。
ラースク

@larsks:どうやら、私が書いている間にsubmitを押したようです。
スコットパック

15

SSH公開鍵形式はRFC 4253で文書化され、ここで幾分要約されます。PEMエンコードされたデータは、(長さ、データ)対の数からなり、第一の対のようなものになるだろうアルゴリズム名、コードssh-rsaまたはssh-dsa

これは、すべてのsshキーの公開キーデータの最初の部分が同様になることを意味します。


2

スコットのファンシーへのリンクをたどった後、私はこのフォーマットを深く掘り下げました。TLDR:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
       |  "ssh-rsa"   |exponent|   modulus

RFC4231は、使用される2つのデータ型を指定しています。

  • string:任意の長さのバイナリ文字列。文字列には、ヌル文字や8ビット文字を含む任意のバイナリデータを含めることができます。それらはuint32その長さを含むとして保存されます

  • mpint:2の補数形式の複数の精度の整数を表し、1バイトあたり8ビット、MSBファーストの文字列として格納されます。[...]

RFC4253 sec 6.6では、キーは次のようにエンコードされています。

「ssh-rsa」キー形式には、次の特定のエンコーディングがあります。

string    "ssh-rsa"
mpint     e
mpint     n

ここで、「e」および「n」パラメータは署名キーblobを形成します。[Ed:ただし、blobには文字列も含ま"ssh-rsa"れているようです...]

結果の署名は次のようにエンコードされます。

string    "ssh-rsa"
string    rsa_signature_blob

'rsa_signature_blob'の値は、sを含む文字列としてエンコードされます[Ed:sが何であるか分からない。](整数で、長さやパディングなし、符号なし、ネットワークバイト順)。

"ssh-rsa"

文字列ssh-rsaはに変換され\x00\x00\x00\x07ssh-rsa、次ににエンコードされるAAAAB3NzaC1yc2E=ため、すべてのssh-rsaキーはそれで始まる必要があります。

e、公開指数

通常、3、17、257、65537のようなものです。これらの数値は、以下のようにエンコードされます(上からの末尾オフセット付き)

  • 3 '\x00\x00\x00\x01\x03'→→AAAABAw
  • 17 '\x00\x00\x00\x01\x11'→→AAAABEQ
  • 257 '\x00\x00\x00\x02\x01\x01'→→AAAACAQE
  • 65537 / 0x10001 '\x00\x00\x00\x03\x01\x00\x01'→→AAAADAQAB

したがって、「BAw」と表示された場合、指数は3、または「DAQAB」= 65537でした。

n、モジュラス(2つの秘密の素数の積、これを因数分解します!)

AAABAQ上記の後は、キーの長さが2048ビットであることを意味します(また、base64のパディングのために指数はDAQABのようでした)。base64の残りの部分はすべて指数であり、後は何もありません。

一般的な他のモジュラスプレフィックス:

  • AAAAg 1024ビット、e = 0x10001
  • AAAQI:2048ビット、e = 3
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.