web-dev-qa-db-fra.com

Réutilisation des clés privées / publiques

J'ai des comptes sur plusieurs sites tiers - Bitbucket, Bluehost, etc.

D'après ce que j'ai rassemblé, il est courant d'utiliser une paire de clés pour tous [id_rsa, id_rsa.pub], mais uniquement pour donner la clé publique

Est-ce la bonne utilisation ou est-il préférable de générer une nouvelle paire pour chaque site?

Il me semble que ce n'est pas sûr - tout site auquel je fais confiance avec une intention néfaste [ou qui est piraté] pourrait prendre ma clé privée lors de ma première connexion et l'utiliser pour accéder aux autres sites.

Une personne qui comprend SSH peut-elle vérifier qu'il est sûr d'utiliser une paire de clés partout et, dans l'affirmative, peut-être expliquer pourquoi?

De plus, si j'ai deux ordinateurs personnels, y a-t-il une raison d'utiliser des paires de clés différentes pour chacun?

Merci a tous.

45
SamGoody

Votre clé privée n'est jamais envoyée à l'autre site, il est donc parfaitement sûr de réutiliser la clé publique. Il est également possible de réutiliser la même clé sur vos ordinateurs locaux. Cependant, gardez à l'esprit que si quelqu'un vole la clé, il a alors accès à tous. Cela peut ou non être un problème.

42
artbristol

Il existe plusieurs paires de clés dans SSH. Celui dont vous parlez est la paire de clés client . Le client (c'est-à-dire la machine qui se trouve sur votre bureau, sous votre contrôle physique) stocke la clé privée - et la clé privée n'est jamais envoyée au serveur. La clé publique est stockée sur le serveur (généralement dans le $HOME/.ssh/authorized_keys fichier).

Lorsque le client se connecte au serveur, le client utilise la clé privée pour démontrer au serveur qu'il contrôle la clé privée et peut effectuer des calculs avec celle-ci (à savoir un signature numérique ). Le serveur vérifie la signature grâce à la clé publique. La connaissance de la clé publique ne donne pas le pouvoir de générer de nouvelles signatures, c'est pourquoi elle est appelée clé "publique": elle peut être rendue publique , sans effet néfaste. En particulier, la copie de votre clé publique sur un nombre quelconque de serveurs ne donne le pouvoir à aucun de ces serveurs sur les autres serveurs, qu'ils soient honnêtes ou complètement contrôlés par un attaquant.

Comme le souligne @artbristol, c'est la clé privée qui est importante. Si vous copiez votre clé publique sur dix serveurs et que quelqu'un vole la clé privée (peut-être en piratant votre système de bureau ou en la déplaçant physiquement), alors que quelqu'un accède immédiatement aux dix serveurs en une seule fois. Les clés privées sont précieuses .

18
Thomas Pornin

Il me semble que ce n'est pas sûr - tout site auquel je fais confiance avec une intention néfaste [ou qui est piraté] pourrait prendre ma clé privée lors de ma première connexion et l'utiliser pour accéder aux autres sites.

Une personne qui comprend SSH peut-elle vérifier qu'il est sûr d'utiliser une paire de clés partout et, si oui, peut-être expliquer pourquoi?

Les clés publiques fonctionnent en fonction de l'authentification par défi. Fondamentalement, vous donnez à plusieurs sites votre clé publique, afin que chaque site puisse vous lancer un défi. Ce défi est unique à chaque fois et ne peut être répondu que par une personne avec une clé privée.

Un exemple simplifié serait si le serveur prend votre clé publique et crypte un message comme "La clé de session pour l'utilisateur X au 19 décembre 16: 30: 03.351213 UTC est XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc". Votre ordinateur client reçoit le message chiffré, le déchiffre avec votre clé privée, puis renvoie la clé de session déchiffrée au serveur, validant que vous avez la clé privée en votre possession sur laquelle le serveur vous authentifie. (En pratique, c'est souvent plus compliqué avec le serveur qui a généralement des clés d'hôte publiques/privées, vous pouvez donc crypter vos messages sur le serveur et authentifier que le serveur est bien celui qu'il prétend être).

Avoir votre clé publique ne donne pas à un serveur malveillant des méthodes d'attaque supplémentaires à l'exception d'essayer de factoriser le module de votre clé publique pour recréer votre clé privée. Cela n'est possible que si votre clé est trop petite, c'est-à-dire que les clés 512 bits ont été craquées il y a une décennie, les clés RSA 768 bits ont été signalées craquées l'année dernière (avec environ 10 ^ 20 opérations; ou 2000 ans sur un seul cœur d'un processeur moderne); Les clés de 1024 bits sont toujours sécurisées et la valeur par défaut ssh est de 2048 bits.

6
dr jimbob

Ce document contient tous les détails sur le fonctionnement de l'authentification par clé publique dans SSH. Je l'ai résumé ci-dessous.

Le client envoie le paquet suivant:

 description/valeur du type de données 
 octet SSH_MSG_USERAUTH_REQUEST 
 chaîne nom d'utilisateur 
 chaîne service 
 chaîne "publickey" 
 booléen VRAI 
 chaîne clé publique nom de l'algorithme 
 clé publique de chaîne à utiliser pour l'authentification 
 signature de chaîne

signature est une signature utilisant la clé privée sur les données suivantes:

 identifiant de session de chaîne 
 octet SSH_MSG_USERAUTH_REQUEST 
 nom d'utilisateur de chaîne 
 service de chaîne 
 chaîne "publickey" 
 booléen VRAI 
 chaîne clé publique nom de l'algorithme 
 chaîne clé publique à utiliser pour l'authentification 

Le serveur cherche ensuite à voir si la clé publique spécifiée est autorisée pour la clé publique donnée (@ThomasPornin explique comment cela est fait dans sa réponse). Le serveur vérifie ensuite que la signature est correcte (cela se fait à l'aide de la clé publique). Si cela réussit, l'authentification réussit.

Comme vous pouvez le voir (et comme indiqué dans la réponse de @ artbristol), la clé privée n'est jamais transmise au serveur. Il suffit de prouver que vous connaissez la clé privée en envoyant la signature numérique.

4
mikeazo