Il m'arrive parfois, lorsque j'explique comment configurer le système d'authentification par clé publique SSH, qu'on me demande quelle est la meilleure clé, RSA ou DSA. Je vais tenter de répondre à cette question dans les paragraphes suivants. Je commencerai par préciser que, bien que je dispose d'une certaine expertise en matière de réseaux LAN Ethernet et TCP/IP, mes connaissances en cryptographie sont tout au plus celles d'un amateur. La discussion qui suit est basée sur des recherches effectuées sur Internet, dont certaines sont contradictoires et, comme tout ce qui concerne Internet, certains liens sont plus fiables que d'autres.
Tout d'abord, que sont les clés RSA et DSA ?
Le DSA, ou algorithme de signature numérique, est une norme du gouvernement américain conçue par la NSA pour les signatures numériques. Il est dérivé de l'algorithme de signature ElGamal. La sécurité repose sur la difficulté à résoudre certains types de fonctions logarithmiques. Il ne peut être utilisé que pour les signatures numériques.
Le nom RSA provient des initiales des auteurs, Ron Rivest, Adi Shamir et Leonard Adleman, qui ont été les premiers à publier l'algorithme. Il repose sur la difficulté de factoriser de grands nombres. Contrairement au DSA, le RSA peut être utilisé pour chiffrer un message entier.
D'après ce que j'ai compris, résoudre les problèmes logarithmiques et factoriels est tout aussi difficile, mais j'ai trouvé certaines références qui indiquent que les problèmes logarithmiques sont plus difficiles (j'ai également trouvé des références qui indiquent qu'ils sont tout aussi difficiles).
Des choses qui, selon moi, n'ont pas d'importance, mais que vous avez peut-être entendues ou entendrez peut-être à l'avenir :
- Le DSA est plus rapide que le RSA pour la signature, mais le RSA est plus rapide pendant la phase de vérification. Étant donné que l'authentification nécessite les deux phases, cette différence n'a pas d'importance.
- Comme je l'ai mentionné plus haut, le DSA ne peut être utilisé que pour l'authentification, tandis que le RSA peut être utilisé à la fois pour l'authentification et pour le chiffrement d'un message. Cependant, SSH utilise uniquement les clés pour l'authentification, donc là encore, la différence n'a pas d'importance.
- Pour une même longueur de clé, DSA génère un fichier de signature plus petit. Cependant, comme chaque clé occupe un bloc disque, cela n'a pas d'importance.
- Les clés DSA étaient initialement limitées à 1024 bits, mais ce n'est plus le cas aujourd'hui.
- J'ai recherché « clé et DSA » et « clé et RSA » dans la « base de données nationale des vulnérabilités » et j'ai trouvé 2 vulnérabilités liées aux clés DSA et 5 vulnérabilités liées aux clés RSA. À ma connaissance, toutes ces vulnérabilités ont été corrigées dans les dernières versions d'OpenSSL/OpenSSH, qui font désormais partie du pack de sécurité Internet pour OpenVOS.
Arguments en faveur du DSA :
- Le protocole DSA ne peut être utilisé qu'avec le protocole SSH 2, tandis que le protocole RSA peut être utilisé avec les protocoles 1 et 2 (voir « SSH 2 » par rapport à « OpenSSL et OpenSSH Release 2 »). Le protocole 1 présente quelques défauts de conception importants et a été remplacé par la version 2. Je considère cela comme une raison de privilégier légèrement l'utilisation des clés DSA, qui constituent en quelque sorte une protection intégrée contre l'utilisation de l'ancien protocole obsolète.
Arguments en faveur du RSA :
- Un mauvais générateur de nombres aléatoires divulguera des bits de clé DSA (ne me demandez pas comment).
- Le site Web openssh.org semble rester muet sur la question de savoir lequel est le meilleur, mais les versions plus récentes de ssh-keygen créent une clé RSA si vous ne spécifiez pas le type.
- Il semble y avoir davantage (et plus récentes) de RFC faisant référence aux clés RSA qu'aux clés DSA.
Quelques comparaisons (la taille des fichiers inclut le texte qui ne fait pas partie de la clé) :
| Temps de création DSA | Heure de création de la RSA | octets DSA | octets RSA | DSA.pub octets | Octets RSA.pub | |
| 1024 bits | 1 seconde | 1 seconde | 736 | 951 | 610 | 230 |
| 2048 bits | 8 secondes | 2 secondes | 1264 | 1743 | 1122 | 402 |
| 4096 bits | 50 secondes | 25 secondes | 2304 | 3311 | 2146 | 742 |
Quelle que soit la clé que vous utilisez, ce qui importe vraiment, c'est sa longueur. Compte tenu de l'environnement actuel, je recommanderais une longueur de clé de 2048. Cela peut sembler excessif aujourd'hui, mais je ne suis pas sûr que ce sera encore le cas dans 5 ans.
Quant au type de clé à utiliser, je penche plutôt pour les clés RSA.
