En tant que personne qui connaît peu la cryptographie, je m'interroge sur le choix que je fais lors de la création de clés ssh.
ssh-keygen -t type
, où type correspond à dsa, rsa et ecdsa.
La recherche sur Google peut donner certains des informations sur les différences entre les types, mais rien de concluant. Ma question est donc la suivante: existe-t-il des réponses "faciles" pour les développeurs/administrateurs système ayant peu de connaissances en cryptographie, quand choisir quel type de clé?
J'espère une réponse dans le style "Utiliser DSA pour X et Y, RSA pour Z et ECDSA pour tout le reste", mais je me rends également compte qu'il est tout à fait possible que de telles réponses simples ne soient pas disponibles.
En pratique, une clé RSA fonctionnera partout. Le support ECDSA est plus récent, donc certains anciens clients ou serveurs peuvent avoir des problèmes avec les clés ECDSA. Une clé DSA fonctionnait partout, selon la norme SSH ( RFC 4251 et suivantes), mais cela a changé récemment: OpenSSH 7.0 et versions supérieures n'acceptent plus les clés DSA par défaut.
ECDSA est plus léger sur le plan des calculs, mais vous aurez besoin d'un très petit client ou serveur (disons 50 MHz intégré ARM) pour remarquer la différence.
À l'heure actuelle , il n'y a aucune raison liée à la sécurité de préférer un type à un autre, en supposant des clés suffisamment grandes (2048 bits pour RSA ou DSA, 256 bits pour ECDSA); la taille de la clé est spécifiée avec le -b
paramètre. Cependant, certains ssh-keygen
les versions peuvent rejeter les clés DSA d'une taille autre que 1024 bits, ce qui est actuellement ininterrompu, mais sans doute pas aussi robuste qu'on pourrait le souhaiter. Donc, si vous vous adonnez à une légère paranoïa, vous préférerez peut-être le RSA.
Pour résumer, faites ssh-keygen -t rsa -b 2048
et vous serez heureux.
Comme gilles le dit, le DSA est risqué parce que si vous faites des signatures (et utiliser votre clé avec un client ssh pour vous connecter, c'est effectivement faire des signatures) sur une boîte avec un mauvais RNG, votre clé peut être compromise. AIUI cela a rendu Debian essentiellement abandonner DSA pour les clés utilisées sur leur infrastructure à la lumière du fiasco du générateur de nombres aléatoires Debian OpenSSL.
http://meyering.net/nuke-your-DSA-keys/
ECDSA est relativement nouveau, d'après certaines recherches rapides, il semble qu'il ait été introduit en 5.7. Afaict la plupart de ces systèmes sont hors de support et devraient probablement être migrés mais nous savons tous que cela ne se produit pas parfois. Par exemple, Debian squeeze et ubuntu lucid. L'ECDSA présente des avantages en ce sens qu'une clé peut être beaucoup plus petite qu'une clé RSA ou DSA pour le même niveau de sécurité (présumé). Malheureusement, il partage l'inconvénient du DSA d'être sensible aux mauvais générateurs de nombres aléatoires. On craint également que les courbes elliptiques traditionnellement utilisées aient pu être détournées.
ED25519 est une option encore plus récente, introduite par openssh 6.5. C'est une variante de l'algorithme ECDSA mais il résout le problème du générateur de nombres aléatoires et utilise une courbe "rien dans ma manche". Ce sera probablement la meilleure option à long terme, mais pour le moment, il existe encore des systèmes pris en charge qui n'ont pas suffisamment de nouveautés openssh.
Donc, l'OMI qui fait du RSA (avec une clé de 2048 ou 4096 bits selon la paranoïa que vous êtes) reste le choix le plus raisonnable pour une utilisation générale.
Edit: mise à jour de la situation actuelle en mars 2017.
DSA et ECDSA ont des clés de longueur fixe, et ce sont des normes du gouvernement américain, ce qui signifie qu'ils en savent plus sur les normes que le grand public. RSA est mieux connu et vous pouvez générer des clés plus longues avec lui (la valeur par défaut est 2048 par opposition à la longueur fixe de 1024 bits de DSA), il est donc (sans doute) préférable d'utiliser.
Utilisez RSA. Pas pour des raisons de sécurité, mais pour des raisons de compatibilité.
Je ne recommande pas d'utiliser les clés DSA. Depuis OpenSSH 7.0, SSH ne prend plus en charge les clés DSA par défaut. Comme le disent les notes de publication d'OpenSSH 7. , "La prise en charge de l'hôte ssh-dss et des clés utilisateur est désactivée par défaut au moment de l'exécution". Par conséquent, l'utilisation de clés DSA (ssh-dss) ne fera que provoquer des maux de tête.
Les clés ECDSA pourraient être meilleures, mais malheureusement, les clés ECDSA peuvent également provoquer des problèmes de compatibilité sur certaines plates-formes. Sur Fedora, gnome-keyring-daemon ne récupère pas automatiquement les clés SSD ECDSA, vous ne serez donc pas automatiquement invité à entrer un mot de passe pour déverrouiller votre clé SSH lorsque vous essayez de l'utiliser sur Fedora.
Les clés RSA sont totalement exemptes de ces maux de tête de compatibilité. Ils sont les plus utilisés et semblent donc être les mieux pris en charge. Par conséquent, je vous recommande de générer des clés RSA, pour vous éviter les ennuis plus tard.
En tant que note éditoriale, la décision d'OpenSSH de désactiver le support DSA est un peu déroutante: les clés DSA 1024 bits ont environ la même sécurité que les clés RSA 1024 bits, donc on ne sait pas pourquoi OpenSSH a désactivé le support pour 1024 clés DSA à 10 bits mais conservent la prise en charge des clés RSA 1024 bits. (OpenSSH prend toujours en charge RSA; il a une vérification spéciale pour désactiver les clés RSA de 768 bits ou plus courtes, mais pour DSA, il désactive simplement toutes les clés DSA, quelle que soit leur longueur.) En outre, OpenSSH utilisé pour prendre en charge les clés DSA qui sont plus longues 1024 bits de longueur; on ne sait pas pourquoi leur prise en charge a été désactivée. Eh bien, ça va.