• Keine Ergebnisse gefunden

Der Diffie-Hellman Schl¨ usselaustausch & Diskrete Logarithmen 27

sa

n

¢;

if (r6≡smod n) { return false;

} }

returntrue;

Bemerkung 71 Ist eine Zahl nicht prim, so gibt es

”viele“ Euler-Zeugen, die dies belegen.

W¨ahlen wir also eine Zahl a zuf¨allig, so ist die Wahrscheinlichkeit ”hoch“, dass sie zeigt, dass diese Zahl nicht prim ist. Eine Primzahl besteht jeden solchen Test. Mit Hilfe dieser ¨Uberlegung ergibt sich Algorithmus 7. Weiterhin ergibt sich auch:

Ist n∈PRIMES, dann antwortet Algorithmus 7 immer mit ”true“.

Ist n6∈PRIMES, dann ist die Wahrscheinlichkeit pro Runde <1/2, dass der Test”true“ liefert. Nach t Runden ist die Wahrscheinlichkeit f¨ur die Antwort”true“ <(1/2)t. (Also z.B. bei 40 Runden nur noch 9.1·10−13.)

Solche Methoden sind als randomisierte Algorithmen bekannt.

(vgl. PRIMES coRP, RP , Random Polynomial Time, Monte-Carlo-Algorithmen und Las-Vegas-Algorithmen)

Es gibt bessere Tests, z.B. der Miller-Rabin Test und sogar PRIMES∈P.

4. Der Diffie-Hellman Schl¨ usselaustausch & Diskrete Logarithmen

Sei p eine Primzahl. Wir wissen (Zp,·) ist eine zyklische Gruppe mit p−1 Elementen. Sei g ein Generator von Zp, dann gibt es f¨ur jede Zahl A ∈ {1, . . . , p−2} einen Exponenten a {0, . . . , p−2}, sodass A gamodp. Der Exponent a heißt diskreter Logarithmus von A zur Basis g. Wir definieren:

Problem: DLOG

Eingabe: A∈Zp\ {0}und Generatorg

Ausgabe: a∈ {0, . . . , p−2}, sodass A≡gamodp

Ahnlich wie bei der Faktorisierung gilt hier: Es ist kein effizienter Algorithmus f¨ur das Pro-¨ blem DLOG bekannt. Die besten bekannten Algorithmen sind etwa so leistungsf¨ahig wie die Faktorisierungsalgorithmen.

Nun untersuchen wir unser erstes kryptographisches Protokoll:

Offentlich:¨ W¨ahlen große Primzahlpund Generator g

Bob Alice

W¨urfelt Zufallszahl: 1≤a≤p−1 W¨urfelt Zufallszahl: 1≤b≤p−1 Berechnet:A=ga mod p Berechnet:B =gb mod p

SchicktAan Bob SchicktB an Alice

Berechnet:K :=Ab ≡gab mod p Berechnet:K :=Ba≡gab mod p

Gemeinsames Geheimnis: K

Abbildung 7: Der Diffie-Hellman Keyexchange

Seipeine (ausreichend) große Primzahl undgein Generator vonZp. Die Zahlenpundgk¨onnen

¨offentlich bekannt gegeben werden. Alice und Bob vereinbaren einen gemeinsamen geheimen Schl¨ussel k mit Hilfe des folgenden Protokolls:

1. Alice w¨ahlt a∈ {0, . . . , p−2}zuf¨allig, berechnet A=def gamodpund h¨alt ageheim.

2. Alice schickt Aan Bob.

3. Bob w¨ahlt b∈ {0, . . . , p−2} zuf¨allig, berechnetB =def gbmodpund h¨alt bgeheim.

4. Bob schickt B an Alice.

5. Alice berechnet k≡Ba≡gbamodp.

6. Bob berechnet k≡Ab ≡gabmodp.

Bemerkung 72

Kann Erich diskrete Logarithmen berechnen, so kann er dieses Protokoll brechen. Die Diffie-Hellman Annahme sagt aus, dass kein effizienter Algorithmus f¨ur DLOG existiert.

In der Praxis w¨ahlt manp mit1024Bit, f¨ur eine nachfolgende Benutzung als Session-Key w¨ahlt man die most significant Bits von k oder berechnet z.B. k0 =h(gabmodp) f¨ur eine Hashfunktion h.

Dieses Protokoll ist nur gegen passive Angreifer sicher, aber anf¨allig gegen Man-in-the-middle Attacken“.

Um den Diffie-Hellman Schl¨usselaustausch zu brechen, reicht es, das so genannte Diffie-Hellman Problem zu l¨osen:

Problem: DH

Eingabe: ga,gb und Generatorg Ausgabe: gab

Auch f¨ur dieses Problem ist kein effizienter Algorithmus bekannt.

Eine weitere Anwendung des DLOG-Problems ist das El Gamal-Kryptosystem.

