Aller au contenu
ecdsa.com

Attaque par courbe invalide

Une attaque dans laquelle un pair envoie un point qui n’est pas sur la courbe convenue, si bien qu’une implémentation qui omet la validation des points calcule sur une courbe plus faible et divulgue sa clé privée morceau par morceau.
Autres graphiesinvalid curve attacktwist attackpoint validationCurveBall

Les formules d’addition de Weierstrass n’utilisent pas le coefficient b : un code qui ne vérifie jamais l’équation de la courbe calculera donc sans broncher d·P pour un point P situé sur une autre courbe ayant un petit sous-groupe. Chaque réponse (un secret partagé ECDH, un message chiffré, un MAC) révèle d modulo un petit nombre premier, et le théorème des restes chinois en combine suffisamment pour reconstituer la clé complète. Biehl, Meyer et Müller l’ont décrite en 2000 ; Jager, Schwenk et Somorovsky l’ont démontrée contre des implémentations TLS-ECDH en 2015 et, en 2017, on a découvert que plusieurs bibliothèques JOSE acceptaient des points invalides dans ECDH-ES.

La parade est peu coûteuse : vérifier que le point est sur la courbe, qu’il n’est pas le point à l’infini et, lorsque le cofacteur est supérieur à 1, qu’il appartient au bon sous-groupe (SEC 1 §3.2.2, SP 800-56A §5.6.2.3). La plupart des bibliothèques modernes valident les points à l’import. X25519 et X448 sont conçus pour que l’échelle de Montgomery reste sûre sur la courbe tordue (twist), si bien qu’il ne reste que la vérification d’une sortie entièrement nulle.

Un échec voisin consiste à faire confiance à des paramètres de courbe fournis par l’appelant : la CVE-2020-0601 (« CurveBall ») de Windows CryptoAPI acceptait des certificats dont les paramètres explicites substituaient un générateur choisi par l’attaquant, ce qui permettait à un certificat falsifié de se faire passer pour une racine de confiance. N’accepter que des courbes nommées, comme l’exige la RFC 5480, ferme cette porte.

Normes et références

Tous les termes