6. Diffie-Hellman
6. Diffie-Hellman
6.1. Curve25519
Die Funktion X25519 kann in einem Elliptic Curve Diffie-Hellman-Protokoll (ECDH) wie folgt verwendet werden:
Alice erzeugt 32 Zufallsbytes in a[0] bis a[31] und überträgt K_A = X25519(a, 9) an Bob, wobei 9 die u-Koordinate des Basispunkts ist und als Byte mit dem Wert 9, gefolgt von 31 Nullbytes, kodiert wird.
Bob erzeugt analog 32 Zufallsbytes in b[0] bis b[31], berechnet K_B = X25519(b, 9) und überträgt es an Alice.
Mit ihren erzeugten Werten und dem empfangenen Eingabewert berechnet Alice X25519(a, K_B) und Bob X25519(b, K_A).
Beide teilen nun K = X25519(a, X25519(b, 9)) = X25519(b, X25519(a, 9)) als gemeinsames Geheimnis. Beide KÖNNEN prüfen, ohne zusätzliche Information über den Wert von K preiszugeben, ob K der reine Nullwert ist, und in diesem Fall abbrechen (siehe unten). Alice und Bob können anschließend eine Schlüsselableitungsfunktion verwenden, die K, K_A und K_B einbezieht, um einen symmetrischen Schlüssel abzuleiten.
Die Prüfung auf den reinen Nullwert ergibt sich daraus, dass die Funktion X25519 genau diesen Wert liefert, wenn sie auf eine Eingabe angewendet wird, die einem Punkt kleiner Ordnung entspricht, wobei die Ordnung den Kofaktor der Kurve teilt (siehe Abschnitt 7). Die Prüfung kann durch bitweises ODER aller Bytes und anschließende Prüfung, ob das Ergebnis null ist, erfolgen, da dies übliche Seitenkanäle in Software-Implementierungen beseitigt.
Testvektor:
Alices privater Schlüssel a:
77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a
Alices öffentlicher Schlüssel X25519(a, 9):
8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a
Bobs privater Schlüssel b:
5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb
Bobs öffentlicher Schlüssel X25519(b, 9):
de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f
Ihr gemeinsames Geheimnis K:
4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742
6.2. Curve448
Die Funktion X448 kann in einem ECDH-Protokoll in sehr ähnlicher Weise wie X25519 verwendet werden.
Wenn X448 verwendet werden soll, bestehen die einzigen Unterschiede darin, dass Alice und Bob 56 Zufallsbytes (nicht 32) erzeugen und K_A = X448(a, 5) bzw. K_B = X448(b, 5) berechnen, wobei 5 die u-Koordinate des Basispunkts ist und als Byte mit dem Wert 5, gefolgt von 55 Nullbytes, kodiert wird.
Wie bei X25519 KÖNNEN beide Seiten prüfen, ohne zusätzliche Information über den Wert von K preiszugeben, ob das resultierende gemeinsame K der reine Nullwert ist, und in diesem Fall abbrechen.
Testvektor:
Alices privater Schlüssel a:
9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b
Alices öffentlicher Schlüssel X448(a, 5):
9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0
Bobs privater Schlüssel b:
1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d
Bobs öffentlicher Schlüssel X448(b, 5):
3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609
Ihr gemeinsames Geheimnis K:
07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d