Kryptosysteme für die digitale Signatur
aus der Vorlesung Kryptographie vom 14.03.2018
ÜBUNG
Verschlüsseln Sie mit dem RSA-Algorithmus den Klartext M = 1 0 M = 10 M = 1 0 mit den Parametern p = 2 9 , q = 3 1 p = 29, q = 31 p = 2 9 , q = 3 1 und e = 1 3 e = 13 e = 1 3 . Führen Sie auch eine artgerechte Entschlüsselung durch.
Berechnung des Totienten von n n n und d d d :
n = p ⋅ q = 2 9 ⋅ 3 1 = 8 9 9 n = p \cdot q = 29 \cdot 31 = 899 n = p ⋅ q = 2 9 ⋅ 3 1 = 8 9 9
Totient: ϕ ( n ) = ( p − 1 ) ( q − 1 ) = 2 8 ⋅ 3 0 = 8 4 0 \phi (n) = (p - 1)(q - 1) = 28 \cdot 30 = 840 ϕ ( n ) = ( p − 1 ) ( q − 1 ) = 2 8 ⋅ 3 0 = 8 4 0
e ⋅ d ≡ 1 mod ϕ ( n ) e \cdot d \equiv 1 \mod{\phi (n)} e ⋅ d ≡ 1 m odϕ ( n )
1 3 ⋅ d ≡ 1 mod 8 4 0 13 \cdot d \equiv 1 \mod{840} 1 3 ⋅ d ≡ 1 m od8 4 0
d = 1 3 − 1 mod 8 4 0 d = 13^{-1} \mod{840} d = 1 3 − 1 m od8 4 0
Berechnung des multiplikativen Inversen mit dem Erweiterten Euklidischen Algorithmus:
a = 1 3 , b = 8 4 0 a = 13, b = 840 a = 1 3 , b = 8 4 0
x 1 ← 1 y 1 ← 0 x_1 \leftarrow 1 \quad \qquad y_1 \leftarrow 0 x 1 ← 1 y 1 ← 0
x 2 ← 0 y 2 ← 1 x_2 \leftarrow 0 \quad \qquad y_2 \leftarrow 1 x 2 ← 0 y 2 ← 1
x 3 ← 8 4 0 y 3 ← 1 3 x_3 \leftarrow 840 \qquad y_3 \leftarrow 13 x 3 ← 8 4 0 y 3 ← 1 3
Q = ⌊ x 3 y 3 ⌋ = ⌊ 8 4 0 1 3 ⌋ = 6 4 Q = \lfloor \frac{x_3}{y_3} \rfloor = \lfloor \frac{840}{13} \rfloor = 64 Q = ⌊ y 3 x 3 ⌋ = ⌊ 1 3 8 4 0 ⌋ = 6 4
T 1 ← x 1 − Q ⋅ y 1 = 1 T_1 \leftarrow x_1 - Q \cdot y_1 = 1 T 1 ← x 1 − Q ⋅ y 1 = 1
T 2 ← x 2 − Q ⋅ y 2 = − 6 4 T_2 \leftarrow x_2 - Q \cdot y_2 = -64 T 2 ← x 2 − Q ⋅ y 2 = − 6 4
T 3 ← x 3 − Q ⋅ y 3 = 8 T_3 \leftarrow x_3 - Q \cdot y_3 = 8 T 3 ← x 3 − Q ⋅ y 3 = 8
x 1 ← 0 y 1 ← 1 x_1 \leftarrow 0 \quad \qquad y_1 \leftarrow 1 x 1 ← 0 y 1 ← 1
x 2 ← 1 y 2 ← − 6 4 x_2 \leftarrow 1 \quad \qquad y_2 \leftarrow -64 x 2 ← 1 y 2 ← − 6 4
x 3 ← 1 3 y 3 ← 8 x_3 \leftarrow 13 \ \ \qquad y_3 \leftarrow 8 x 3 ← 1 3 y 3 ← 8
Q = ⌊ 1 3 8 ⌋ = 1 Q = \lfloor \frac{13}{8} \rfloor = 1 Q = ⌊ 8 1 3 ⌋ = 1
T 1 ← x 1 − Q ⋅ y 1 = − 1 T_1 \leftarrow x_1 - Q \cdot y_1 = -1 T 1 ← x 1 − Q ⋅ y 1 = − 1
T 2 ← x 2 − Q ⋅ y 2 = 6 5 T_2 \leftarrow x_2 - Q \cdot y_2 = 65 T 2 ← x 2 − Q ⋅ y 2 = 6 5
T 3 ← x 3 − Q ⋅ y 3 = 5 T_3 \leftarrow x_3 - Q \cdot y_3 = 5 T 3 ← x 3 − Q ⋅ y 3 = 5
x 1 ← 1 y 1 ← − 1 x_1 \leftarrow 1 \ \quad \qquad y_1 \leftarrow -1 x 1 ← 1 y 1 ← − 1
x 2 ← − 6 4 y 2 ← 6 5 x_2 \leftarrow -64 \quad \quad y_2 \leftarrow 65 x 2 ← − 6 4 y 2 ← 6 5
x 3 ← 8 y 3 ← 5 x_3 \leftarrow 8 \ \quad \qquad y_3 \leftarrow 5 x 3 ← 8 y 3 ← 5
Q = ⌊ 8 5 ⌋ = 1 Q = \lfloor \frac{8}{5} \rfloor = 1 Q = ⌊ 5 8 ⌋ = 1
T 1 ← x 1 − Q ⋅ y 1 = 2 T_1 \leftarrow x_1 - Q \cdot y_1 = 2 T 1 ← x 1 − Q ⋅ y 1 = 2
T 2 ← x 2 − Q ⋅ y 2 = − 1 2 9 T_2 \leftarrow x_2 - Q \cdot y_2 = -129 T 2 ← x 2 − Q ⋅ y 2 = − 1 2 9
T 3 ← x 3 − Q ⋅ y 3 = 3 T_3 \leftarrow x_3 - Q \cdot y_3 = 3 T 3 ← x 3 − Q ⋅ y 3 = 3
x 1 ← − 1 y 1 ← − 2 x_1 \leftarrow -1 \quad \quad y_1 \leftarrow -2 x 1 ← − 1 y 1 ← − 2
x 2 ← 6 5 y 2 ← − 1 2 9 x_2 \leftarrow 65 \ \quad \quad y_2 \leftarrow -129 x 2 ← 6 5 y 2 ← − 1 2 9
x 3 ← 5 y 3 ← 3 x_3 \leftarrow 5 \ \ \ \quad \quad y_3 \leftarrow 3 x 3 ← 5 y 3 ← 3
Q = ⌊ 5 3 ⌋ = 1 Q = \lfloor \frac{5}{3} \rfloor = 1 Q = ⌊ 3 5 ⌋ = 1
T 1 ← x 1 − Q ⋅ y 1 = − 3 T_1 \leftarrow x_1 - Q \cdot y_1 = -3 T 1 ← x 1 − Q ⋅ y 1 = − 3
T 2 ← x 2 − Q ⋅ y 2 = 1 9 4 T_2 \leftarrow x_2 - Q \cdot y_2 = 194 T 2 ← x 2 − Q ⋅ y 2 = 1 9 4
T 3 ← x 3 − Q ⋅ y 3 = 2 T_3 \leftarrow x_3 - Q \cdot y_3 = 2 T 3 ← x 3 − Q ⋅ y 3 = 2
x 1 ← 2 y 1 ← − 3 x_1 \leftarrow 2 \ \ \ \qquad y_1 \leftarrow -3 x 1 ← 2 y 1 ← − 3
x 2 ← − 1 2 9 y 2 ← 1 9 4 x_2 \leftarrow -129 \quad y_2 \leftarrow 194 x 2 ← − 1 2 9 y 2 ← 1 9 4
x 3 ← 3 y 3 ← 2 x_3 \leftarrow 3 \ \ \ \qquad y_3 \leftarrow 2 x 3 ← 3 y 3 ← 2
Q = ⌊ 3 2 ⌋ = 1 Q = \lfloor \frac{3}{2} \rfloor = 1 Q = ⌊ 2 3 ⌋ = 1
T 1 ← x 1 − Q ⋅ y 1 = 1 T_1 \leftarrow x_1 - Q \cdot y_1 = 1 T 1 ← x 1 − Q ⋅ y 1 = 1
T 2 ← x 2 − Q ⋅ y 2 = − 3 2 3 T_2 \leftarrow x_2 - Q \cdot y_2 = -323 T 2 ← x 2 − Q ⋅ y 2 = − 3 2 3
T 3 ← x 3 − Q ⋅ y 3 = 1 T_3 \leftarrow x_3 - Q \cdot y_3 = 1 T 3 ← x 3 − Q ⋅ y 3 = 1
x 1 ← − 3 y 1 ← 1 x_1 \leftarrow -3 \ \ \quad y_1 \leftarrow 1 x 1 ← − 3 y 1 ← 1
x 2 ← 1 9 4 y 2 ← − 3 2 3 x_2 \leftarrow 194 \ \quad y_2 \leftarrow -323 x 2 ← 1 9 4 y 2 ← − 3 2 3
x 3 ← 2 y 3 ← 1 x_3 \leftarrow 2 \ \qquad y_3 \leftarrow 1 x 3 ← 2 y 3 ← 1
STOP
: y 3 = 1 y_3 = 1 y 3 = 1
d ≡ − 3 2 3 mod 8 4 0 d \equiv -323 \mod{840} d ≡ − 3 2 3 m od8 4 0
≡ 5 1 7 mod 8 4 0 \ \ \ \equiv 517 \mod{840} ≡ 5 1 7 m od8 4 0
Check : 1 3 ⋅ 5 1 7 = 6 7 2 1 13 \cdot 517 = 6721 1 3 ⋅ 5 1 7 = 6 7 2 1
= 8 ⋅ 8 4 0 + 1 \qquad \qquad \qquad \ = 8 \cdot 840 + 1 = 8 ⋅ 8 4 0 + 1
≡ 1 mod 8 4 0 \qquad \qquad \qquad \ \equiv 1 \mod{840} ≡ 1 m od8 4 0 ✅
K pub = ( e , n ) = ( 1 3 , 8 9 9 ) K_{\text{pub}} = (e, n) = (13, 899) K pub = ( e , n ) = ( 1 3 , 8 9 9 )
K priv = ( d , n ) = ( 5 1 7 , 8 9 9 ) K_{\text{priv}} = (d, n) = (517, 899) K priv = ( d , n ) = ( 5 1 7 , 8 9 9 )
Verschlüsselung :
C d mod n = 6 4 0 5 1 7 mod 8 4 0
C^d \mod{n} = 640^{517} \mod{840}
C d m odn = 6 4 0 5 1 7 m od8 4 0
M = 1 0 , n = 8 9 9 : M = 10, n = 899: M = 1 0 , n = 8 9 9 :
C = 1 0 1 3 mod 8 9 9 C = 10^{13} \mod{899} C = 1 0 1 3 m od8 9 9
= [ ( 1 0 8 mod 8 9 9 ) ( 1 0 4 mod 8 9 9 ) ( 1 0 mod 8 9 9 ) ] mod 8 9 9 \ \ \ \ = [(10^8 \mod{899}) (10^4 \mod{899}) (10 \mod{899})] \mod{899} = [ ( 1 0 8 m od8 9 9 ) ( 1 0 4 m od8 9 9 ) ( 1 0 m od8 9 9 ) ] m od8 9 9
= ( 6 3 4 ⋅ 1 1 1 ⋅ 1 0 ) mod 8 9 9 \ \ \ \ = (634 \cdot 111 \cdot 10) \mod{899} = ( 6 3 4 ⋅ 1 1 1 ⋅ 1 0 ) m od8 9 9
= 7 2 2 ‾ \ \ \ \ = \underline{722} = 7 2 2
Entschlüsselung :
Klartext = 7 2 2 5 1 7 mod 8 9 9
\text{Klartext} = 722^{517} \mod{899}
Klartext = 7 2 2 5 1 7 m od8 9 9
Berechnung der Potenz mit dem fastexp \text{fastexp} fastexp Algorithmus:
7 2 2 2 mod 8 9 9 = 7 6 3 722^2 \mod{899} = 763 7 2 2 2 m od8 9 9 = 7 6 3
7 2 2 4 mod 8 9 9 = 7 6 3 2 mod 8 9 9 = 5 1 6 722^4 \mod{899} = 763^2 \mod{899} = 516 7 2 2 4 m od8 9 9 = 7 6 3 2 m od8 9 9 = 5 1 6
7 2 2 8 mod 8 9 9 = 5 1 6 2 mod 8 9 9 = 1 5 2 722^8 \mod{899} = 516^2 \mod{899} = 152 7 2 2 8 m od8 9 9 = 5 1 6 2 m od8 9 9 = 1 5 2
7 2 2 1 6 mod 8 9 9 = 1 5 2 2 mod 8 9 9 = 6 2 9 722^{16} \mod{899} = 152^2 \mod{899} = 629 7 2 2 1 6 m od8 9 9 = 1 5 2 2 m od8 9 9 = 6 2 9
7 2 2 3 2 mod 8 9 9 = 6 2 9 2 mod 8 9 9 = 8 1 722^{32} \mod{899} = 629^2 \mod{899} = 81 7 2 2 3 2 m od8 9 9 = 6 2 9 2 m od8 9 9 = 8 1
7 2 2 6 4 mod 8 9 9 = 8 1 2 mod 8 9 9 = 2 6 8 722^{64} \mod{899} = 81^2 \mod{899} = 268 7 2 2 6 4 m od8 9 9 = 8 1 2 m od8 9 9 = 2 6 8
7 2 2 1 2 8 mod 8 9 9 = 2 6 8 2 mod 8 9 9 = 8 0 3 722^{128} \mod{899} = 268^2 \mod{899} = 803 7 2 2 1 2 8 m od8 9 9 = 2 6 8 2 m od8 9 9 = 8 0 3
7 2 2 2 5 6 mod 8 9 9 = 8 0 3 2 mod 8 9 9 = 2 2 6 722^{256} \mod{899} = 803^2 \mod{899} = 226 7 2 2 2 5 6 m od8 9 9 = 8 0 3 2 m od8 9 9 = 2 2 6
7 2 2 5 1 2 mod 8 9 9 = 2 2 6 2 mod 8 9 9 = 7 3 2 722^{512} \mod{899} = 226^2 \mod{899} = 732 7 2 2 5 1 2 m od8 9 9 = 2 2 6 2 m od8 9 9 = 7 3 2
Klartext = 7 2 2 5 1 7 mod 8 9 9 \text{Klartext} = 722^{517} \mod{899} Klartext = 7 2 2 5 1 7 m od8 9 9
= [ ( 7 2 2 5 1 2 mod 8 9 9 ) ( 7 2 2 4 mod 8 9 9 ) \qquad \qquad = [(722^{512} \mod{899}) (722^4 \mod{899}) = [ ( 7 2 2 5 1 2 m od8 9 9 ) ( 7 2 2 4 m od8 9 9 )
( 7 2 2 mod 8 9 9 ) ] mod 8 9 9 \qquad \qquad \quad (722 \mod{899})] \mod{899} ( 7 2 2 m od8 9 9 ) ] m od8 9 9
= ( 7 3 2 ⋅ 5 1 6 ⋅ 7 2 2 ) mod 8 9 9 \qquad \qquad = (732 \cdot 516 \cdot 722) \mod{899} = ( 7 3 2 ⋅ 5 1 6 ⋅ 7 2 2 ) m od8 9 9
= 1 0 ‾ \qquad \qquad = \underline{10} = 1 0
Das DIFFIE-HELLMAN Key-Exchange Verfahren
Dieses Verfahren wurde in der Arbeit “New Directions in Cryptography ” vorgestellt und zählt zu den Public-Key Verfahren, erlaubt aber
keine Verschlüsselung
keine digitale Signatur
Generell nutzen Public-Key Verfahren immer sogenannte Trapdoor-Funktionen ; das sind Funktionen, die in der einen Richtung einfach sind, die Umkehrung jedoch schwierig bis unmöglich.
RSA: p ⋅ q ⇌ schwierig einfach n = p ⋅ q p \cdot q \xrightleftharpoons[\text{schwierig}]{\text{einfach}} n = p \cdot q p ⋅ q einfach schwierig n = p ⋅ q
Eine andere Trapdoor-Funktion ist z.B.
→ \rightarrow → Berechne ∏ i = 1 1 1 ( x − i ) = ( x − 1 ) ( x − 2 ) ( x − 3 ) … ( x − 1 1 ) \displaystyle \prod_{i = 1}^{11} \; (x - i ) = (x - 1) (x - 2) (x - 3) \ldots (x - 11) i = 1 ∏ 1 1 ( x − i ) = ( x − 1 ) ( x − 2 ) ( x − 3 ) … ( x − 1 1 )
= x 1 1 − 6 6 x 1 0 + 1 9 2 5 x 9 − 3 2 6 7 0 x 8 \quad \qquad \qquad \qquad \qquad \ \ \, = x^{11} - 66x^{10} + 1925x^9 - 32670x^8 = x 1 1 − 6 6 x 1 0 + 1 9 2 5 x 9 − 3 2 6 7 0 x 8
+ 3 5 7 4 2 x 7 − 3 9 9 1 6 8 0 0 x 6 \quad \qquad \qquad \qquad \qquad \ \ \, \quad + 35742x^7 - 39916800x^6 + 3 5 7 4 2 x 7 − 3 9 9 1 6 8 0 0 x 6
Das DH-Key-Exchange-Verfahren nutzt den diskreten Logarithmus als Trapdoor-Funktion; d.h. die Sicherheit des DH-Verfahrens hängt davon ab, dass es sehr schwierig (bis unmöglich) ist, diskrete Logarithmen zu berechnen.
Betrachte wieder die Menge Z p = { 0 , 1 , … , p − 1 } \mathbb{Z}_p = \{ 0, 1, \ldots, p - 1 \} Z p = { 0 , 1 , … , p − 1 } . Eine primitive Wurzel einer Primzahl p p p ist eine Zahl in Z p \ { 0 } \mathbb{Z}_p \backslash \{ 0 \} Z p \ { 0 } , deren Potenzen alle Zahlen von 1 1 1 bis p − 1 p - 1 p − 1 generiert. Ist a a a eine primitive Wurzel, dann sind
a mod p , a 2 mod p , a 3 mod p , … , a p − 1 mod p
a \mod{p}, a^2 \mod{p}, a^3 \mod{p}, \ldots, a^{p - 1} \mod{p}
a m odp , a 2 m odp , a 3 m odp , … , a p − 1 m odp
alle unterschiedlich und bestehen aus den Zahlen 1 1 1 bis p − 1 p - 1 p − 1 in irgendeiner (wilden!) Reihenfolge.
Beispiel: p = 7 , a = 3 p = 7, a = 3 p = 7 , a = 3
3 1 mod 7 = 3 3^1 \mod{7} = 3 3 1 m od7 = 3
3 2 mod 7 = 2 3^2 \mod{7} = 2 3 2 m od7 = 2
3 3 mod 7 = 6 3^3 \mod{7} = 6 3 3 m od7 = 6
3 4 mod 7 = 4 3^4 \mod{7} = 4 3 4 m od7 = 4
3 5 mod 7 = 5 3^5 \mod{7} = 5 3 5 m od7 = 5
3 6 mod 7 = 1 3^6 \mod{7} = 1 3 6 m od7 = 1
p = 7 ⇒ 1 , 2 , 3 , 4 , 5 , 6 = Z p \ { 0 } . p = 7 \Rightarrow 1, 2, 3, 4, 5, 6 = \mathbb{Z}_p \backslash \{ 0 \}. p = 7 ⇒ 1 , 2 , 3 , 4 , 5 , 6 = Z p \ { 0 } .
Das diskrete Logarithmusproblem lautet:
Finde i i i mit
b = a i mod p 0 ≤ i ≤ p − 1
b = a^i \mod{p} \qquad 0 \le i \le p - 1
b = a i m odp 0 ≤ i ≤ p − 1
i i i heißt diskreter Logarithmus oder
Index von b b b für die
Basis a mod b a \mod{b} a m odb :
i = ind a , p ( b )
i = \text{ind}_{a, p} (b)
i = ind a , p ( b )
Das DH-Key-Exchange Kryptosystem
Szenario : Alice und Bob wollen einen gemeinsamen Schlüssel erzeugen, den nur sie kennen, ohne sich zuvor begegnet zu sein.
Alice und Bob einigen sich (öffentlich) auf eine Primzahl q q q
und eine primitive Wurzel a a a (( q , a ) (q, a) ( q , a ) ist eine Art Public Key).
Geheimer Schlüssel Alice
Alice wählt eine Zahl X A X_A X A
(X A < q X_A < q X A < q ) und wird Alice benannt. Alice berechnet
Y A = a X A mod q
Y_A = a^{X_A} \mod{q}
Y A = a X A m odq
Y A Y_A Y A
geht an Bob.
Geheimer Schlüssel Bob
Bob wählt eine Zahl X B X_B X B
(X B < q X_B < q X B < q ) und wird Bob benannt. Bob berechnet
Y B = a X B mod q
Y_B = a^{X_B} \mod{q}
Y B = a X B m odq
Y B Y_B Y B
geht an Alice.
Alice berechnet K = ( Y B ) X A mod q K = (Y_B)^{X_A} \mod{q} K = ( Y B ) X A m odq .
Bob berechnet K ′ = ( Y A ) X B mod q K' = (Y_A)^{X_B} \mod{q} K ′ = ( Y A ) X B m odq .
→ \rightarrow → Da K = K ′ K = K' K = K ′ (gleich), haben Bob und Alice einen gemeinsamen Sitzungsschlüssel.
Es gilt:
K = Y B X A mod q K = Y_B^{X_A} \mod{q} K = Y B X A m odq (Alice)
= ( a X B mod q ) X A mod q \quad \, = (a^{X_B} \mod{q})^{X_A} \mod{q} = ( a X B m odq ) X A m odq
= ( a X B ) X A mod q \quad \, = (a^{X_B})^{X_A} \mod{q} = ( a X B ) X A m odq
= a X B ⋅ X A mod q \quad \, = a^{X_B \cdot X_A} \mod{q} = a X B ⋅ X A m odq
= ( a X A ) X B mod q \quad \, = (a^{X_A})^{X_B} \mod{q} = ( a X A ) X B m odq
= Y A X B mod q = K ′ \quad \, = Y_A^{X_B} \mod{q} = K' = Y A X B m odq = K ′ von Bob
Also öffentlich: q , a , Y A , Y B q, a, Y_A, Y_B q , a , Y A , Y B
Ein Angreifer, der den Schlüssel K K K
erhalten will, muss X A X_A X A
oder X B X_B X B
berechnen aus
Y A = a X A mod q \qquad \qquad Y_A = a^{X_A} \mod{q} Y A = a X A m odq
oder Y B = a X B mod q \text{oder} \qquad \, Y_B = a^{X_B} \mod{q} oder Y B = a X B m odq
oder X B = ind a , q ( Y B ) . \text{oder} \quad \quad X_B = \text{ind}_{a, q} (Y_B). oder X B = ind a , q ( Y B ) .
Das DH-Verfahren macht nur Sinn, wenn beide Parteien online sind, denn Alice und Bob müssen eine Reihe von Informationen austauschen (q , a , Y A , Y B q, a, Y_A, Y_B q , a , Y A , Y B ), damit besser kommuniziert wird.
Beispiel: Alice und Bob einigen sich auf
q = 4 7 9 , a = 1 1 .
q = 479, a = 11.
q = 4 7 9 , a = 1 1 .
Alice wählt X A = 1 0 2 mit 1 ≤ X A ≤ 4 7 8 X_A = 102 \quad \text{mit} \; 1 \le X_A \le 478 X A = 1 0 2 mit 1 ≤ X A ≤ 4 7 8
Bob wählt X B = 1 1 0 mit 1 ≤ X B ≤ 4 7 8 \; X_B = 110 \quad \text{mit} \; 1 \le X_B \le 478 X B = 1 1 0 mit 1 ≤ X B ≤ 4 7 8
Alice berechnet Y A = a X A mod q Y_A = a^{X_A} \mod{q} Y A = a X A m odq
= 1 1 1 0 2 mod 4 7 9 \qquad \qquad \qquad \quad \, \, = 11^{102} \mod{479} = 1 1 1 0 2 m od4 7 9
fastexp → = 2 1 8 ‾ \text{fastexp} \rightarrow \quad \quad \ \ \ \, = \underline{218} fastexp → = 2 1 8
Y A = 2 1 8 Y_A = 218 Y A = 2 1 8 wird an Bob gesendet.
Bob berechnet Y B = a X B mod q Y_B = a^{X_B} \mod{q} Y B = a X B m odq
= 1 1 1 1 0 mod 4 7 9 \qquad \qquad \qquad \quad = 11^{110} \mod{479} = 1 1 1 1 0 m od4 7 9
fastexp → = 4 2 ‾ \text{fastexp} \rightarrow \quad \quad \, \, \; = \underline{42} fastexp → = 4 2
Y B = 4 2 Y_B = 42 Y B = 4 2 wird an Alice gesendet.
Dann berechnet Alice K = Y B X A mod q K = Y_B^{X_A} \mod{q} K = Y B X A m odq
= 4 2 1 0 2 mod 4 7 9 \qquad \qquad \qquad \qquad \quad \ = 42^{102} \mod{479} = 4 2 1 0 2 m od4 7 9
fastexp → = 2 4 2 ‾ \text{fastexp} \rightarrow \qquad \qquad \; \; \; = \underline{242} fastexp → = 2 4 2
Bob berechnet K ′ = Y A X B mod q K' = Y_A^{X_B} \mod{q} K ′ = Y A X B m odq
= 2 1 8 1 1 0 mod 4 7 9 \qquad \qquad \qquad \quad = 218^{110} \mod{479} = 2 1 8 1 1 0 m od4 7 9
fastexp → = 2 4 2 ‾ \text{fastexp} \rightarrow \qquad \; \; = \underline{242} fastexp → = 2 4 2
Daher ist der Sitzungsschlüssel K = 2 4 2 K = 242 K = 2 4 2 .
ELGAMAL-Kryptosysteme (TAHER ELGAMAL, 1985)
Digitale Signatur
Schlüssel : Wähle eine Primzahl p p p
mit zwei Zufallszahlen g , x g, x g , x mit g , x < p g, x < p g , x < p .
Berechne y = g x mod p y = g^x \mod{p} y = g x m odp
K pub = [ y , g , p ] K_{\text{pub}} = [y, g, p] K pub = [ y , g , p ]
K priv = [ x ] K_{\text{priv}} = [x] K priv = [ x ]
Signatur : M M M
soll signiert werden.
Wähle eine zufällige Zahl k k k ,
so dass k k k
und p − 1 p - 1 p − 1 coprim sind, d.h.
ggT ( k , p − 1 ) = 1 .
\text{ggT}(k, p - 1) = 1.
ggT ( k , p − 1 ) = 1 .
Berechne
a = g k mod p .
a = g^k \mod{p}.
a = g k m odp .
Berechne b b b aus
M ≡ ( x a + k b ) mod ( p − 1 )
M \equiv (xa + kb) \mod{(p - 1)}
M ≡ ( x a + k b ) m od( p − 1 )
Signatur: ( a , b ) (a, b) ( a , b ) , k k k bleibt geheim.
Bob verifiziert die Signatur wie folgt:
Es muss gelten:
y a ⋅ a b mod p = ! g M mod p
y^a \cdot a^b \mod{p} \overset{!}{=} g^M \mod{p}
y a ⋅ a b m odp = ! g M m odp
Beispiel:
p = 1 3 , g = 7 p = 13, g = 7 p = 1 3 , g = 7 öffentliche Zahlen
Alice wählt als geheimen K priv → x = 3 K_{\text{priv}} \rightarrow x = 3 K priv → x = 3
y = g x mod p = 7 3 mod 1 3 = 5 y = g^x \mod{p} = 7^3 \mod{13} = 5 y = g x m odp = 7 3 m od1 3 = 5
K pub A = [ p , g , y ] = [ 1 3 , 7 , 5 ] K_{\overset{A}{\text{pub}}} = [p, g, y] = [13, 7, 5] K pub A = [ p , g , y ] = [ 1 3 , 7 , 5 ]
K priv A = [ x ] = [ 3 ] K_{\overset{A}{\text{priv}}} = [x] = [3] K priv A = [ x ] = [ 3 ]
Klartext, der von Alice signiert wird, ist M = 1 0 M = 10 M = 1 0 .
Zum Signieren muss Alice die Zahlen a , b a, b a , b bestimmen:
Alice wählt zufällige Zahl k = 5 k = 5 k = 5 , ist ok: ggT ( 5 , 1 2 ) = 1 \text{ggT}(5, 12) = 1 ggT ( 5 , 1 2 ) = 1
a = g k mod p a = g^k \mod{p} a = g k m odp
= 7 5 mod 1 3 ≡ 1 1 mod 1 3 \ \ \ = 7^5 \mod{13} \equiv 11 \mod{13} = 7 5 m od1 3 ≡ 1 1 m od1 3
Berechne b b b aus
M = ( x a + k b ) mod ( p − 1 ) M = (xa + kb) \mod{(p - 1)} M = ( x a + k b ) m od( p − 1 )
1 0 = ( 3 ⋅ 1 1 + 5 ⋅ b ) mod 1 2 10 = (3 \cdot 11 + 5 \cdot b) \mod{12} 1 0 = ( 3 ⋅ 1 1 + 5 ⋅ b ) m od1 2
= ( 9 + 5 ⋅ b ) mod 1 2 \quad \ = (9 + 5 \cdot b) \mod{12} = ( 9 + 5 ⋅ b ) m od1 2
⟺ 1 ≡ 5 ⋅ b mod 1 2 \iff 1 \equiv 5 \cdot b \mod{12} ⟺ 1 ≡ 5 ⋅ b m od1 2
→ b = 5 ‾ \qquad \rightarrow \underline{b = 5} → b = 5
An Bob wird gesendet:
Klartext M M M
Signaturwerte [ a , b ] = [ 1 1 , 5 ] [a, b] = [11, 5] [ a , b ] = [ 1 1 , 5 ]
K pub K_{\text{pub}} K pub von Alice: K pub A = [ p = 1 3 , g = 7 , y = 5 ] K_{\overset{A}{\text{pub}}} = [p = 13, g = 7, y = 5] K pub A = [ p = 1 3 , g = 7 , y = 5 ]
Verifikation :
( y a ⋅ a b ) mod p = ! g M mod p \qquad \qquad (y^a \cdot a^b) \mod{p} \overset{!}{=} g^M \mod{p} ( y a ⋅ a b ) m odp = ! g M m odp
links: ( 5 1 1 ⋅ 1 1 5 ) mod 1 3 = 4 mod 1 3 \text{links:} \quad \ \ \, (5^{11} \cdot 11^5) \mod{13} = 4 \mod{13} links: ( 5 1 1 ⋅ 1 1 5 ) m od1 3 = 4 m od1 3
rechts: 7 1 0 mod 1 3 = 4 mod 1 3 \text{rechts:} \quad \ 7^{10} \mod{13} = 4 \mod{13} rechts: 7 1 0 m od1 3 = 4 m od1 3
⇒ \Rightarrow ⇒ Beide Terme sind gleich.