J'utilise SSH (OpenSSH 5.5p1 sous Linux, pour être précis). J'ai une clé sur laquelle j'ai une phrase secrète. J'utilise ceci pour la connexion habituelle aux ordinateurs.
Puis-je aussi l'utiliser pour signer des fichiers?
Si je comprends bien, une clé SSH est une clé RSA (ou DSA) et, lors du processus de connexion SSH, elle est utilisée pour signer les messages envoyés au serveur. Donc, en principe et dans la pratique, il peut être utilisé pour signer des choses - en fait, c'est son seul but.
Mais pour autant que je sache, il n’ya aucun moyen d’utiliser la clé pour signer un fichier arbitraire (comme avec PGP, par exemple). Y a-t-il un moyen de faire ça?
ssh
digital-signature
Tom Anderson
la source
la source
Réponses:
Il n’est peut-être pas possible de faire cela avec les outils OpenSSH seuls.
Mais cela peut être fait assez facilement avec les outils OpenSSL. En fait, il y a au moins deux façons de le faire. Dans les exemples ci-dessous,
~/.ssh/id_rsa
est votre clé privée.Une façon utilise dgst :
L'autre utilise pkeyutl :
Tous deux écrivent une signature binaire sur la sortie standard. dgst prend une
-hex
option pour imprimer une représentation textuelle, avec quelques détails sur la forme de la signature. pkeyutl prend une-hexdump
option un peu moins utile. Les deux accepteront les clés RSA et DSA. Je n'ai aucune idée du format de la sortie. Les deux commandes produisent des formats différents. J'ai l'impression que pkeyutl est considéré comme plus moderne que dgst .Pour vérifier ces signatures:
et:
Le problème ici est
$PUBLIC_KEY_FILE
. OpenSSL ne peut pas lire le format de clé publique d'OpenSSH, vous ne pouvez donc pas simplement l'utiliserid_rsa.pub
. Vous avez quelques options, aucune idéale.Si vous avez une version de OpenSSH 5.6 ou ultérieure, vous pouvez apparemment le faire:
Qui écrira la clé publique sur la sortie standard au format PEM, qu’OpenSSL peut lire.
Si vous possédez la clé privée et qu'il s'agit d'une clé RSA, vous pouvez en extraire la clé publique (je suppose que le fichier de clé privée codé en PEM inclut une copie de la clé publique, car il n'est pas possible de dériver la clé publique. de la clé privée elle-même), et utilisez-le:
Je ne sais pas s'il existe un équivalent DSA. Notez que cette approche nécessite une certaine coopération de la part du propriétaire de la clé privée, qui devra extraire la clé publique et l'envoyer au vérificateur potentiel.
Enfin, vous pouvez utiliser un programme Python écrit par un responsable appelé Lars pour convertir la clé publique du format OpenSSH au format OpenSSL.
la source
@ La réponse de Tom m'a aidé à démarrer, mais n'a pas fonctionné en dehors de la boîte.
Ces commandes fonctionneront avec:
Utiliser pkeyutl
Utiliser dgst
La version pkeyutl ne peut signer que des fichiers de petite taille. Alors que dgst peut signer des fichiers volumineux, car il faut un résumé avant de signer le résultat.
la source
Pour vérifier ces signatures - solution plus facile:
Un moyen plus simple de s’assurer qu’un document signé est identique, consiste à générer à nouveau le fichier de signature numérique, puis à utiliser diff pour vérifier si les deux fichiers de signature sont identiques.
la source