You are on page 1of 16

ECDH - Elliptic Curve Diffie-Hellman

Taro Fruhwirth

Silvie Schmidt
April 2, 2014

Joze Kocijancic

Contents
1 ECC - Elliptic Curve Cryptography
1.1 Elliptische Kurven . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Punkt-Multiplikation . . . . . . . . . . . . . . . . . .
1.1.2 Punktaddition . . . . . . . . . . . . . . . . . . . . . .
1.1.3 Punktverdopplung . . . . . . . . . . . . . . . . . . .
1.2 ECC auf endlichen Koerpern . . . . . . . . . . . . . . . . . .
1.2.1 ECC auf Primkoerpern . . . . . . . . . . . . . . . . .
1.2.2 ECC auf Binaerkoerpern . . . . . . . . . . . . . . . .
1.2.3 Domainparameter . . . . . . . . . . . . . . . . . . . .
1.3 Warum elliptische Kurven in der Kryptographie? . . . . . .
1.3.1 ECDLP - Elliptic Curve Discrete Logarithm Problem
2 ECDH Implementierung
2.1 Funktionsweise DH-Verfahren . . . . . . . . . .
2.1.1 DH . . . . . . . . . . . . . . . . . . . . .
2.1.2 ECDH . . . . . . . . . . . . . . . . . . .
2.2 Implementierung mit Double-And-Add . . . . .
2.2.1 Double-And-Add Algorithmus . . . . . .
2.3 Implementierung mit Montgomery Ladder . . .
2.3.1 Montgomery Ladder Algorithmus . . . .
2.4 Implementierung mittels Bernsteins Curve25519
2.5 Laufzeiten der verschiedenen Implementierungen
2.6 Vergleich der verschiedenen Verfahren . . . . . .
A Anhang/Ergaenzende Information/Quellen

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

3
3
3
4
4
5
5
6
6
7
7

.
.
.
.
.
.
.
.
.
.

8
9
9
9
10
11
11
12
12
13
13
15

ECC - Elliptic Curve Cryptography

Im folgenden Kapitel wird die Elliptic Curve Cryptography (ECC) einfuehrend besprochen - dies bezieht sich sowohl auf deren mathematischen Aspekte, so wie deren
Bedeutung fuer die Kryptographie. Das zweite Kapitel beschaeftigt sich mit dem Diffie
Hellman Schluesselaustauschverfahren (DH) und dessen Entwicklung mit Hilfe von
ECC, Elliptic Curve Diffie Hellman (ECDH). Letztendlich wird zum Abschluss die
vorliegende Implementierung besprochen und ein Vergleich mit den Implementierungen der anderen Verfahren dargestellt.

Figure 1: Ellipitsche Kurven mit Sage


Diese elliptischen Kurven in Abbildung 1 wurden mit dem Programm Sage gezeichnet1 .
ECC wurde 1985 unabhaengig voneinander von Neal Koblitz und Victor Miller
vorgestellt.

1.1

Elliptische Kurven

Elliptische Kurven werden durch folgende Gleichungen (Weierstrass-Theorem) dargestellt:


y 2 = x3 + ax + b

(1)

4a3 + 27b2 6= 0

(2)

mit
um Singularitaet, d.h. mehrfache Nullstellen, zu vermeiden. Alle Punkte (x,y), die
die o.a. Formel 1 erfuellen, liegen auf der Kurve. Die Koeffizienten der Kurve werden
durch a und b ausgedrueckt. Ellipitsche Kurven sind symmetrisch entlang der x-Achse.
1.1.1

Punkt-Multiplikation

Die Punkt-Multiplikation bez. elliptischer Kurven ist die Multiplikation eines Punktes
der Kurve mit einem Skalar mit Hilfe der Kurvengleichung; dabei werden die Punktaddition und die Punktverdopplung durchgefuehrt; beide Verfahren werden in den
nachfolgenden Abschnitten erklaert.
kP = Q
1

http://www.sagemath.org

(3)

Im zweiten Kapitel wird diese und deren Algorithmus erklaert.


1.1.2

Punktaddition

Die Punktaddition ist eine Addition zweier Punkte P und Q der Kurve, deren Ergebnis,
ein Punkt R, ebenfalls auf der Kurve ist. P und Q muessen voneinander verschieden
und nicht zueinander invers sein, da gilt:
P + (P ) = O

(4)

Diese Formel (4) sagt ja nichts anderes als, dass die Summe zweier Punkte mit gleicher
x-Koordinate im Unendlichen liegt.
O stellt den Punkt im Unendlichen dar, der das neutrale Element bez. der Addition
ist. (P ) ist die Spiegelung von P an der x-Achse.
P +O =O+P =P

