Nächster Versuch der Verschlüsselung
Wenn man nun, nachdem der öffentliche Schlüssel des Empfängers hoffentlich im Schlüsselbund liegt, das obige PHP-Skript nochmals ausführt, wird die E-Mail versandt, und der Empfänger erhält eine E-Mail wie in Listing 5.
Listing 5
-----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.9 (Darwin) hQQOA6lMHD9rDztCEBAAhAJkCrq6w362xKSvp2lvZWJrnUGyD82oaK2pxIn6Y5Mp qfSJaytodD/8nhvZ8wA8UYLcc5P3oQ8QdXQ5+Abdio61eKtkGU0ZA8CLU18uqJWH rrKiTMC82fuzUoaPtxHHNgpNqayJnTWvU8WUR4PsyA+2Au2tS5sDR7wG5RF5cXWn yMXJctfTk+IlxBch/NHAgmcI7g2FTehj5/HgCbP7KinQ5F/PYBVwCEgFqoZsNA/V rQ8Pc9Ie1+BKeZ5h1PJYlQfRuwdcVnzjkYrMv97XdB8ujD0aXV+4YwOrNuUKaTbU FVH/+6cFNhr82QLO5ifjWmmaNwqscEmjdy43PDtK4LE1LsUBX0j2sBdSj/yobNRj vf2YB16Uvcknmiiqbqx++zrElcaKG0vLIDCmCWy9kdB08GKWcU9QX/amgViS+24k 6ykNFsDBwu1/3hct7f2tbfFAdBdysqA6aq93aBkdg6SI0l8B55qh6Qwycd0UGCPO m8Fu2hoIJqITKcGZBtwzB7IbsVJ8jVDP2eafK4WS7P1GAeYLhvK3Uc3eYcxHs/t5 hHkMBurMuxth7xknfGRxqIHETxMY561V6cF+AViD2MNSCw== =m6I+ -----END PGP MESSAGE-----
Diese kann der Empfänger nun mit PGP und seinem privaten Schlüssel entschlüsseln. Idealerweise ist im E-Mail-Programm eine entsprechende Software eingebaut die das erledigen kann. Möchte man selbst eine E-Mail, die man verschickt hat, später noch lesen können oder sie an mehrere Empfänger schicken, übergibt man dem gpg-Aufruf einfach mehrere —recipient-Parameter.
Entschlüsseln
Hat man eine Datei erhalten, die mit einem öffentlichen Schlüssel verschlüsselt wurden (zum Beispiel der oben stehende E-Mail-Inhalt), kann man sie wie folgt entschlüsseln, vorausgesetzt man besitzt den passenden privaten Schlüssel in seinem Schlüsselbund:
gpg --homedir /var/www/project/.gnupg --decrypt --output entschluesselt.txt verschluesselte_email.asc
Nach der Eingabe der Passphrase enthält die Datei entschluesselt.txt den Originaltext. Möchte man diesen Befehl aus PHP heraus auf einem Webserver ausführen, muss man die Passphrase übergeben. Das geht sowohl direkt als Parameter oder auch aus einer Datei. Ersteres sollte vermieden werden, denn dann steht die Passphrase in der Prozessliste des Betriebssystems. Zu bevorzugen ist da der Parameter –passphrase-file, dem man einen Dateipfad übergibt, der die erste Zeile der Passphrase enthält. Diese Datei gilt es natürlich vor neugierigen Augen zu schützen.
Signieren
Zu einer Datei kann eine Signatur erstellt werden, mit der nachher geprüft werden kann ob die Datei verändert wurde. Außerdem ist es möglich zu überprüfen von wem die Signatur kommt. Eine Signatur kann man entweder als einzelne Datei erstellen lassen oder direkt zusammen mit dem Original in einer Datei:
gpg --homedir /var/www/project/.gnupg --detach-sign -a entschluesselt.txt gpg --homedir /var/www/project/.gnupg --sign -a entschluesselt.txt
Der erste Befehl generiert die folgende Datei mit einer Signatur:
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Darwin) iEYEABECAAYFAk558LMACgkQMZu21oMVMYvajwCbBCiFWQ1/XTGZ1joUn7rV1puz Mw0AoIowmYFYGWDHxnpl3qD7rKmSBpNv =JD7r -----END PGP SIGNATURE-----
Dabei wird der Standardschlüssel verwendet. Hat man mehrere private Schlüssel, kann mit dem Parameter –local-user der richtige Schlüssel ausgewählt werden. Übrigens ist es auch möglich eine Datei gleichzeitig zu verschlüsseln und zu signieren.
Signatur verifizieren
Hat man eine Signatur erhalten und möchte sie verifizieren, wird der öffentliche Schlüssel des Absenders benötigt gegen den geprüft werden soll. Die Verifizierung geht dann wie folgt:
$ gpg --homedir /var/www/project/.gnupg --verify verschl.asc.asc gpg: Signature made Wed Sep 21 16:13:30 2011 CEST using DSA key ID 8315318B gpg: Good signature from "Michael Kliewe (PHPGangsta) "
Alle diese gpg-Befehle kann man natürlich auch aus PHP heraus ausführen.