SSH-Schlüssel: Warum ist id_rsa größer als id_rsa.pub?

8

Mein privater Schlüssel ( ~/.ssh/id_rsa) ist eine 1766-Byte-Datei, aber mein öffentlicher Schlüssel ( ~/.ssh/id_rsa.pub) ist nur 396 Byte lang. Warum der massive Unterschied? Liegt es daran, dass der private Schlüssel mit AES verschlüsselt ist? Ist AES-Chiffretext normalerweise nicht ungefähr so ​​lang wie der Klartext?

Spleißer
quelle

Antworten:

17

Ihr privater Schlüssel enthält mehr Informationen als Ihr öffentlicher Schlüssel. Während der öffentliche Schlüssel nur den Verschlüsselungsexponenten (e) und den Modul (n) übermittelt, enthält der private Schlüssel zusätzlich einen Entschlüsselungsexponenten (d) und die beiden Primfaktoren (p und q) des Moduls. Der private Schlüssel enthält im Wesentlichen einen öffentlichen Schlüssel.

[Verschlüsselung: Chiffretext = Nachricht ^ e (mod n); Entschlüsselung: message = chiffretext ^ d (mod n)]

So zeigen Sie alle Daten in Ihrer privaten Schlüsseldatei an:

$ openssl rsa -in id_rsa -text -noout

Bearbeiten: Die private Schlüsseldatei hat anscheinend nicht den Verschlüsselungsexponenten, aber sie hat die Exponenten d_1 und d_2, wobei d_1 = d (mod p-1) und d_2 = d (mod q-1). Diese werden verwendet, um die Entschlüsselung zu beschleunigen. Sie können Ihre Entschlüsselungs-Exponentiation in kleinere parallele Exponentiationsaufrufe aufteilen, die schneller als ein großes m = c ^ d (mod n) für großes d und großes n sind.

user75636
quelle
2

Leider haben Sie nicht angegeben, in welchem ​​Format die Schlüssel gespeichert sind. Ich denke, Sie beziehen sich auf die OpenSSH-Schlüsselcodierung. In diesem Format werden die Schlüssel in Base64-codierten Datenblöcken gespeichert. Abhängig von der Codierung beim Verschlüsseln ist beim Verschlüsseln von Daten normalerweise eine Art Auffüllen erforderlich. Die resultierenden Daten sind also ein Vielfaches der Verschlüsselungsblockgröße.

OpenSSH Tasten können auch eine Art von Kommentaren und zusätzliche Eigenschaften zwischen dem eingefügt sind ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----und -----END RSA [PUBLIC|PRIVATE] KEY-----Markierungen. Siehe RFC4716 .

Außerdem werden für den öffentlichen Schlüssel der Modul und der öffentliche Exponent gespeichert, während für den privaten Schlüssel der private Exponent gespeichert wird. Weitere Informationen zur mathematischen Basis finden Sie unter RSA-Schlüsselgenerierung auf Wikipedia . Es gibt viele Stellen im Internet, die die mathematische Verbindung zwischen diesen Schlüsseln beschreiben. Ich bin mir nicht sicher, ob Sie hier eine Kopie dieser Erklärung benötigen.

Theoretisch ist es möglich, den privaten Schlüssel aus Informationen über öffentliche Schlüssel zu berechnen, aber dies ist mathematisch viel schwieriger als umgekehrt. Betrachten Sie einfach den privaten Schlüssel als "Quelle", die alle Variablen enthält, und den öffentlichen Schlüssel als Ergebnis der Berechnung. Es ist einfach, die Berechnung immer wieder durchzuführen, wenn Sie alle Variablen kennen, aber nur das Ergebnis kennen. Es ist schwierig, alle Quellvariablen zu erhalten. Dies ist auch der Grund, warum es für Sie ausreicht, den privaten Schlüssel an einem sicheren Ort aufzubewahren. Sie können den öffentlichen Schlüssel jederzeit mit dem privaten Schlüssel neu berechnen. Aber nicht umgekehrt - theoretisch können Sie dies tun, aber je nach Schlüssellänge kann dies viele Jahre dauern;).

SkyBeam
quelle
Die Berechnung des privaten Schlüssels aus dem öffentlichen Schlüssel erfordert eine schnelle und effiziente Faktorisierung - auf deren Fehlen die Sicherheit der Verschlüsselung mit öffentlichen Schlüsseln (zumindest RSA) beruht.
Andrew
Das ist richtig. Wenn Sie einen schnellen Faktorisierungsalgorithmus finden, brechen Sie im Grunde die Sicherheit der RSA-Verschlüsselung. Alternativ könnte man sich für die ECC (Elliptic Curve Cryptography) entscheiden, die auf dem Konzept der Schwierigkeiten beim Gehen mit diskreten Logarithmen basiert. Wenn jedoch jemand eine effiziente Lösung für dieses Problem findet ...
SkyBeam