(5)

Ist P = Q so wird eine Punktverdopplung durchgefuehrt:


P +Q=P +P =2P

(6)

Die Addition R = P + Q erfolgt dann zunaechst mit der Ermittlung der Steigung
der Gerade durch P und Q:
(yQ yP )
s=
(7)
xQ xP
Die Koordinaten von R werden dann wie folgt errechnet:

1.1.3

x R = s2 x P x Q

(8)

yR = s(xP xR ) yP

(9)

Punktverdopplung

Die Verdopplung eines Punktes bedeutet eine Addition mit sich selbst, deren Ergebnis
wieder einen Punkt auf der Kurve darstellt. In dem man eine Tangente durch den
Punkt legt und den dabei entstehenden Schnittpunkt an der x-Achse spiegelt, erhaelt
man den verdoppelten Punkt. Die y-Koordinate des Punktes darf dabei nicht 0 sein, da
die Verdopplung den Punkt im Unendlichen darstellt. Die Punktverdopplung R = 2P
wird wie folgt berechnet. Die Tangente s in P :
(3x2P + a)
2yP

(10)

xR = s2 2xP

(11)

yR = s(xP xR ) yP

(12)

s=
Die Koordinaten von R:

1.2

ECC auf endlichen Koerpern

Da Operationen mit reellen Zahlen langsam und ob deren Rundungsfehler ungenau


sind, hat man ECC auf endlichen Koerpern definiert und zwar auf folgenden:
Primkoerper FP und
Binaere Koerper F (2m )
Die Koerper besitzen eine endliche, grosse Zahl an Punkten, die fuer Kryptographie
geeignet sind.
Die graphische Darstellung einer elliptischen Kurve modulo p ist keine Kurve im
herkoemmlichen Sinn, da ja mit modulo p reduziert wird:

Figure 2: Ellipitsche Kurve modulo p mit Sage


Die vermeintliche Kurve in Abbildung 2 ist nun mehr ein Feld mit Punkten und
wurde mit dem Programm Sage gezeichnet2 .
1.2.1

ECC auf Primkoerpern

Die Gleichung einer elliptischen Kurve auf einem Primkoerper lautet wie folgt:
y 2 = x3 + ax + b (mod p)

(13)

mit
4a3 + 27b2

(mod p) 6= 0

(14)

Die Elemente sind Integerzahlen im Bereich zwischen 0 und p1. Der Modulus p ist
eine Primzahl und wird so gewaehlt, dass die Kurve genuegend Elemente enthaelt, um
der kryptographischen Sicherheit zu genuegen. Punktaddition und Punktverdopplung
sind analog zu den Operationen mit reellen Zahlen - allerdings mit (mod p).
Punkt-Addition:
(yQ yP )
s=
(mod p)
(15)
xQ xP
Die Koordinaten von R werden dann wie folgt errechnet:
xR = s 2 xP xQ
2

http://www.sagemath.org

(mod p)

(16)

yR = s(xP xR ) yP

(mod p)

(17)

(3x2P + a)
2yP

(mod p)

(18)

xR = s2 2xP

(mod p)

(19)

s=
Die Koordinaten von R:

yR = s(xP xR ) yP
1.2.2

(mod p)

(20)

ECC auf Binaerkoerpern

Die Gleichung einer elliptischen Kurve auf einem Binaerkoerper F (2m ) lautet wie folgt:
y 2 + xy = x3 + ax2 + b

(21)

b 6= 0

(22)

mit
Die Elemente sind Integerzahlen mit einer Bitlaenge von max. m Bits. Punktaddition und Punktverdopplung koennen von denen der reellen Zahlen abgeleitet werden
und fuer Binaerkoerper wie folgt adaptiert:
Punkt-Addition:
(yQ + yP )
s=
(23)
xQ + xP
xR = s 2 + s + xP + xQ + a

(24)

yR = s(xP + xR ) + xR + yP

(25)

Punkt-Verdopplung R = 2P :
s=

1.2.3

(xP + yP )
xP

(26)

xR = s 2 + s + a

(27)

yR = x2P + xR (s + 1)

(28)

Domainparameter

Domain-Parameter von FP :
p...Primzahl bzw. Potenz einer Primzahl
a, b...Koeffizienten der Kurve
P ...Basispunkt der Kurve
n...Ordnung von P
P)
h...Kofaktor mit h = #E(F
n
Anzahl der Punkte auf der Kurve #E(FP ):

