PGP und Kryptographie


Sicherheitsaspekte

==> Problem bei vertraulichen Informationen

==> sichere Übertragung ist erforderlich um Nutzungsmöglichkeiten des Internets zu erhöhen

Sicherheitsbegriffe

C/S und Lauscher

Pakete können

werden.

Sicherheit ist

Client/Server selber müssen sicher sein


Einführung Kryptographie

Transformation von Nachrichten (messages, plain text) in verschlüsselte Nachrichten (cipher text) mit Hilfe von Algorithmen / Programmen (cipher suites) und Schlüsseln (keys).

Kryptographische Basisalgorithmen

Symmetrisch
 
  • gleicher Schlüssel für Ver- und Entschlüsselung

  • sehr schnell

  • Problem: Anzahl der Schlüssel bei n Partnern

  • Problem: sicherer Austausch der Schlüssel

  • Beispiele: DES, RC4, Triple-DES, RC2, Idea, Fortezza (PINs, TANs)

Asymmetrisch
 
  • unterschiedliche Schlüssel für Ver- und Entschlüsselung

  • öffentliche und private Schlüssel (public und private key)

  • relativ langsam

  • bei richtiger Wahl der Parameter sehr / beliebig sicher

  • Sicherheit basiert auf der Schwierigkeit der Faktorisierung grosser Zahlen,
    bzw. der Berechung des diskreten Logarithmus (in endlichen Körpern)

  • Beispiele: RSA, DSA, Diffie-Hellman

  • Diffie-Hellman (exponential key exchange): zum Aufbau von sicheren Verbindungen aus einem unsicheren Zustand (allerdings ohne Authentifizierung)

Message Digests
 
  • Prüfsummenbildung (Hash Verfahren)

  • Berechnung einer Zahl aus einer Nachricht

  • Zahl verändert sich, wenn sich die Nachricht ändert

  • die Nachricht kann nicht aus der Zahl rekonstruiert werden

  • Beispiele: MD5, SHA, SHA1

  • Message Authentication Code (MAC)

Kryptographische Basistechniken

Digitale Signatur, Digitale Unterschriften
 
  • basiert auf Digest (Hash) und asymmetrischer Verschlüsselung

  • Berechnung und Verschlüsselung der Prüfsumme

  • gewährleistet Authentizität

Certification, Zertifizierung
 
  • benötigt unabhängige Verwalter: Certification Authority (CA),
    sichert die Authentizität von Schlüsseln zu.

  • basiert auf asymmetrischer Verschlüsselung,
    die CA codiert public keys von Teilnehmern mit ihrem private key

  • Server verschickt sein Zertifikat an Client
    bzw. auch umgekehrt: Client verschickt sein Zertifikat an Server

  • Zertifikat bestätigt Echtheit des Servers (Echtheit = Zuordnung Server zu public key)

  • public key der CA muß dem Client bekannt sein

Blinde Unterschriften
 
  • löst Anonymitätsproblem bei digitalem Geld

  • Unterschrift durch Umschlag mit Kohlepapier

  • zB. Zertifizierung von eCash unter Wahrung der Anonymität


Pretty Good Privacy (PGP)

Unterstützte kryptografische Verfahren bei GnuPG:

öffentliche Schlüssel
RSA, RSA-E, RSA-S, ELG-E, DSA, ELG
Verschlüsselung
3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Prüfsummen
MD5, SHA1, RIPEMD160

Arbeitsschritte mit GnuPG

  1. Erzeugen eines eigenen Schlüsselpaars mit öffentlichem und privatem Teil

  2. Versenden des eigenen öffentlichen Schlüssels

  3. Entgegennehmen von öffentlichen Schlüsseln anderer Leute

  4. Verwalten der (öffentlichen und privaten) Schlüsseln am Schlüsselbund (key ring)

  5. Ver- und Entschlüsseln von Dokumenten

  6. Signieren und Verifizieren von Dokumenten

  7. Editieren von Schlüsseln, d.h. Ändern von Optionen, z.B. Gültigkeitsdauer verlängern

  8. Zurückrufen / Ungültigmachen von Schlüsseln

  9. Überprüfen der Schlüssel anderer Leute

  10. Verwalten der Vertrauensbeziehungen

  11. Nutzung von Schlüssel-Servern

