PGP

RSA hat das Problem der Schlüsselverteilung gelöst, indem es die geheime Übermittlung eines Schlüssels überflüssig machte. Man muss nur einen öffentlichen Schlüssel publizieren, den jeder sehen darf und mit dem jeder verschlüsseln kann. Entschlüsseln kann jedoch nur derjenige mit dem privaten Schlüssel.

Der Nachteil dabei ist, dass bei asymmetirschen Verschlüsselungsverfahren viel leistungsfähigere Computer benötigt werden als bei symmetrischen Verfahren; je nach Länge der Botschaft dauert der Vorgang mehrere Minuten. Symmetrische Chiffrierungen setzen aber die Kenntnis des Schlüssels für alle Parteien voraus.

Um die Vorteile beider Verfahren zu kombinieren, verwendet man heute eine hybride Verschlüsselung. Ein bekanntes Beispiel ist das von Phil Zimmermann entwickelte Verfahren PGP.

Pretty Good Privacy

Pretty Good Privacy (PGP) benutzt ein sogenanntes Public-Key-Verfahren; benutzt wird ein öffentlicher Schlüssel, mit dem jeder Daten für den Empfänger verschlüsseln und dessen Signaturen prüfen kann. Der Empfänger besitzt einen privaten, geheimen Schlüssel. Nachrichten an einen Empfänger werden mit dessen öffentlichem Schlüssel verschlüsselt und können dann ausschliesslich mittels seines privaten Schlüssels entschlüsselt werden. Die erste Version wurde im Jahr 1991 geschrieben und verwendete einen RSA-Algorithmus zur Verschlüsselung der Daten.

Bei PGP wird aber nicht die ganze Nachricht asymmetrisch verschlüsselt; dies wäre viel zu rechenintensiv und nicht praktikabel. Stattdessen wird nur der verwendete Schlüssel asymmetrisch verschlüsselt und die eigentliche Nachricht symmetrisch (Hybride Verschlüsselung). Dazu wird jedes Mal ein symmetrischer Schlüssel - ein Session Key - zufällig erzeugt. Dieser symmetrische Schlüssel wird dann z.B. per RSA-Kryptosystem mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und der Nachricht hinzugefügt. Dadurch ist es möglich, eine Nachricht für mehrere Empfänger gleichzeitig zu verschlüsseln. (Quelle: Wikipedia, 2020)

Elektronische Unterschrift

Wie kann Bob sicher sein, dass die Nachricht wirklich von Alice stammt und nicht von Eve abgefangen und durch eine andere ersetzt wurde? Das wäre möglich, weil Eve ja ebenfalls den öffentlichen Schlüssel von Bob kennt!

Mit dem RSA-Verfahren kann eine elektronische Unterschrift berechnet werden. Zuerst wird mithilfe einer Hashfunktion der Hashwert der Nachricht generiert. Dieser ist wie ein Fingerabdruck der Daten, auf die die Hashfunktion angewendet wurde.

Den Hash hh der Nachricht signiert Alice mit ihrem privaten Schlüssel dd.

shdmodns\equiv hd \mod n

Weil (hd)e(modn)h(h^d)^e(\mod n)\equiv h gilt, kann Bob den signierten Hashwert ss mit dem öffentlichen Schlüssel ee von Alice entschlüsseln.

hsemodnh\equiv s^e\mod n

Damit erhält er wieder den Hashwert und kann sich jetzt sicher sein, dass er von Alice stammt - weil er mit ihrem privaten Schlüssel signiert wurde, den nur sie kennt.

Exercise 1: Verschlüssle mit RSA

Alice hat dir eine Nachricht cc geschickt. Sie ist mit Caesar verschlüsselt. Den Schlüssel kk für Caesar hast du ebenfalls erhalten. Er ist mit deinem öffentlichen RSA-Schlüssel verschlüsselt. Zudem hat sie den Hashwert hAh_A generiert und mit ihrem privaten RSA-Schlüssel signiert. Berechne deinen privaten Schlüssel, bestimme kk und die Nachricht mm, generiere den Hashwert hh von mm und vergleiche ihn mit dem von Alice.

Verschlüsseltes k=243k= 243

c=c = DOOHVRN

Signiertes hA=262h_A = 262

Öffentlicher Schlüssel Alice =(N,E)=(341,11)= (N, E) = (341, 11)

Deine Zahlen: p=37p= 37, q=163q= 163, e=5e = 5

Dein privater Schlüssel =(n,d)=(6031,?)= (n, d) = (6031, ?)

d=d=?, k=k=?, m=m =?, h=h=?

Solution

Verschlüsseltes k=243k = 243

c=DOOHVRNc = \text{DOOHVRN}

Signiertes hA=262h_A = 262

Öffentlicher Schlüssel von Alice: (N,E)=(341,11)(N, E) = (341, 11)

Deine Zahlen: p=37p = 37, q=163q = 163, e=5e = 5

Privater Schlüssel: (n,d)=(6031, ?)(n, d) = (6031, \ ?)

Zuerst bestimmen wir den privaten Schlüssel dd:
n=37163=6031n = 37 \cdot 163 = 6031