Allgemein hat eine elliptische Kurve ca. p Punkte; diese wird u.a. durch die HasseSchranke (Hasse-Theorem) ausgedrueckt:
(1

1.3

p)2 #E(FP ) (1 +

p)2

(29)

Warum elliptische Kurven in der Kryptographie?

Derzeit gelten bei kryptographischen Systemen wie RSA, El-Gamal und Diffie-Hellman
Bitlaengen mit ca. 1024 Bit als sicher. Allerdings sind immer groesser werdende Bitlaengen in der Praxis nicht erwuenscht, sondern man strebt im Gegenteil kuerzere
Bitlaengen bei gleichbleibender Sicherheit an. Die Idee dahinter ist es, eine Gruppe zu
finden, in der ein dementsprechendes schweres Problem existiert. Im Fall von elliptischen Kurven ist dies das Problem des diskreten Logarithmus (ECDLP).
1.3.1

ECDLP - Elliptic Curve Discrete Logarithm Problem

Bei bekannten Q und P ist das k aus Q = kP bereits bei Bitlaeengen von 160 Bit nicht
mehr effizient berechenbar; vorausgesetzt werden hier richtig gewaehlte Parameter. Das
ECDLP bei einer Bitlaenge von 160 Bit ist einem RSA-System mit 1024 Bit bez. dem
Schwierigkeitsgrad gleichzusetzen.
Daraus folgend wird die ECC fuer drahtlose Systeme immer attraktiver, da die
kleineren Schluessellaengen in schnelleren Berechnungen resultieren. Des weiteren werden auch weniger Energie, weniger Memory und weniger Bandbreite benoetigt, womit
die ECC fuer mobile Endgeraete optimal ist.

ECDH Implementierung

Diffie-Hellman (DH) ist ein Verfahren zum Austausch von Schluesseln. Der Algorithmus wurde von Martin Hellman gemeinsam mit Whitfield Diffie und Ralph Merkle an
der Stanford-Universitaet in Kalifornien entwickelt und 1976 veroeffentlicht.

Figure 3: Das Diffie-Hellman-Verfahren in Farben


Diese Abbildung verdeutlicht sehr anschaulich das Prinzip von DH3 .
Da die Domainparameter einer elliptischen Kurve sehr sorgsam gewaehlt werden
muessen, um kryptographische Sicherheit zu gewaehrleisten und diese auch nicht trivial ist, wird dringend angeraten, Kurven zu verwenden, die vom National Institute
of Standards and Technology (NIST) bzw. anderen Institutionen empfohlen werden.
Da Bruce Schneier Zweifel an den NIST-Kurven kundgetan hat4 , wurden in der vorliegenden Implementierung eine Kurve vom ECC-Brainpool aus RFC5639 verwendet;
im konkreten Fall die 160-Bit Kurve5 .
Curve-ID: brainpoolP160r1
3

http://hackaday.com
[SCHN2013]
5
[ECCBP2005]
4

p = E95E4A5F737059DC60DFC7AD95B3D8139515620F
a = 340E7BE2A280EB74E2BE61BADA745D97E8F7C300
b = 1E589A8595423412134FAA2DBDEC95C8D8675E58
x = BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3
y = 1667CB477A1A8EC338F94741669C976316DA6321
n = E95E4A5F737059DC60DF5991D45029409E60FC09
h=1
Bei den vorliegenden Implementierungen wurde auf eine Ueberpruefung der Primzahl
auf p = 3mod4 verzichtet, da nur geteste Domainparameter verwendet wurden; in der
Praxis kann dies allerdings zu Problemen fuehren, wenn nicht getestete Kurven bzw.
zufaellig erzeugte verwendet werden.
Bei der Implementierung der skalaren Multipliaktion ist darauf zu achten, dass bei
BigInteger Zahlen nicht einfach dividiert werden kann. Vielmehr wird mit dem Inversen
multipliziert:
x
= x y 1 (mod p)
(30)
y
Mit dem Inversen zu rechnen bedarf viel Rechenzeit und ist immer wieder Gegenstand
von Forschungen, dies zu minimieren.

2.1

Funktionsweise DH-Verfahren

DH dient zur oeffentlichen Vereinbarung eines gemeinsamen, geheimen Schluessels


(shared secret). Die Sicherheit basiert auf dem Problem des diskreten Logarithmus6 .
2.1.1

DH

