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.