Comment utiliser la clé publique ssh-rsa pour chiffrer un texte?

55

Le scénario est donc le suivant: étant donné que je suis Bob, je veux chiffrer un message pour Alice. La seule clé publique que j'ai est son ssh-rsaid_rsa.pub comme ceci:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == [email protected]

Alors, y a-t-il un moyen de chiffrer une chaîne en utilisant cette clé publique afin qu'elle puisse utiliser sa clé privée depuis id_rsa(générée depuis ssh-keygen) pour déchiffrer le message?

(Je sais que c'est possible tout de suite si vous utilisez .pemun fichier de paire de clés. Si vous pouvez me montrer comment convertir cela au format pris en opensslcharge, ce serait aussi bien!)

Merci!

sikachu
la source
5
Alice et toi devriez vraiment enquêter sur les gpg ... gnupg.org ; D
tink
4
Hahaha, en effet! Cependant, le scénario que j'ai ici est que j'ai déjà accès à leur ssh-rsaclé publique et que je ne veux pas ajouter de couche de complexité supplémentaire (par exemple, demander au destinataire d'aller installer gpg, etc.)
sikachu

Réponses:

71

Il est possible de convertir votre clé publique ssh au format PEM (que 'openssl rsautl' puisse la lire):

Exemple:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

En supposant que «myMessage.txt» soit votre message, il devrait être crypté par clé publique.

Ensuite, il suffit de chiffrer votre message avec openssl rsautl et votre clé publique PEM convertie comme vous le feriez normalement:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

Le résultat est votre message crypté dans 'myEncryptedMessage.txt'

Pour tester votre travail pour déchiffrer la clé privée avec Alice:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt
Dirk Thannhäuser
la source
5
J'ai résumé cela dans un script qui extrait la clé publique de l'utilisateur de GitHub. github.com/twe4ked/catacomb
twe4ked
Cela ne fonctionne pas pour moi. Mon ssh-keygenn'a pas d' -moption. (Je ne vois pas comment demander à ssh-keygen sa version.) Remplacer -mpar -ttravaux, mais opensslme dit ensuite "incapable de charger la clé publique". Voir stackoverflow.com/questions/18285294/… .
Jason Gross
1
Même problème que Jason a sur MaxOS Mavericks. Remplacé -m par -t pour la génération de clé activée par keygen.
Robert Christian
8
Notez que cela ne fonctionne que si le fichier est suffisamment petit. par exemple 200 octets. Voir stackoverflow.com/questions/7143514/…
h__
1
En écho à ce que @hyh a dit, cela ne fonctionne que si le fichier en entrée est petit (la ligne se situe autour de 254 octets, sinon, cela donnera des "routines rsa: RSA_padding_add_SSLv23: données trop volumineuses pour la taille de la clé: /SourceCache/OpenSSL098/OpenSSL098-52.20. 2 / src / crypto / rsa / rsa_ssl.c: erreur 73 ".
Devy
1

Essayez de faire ssh-vault car il utilise des clés publiques ssh-rsa pour chiffrer "créer un coffre" et la clé privée ssh-rsa pour décrypter "afficher le contenu du coffre".

Nbari
la source
-3

Pourquoi ne pas le faire de manière très évidente et ne nécessite pas de rouler votre propre crypto.

Alice se connecte à [email protected] qui est configuré pour autoriser uniquement l'authentification par clé publique pour le compte alice. Les propriétés de ssh garantissent que seule Alice peut s’authentifier. Même une attaque d'homme du milieu échoue car (en supposant que vous désactivez ssh1 et insistiez sur les paramètres appropriés), la communication initiale utilisant DH crée une valeur connue à la fois pour alice et bob mais pas pour aucun homme au milieu et cela peut être utilisé pour l'authentification. qu’aucune réponse ou attaque MITM ne peut voir le contenu du communicatino.

Alors, alice sftp dans votre boîte et télécharger le fichier.

Peter Gerdes
la source
9
Comment utiliser openssl pour rouler votre propre crypto?
cmc
Par exemple, l'utilisation de RSA pour chiffrer une chaîne de 1024 caractères échouerait à cause de la taille du message. Pour surmonter ce problème, le responsable de la mise en œuvre se trouve dans une situation précaire, surtout si les messages sont répétés. Il est plus sûr d'utiliser RSA pour chiffrer une nouvelle clé de chiffrement symétrique et un nouveau vecteur d'initialisation qu'il est peu probable de répéter. Créez donc un texte chiffré unique pour chaque message envoyé, et obtenez la vitesse de chiffrement symétrique, ainsi que la quantité de chiffrement et de texte brut. pour attaquer la clé RSA avec. J'espère que cela a du sens. :)
Sam
Cette méthode nécessite que Bob fasse confiance à Alice ou verrouille bobserver.com afin qu'Alice ne puisse rien faire de malicieux.
mwfearnley
Ça roule dans le sens où alice doit effectuer une quantité considérable d’opérations inhabituelles pour décrypter, pas dans le sens où les calculs sous-jacents sont calculés. Comme cela a été demandé en termes d’utilitaires de ligne de commande plutôt que d’API ou de perspective théorique, l’individu voulait réellement transférer des informations concrètes et non pas greffer un nouveau protocole au-dessus de ssh. En tant que tel, sftp semblait bien plus facile et, oui, il faut regarder le serveur, faire confiance à Alice ou nettoyer le serveur par la suite.
Peter Gerdes
Il me semble que, dans ce qui précède, il est vulnérable à l’interception du courrier électronique dans lequel vous expliquez à Alice comment elle peut déchiffrer ce message inhabituel et à lui donner une séquence de commandes qui décryptent en toute sécurité le message MITM de Charlie (les commandes openssl sont comme par magie). incantations to most) alors que l'idée du serveur évite tout cela au profit des commandes standard que beaucoup connaissent bien et si bob le lance à partir de l'ordinateur sur lequel il crypte, il y fait confiance. De toute évidence, la meilleure réponse dépend du modèle de menace, mais du contexte, cela leur servirait probablement mieux.
Peter Gerdes