Alice und Bob einigen sich auf eine Primzahl p und eine natuerliche Zahl g < p.Alice
waehlt geheime Zahl a < p 1 und berechnet A = g a modp und schickt A an Bob. Bob
waehlt geheime Zahl b < p1 und berechnet B = g b modp und schickt B an Alice.Alice
berechnet dann k = B a modp und Bob berechnet k = Ab modp.
Wie die Abbildun verdeutlicht, besitzen am Ende beide das gleiche Geheimnis 7 .
DH ist nicht mehr sicher, wenn ein Angreifer bei einem Man-In-The-Middle Angriff
Datenpakete veraendern kann. Der Angreifer tauscht mit beiden Teilnehmern jeweils
die Schluesseln aus und gaukelt sowohl Alice als auch Bob vor mit dem jeweilig anderen zu kommunizieren. In der Praxis werden daher die ausgetauschten Nachrichten
authentifiziert.
2.1.2

ECDH

Alice und Bob waehlen sich oeffentlich den endlichen Koerper FP und die elliptische
Kurve E. Sei P ein oeffentlich bekannter Punkt mit der Ordnung n auf der elliptischen Kurve. Alice waehlt zufaellig einen geheimen Schluessel kA und berechnet
QA = kA P ; daraufhin schickt sie das Ergebnis an Bob. Bob waehlt zufaellig einen
6
7

[SCHN1995]
http://commons.wikimedia.org/wiki/Category:Internetprotocols

Figure 4: Das Diffie-Hellman-Verfahren


geheimen Schluessel kB und berechnet QB = kB P und schickt dann das Ergebnis an
Alice. Beide koennen nun den gemeinsamen, geheimen Schluessel kB kA P berechnen.
kA , kB .... Skalar = 2, 3, ... , n-1

Figure 5: Elliptic Curve Diffie-Hellman

2.2

Implementierung mit Double-And-Add

Die skalare Multiplikation ist ein wiederholtes Anwenden der Gruppenoperationen8 ,


der Punktaddition und der Punktverdopplung, wie der folgende Algorithmus zeigt.
Die Formeln fuer die Berechnung von Punktaddition und Punktverdopplung wurden
im ersten Kapitel angefuehrt.
In der o.a. Darstellung wird ersichtlich, dass aus einer Laufzeitdimension O(n) eine
deutliche Verbesserung auf O(log(n)) erzielt wird. So sind es in diesem Beispiel nicht
8

[Kos2006]

10

Figure 6: Das Double-And-Add-Prinzip


mehr 13 Additionen, sondern nunmehr fuenf.
2.2.1

Double-And-Add Algorithmus

Algorithm 1 Skalare Multiplikation Double-And-Add Algorithmus kP = Q


Input: k, P (x, y)
Output: Q = kP
1: Q = O
2: for each bit i in k do
3:
if i = 1 then
4:
Q=Q+P
5:
end if
6:
P = 2P
7: end for
8: return Q

2.3

Implementierung mit Montgomery Ladder

Der Montgomery-Ladder Algorithmus bietet einen guten Kompromiss bez. Performance, Sicherheit und benoetigter Ressourcen. Er eignet sich besonders da, wo Speicherbedarf eine wichtige Rolle spielt, da dieser nicht auf vorberechnete Teilergebnisse
zurueckgreift9 .
9

[HMV2004]

11

Figure 7: Das Montgomery-Ladder-Prinzip


2.3.1

Montgomery Ladder Algorithmus

Algorithm 2 Skalare Multiplikation Montgomery Ladder Algorithmus kP = Q


Input: k, P (x, y)
Output: Q = kP
Q1 = P
2: Q2 = 2P
intu = k.BitLength 1
4: while ku = 0 do
u
6: end while
for each bit i in k do
8:
if i = 1 then
Q1 = Q1 + Q2
10:
Q2 = 2Q2
else
12:
Q2 = Q1 + Q2
Q1 = 2Q1
14:
end if
end for
16: return Q1

2.4

Implementierung mittels Bernsteins Curve25519

Curve25519 ist eine ellipitische Kurve, die von Daniel J. Bernstein fuer DH entwickelt
wurde. Es ist dies eine Montgomery-Kurve mit folgender Gleichung:
y 2 = x3 + 486662x2 + x

(31)

Sie ist ueber einen Primkoerper mit p = 2255 19 und dem Basispunkt x = 9
definiert. Weiters ist zu erwaehnen, dass diese Kurve ein besonders schnelles Verfahren
darstellt. Jeder User der Curve25519 bestitzt einen 32-Byte Private Key und einen
32-Byte Public Key; beide gemeinsam besitzen ein 32-Byte Shared Secret.
12