Erzeugen eines Schlüsselpaars mit GnuPG

Schlüsselerzeugung mit gpg --gen-key

> gpg --gen-key

gpg (GnuPG) 1.2.2-rc1-SuSE; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen
gpg: /home/krabel/.gnupg: Verzeichnis erzeugt
gpg: Neue Konfigurationsdatei `/home/krabel/.gnupg/gpg.conf' erstellt
gpg: WARNUNG: Die Optionen in `/home/krabel/.gnupg/gpg.conf' sind in diesem Programml
auf noch nicht aktiv
gpg: Schlüsselbund `/home/krabel/.gnupg/secring.gpg' erstellt
gpg: Schlüsselbund `/home/krabel/.gnupg/pubring.gpg' erstellt
Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
   (1) DSA und ElGamal (voreingestellt)
   (2) DSA (nur signieren/beglaubigen)
   (5) RSA (nur signieren/beglaubigen)
Ihre Auswahl? 1
Das DSA-Schlüsselpaar wird 1024 Bit haben.
Es wird ein neues ELG-E Schlüsselpaar erzeugt.
              kleinste Schlüssellänge ist  768 Bit
              standard Schlüssellänge ist 1024 Bit
      größte sinnvolle Schlüssellänge ist 2048 Bit
Welche Schlüssellänge wünschen Sie? (1024)  
Die verlangte Schlüssellänge beträgt 1024 Bit
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
      <n>  = Schlüssel verfällt nach n Tagen
      <n>w = Schlüssel verfällt nach n Wochen
      <n>m = Schlüssel verfällt nach n Monaten
      <n>y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 10
Key verfällt am Sam 24 Mai 2004 11:15:26 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 E-Mail-Adresse in dieser Form auf:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Ihr Name ("Vorname Nachname"): Hanno Krabel
E-Mail-Adresse: krabel@uni-mannheim.de  
Kommentar: Testen von PGP                
Sie haben diese User-ID gewählt:
    "Hanno Krabel (Testen von PGP) <krabel@uni-mannheim.de>"

Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? F
Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.
eingabe des mantra
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.
.++++++++++++++++++++.+++++.+++++.+++++++++++++++.++++++++++++++++++++...++++++++++++
+++.++++++++++++++++++++..++++++++++.++++++++++...++++++++++>.+++++..................
.................+++++^^^
gpg: /home/krabel/.gnupg/trustdb.gpg: trust-db erzeugt
Öffentlichen und geheimen Schlüssel erzeugt und signiert.
Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.

pub  1024D/ABDFB5BB 2004-05-14 Hanno Krabel (Testen von PGP) <krabel@uni-mannheim.de>
 Schl.-Fingerabdruck = D611 446D 2208 E2EB CA7D  2A50 BAF0 ABDF 9016 B5BB
sub  1024g/FECD33F5 2004-05-14 [verfällt: 2004-05-24]

Erzeugung eines Wiederrufs für den Schlüssel mit gpg --gen-revoke

gpg --output revoke-krabel.asc --gen-revoke krabel
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen

sec  1024D/30066B17 2004-05-18   Hanno Krabel (Testen von GnuPG) <krabel@uni-mannheim.de>

Create a revocation certificate for this key? yes
Please select the reason for the revocation:     
  0 = Kein Grund angegeben
  1 = Hinweis: Dieser Schlüssel ist nicht mehr sicher
  2 = Schlüssel ist überholt
  3 = Schlüssel wird nicht mehr benutzt
  Q = Cancel
