Parfois, lorsqu'on m'explique comment mettre en place le système d'authentification à clé publique de SSH, on me demande quelle est la meilleure solution, les clés RSA ou DSA. Dans les prochains paragraphes, je vais tenter de répondre à cette question. Je commencerai ma discussion en précisant que, bien que j'aie une certaine expertise des réseaux locaux Ethernet et des réseaux TCP/IP, je n'ai, au mieux, qu'une compréhension amateur de la cryptographie. La discussion qui suit est basée sur des recherches sur Internet, dont certaines sont contradictoires et comme tout ce qui concerne Internet, certains liens sont plus fiables que d'autres.
Premièrement, que sont les clés RSA et DSA ?
DSA ou Digital Signature Algorithm, est une norme du gouvernement américain conçue par la NSA pour les signatures numériques. Elle est dérivée de l'algorithme de signature ElGamal. La sécurité est basée sur la difficulté de résoudre certains types de fonctions logarithmiques. Elle ne peut être utilisée que pour les signatures numériques.
RSA est nommé d'après les initiales des auteurs, Ron Rivest, Adi Shamir et Leonard Adleman, qui ont été les premiers à publier l'algorithme. Il est basé sur la difficulté de factoriser de grands nombres. Contrairement à la DSA, la RSA peut être utilisée pour chiffrer un message entier.
Je crois comprendre que la résolution des problèmes logarithmique et de factorisation est tout aussi difficile, mais j'ai trouvé des références qui disent que le problème logarithmique est plus difficile (j'ai également trouvé des références qui disent qu'ils sont tout aussi difficiles).
Des choses que je ne crois pas importantes, mais que vous avez peut-être entendues ou que vous entendrez peut-être à l'avenir :
- La DSA est plus rapide à la signature que la RSA, mais la RSA est plus rapide pendant la phase de vérification, puisque l'authentification nécessite les deux phases ; la différence n'a pas d'importance.
- Comme je l'ai dit plus haut, la DSA ne peut être utilisée que pour l'authentification, tandis que la RSA peut être utilisée à la fois pour l'authentification et pour crypter un message. Cependant, SSH n'utilise les clés que pour l'authentification, donc là encore, la différence n'a pas d'importance.
- Pour une même longueur de clé, l'ASD génère un fichier de signature plus petit. Cependant, comme chaque clé va prendre un bloc de disque, cela n'a pas d'importance.
- Les clés DSA étaient initialement limitées à 1024 bits, mais ce n'est plus le cas.
- J'ai cherché dans la "National Vulnerability Database" pour "key and DSA" et "key and RSA" et j'ai trouvé 2 vulnérabilités concernant les clés DSA et 5 vulnérabilités concernant les clés RSA. Pour autant que je puisse en juger, toutes ces vulnérabilités ont été traitées dans les dernières versions d'OpenSSL/OpenSSH, qui font maintenant partie du "Internet Security Pack" pour OpenVOS.
Les choses en faveur de la DSA :
- La DSA ne peut être utilisée qu'avec le protocole SSH 2 tandis que la RSA peut être utilisée avec les protocoles 1 et 2 (voir "SSH 2″ Versus "OpenSSL and OpenSSH Release 2"). Le protocole 1 présente des défauts de conception importants et a été remplacé par la version 2 du protocole. Je vois cela comme une raison de favoriser légèrement l'utilisation des clés DSA, une sorte de protection intégrée contre l'utilisation de l'ancien protocole obsolète.
Les choses en faveur de la RSA :
- Un mauvais générateur de nombres aléatoires fera fuir les bits clés de la DSA (ne me demandez pas comment).
- Le site web openssh.org semble être muet à ce sujet, ce qui est mieux, 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 plus (et plus récemment) de RFC faisant référence à des clés RSA que de clés DSA.
Quelques comparaisons (la taille des fichiers inclut le texte qui ne fait pas partie de la clé) :
Délai de création de l'AVD | Temps de création du RSA | Octets DSA | Octets RSA | DSA.pub bytes | RSA.pub bytes | |
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, le plus important est la longueur de la clé. Dans le contexte actuel, je recommande une longueur de clé de 2048. Cela peut sembler excessif aujourd'hui, mais je ne suis pas sûr que ce sera le cas dans cinq ans.
Quant au type de clé à utiliser, je dois pencher pour les clés RSA.