Figure 8: Curve25519 Overview


Diese Abbildung 8 zeigt, wie die Curve25519 funktioniert10 .
Curve25519 wird in einer grossen Anzahl an Anwendungen verwendet und seit den
Enthuellungen von Edward Snowden steigt die Zahl verstaerkt an.
Fuer die vorliegende Arbeit wurde die von Bernstein empfohlene Java-Implementierung
verwendet.
Mit dem Aufruf curve(myPublicKey,myPrivateKey,basePoint9) wird der eigene
Public Key berrechnet.
Mit dem Aufruf curve(sharedSecret,myPrivateKey,othersPublicKey) wird dann das
Shared Secret erzeugt.

2.5

Laufzeiten der verschiedenen Implementierungen


Implementierung
Double-And-Add
--Montgomery Ladder
--Curve25519

Bit-Size
160
256
512
160
256
512
256

Laufzeit [ms]
340
458
649
458
551
781
121

Table 1: Laufzeitenvergleich

2.6

10

Vergleich der verschiedenen Verfahren

[DJB2009]

13

Figure 9: Vergleich der Verfahren

14

4
4

340 ms

ECDH - 160p

280 - 380ms 3

STS
MQV

64 ms

1-5s

DH

SRP

Anz.Nachr.

Laufzeit

Implementierung

je 20 Byte

ca. 17800

Client: 9 Hashop., 2
Mult., 1 Sub, 1 Add., 3
modPow.,
1
Mod
1: 7 Byte 2: 585 Server: 8 Hashop., 2
Byte 3: 1064 Byte 4: Mult. 2 Add., 3
69 Byte
modPow., 1 Mod
je eine

Anz. Operationen

Operationen
symmetrisch

symmetrisch

Symmetrie

N: 1024 Bit 4096


Bit; a,b: min. 256 Bit ausgeglichen
mind. 160 Bit, oft
256 Bit
ausgeglichen

Notw.secRandom Parametergr. idP


p > 512
q > 160
je 1 Byte
4 modPow, 2 add
je eine
K > 512
Eigene Private Key,
Public
Key
des
4 Pot./Mod., 2 Sign., 2
Partnere, p (Lnge
1: 126 Bytes 2: 382 Verif., 2 Encrypt, 2
etwas kleiner als
Bytes 3: 256 Bytes Decrypt
2
Key), q

Gre Nachr.

Anhang/Ergaenzende Information/Quellen

List of Figures
1
2
3
4
5
6
7
8
9

Ellipitsche Kurven mit Sage . . . . . .


Ellipitsche Kurve modulo p mit Sage .
Das Diffie-Hellman-Verfahren in Farben
Das Diffie-Hellman-Verfahren . . . . .
Elliptic Curve Diffie-Hellman . . . . . .
Das Double-And-Add-Prinzip . . . . .
Das Montgomery-Ladder-Prinzip . . .
Curve25519 Overview . . . . . . . . . .
Vergleich der Verfahren . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

3
5
8
10
10
11
12
13
14

Laufzeitenvergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

List of Tables
1
.

QUELLEN

[ECCBP2005]
ECC Brainpool Standard Curves and Curve Generation v.1.0. Okt.2005.
[HMV2004]
D. Hankerson, A. J. Menezes, S. Vanstone. Guide to Elliptic Curve Cryptography.
Springer-Verlag. Januar 2004.
[SCHN1995]
Bruce Schneier. Applied Cryptography. 1995.
[SCHN2013]
https://www.schneier.com/blog/archives/ 2013/09/the nsa is brea.html#c1675929
[SEC12000]
Standards for Efficient Cryptography, SEC1: Ellipitic Curve Cryptography.Ceritcom
Research. Cericom Corp., September 2000.
[SEC22000]
Standards for Efficient Cryptography, SEC1: Recommended Ellipitic Curve Parameters.Ceritcom Research. Cericom Corp., September 2000.
[DJB2009]
Daniel J. Bernstein, Curve25519: new Diffie-Hellman speed records.
http://http://cr.yp.to/ecdh.html, Feb.2009.
[Kos2006]
Manuel Koschuch et al. Hardware/Software Co-Design of Elliptic Curve Cryptography
15

on an 8051 Microcontroller, 2006.


[RFC6090]
RFC 6090, Fundamental Elliptic Curve Cryptography Algorithms, Feb. 2011.
[SUIB2009]
Suite B Implementers Guide to NIST SP 800-56A, Juli 2009.

16