Exkurs - Experimente mit GnuPG

OpenPGP, GnuPG

OpenPGP ist ein Standard für Verschlüsselungssoftware, der in der RFC 4880 festgelegt ist. Dieser Standard beschreibt u.a. die Verschlüsselungsmethode und die zu benutzenden Formate (Schlüssel, Signaturen, etc.) der Software.

GnuPG oder GPG (GNU Privacy Guard, englisch für GNU-Privatsphärenschutz) ist ein Softwarepaket, das den Standard OpenPGP implementiert, d.h., die Vorgaben von OpenPGP umsetzt. GnuPG gibt es für verschiedene Betriebssysteme. Wenn man das Windows-Installationspaket Gpg4win ausführt, wird u.a. auch GnuPG installiert.

Realisierung eines asymmetrische Chiffriersystems

Asymmetrisches Kryptosystem

Wir betrachten die folgende Nachricht von Alice an Bob:

Hallo Bob,
was hast du heute Abend vor?
Alice

Erzeugung eines Schlüsselpaars

Bevor eine nachricht an Bob verschlüsselt werden kann, muss erst einmal ein Schlüsselpaar für Bob (bestehend aus einem öffentlichen und einem privaten Schlüssel) erzeugt werden.

Wir begeben uns mit geeigneten Befehlen auf die Konsole. Mit ...> soll hier das Prompt dargestellt werden.

...> gpg --gen-key
gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
   (1) RSA und RSA (voreingestellt)
   (2) DSA und Elgamal
   (3) DSA (nur unterschreiben/beglaubigen)
   (4) RSA (nur signieren/beglaubigen)
Ihre Auswahl? 1
RSA Schlüssel können zwischen 1024 und 4096 Bits lang sein.
Welche Schlüssellänge wünschen Sie? (2048) 
Die verlangte Schlüssellänge beträgt 2048 Bit
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
        = Schlüssel verfällt nach n Tagen
      w = Schlüssel verfällt nach n Wochen
      m = Schlüssel verfällt nach n Monaten
      y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 30
Key verfällt am Fr 08 Okt 2010 15:01:16 CEST
Ist dies richtig? (j/N) j

Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das
Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und
Ihrer Email-Adresse in dieser Form auf:
    "Heinrich Heine (Der Dichter) "

Ihr Name ("Vorname Nachname"): Bob Happy
Email-Adresse: bob@happy.de
Kommentar: 
Sie haben diese User-ID gewählt:
    "Bob Happy "

Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? f
Sie benötigen eine Passphrase, um den geheimen Schlüssel zu schützen.

Wir müssen eine ganze Menge Zufallswerte erzeugen.  Sie können dies
unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas
tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.
...................+++++
......+++++
Wir müssen eine ganze Menge Zufallswerte erzeugen.  Sie können dies
unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas
tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.
..........+++++
 
Es sind nicht genügend Zufallswerte vorhanden.  Bitte führen Sie andere
Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!
(Es werden noch 37 Byte benötigt.)
         
.+++++
gpg: Schlüssel 4FF83FC8 ist als uneingeschränkt vertrauenswürdig gekennzeichnet
Öffentlichen und geheimen Schlüssel erzeugt und signiert.

gpg: "Trust-DB" wird überprüft
gpg: 3 marginal-needed, 1 complete-needed, PGP Vertrauensmodell
gpg: Tiefe: 0 gültig:   2 signiert:   0 Vertrauen: 0-, 0q, 0n, 0m, 0f, 2u
gpg: nächste "Trust-DB"-Pflichtüberprüfung am 2010-10-08
pub   2048R/4FF83FC8 2010-09-08 [verfällt: 2010-10-08]
      Schl.-Fingerabdruck = F2B2 A68C A4F6 18AA F4B7  9249 A2EB 1931 4FF8 3FC8
uid                  Bob Happy 
sub   2048R/E35DC13D 2010-09-08 [verfällt: 2010-10-08]

...>

Nach Eingabe einer Passphrase werden die Schlüssel erzeugt.

Achtung: Die Passphrase muss man sich merken. Die wird später beim Entschlüsseln benötigt.

Export des öffentlichen Schlüssels

Den öffentlichen Schlüssel kann man jetzt exportieren:

...> gpg --armor --output bob_public_key.asc --export "Bob Happy"

