web-dev-qa-db-fra.com

Pourquoi une clé privée cryptée peut-elle être forcée brute?

Lorsque vous utilisez des touches SSH pour authentifier sur un serveur pour un accès à distance, pourquoi est-il possible de concevoir la clé true et donc la phrase secrète à partir d'une clé privée cryptée, sans vérifier chaque devinette de la phrase secrète sur le serveur pour voir si elle authentifie?

Je comprends que la phrase secrète n'est utilisée que pour déchiffrer la clé et non envoyée sur le serveur distant, mais je ne comprends pas pourquoi il est facile de raconter le résultat du décrage correct du résultat d'un décryptage incorrect. Si cela était impossible (ou invraisemblable), les clés SSH seraient sûrement plus immunisées pour la performation brute et donc plus forte?

Je le vois comme une faiblesse, mais je comprends à peine les mathématiques derrière l'authentification publique publique, alors je suppose qu'il y a une raison pour laquelle j'ai manqué, mais que vous êtes au courant des personnes très intelligentes.

14
Ben Page

Maintenant, c'est une idée qui mérite d'être enquêté.

Comme @Caf Shows, une clé privée RSA a une grande structure interne, qui est facilement reconnue. Il serait très difficile de concevoir un schéma de cryptage basé sur mot de passe telle que le déchiffrement d'une clé RSA cryptée avec le mauvais mot de passe donne toujours quelque chose qui ressemble à une clé privée de RSA valide.

Cependant, cela est relativement facile à faire avec [~ # ~] dsa [~ # ~ ~] Touches (et aussi avec la variante elliptique-courbe [~ # ~ # ~ # # ~] ). Une clé privée DSA utilise Paramètres de clé (appelé P, q et g ) qui ne sont pas tenus d'être secrets (ils sont également présents dans la clé publique correspondante); La seule pièce vraiment privée de la clé est x, un entier modulo Q. Tout Integer Modulo Q est une clé privée de DSA valide. Vous pouvez donc créer un cryptage basé sur le mot de passe x de cette façon:

  • Choisir q Pour être un nombre de 256 bits (c'est-à-dire 2255 <q <2256).
  • Utilisez un chiffre de bloc avec des blocs de 256 bits (par exemple Rijndael - L'AES est Rijndael avec des blocs de 128 bits et des touches 128 bits, 192 bits ou 256 bits, mais l'original Rijndael a également un mode avec des blocs de 256 bits).
  • Pour chiffrer x Avec un mot de passe, d'abord dériver une clé à partir du mot de passe (utilisation BCRYPT !), Puis chiffrer x (comme une corde de 256 bits) avec Rijndael. Si la chaîne résultante n'est pas (lorsqu'elle est interprétée comme un numéro) dans le [0..q-1] Plage, puis la chiffre à nouveau, et encore, jusqu'à ce que vous reveniez à la plage attendue . En moyenne, vous devrez appeler Rijndael moins de deux fois, ce qui n'est donc pas informellement difficile.
  • Pour déchiffrer x, tirez simplement une clé à partir du mot de passe saisi et appliquez Rijndael décryptage. Là encore, faites-le récursivement jusqu'à ce que vous reveniez sur [0..q-1] plage.

Donc c'est faisable. Est-ce que c'est une bonne idée ? L'avantage de ce cryptage est que le mot de passe ne peut plus être forcé brut par un attaquant qui a reçu une copie de la clé privée cryptée. D'autre part, si l'attaquant dispose également d'une copie de la clé publique, il peut facilement vérifier qu'il s'est déchiffré avec le bon mot de passe. La clé publique étant, bien, destinée à être publique, elle n'est pas nécessairement gardée aussi confidentielle que la clé privée. Le serveur cible l'a. En réalité, Tous Serveurs pour lesquels la clé privée est utilisée pour vous connecter a une copie de la clé publique. La clé publique n'est donc que modérément confidentielle, au mieux. Par conséquent, l'avantage fourni par "cryptage de mot de passe non vérifiable" comme décrit ci-dessus, semble ténu. D'autre part, il dispose des inconvénients suivants: si l'utilisateur se heurte à son mot de passe, le serveur est toujours interrogé et SSH ne peut plus faire la distinction entre "utilisateur tâtonné de son clavier" et "il y a quelque chose qui ne va pas sur le serveur".

Ainsi, alors que ce que vous demandez est réalisable pour au moins certains types de clés, il est compréhensible qu'il n'a pas encore été mis en œuvre (encore). Ce n'est pas une victoire incontestée; C'est un compromis entre la convivialité et la sécurité (vous perdrez un peu d'une convivialité pour gagner un peu de sécurité).

12
Thomas Pornin

Notez que vous pouvez toujours générer la clé publique à partir de la clé privée, de sorte que si l'attaquant a la clé publique (qui est plausible, elle étant publique) alors la vérification de la réponse est toujours triviale. J'imagine que cela est fondamental pour tous les algorithmes de cryptage asymétriques.

0
kiyo

Il est essentiellement impossible de construire un système qui fait ce que vous voulez.

Nous devrions supposer que l'attaquant a votre clé publique (la clé publique est publique et stockée sur de nombreuses machines). Compte tenu d'un candidat pour la clé privée, l'attaquant peut utiliser la clé publique pour tester si ce candidat est correct (par exemple, en vérifiant si la clé privée candidate déchiffre correctement les choses qui ont été cryptées sous la clé publique). Par conséquent, étant donné à un candidat pour le mot de passe, l'attaquant sera toujours en mesure de vérifier sa validité en récupérant le candidat clé privé correspondant, puis de la vérifier contre la clé publique. Ceci n'est pas spécifique à l'algorithme de clé publique particulier utilisé ou au format de stockage et de cryptage de la clé privée. C'est une limitation fondamentale qui sera présente dans presque toutes les méthodes imaginables de stocker votre clé privée SSH.

En bref, la raison pour laquelle SSH a ce risque est que ce risque est de manière réaliste aucun moyen réalisable d'éviter les risques.

Par conséquent, il vous incombe de choisir une phrase secrète forte pour protéger votre clé privée SSH.

0
D.W.

Le fichier "clé privée" stocke les clés publiques et privées.

Le fichier est crypté avec un algorithme symétrique.

Si je volais un conducteur avec le fichier sur celui-ci, je peux hors ligne de force brute la phrase de passe, tout comme je peux brut-forcer tout autre fichier crypté. Une fois que je déchiffre le fichier, j'ai à la fois les clés publiques et privées.

Les clés sont rarement utilisées pour l'authentification. Normalement, ils sont utilisés pour établir un canal sécurisé de confiance, après quoi vous devez vous authentifier avec un nom d'utilisateur/mot de passe. Voler votre Pendrive et votre déchiffrement des clés ne me donnera toujours pas accès au serveur, mais cela me permettra d'accéder à l'homme dans le milieu de votre connexion.

Je ne suis pas sûr de ce que vous demandiez, mais j'espère que cela vous aidera.

0
Robert David Graham