Ich habe die Datei "authorized_keys" auf meinem Server mit dem öffentlichen Schlüssel für den neuen Laptop aktualisiert und war überrascht, dass die beiden öffentlichen Schlüssel identisch waren:
# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
Was ist die Geschichte auf AAAAB3...
etc? Bei einigen Online-Suchvorgängen sehe ich, dass andere Schlüssel ebenfalls gleich beginnen. Erklärt es den Algorithmus oder die Version oder so?
ssh
encryption
Gabe Durazo
quelle
quelle
AAAAB3NzaC1yc2EAAAA
alsoAntworten:
Dies ist eigentlich eine Kopfzeile, die definiert, um welche Art von Schlüssel es sich handelt. Wenn Sie sich den Abschnitt Public Key Algorithm von RFC 4253 ansehen, sehen wir das für RSA-Schlüssel
Wenn Sie die Zeichenfolge "B3NzaC1yc2E" in Base64 dekodieren, sehen Sie, dass sie als "ssh-rsa" in ASCII übersetzt wird. Vermutlich stellt "AAAA" eine Art Header dar, sodass die Anwendung genau wissen kann, wo sich der Datenstrom befindet, um mit der Verarbeitung des Schlüssels zu beginnen.
quelle
Das öffentliche SSH-Schlüsselformat ist in RFC 4253 dokumentiert und hier etwas zusammengefasst . Die PEM-codierten Daten bestehen aus einer Anzahl von (Längen-, Daten-) Paaren, und das erste Paar codiert den Algorithmusnamen, der so etwas wie
ssh-rsa
oder sein wirdssh-dsa
.Dies bedeutet, dass der erste Teil der öffentlichen Schlüsseldaten für alle SSH-Schlüssel ähnlich sein wird.
quelle
Nachdem ich Scotts Links zum Spaß gefolgt war, habe ich mich intensiv mit dem Format befasst. TLDR:
RFC4231 gibt die beiden verwendeten Datentypen an:
string
: Binäre Zeichenfolge beliebiger Länge. Zeichenfolgen dürfen beliebige Binärdaten enthalten, einschließlich Nullzeichen und 8-Bit-Zeichen. Sie werden alsuint32
Container ihrer Länge gespeichertmpint
: Stellt Ganzzahlen mit mehreren Genauigkeiten im Zweierkomplementformat dar, als Zeichenfolge gespeichert, 8 Bits pro Byte, MSB zuerst. [...]RFC4253 Sek. 6.6 besagt, dass der Schlüssel wie folgt codiert ist:
"ssh-rsa"
Die Zeichenfolge
ssh-rsa
wird in konvertiert\x00\x00\x00\x07ssh-rsa
und anschließend in codiertAAAAB3NzaC1yc2E=
, sodass alle ssh-rsa-Schlüssel damit beginnen sollten.e
, der öffentliche ExponentNormalerweise etwa 3, 17, 257, 65537. Diese Zahlen werden wie folgt codiert (mit dem nachgestellten Versatz von oben)
'\x00\x00\x00\x01\x03'
→AAAABAw
'\x00\x00\x00\x01\x11'
→AAAABEQ
'\x00\x00\x00\x02\x01\x01'
→AAAACAQE
'\x00\x00\x00\x03\x01\x00\x01'
→AAAADAQAB
Wenn Sie also "BAw" sehen, war Ihr Exponent 3 oder "DAQAB" = 65537
n
, der Modul (Produkt Ihrer beiden geheimen Primzahlen, faktorieren Sie dies!)AAABAQ
nach oben bedeutet, dass Ihre Schlüssellänge 2048 Bit beträgt (und Ihr Exponent aufgrund der base64-Auffüllung wie DAQAB war). Der gesamte Rest des base64-Zeugs ist der Exponent, es folgt nichts.Andere Modul-Präfixe, die häufig vorkommen können:
AAAAg
1024 Bits, e = 0x10001AAAQI
: 2048 Bits, e = 3quelle