Clés SSH: pourquoi id_rsa est-il plus grand que id_rsa.pub?

8

Ma clé privée ( ~/.ssh/id_rsa) est un fichier de 1766 octets, mais ma clé publique ( ~/.ssh/id_rsa.pub) ne fait que 396 octets. Pourquoi cette énorme différence? Est-ce parce que la clé privée est cryptée à l'aide d'AES? Le texte chiffré AES n'est-il généralement pas de la même longueur que le texte en clair?

épisseur
la source

Réponses:

17

Votre clé privée contient plus d'informations que votre clé publique. Alors que la clé publique ne transmet que l'exposant de chiffrement (e) et le module (n), la clé privée comprend en outre un exposant de déchiffrement (d) et les deux facteurs premiers (p et q) du module. La clé privée contient essentiellement une clé publique.

[Cryptage: texte chiffré = message ^ e (mod n); Déchiffrement: message = texte chiffré ^ d (mod n)]

Pour voir toutes les données de votre fichier de clé privée:

$ openssl rsa -in id_rsa -text -noout

Edit: Le fichier de clé privée n'a apparemment pas d'exposant de chiffrement, mais il a des exposants d_1 et d_2, où d_1 = d (mod p-1) et d_2 = d (mod q-1). Ceux-ci sont utilisés pour accélérer le décryptage - vous pouvez diviser votre exponentiation de décryptage en appels d'exponentiation parallèle plus petits, ce qui finit par être plus rapide qu'un grand m = c ^ d (mod n) pour le grand d et le grand n.

user75636
la source
2

Malheureusement, vous n'avez pas spécifié dans quel format les clés sont stockées. Je suppose que vous faites référence à l'encodage de clé OpenSSH. Dans ce format, les clés sont stockées dans des blocs de données codés en base64. Selon l'encodage lors du chiffrement, il y a généralement une sorte de remplissage impliqué lors du chiffrement des données. Ainsi, les données résultantes sont un multiple de la taille du bloc de chiffrement.

Les clés OpenSSH peuvent également inclure une sorte de commentaires et des propriétés supplémentaires insérées entre les marqueurs ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----et -----END RSA [PUBLIC|PRIVATE] KEY-----. Voir RFC4716 .

De plus, pour la clé publique, le module et l'exposant public sont enregistrés tandis que pour la clé privée, l'exposant privé est enregistré. Voir la génération de clés RSA sur Wikipedia pour plus de détails sur la base mathématique. Il existe de nombreux endroits sur le Web qui décrivent la connexion mathématique entre ces touches. Je ne sais pas si vous avez besoin d'une copie de ces explications ici.

Théoriquement, il est possible de calculer la clé privée à partir des informations de clé publique, mais cela est mathématiquement beaucoup plus difficile que l'inverse. Considérez simplement la clé privée comme la "source" qui inclut toutes les variables et la clé publique comme étant le résultat du calcul. Il est facile d'effectuer le calcul encore et encore si vous connaissez toutes les variables, mais en connaissant uniquement le résultat, il est difficile d'obtenir toutes les variables source. C'est aussi la raison pour laquelle il vous suffit de sauvegarder la clé privée dans un endroit sûr. Vous pouvez toujours utiliser la clé privée pour recalculer la clé publique. Mais pas l'inverse - eh bien, théoriquement, vous pouvez le faire, mais selon la longueur de la clé, cela peut prendre de nombreuses années;).

SkyBeam
la source
Le calcul de la clé privée à partir de la clé publique nécessite une factorisation rapide et efficace - ce dont manque la sécurité du chiffrement à clé publique (au moins RSA).
Andrew
C'est correct. Trouvez un algorithme de factorisation rapide et, fondamentalement, vous rompez la sécurité du cryptage RSA. Alternativement, on pourrait opter pour l'ECC (Elliptic Curve Cryptography) qui est basé sur le concept de difficultés à parcourir des logarithmes discrets. Cependant, si quelqu'un trouve une solution efficace à ce problème ...
SkyBeam