Curve25519
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Curve25519.png/220px-Curve25519.png)
Curve25519 est une courbe elliptique offrant 128 bits de sécurité et conçue pour être utilisée par le protocole d'échange de clés Diffie-Hellman basé sur les courbes elliptiques (ECDH). C'est une courbe elliptique permettant des performances très élevées, n'étant protégée par aucun brevet connu et moins affectée par les générateurs de nombres pseudo-aléatoires défaillants.
Le brouillon original Curve25519, le définissait comme une fonction Diffie–Hellman (DH). Daniel J. Bernstein a depuis proposé que le nom Curve25519 soit utilisé pour la courbe sous-jacente, et que le terme X25519 le soit pour la fonction DH, ainsi[1] :
- « X25519 » est la fonction DH avec une coordonnée X-Montgomery recommandée ;
- « Ed25519 » est le système de signature avec coordonnées Edwards recommandé ;
- « Curve25519 » est la courbe elliptique sous-jacente.
Propriétés mathématiques
[modifier | modifier le code]La courbe est de la forme y2 = x3 + 486662x2 + x, une courbe de Montgomery, sur corps fini définie par le nombre premier 2255 - 19 (d'où son nom), utilisant le point de coordonnée x = 9
La courbe est conçue de manière à éviter de nombreux pièges potentiels dans son implémentation. Par conception, elle offre une grande résistance aux attaques par canal auxiliaire ainsi qu'aux générateurs de nombres pseudo-aléatoires défaillants.
La courbe est une équivalente birationnelle à la courbe de Montgomery, connu sous le nom de « Ed25519 »[2].
Popularité
[modifier | modifier le code]La courbe a été publiée pour la première fois par Daniel J. Bernstein en 2005 mais son intérêt a considérablement augmenté en 2013 avec les révélations d'Edward Snowden et la découverte de la porte-dérobée implémentée dans le générateur de nombres pseudo-aléatoires Dual EC DRBG (en). Bien que n'étant pas directement reliées, des suspicions ont émergé s'agissant des constantes utilisées pour les courbes elliptiques « P » certifiées par le NIST (P-224, P-256, P-324), suspectant que la NSA aurait choisi ces valeurs dans le but de faciliter la factorisation des clés publiques. Ces craintes ont été cristallisées par les déclarations de Bruce Schneier, un chercheur en sécurité informatique reconnu :
« I no longer trust the constants. I believe the NSA has manipulated them through their relationships with industry[3]. »
« Je n'ai plus confiance en ces constantes. Je pense que la NSA les a manipulées au travers de ses liens avec l'industrie. »
Depuis, la Curve25519 est devenue une alternative à la courbe P-256 et est utilisée dans une large gamme d'applications[4]. En 2014, le logiciel OpenSSH l'utilise par défaut pour l'algorithme ECDH.
Bibliothèques
[modifier | modifier le code]- BoringSSL (fork par Google d'OpenSSL)[5]
- Botan[6]
- GnuTLS[7]
- LibreSSL (fork d'OpenSSL) à partir de la 2.5.3 supporte X25519 'X25519, P-256 et P-384 sont les seules activées par défaut)[8].
- libssh[9]
- mbed TLS (anciennement PolarSSL)[10]
- NaCl[11]
- OpenSSL, à partir de la 1.0.2h, x25519 est supporté afin d'être compatible avec le draft-ietf-tls-rfc4492bis-08 et à partir de la 1.1.0 par défaut, les courbes elliptiques activées sont dans l'ordre x25519, secp256r1, secp521r1, secp384r1[12].
- SAP CommonCryptoLib à partir de la 8.5.22
- wolfSSL, bibliothèque SSL pour l'embarqué[13].
Applications
[modifier | modifier le code]- Chrome à partir de la version 57 supporte x25519.
- DNSCurve
- Firefox à partir de la version 52 supporte x25519
- GNUnet >= 0.10.0 [14]
- I2P[15]
- iOS[16]
- minilock[17]
- OpenSSH : Les clés échange de clé Curve25519 (appelée ici ed25519) sont gérées à partir d'OpenSSH 6.7 indépendamment de la compilation avec OpenSSL[18],[19].
- OpenBSD (utilisée pour signer les versions et les paquets[20],[21])
- Peerio[22]
- TextSecure
- Tor[23]
- ProtonMail[24]
Notes et références
[modifier | modifier le code]- (en) « [Cfrg] 25519 naming » (consulté le )
- Bernstein, Daniel J.; Lange, Tanja (2007).
- "The NSA Is Breaking Most Encryption on the Internet - Schneier on Security". www.schneier.com
- « Things that use Curve25519 », sur ianix.com (consulté le )
- Alessandro Ghedini, « Make SSL boring again », sur Cloudflare.com, The Cloudflare Blog, (consulté le ).
- (en) « Botan : src/lib/pubkey/curve25519/curve25519.cpp Source File », sur randombit.net (consulté le ).
- "nettle: curve25519.h File Reference - doxygen documentation | Fossies Dox". fossies.org.
- « OpenBSD 6.1 », sur openbsd.org (consulté le ).
- Adamantiadis, Aris (2013-11-03).
- Limited, ARM.
- "Introduction". yp.to.
- https://www.openssl.org/news/changelog.txt
- (en) « Produkte », sur wolfssl.com (consulté le ).
- (en) « GNUnet 0.10.0 », sur gnunet.org,
- (en) « 0.9.15 Release - Blog », sur geti2p.net,
- iOS Security Guide
- miniLock File Encryption
- (en) Markus Friedl, « ssh/kex.c#kexalgs »,
- Murenin, Constantine A. (2014-04-30).
- Murenin, Constantine A. (2014-01-19).
- Murenin, Constantine A. (2014-05-01). timothy, ed.
- How does Peerio implement end-to-end encryption
- Roger Dingledine & Nick Mathewson.
- (en-US) Ben Wolford, « ProtonMail now offers elliptic curve cryptography for advanced security and faster speeds », sur ProtonMail Blog, (consulté le )
Articles connexes
[modifier | modifier le code]- EdDSA (ou Ed25519)
- ECDSA
- Dual EC DRBG (en)
- Nombre rien-dans-la-manche