φ(n)=(p1)(q1)=36162=5832\varphi(n) = (p - 1) \cdot (q - 1) = 36 \cdot 162 = 5832

5832=11665+22=5832116655832 = 1166 \cdot 5 + 2 \Rightarrow 2 = 5832 − 1166 \cdot 5

5=22+11=5225 = 2 \cdot 2 + 1 \Rightarrow 1 = 5 − 2 \cdot 2

Rückwärts eingesetzt:

1=5221=52(583211665)=525832+23325=2333525832\begin{align*} 1 &= 5 − 2 \cdot 2 \\ 1 &= 5 − 2 \cdot (5832 − 1166 \cdot 5) \\ &= 5 − 2 \cdot 5832 + 2332 \cdot 5 \\ &= 2333 \cdot 5 − 2 \cdot 5832 \end{align*}

d=2333\Rightarrow d = 2333

Jetzt können wir den verschlüsselten Caesar-Schlüssel kvk_v entschlüsseln:

k=kvdmodn2432333mod60313k = k_v^d \mod n \equiv 243^{2333} \mod 6031 \equiv 3

Damit sind wir in der Lage, die Nachricht mm auszurechnen. Die Verschiebung um k=3k = 3 Buchstaben ergibt: c=DOOHVRNm=alles okc = \text{DOOHVRN} \Rightarrow m = \text{alles ok}

Hashwert hh berechnen: m=alles ok(1+12+12+5+19+15+11)mod11=75mod119m = \text{alles ok} \Rightarrow (1+12+12+5+19+15+11) \mod 11 = 75 \mod 11 \equiv 9

Hashwert von Alice hAh_A aus dem signierten Hashwert hsh_s berechnen:

hA=hsEmodN=26211mod3419h_A = h_s^E \mod N = 262^{11} \mod 341 \equiv 9

Zusammenfassung:

  • d=2333d = 2333
  • k=3k = 3
  • m=alles okm = \text{alles ok}
  • h=9h = 9
  • hA=9h_A = 9

Da h=hAh = h_A, wurde die Nachricht unverfälscht von Alice übermittelt. ✅

Note 1

Den Hashwert hh generierst du in Aufgabe 19, indem du bei der Nachricht mm die Buchstaben a=1a = 1, b=2b = 2, \dots, z=26z = 26 setzt und die Zahlen addierst. Die erhaltene Zahl rechnest du (mod 11)(\text{mod}\ 11) und erhältst den Hashwert hh.

Example 1

Der Hashwert von "du" ist: d+u=(4+21)mod1125mod113d + u = (4 + 21) \mod 11 \equiv 25 \mod 11 \equiv 3

PGP schematisch

Schematisch habe ich dies so wie in folgender Abbildung illustriert:

(PGP kommentiert)

Wir simulieren das Verfahren mit RSA als Übung und verwenden als Hash/Fingerprint die Check-Digit aus der ISBN-10 Nummer aus dem Abschnitt Barcode.

Zertifikate

Ein Fall wurde bisher ausgeklammert: Es kann sein, dass der Betrug schon zu Beginn geschah. Eve könnte in Bobs Namen ihren eigenen Schlüssel Alice unterjubeln. Jetzt kann Eve sich als Bob ausgeben und in seinem Namen alle Nachrichten abfangen, lesen und beantworten. Alice realisiert nichts, weil sie ja davon ausgeht, mit Bob zu kommunizieren.

Damit das nicht geschieht, gibt es sogenannte Zertifikate. Ein Zertifikat ist wie ein Personalausweis und enthält den Namen und den öffentlichen Schlüssel des Inhabers - dazu gehört immer eine Zertifizierungsstelle (CA), die den Schlüsselinhaber authentisiert und das Zertifikat ausstellt.

Je nach Geschäftsart können noch weitere Merkmale enthalten sein. Signiert wird der Hashwert des Zertifikats mit dem privaten Schlüssel der Zertifizierungsstelle und diese bürgt für die Richtigkeit der Informationen auf dem Zertifikat. Jeder kann bei der Zertifizierungsstelle das Zertifikat von Alice oder Bob verlangen und weil es von der CA verifiziert ist, kann er sich sicher sein, dass er mit jener Person kommuniziert, auf welche das Zertifikat ausgestellt ist. Die Zertifikate der wichtigsten Zertifizierungsstellen sind auf dem Computer vorinstalliert.

Will Alice eine Mail an Bob schreiben, funktioniert das so:

Exercise 2: Default Public Exponent

Der Public Exponent wird gerne 6553765'537 gesetzt; wieso? (Hint: Checke 22er Potenzen.)

Solution

Es ist 65537=216+165'537=2^{16}+1 und damit hat diese Zahl eine Binärdarstellung mit vielen Nullen, was das Potenzieren erleichtert.

Beim E-Banking und Online-Bestellungen geschieht all dies mittlerweile automatisch. Wird etwas mit der Kreditkarte bezahlt, verschlüsselt der Computer die PIN und die Kartennummer, ohne dass man etwas dafür tun muss.