Die Datei bob_public_key.asc mit dem öffentlichen Schlüssel von Bob kann man an Kommunikationspartner weitergeben. Sie enthält die folgenden Zeichen:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.14 (MingW32)

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
CDcNzdH/s4Y0o5/MvX67NDQEE20iWbzL
=VPa7
-----END PGP PUBLIC KEY BLOCK-----

Auf der Webseite PGPDump kann man sich die in der Datei dargestellten Informationen anzeigen lassen.

 PGPDump

Im vorliegenden Fall erhält man u.a. die beiden Zahlen, die den öffentlichen Schlüssel nach dem RSA-Verfahren ausmachen:

Old: Public Key Packet(tag 6)(269 bytes) 
Ver 4 - new 
Public key creation time - Fri Sep 24 16:13:13 UTC 2010 
Pub alg - RSA Encrypt or Sign(pub 1) 
RSA n(2048 bits) - 
a8 64 1c 41 51 83 10 75 4d ea 95 68 d0 25 1f 33 ae a2 89 ad 
c1 fd 82 c2 87 58 6f 97 83 a3 e7 31 7a c4 75 e1 20 3a ef 5d 
c7 74 cd 27 c6 28 53 cb 93 b5 ab a2 eb 97 45 70 4d 8e d1 c5 
c3 9d ee 57 c9 c4 15 32 31 97 00 72 c4 b8 23 d1 41 1f ed ba 
12 70 b2 4e ae ed 31 4f 1a 00 b7 69 2b 8a 6e ad 87 bb a9 71 
05 4a 24 5f 1f 18 9d 85 bb b9 33 6b 84 e2 ca a7 63 84 24 24 
be 1a 25 02 dd da df 62 57 66 37 2f 3e 60 ec 0d 0d 16 df 69 
b7 31 3e 8e 40 1a 8e f9 a9 c1 b1 02 c6 ad f9 62 33 31 9b 1e 
40 77 1f 01 6f 65 e3 79 23 1b 70 bb c3 da e0 28 ef b8 d0 e0 
98 6f fe 43 1f 13 7c 2a 58 0c 87 53 ce 81 8a f2 44 46 47 21 
83 6e b5 e8 04 04 be 0d 21 44 56 1a 67 61 a5 19 ad 17 04 c0 
bc b4 c9 b7 4c 04 c4 98 4a 34 7a 41 c1 7c 4c e3 f7 87 7c 44 
cd 9e d4 f1 6a 05 b1 bc 06 f8 cf 1f c2 d2 61 f5 
RSA e(17 bits) - 
01 00 01 

Mit dem folgenden Python-Programm kann man die hexadezimal dargestellten Zahlen in eine dezimale Darstellung umwandeln.

n_hex = '0xa8641c41518310754dea9568d0251f33aea289adc1fd82c287586f9783a3e7317ac475e1203aef5dc774cd27c62853cb93b5aba2eb9745704d8ed1c5c39dee57c9c4153231970072c4b823d1411fedba1270b24eaeed314f1a00b7692b8a6ead87bba971054a245f1f189d85bbb9336b84e2caa763842424be1a2502dddadf625766372f3e60ec0d0d16df69b7313e8e401a8ef9a9c1b102c6adf96233319b1e40771f016f65e379231b70bbc3dae028efb8d0e0986ffe431f137c2a580c8753ce818af244464721836eb5e80404be0d2144561a6761a519ad1704c0bcb4c9b74c04c4984a347a41c17c4ce3f7877c44cd9ed4f16a05b1bc06f8cf1fc2d261f5'
e_hex = '0x010001'
n = int(n_hex, 16)
e = int(e_hex, 16)
print('n = ', n)
print('e = ', e)

Es ergeben sich die folgenden Ergebnisse:

>>> 
n =  21257401498479011359050603733535299964981915555116347728020718941
4979927591883940053938988374917464762893307669048967202314254097150044
9207487578697971408378406024073619434737409525857176339127738486055245
7700551303631950998430608890605549738448001265354538102922007163341293
3758524894890397337770039317383201567151671922812297428367397046290582
6707287739072813102220788181993732810158057513614310683568432663710510
0723571393382869095829124235827944386268935561541442610526224069745941
6788017290549815858245587367933981252479878835433929188970275686578557
93746791410781043965045372773921120542700472045403767997358581
e =  65537

