Parmi les algorithmes ECC disponibles dans openSSH (ECDH, ECDSA, Ed25519, Curve25519), qui offre le meilleur niveau de sécurité, et (idéalement) pourquoi?
En SSH, deux algorithmes sont utilisés: un algorithme d'échange de clés (Diffie-Hellman ou la variante de courbe elliptique appelée ECDH) et un algorithme de signature. L'échange de clés donne la clé secrète qui sera utilisée pour crypter les données de cette session. La signature est telle que le client peut s'assurer qu'il parle au bon serveur (une autre signature, calculée par le client, peut être utilisée si le serveur applique l'authentification client basée sur les clés).
L'ECDH utilise une courbe; la plupart des logiciels utilisent la courbe NIST standard P-256. Curve25519 est une autre courbe, dont le "pitch de vente" est qu'il est plus rapide, et non plus fort, que le P-256. La différence de performances est très faible en termes humains: nous parlons de moins d'une milliseconde de calculs sur un petit PC, et cela ne se produit qu'une seule fois par session SSH. Vous ne le remarquerez pas. Aucune des deux courbes ne peut être considérée comme "plus forte" que l'autre, pas pratiquement (elles sont toutes les deux assez loin dans le domaine "ne peuvent pas le casser") ni académiquement (les deux sont au "niveau de sécurité 128 bits").
Même lorsque ECDH est utilisé pour l'échange de clés, la plupart des serveurs et clients SSH utilisent des clés DSA ou RSA pour les signatures. Si vous voulez un algorithme de signature basé sur des courbes elliptiques, alors c'est ECDSA ou Ed25519; pour certaines raisons techniques en raison de la définition précise de l'équation de la courbe, c'est ECDSA pour P-256, Ed25519 pour Curve25519. Là encore, ni l'un ni l'autre n'est plus fort que l'autre, et la différence de vitesse est bien trop faible pour être détectée par un utilisateur humain. Cependant la plupart des navigateurs (y compris Firefox et Chrome) ne prennent plus en charge ECDH (dh aussi).
L'utilisation de P-256 devrait permettre une meilleure interopérabilité en ce moment, car Ed25519 est beaucoup plus récent et moins répandu. Mais, pour un serveur donné que vous configurez et auquel vous souhaitez accéder à partir de vos propres machines, l'interopérabilité n'a pas beaucoup d'importance: vous contrôlez les logiciels client et serveur.
Donc, fondamentalement, le choix est fait vers l'esthétique, c'est-à-dire entièrement à vous, sans raison rationnelle. Les problèmes de sécurité ne seront de toute façon pas causés par ce choix; les algorithmes cryptographiques sont la partie la plus forte de tout votre système, pas la plus faible.
De la Introduction à Ed25519 , il y a quelques avantages de vitesse et quelques avantages de sécurité. L'un des avantages de sécurité les plus intéressants est qu'il est immunisé contre plusieurs attaques de canaux secondaires:
- Aucun indice de tableau secret. Le logiciel ne lit ni n'écrit jamais de données à partir d'adresses secrètes dans la RAM; le modèle des adresses est complètement prévisible. Le logiciel est donc à l'abri des attaques de synchronisation du cache, des attaques d'hyperthreading et d'autres attaques de canal latéral qui reposent sur une fuite d'adresses via le cache du processeur.
- Aucune condition de branche secrète. Le logiciel n'effectue jamais de branches conditionnelles basées sur des données secrètes; le schéma des sauts est totalement prévisible. Le logiciel est donc à l'abri des attaques par canal latéral qui reposent sur des fuites d'informations via l'unité de prédiction de branche.
À titre de comparaison, plusieurs attaques de synchronisation du cache dans le monde réel ont été démontrées sur divers algorithmes. http://en.wikipedia.org/wiki/Timing_attack
Il y a un avantage pratique important de Ed25519 par rapport à (EC) DSA: la dernière famille d'algorithmes se casse complètement lorsqu'il est utilisé pour les signatures avec un générateur de nombres aléatoires brisé. Une telle défaillance RNG a s'est produite avant et pourrait très bien se reproduire.
Théoriquement, les implémentations peuvent protéger contre ce problème spécifique, mais il est beaucoup plus difficile de vérifier que les deux extrémités utilisent une implémentation correcte que de simplement préférer ou appliquer (selon vos besoins de compatibilité) un algorithme qui spécifie explicitement comportement sécurisé (Ed25519).
J'avais l'impression que Curve25519 IS est en fait plus sûr que les courbes NIST en raison de la forme de la courbe, ce qui la rend moins sensible aux diverses attaques de canaux latéraux ainsi qu'aux échecs de mise en œuvre. Voir: http://safecurves.cr.yp.to
Ed25519 a l'avantage de pouvoir utiliser la même clé pour signer l'accord de clé (normalement vous ne le feriez pas). Je ne connais pas assez bien les mathématiques pour dire s'il s'agit d'une propriété de la courbe d'Edwards, bien que je sache qu'elle est convertie en système de coordonnées de Montgomery (en fait Curve25519) pour l'accord clé ... Ed25519 est plus qu’une courbe, il spécifie également la génération déterministe de clés, entre autres (par exemple le hachage), qu’il convient de garder à l’esprit. Il s'agit d'une chose frustrante à propos des implémentations DJB, car cela arrive, car elles doivent être traitées différemment pour maintenir l'interopérabilité.
Une question à laquelle aucune réponse n'a jusqu'à présent été adressée directement est que vos questions mélangent plusieurs noms plus ou moins indépendants, comme s'il s'agissait d'alternatives équivalentes, ce qui n'est pas vraiment le cas.
ECDH et ECDSA ne sont que des noms de méthodes cryptographiques.
ECDH est une méthode d'échange de clés que deux parties peuvent utiliser pour négocier une clé sécurisée sur un canal de communication non sécurisé. C'est une variation de la méthode d'échange de clés [~ # ~] dh [~ # ~] (Diffie-Hellman). ECDH signifie Diffie – Hellman à courbe elliptique . Pourtant, l'ECDH n'est qu'une méthode, cela signifie que vous ne pouvez pas simplement l'utiliser avec une courbe elliptique spécifique, vous pouvez l'utiliser avec de nombreuses courbes elliptiques différentes.
ECDSA est un algorithme de signature qui peut être utilisé pour signer une donnée de telle manière que toute modification des données entraînerait l'échec de la validation de la signature, pourtant, un attaquant ne serait pas en mesure de re-signer correctement les données après un tel changement. Il s'agit d'une variation de [~ # ~] dsa [~ # ~] (algorithme de signature numérique). ECDSA signifie Algorithme de signature numérique à courbe elliptique . L'ECDSA décrit également une méthode qui peut être utilisée avec différentes courbes elliptiques.
La sécurité de l'ECDH et de l'ECDSA dépend donc de deux facteurs:
Curve25519 est le nom d'une courbe elliptique spécifique. D'autres courbes sont nommées Curve448, P-256, P-384 et P-521.
Ed25519 est le nom d'une variation concrète de EdDSA . Lors de l'exécution d'EdDSA à l'aide de SHA-512 et Curve25519 , cette variation est nommée Ed25519. EdDSA est un algorithme de signature, tout comme ECDSA.
Donc, si une implémentation indique simplement qu'elle utilise ECDH pour l'échange de clés ou ECDSA pour signer des données, sans mentionner de courbe spécifique, vous pouvez généralement supposer qu'elle utilisera les courbes NIST (P-256, P-384 ou P-512), cependant, l'implémentation devrait en fait toujours nommer explicitement la courbe utilisée.
Pour répondre à votre question sur la sécurité: ECDH et ECDSA se sont révélés être des méthodes conceptuelles d'échange de clés sécurisées et de signature, donc la sécurité d'ECDH et ECDSA dépend à peu près du fait que quelqu'un trouve un moyen de briser la cryptographie elliptique en général (peu probable mais pas impossible) ou pour trouver un défaut dans les courbes utilisées (plus probable).
La raison pour laquelle certaines personnes préfèrent Curve25519 aux courbes standard du NIST est le fait que le NIST n'a pas clairement documenté pourquoi il a choisi ces courbes en faveur d'alternatives existantes. L'énoncé générique " Les courbes ont été ostensiblement choisies pour une sécurité optimale et une efficacité d'implémentation " ressemble beaucoup au marketing balderdash et ne convaincra pas les experts en cryptographie.
Le NIST a également normalisé une cryptographie à courbe elliptique basée sur un générateur de nombres aléatoires (Dual_EC_DRB) en 2006 et le New York Times a affirmé (après avoir examiné les mémos divulgués par Edward Snowden) que c'était le NSA influençant le NIST pour normaliser ce générateur de nombres aléatoires spécifique. Une énorme faiblesse a été découverte dans ce générateur et on pense que c'est une porte dérobée intentionnelle placée par le NSA pour pouvoir casser le cryptage TLS basé sur cela L'ANSI a apparemment découvert la faiblesse lorsque Dual_EC_DRB leur a été soumis pour la première fois, mais bien qu'il sache comment l'éviter, il n'a pas amélioré l'algorithme et n'a pas rendu public les faiblesses, donc on pense qu'ils n'étaient pas autorisés à ( Lorsque la faiblesse est devenue publique, la norme a été retirée en 2014.
Avec cette connaissance de base, bien sûr, les gens ont commencé à se demander si la source des mystérieux paramètres de la courbe NIST était en fait aussi le NSA car peut-être que ces courbes ont également des faiblesses cachées qui ne sont pas connues du public pourtant, mais le NSA peut les connaître et donc être capable de casser la cryptographie basée sur ces courbes. Il n'y a aucune preuve de cette affirmation, pas même une preuve présomptive mais cela semble sûrement possible et plus réaliste qu'un conte de fées. C'est pourquoi les gens ont perdu confiance dans ces courbes et sont passés à des alternatives où il est très peu probable qu'elles aient été influencées par les services secrets du monde entier.
Curve25519 a été publié par le mathématicien et cryptologue germano-américain Daniel J. Bernstein en 2005, qui a également conçu le célèbre chiffrement de flux Salsa20 et la variante ChaCha20 désormais largement utilisée. Il a également inventé l'authentification des messages Poly1305. Google a décidé que ChaCha20 en combinaison avec Poly1305 est une alternative sûre à utiliser dans TLS après que RC4 ait dû être supprimé car l'algorithme a été cassé. Il nécessite beaucoup moins de puissance de calcul que l'utilisation du chiffrement par blocs AES (très utile pour les appareils mobiles car il permet d'économiser l'autonomie de la batterie), mais il est censé offrir une sécurité comparable. ChaCha20/Poly1305 est normalisé dans RFC 7905 et largement utilisé aujourd'hui dans la communication client-serveur TLS à partir d'aujourd'hui. Donc, si Bernstein était un NSA espion, ce qui est très improbable, nous serions tous déjà condamnés, car TLS, car il est souvent utilisé aujourd'hui, serait probablement inutile pour protéger les données des yeux du secret). prestations de service.