Aller au contenu principal

6. Diffie-Hellman

6. Diffie-Hellman

6.1. Curve25519

La fonction X25519 peut être utilisée dans un protocole d'établissement de clés Diffie-Hellman sur courbes elliptiques (Elliptic Curve Diffie-Hellman, ECDH) comme suit :

Alice génère 32 octets aléatoires dans a[0] à a[31] et transmet K_A = X25519(a, 9) à Bob, où 9 est la coordonnée u du point de base, encodée comme un octet de valeur 9 suivi de 31 octets nuls.

Bob génère de la même façon 32 octets aléatoires dans b[0] à b[31], calcule K_B = X25519(b, 9) et le transmet à Alice.

À partir des valeurs qu'ils ont générées et de la valeur reçue, Alice calcule X25519(a, K_B) et Bob calcule X25519(b, K_A).

Ils partagent alors K = X25519(a, X25519(b, 9)) = X25519(b, X25519(a, 9)) comme secret partagé. Chacun PEUT vérifier, sans révéler d'information supplémentaire sur K, si K est la valeur entièrement nulle et abandonner dans ce cas (voir ci-dessous). Alice et Bob peuvent ensuite utiliser une fonction de dérivation de clé qui prend en compte K, K_A et K_B pour dériver une clé symétrique.

La vérification de la valeur entièrement nulle tient au fait que la fonction X25519 produit cette valeur si elle est appliquée à une entrée correspondant à un point d'ordre faible, l'ordre divisant le cofacteur de la courbe (voir la section 7). La vérification peut être réalisée en effectuant un ou logique sur tous les octets et en testant si le résultat est nul, ce qui atténue les canaux auxiliaires habituels dans les implémentations logicielles.

Vecteur de test :

Clé privée d'Alice, a :

77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a

Clé publique d'Alice, X25519(a, 9) :

8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a

Clé privée de Bob, b :

5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb

Clé publique de Bob, X25519(b, 9) :

de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f

Secret partagé K :

4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742

6.2. Curve448

La fonction X448 peut être utilisée dans un protocole ECDH de façon très analogue à la fonction X25519.

Si l'on emploie X448, les seules différences sont qu'Alice et Bob génèrent 56 octets aléatoires (et non 32) et calculent K_A = X448(a, 5) ou K_B = X448(b, 5), où 5 est la coordonnée u du point de base, encodée comme un octet de valeur 5 suivi de 55 octets nuls.

Comme pour X25519, chaque partie PEUT vérifier, sans révéler d'information supplémentaire sur K, si le secret partagé K obtenu est la valeur entièrement nulle et abandonner dans ce cas.

Vecteur de test :

Clé privée d'Alice, a :

9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b

Clé publique d'Alice, X448(a, 5) :

9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0

Clé privée de Bob, b :

1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d

Clé publique de Bob, X448(b, 5) :

3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609

Secret partagé K :

07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d