Bemerkung 73 Den Diffie-Hellman Key-Exchange und das El Gamal Verfahren kann man von der verwendeten Gruppe (bis jetzt (Zp,·)) abstrahieren. Einzige Voraussetzungen sind, dass das diskrete Logarithmusproblem ist in dieser Gruppe ”schwer“ zu l¨osen ist, denn sonst kann eine solche Verfahren leicht gebrochen werden und das ga leicht / effizient berechenbar ist.

5. Hashfunktionen und Anwendungen

Eine Hashfunktion h nimmt eine Nachrichtm als Eingabe und produziert einen Output h(m), der auch hash-value,Digest oder Hashwert genannt wird, d.h.

h:{0,1} → {0,1}n, m7→h(m).

Es ist klar, dass h unendlich viele Nachrichten auf endlich viele Hashwerte abbildet. Damit ist H sicherlich nicht injektiv (Schubfachprinzip, siehe Abschnitt B.3), denn jeder Hashwert kann unendlich viele Urbilder haben. Paare (m, m0) mit h(m) = h(m0) und m 6= m0 werden Kollisionen genannt.

Anwendungen von Hashfunktionen:

Kompakte Repr¨asentation von Nachrichten (”digitaler Fingerabdruck“).

Uberpr¨ufung der Integrit¨at von Nachrichten (¨ ”Modification Detection Codes“ - MDC).

An eine kryptographisch sichere Hashfunktion m¨ussen mindestens die folgenden Anforderungen gestellt werden:

Second pre-image resistance: Angenommen Alice berechnet den Hashwerth(m) f¨urm. Erich soll keine Chance haben, ein m0 6=m zu finden, mit h(m) =h(m0), denn sonst k¨onnte er behaupten Alice h¨atte m0 unterschrieben.

Deshalb muss es (praktisch) unm¨oglich sein, f¨ur einen Hashwert h(m) eine Nachricht m0 zu berechnen, mit h(m) =h(m0).

Collision resistance: Wir brauchen eine noch st¨arkere Eigenschaft der Hashfunktionh. Alice soll keine Chance haben, zwei Nachrichtenmund m0 zu finden, mith(m) =h(m0) (Kollision).

Wenn es praktisch nicht m¨oglich ist, eine Kollision zu finden, dann nennt manh

”collision resistant“/”collision free“.

Bemerkung 74

Eine”collision resistant“ Funktion ist auch”second pre-image resistant“. (W¨ahlem zuf¨al-lig, berechne pre-imagem0, dann ist (m, m0) eine Kollision.)

Es ist keine Hashfunktion bekannt, deren

”collision resistance“ man ohne zus¨atzliche An-nahmen beweisen kann (z.B. unter der Annahme, das das Faktorisieren schwierig ist).

5.1. Die Merkle-Damg˚ard Konstruktion (Merkle’s meta method)

Das Problem eine collision-resistant Funktion vom Typ h:{0,1} → {0,1}n zu finden, wird auf das Problem reduziert, eine collision-resistant Funktion vom Typ f:{0,1}m → {0,1}n mit m∈Nund m > nzu finden. Die Funktion f wird auch ”Kompressionsfunktion“ genannt.

Seif eine

”compression function“ undr =def m−n. Seix∈ {0,1} und|x|(L¨ange von x) ein Vielfaches vonr(Hatx nicht die richtige L¨ange, dann padden wirxam Ende mit Nullen.). Nun zerlegen wir x in Bl¨ocke der L¨ange r:

x=x1x2. . . xk, wobeixi∈ {0,1}r,1≤i≤k und definierenhi ∈ {0,1}n rekursiv:

(IA) h0=def 0n

(IS) hi=def f(hi−1||xi), f¨ur 1≤i≤k, wobei

||“ wieder f¨ur die Verkettung von Bitstrings steht. Wir definieren nun:

h:{0,1}→ {0,1}n, x7→hk.

Es k¨onnte passieren, dasshi=f(hi−1||xi) =h0f¨ur ein 1≤i≤k−1 gilt, d.h. (xi+1xi+2. . . xk, x) w¨are eine Kollision. Wir modifizieren die Konstruktion und h¨angen immer an das gepaddete x die urspr¨ungliche L¨ange von x an. Dadurch bekommen wir (in der Praxis) einen zus¨atzlichen Block xk+1. Entsprechend ¨andern wir die Definition vonh ab und setzen h(x) =def hk+1. Satz 75 Seif eine collision-resistant compression function. Die mit der Merkle-Damg˚ard Me-thode konstruierte Hashfunktion h ist collision-resistant.

Beweis: Angenommen h ist nicht collision-resistant. Sei dann (x, x0) eine Kollision vonh, dann ist FindCollision(x, x0)(siehe Algorithmus 8) eine Kollision von f.

Klar ist, dassh(x) = hk+1 =h0k0+1 =h(x0), denn (x, x0) ist Kollision von h. Wenn |x| 6=|x0|,