Die Modulzahl n ist hier eine Zahl mit 617 Stellen.

Export des privaten Schlüssels

Auch den privaten Schlüssel kann man exportieren:

...> gpg --armor --output bob_private_key.asc --export-secret-keys "Bob Happy"

Der Inhalt der Datei bob_private_key.asc sieht so ähnlich aus wie beim öffentlichen Schlüssel. Wir zeigen ihn hier natürlich nicht.

Import des öffentlichen Schlüssels

Wenn Alice jetzt die oben beschriebene Nachricht an Bob schicken möchte, dann muss sie den öffentlichen Schlüssel von Bob importieren.

Das folgende Protokoll zeigt, wie man einen Schlüssel importiert.

...> gpg --import bob_public_key.asc
gpg: Schlüssel 4FF83FC8: Öffentlicher Schlüssel "Bob Happy " importiert
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg:               importiert: 1  (RSA: 1)

Anzeige von Schlüsseln

Die Gesamtheit aller verwalteten Schlüssel kann man sich auch anzeigen lassen.

...> gpg --list-keys
...

uid                  Bob Happy 
sub   2048R/E35DC13D 2010-09-08 [verfällt: 2010-10-08]

Verschlüsselung einer Nachricht

Alice kann jetzt die Nachricht verschlüsseln. Wir gehen davon aus, dass sie sich in der Datei alice_an_bob.txt befindet.

...> gpg --armor --output alice_an_bob_verschluesselt.txt --recipient "Bob Happy" --encrypt alice_an_bob.txt

Der Inhalt der Datei alice_an_bob_verschluesselt.txt sieht so aus:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.14 (MingW32)

hQEMA08y+QxRS1+9AQf/WVEEHg1swHRCOKC3zTlyDpVc5P3ZQdU+hNJgYM+JNCgv
f0C92wt4k39KsvYWPSbPhgVDwS1Wsd7Ir8V2qIUjY/np1JivKuA6qtIpUVdjUFYz
ycC+4RQlGiU/HQrrnR61DeegEqqrlXVu6xV4COEBF2XZBk5T5EQ7G75eS68Dv2Mr
Om51hqvXhSKqA7vsR77JOW5kq3DMU+ULqrG0bCP1hHb1D07Qm26lvnUdMAhT/9mD
jwG43teEczf/Jhts3jVm9LNbOA9dKqU2diL9hkFmtHwdKDI/rvY7Ip+UUF8w7GXC
GLMmbu665xrzHycev7d5ol7xhSXXwRkDC2V6EyQWn9J4AYN/EwKN0DJKQLdxZWd4
xeJ8q8P3//sCLRWDXlvNvFaVJFr8e6/RQrlYf/46UowUBi4q3as4pZlPC+TllgUH
X6+TvzH1CQvgPA2y/kfZDZlRUE7JDgwPxAivXwEd0Wzn0sYufd5lpflzcxP/prEG
wtrvMAUvIA1m
=uhSA
-----END PGP MESSAGE-----

Entschlüsselung einer Nachricht

Wenn Bob die verschlüsselte Nachricht entschlüsseln möchte, dann kann er folgendermaßen vorgehen:

...> gpg --armor --ootput alice_an_bob_entschluesselt.txt --decrypt alice_an_bob_verschluesselt.txt

Zusätzlich muss Bob die Passphrase eingeben. Wenn die eingegebene Passphrase stimmt, dann wird eine neue Datei alice_an_bob_entschluesselt.txt mit der entschlüsselten Nachricht erstellt. Im vorliegenden Fall erhält man:

Hallo Bob,
was hast du heute Abend vor?
Alice

Aufgabe 1

Probiere das erst einmal selbst aus.

Aufgabe 2

Es sollen verschlüsselte Nachrichten an verschiedene Kommunikationspartner verschickt werden. Zunächst muss jeder ein Schlüsselpaar erzeugen und den exportierten öffentlichen Schlüssel alle Kommunikationspartnern zugänglich machen (z.B. indem die Daeien mit den öffentlichen Schlüsseln in einem hierfür vorgesehen Ordner abgespeichert werden). Jetzt können verschlüsselten Nachrichten an die Kommunikationspartnern erstellt (und geeignet zugestellt) werden.

X

Fehler melden

X

Suche