(Probably you want to select 1 here)
Ihre Auswahl? 1
Enter an optional description; end it with an empty line:
> fuer alle faelle
>                  
Reason for revocation: Hinweis: Dieser Schlüssel ist nicht mehr sicher
fuer alle faelle
Is this okay? yes
                 
Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.
Benutzer: "Hanno Krabel (Testen von GnuPG) <krabel@uni-mannheim.de>"
1024-Bit DSA Schlüssel, ID 30066B17, erzeugt 2004-05-18
eingabe des mantra
gpg: GPG-Agent ist in dieser Sitzung nicht vorhanden
ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

Verteilen des eigenen öffentlichen Schlüssels

Speichern des (eigenen) öffentlichen Schlüssels gpg --export

gpg --armour --export krabel
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)

mQGiBD5CCYkRBAC0yeXR92PpxwqAeu5u/4jGN+Tv+Mcrl21bJmRhc1NR1bonbWKt
...
CQANLwAACgkQuvCQFqvftbt+7gCgklW5dmBwdm3h2dSeLpo+Mhea4s4AoJ/TETgm
kY2mUPI2L6CIwU7FU/CK
=/dgh
-----END PGP PUBLIC KEY BLOCK-----

Importieren von öffentlichen Schlüsseln

Einfügen eines öffentlichen Schlüssels gpg --import

gpg --import krabel.pub                
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen
gpg: Schlüssel D9689977: "Hanno Krabel (Testen von GnuPG) <krabel@uni-mannheim.de>" Nicht geändert
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg:                             unverändert: 1

Ver- und Entschlüsseln

Verschlüsseln gpg --encrypt

gpg --armour --output maildoc.sec --encrypt --recipient krabel maildoc.txt
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen
Datei 'maildoc.sec' existiert bereits. Überschreiben (j/N)? j

Verschlüsselte Datei:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)

hQEOA5gA7p1IVxqJEAQA3fPS7jWYAWqF4o5fItzqDldXw/+v1WNC/ulZj414CpKP
...
4viqnRXziOhoP6eSCOgZX+AOCW02qMqOQ9efZep7xU+0EnG3q57OUFD+oiFZvGsG
gJPkk6wC
=vNiC
-----END PGP MESSAGE-----

Entschlüsseln mit gpg --decrypt

gpg --output maildoc.decrypt --decrypt maildoc.sec
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen

Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.
Benutzer: "Hanno Krabel (Testen von GnuPG) <krabel@uni-mannheim.de>"
1024-Bit ELG-E Schlüssel, ID B2B73599, erzeugt 2004-05-18 (Hauptschlüssel-ID 30021B17)
eingabe des mantra
gpg: GPG-Agent ist in dieser Sitzung nicht vorhanden
gpg: verschlüsselt mit 1024-Bit ELG-E Schlüssel, ID B2B73599, erzeugt 2004-05-18
      "Hanno Krabel (Testen von GnuPG) <krabel@uni-mannheim.de>"

Signieren von Dateien und Verifizieren

Signieren mit gpg --sign oder gpg --clearsign oder gpg --detach-sign

gpg --armour --output maildoc.sign --sign maildoc.txt
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen

Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.
Benutzer: "Helmut Knebel (Testen von GnuPG) <knebel@.uni-mannheim.de>"
1024-Bit DSA Schlüssel, ID 30366B17, erzeugt 2004-05-18

gpg: GPG-Agent ist in dieser Sitzung nicht vorhanden

Inhalt der Datei mit Signatur:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)

owGbwMvMwCS4yEfxvAFbtjjjmvlJ3LmJmTkp+cl6JRUldifdPrpm5ikEJ5ZUKVSV
...
zOFl/Hd+er34byHl4Jd8mpyzyp5/f8MwP1hF8WDu86Uimvwn+8Mi10/rWXM4EAA=
=9+OW
-----END PGP MESSAGE-----