Es wird also auf jeden Fall eine Kollision von f gefunden. Dies ist ein Widerspruch, da f

”collision-resistant“ ist. Also muss h collision-resistant sein. # Eine wichtige Frage bleibt: Wie groß sollnf¨ur eine Hashfunktionh:{0,1} → {0,1}ngew¨ahlt werden?

Eine untere Schranke ergibt sich durch das Geburtstagsparadoxon: Die Wahrscheinlichkeit eine Kollision zu finden ist >1/2 , wenn man2n/2 zuf¨allige Nachrichten betrachtet.

Bemerkung 76

Im Moment wird 128≤n≤256 als sicher betrachtet.

Man kann auch Block Chiffren (z.B. AES) als

”compression function“ verwenden, etwa Blockl¨ange von E ist die L¨ange des Hashwerts (d.h. n≥128).

Algorithmus 8 : FindCollision Eingabe: Bitstrings x,x0

Ergebnis: Eine Kollision (m, m0)

/* Zerlegung wie in der Merkle-Damg˚ard Konstruktion beschrieben */

splitx inx1. . . xk+1; splitx0 inx01. . . x0k0+1; construct h1, . . . , hk+1; construct h01, . . . , h0k0+1; if (|x| 6=|x0|) {

Return (hk||xk+1, h0k0||x0k0+1);

}

for(i= 1; i≤k;i++) {

if ((hi 6=h0i)&& (hi+1=h0i+1)) { Return (hi||xi+1, h0i||x0i+1);

} }

for(i= 0; i≤k−1; i++) { if (xi+16=x0i+1) {

Return (hi||xi+1, h0i||x0i+1);

} }

/* Dieser Punkt wird nie erreicht */

Es gibt so genannte

”Custom Designed Hashfunctions“, z.B. MD4 (nutzlos), MD5 (unsi-cher), RIPEMD-160 (wackelt), SHA1 (wackelt), SHA256 und SHA512.

Bisher haben wir Hashfunktionen nur als MDC – Modification Detection Codes verwendet, nun wollen wir sie dazu verwenden, die Quelle der Nachricht zu authentifizieren. Solche Funktio-nen werden MACs (Message Authentication Codes) genannt. Hier brauchen beide Seiten einen geheimen Schl¨ussel kmit dem die Hashfunktion parametrisiert wird:

hk:{0,1} → {0,1}n.

D.h. die Signatur h¨angt von der Nachricht und dem Key ab und beide Seiten k¨onnen die Signatur berechnen. (Wichtiger Vertreter: HMAC (siehe [KBC97])).

5.2. Digitale Signaturen

Das RSA-System kann zusammen mit Hashfunktionen f¨ur digitale Signaturen eingesetzt werden.

Erzeugung: Alice m¨ochte eine Nachricht mdigital signieren.

Alice berechnet v=h(m) den Hashwert vonm.

Alice berechnet s≡vdmodn, wobei 0≤v < n und (d, n) ihr RSA private Key ist.

Uberpr¨¨ ufung: Bob m¨ochte ¨uberpr¨ufen, ob die Signatur korrekt ist.

Bob verwendet den public Key (e, n) von Alice.

Bob berechnet v0≡semodnund h(m).

Bob akzeptiert die Signatur gdw. v0=h(m).

5.3. Challenge-Response Verfahren

Oft muss ein Teilnehmer identifiziert werden. Dieses Problem ist unter dem Namen

Teilnehme-rauthentifikation“ bekannt. Erste Idee (wobeih eine Hashfunktion):

x=h(Passwort)

Erich probiert alle ”sinnvollen“

Passw¨orter aus (W¨orterbuchattacke) sp¨ater wieder (Replay-Attacke)

Erich merkt sichx und verwendet es

Bob Alice

(Prover) (Verifier)

Besser ist die Benutzung einer zuf¨alligen neuen Frage, deren Beantwortung Wissen ben¨otigt, das Erich nicht hat:

Wo haben wir unsere

Alice Bob

Wir waren in Venedig.

Hochzeitsnacht verbracht?

Solch eine Technik kann man mit Hashfunktionen und Zufallszahlen nachbauen und bekommt ein kryptographisches Protokoll zur Teilnehmerauthentifikation. Seikein beliebiges gemeinsames Geheimnis:

(Challenge) Bob

pr¨uft, Alice

ob res ==f(k||r)

berechnet res =f(k||r)

(Prover)

Alice

schickt res

(Response) (Verifier)

Zufallszahlr

Solche Methoden zur Authentifizierung sind als Challenge-Response Verfahren bekannt und finden vielf¨altigen praktischen Einsatz.

Bemerkung 77

Solche Konstruktionen sind auch mit symmetrischen und asymmetrischen Verfahren m¨og-lich.

In der Praxis kommen solche Methoden z.B. bei Kerberos zum Einsatz.