Verifizieren erfolgt mit gpg --verify

gpg --verify maildoc.sign
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/de/faq.html für weitere Informationen
gpg: Unterschrift vom Mon 19 Mai 2004 23:04:49 CEST, DSA Schlüssel ID 30366B17
gpg: Korrekte Unterschrift von "Helmut Knebel (Testen von GnuPG) <knebel@rz.uni-mannheim.de>"

Anzeigen und Pflegen der Schlüssel

Anzeigen erfolgt mit gpg --list-keys oder gpg --list-public-keys oder gpg --list-secret-keys

gpg --list-keys                            
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/faq.html für weitere Informationen
/home/heinz/.gnupg/pubring.gpg
------------------------------
pub  1024D/578126CA 2004-06-14 Karl Dall (Komiker) <dall@karl.de>
sub  1024g/8FBEEFC6 2004-06-14 [verfällt: 2004-07-14]
gpg --fingerprint     
gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/faq.html für weitere Informationen
/home/heinz/.gnupg/pubring.gpg
------------------------------
pub  1024D/578126CA 2004-06-14 Karl Dall (Komiker) <dall@karl.de>
  Schl.-Fingerabdruck = 549C F204 1680 E453 2081  8823 4024 42B1 5781 26CA
sub  1024g/8FBEEFC6 2004-06-14 [verfällt: 2004-07-14]

Die Pflege der Schlüssel erfolgt (auch interaktiv) mit gpg --edit-key

gpg --edit-key 578126CA
gpg (GnuPG) 1.2.2; Copyright (C) 2003 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
gpg: siehe http://www.gnupg.org/faq.html für weitere Informationen
Geheimer Schlüssel ist vorhanden.

pub  1024D/578126CA  erstellt: 2004-06-14 verfällt: 2004-07-14 Vertrauen: u/u
sub  1024g/8FBEEFC6  erstellt: 2004-06-14 verfällt: 2004-07-14
(1). Karl Dall (Komiker) <dall@karl.de>

Befehl> help
quit       Menü verlassen
save       speichern und Menü verlassen

fpr        "Fingerabdruck" anzeigen
list       Schlüssel und User-IDs auflisten
check      Liste der Signaturen
sign       Den Schlüssel signieren
delsig     Signatur entfernen
expire     Ändern des Verfallsdatums
toggle     Umschalten zwischen Anzeige geheimer und öffentlicher Schlüssel
passwd     Die Passphrase ändern
trust      Den "Owner trust" ändern
revsig     Signaturen widerrufen
disable    Schlüssel abschalten

Verwalten der Vertrauensbeziehungen

Die gesammelten öffentlichen Schlüssel können nach Vertrauensleveln klassifiziert werden:

unbekannt
es gibt keine überprüften Informationen über den Schlüssel
keine
es ist bekannt, das der Eigentümer nicht vertrauenswürdig ist
marginal
dem Eigentümer des Schlüssels wird im Wesentlichen vertraut
voll
dem Eigentümer des Schlüssels wird voll vertraut

Über diese Klassifizierung können dann auch Schlüssel für gültig eingestuft werden, die man nicht selbst überprüft hat.

Danach ist ein Schlüssel gültig, wenn folgende Bedingungen erfüllt sind:

  1. der Schlüssel ist von genügend gültigen Schlüsseln signiert, d.h.

    1. von mir persönlich, oder

    2. durch einen, dem ich voll vertraue, oder

    3. die mindestens drei, denen ich marginal vertraue

  2. die Anzahl der Signierschritte zwischen dem Schlüssel und dem eigenen Schlüssel beträgt weniger als fünf


Teil 1 erstellt unter Verwendung eines Seminarvortrags von Robert Schulz.

© Universität Mannheim, Rechenzentrum, 1998-2005.

Heinz Kredel

Last modified: Sat Apr 9 11:54:46 CEST 2005