Skip to content

Mailformate im Überblick: PGP/MIME

Im Entwickler Magazin 5.2018 habe ich die Grundlagen der E-Mail-Verschlüsselung beschrieben, und im Entwickler Magazin 6.2016 folgt eine Beschreibung der EFAIL-Schwachstellen. Um die besser verstehen zu können ist etwas Hintergrundwissen über die E-Mail-Formate hilfreich. Und da dafür im Magazin kein Platz war, stelle ich sie hier bereit. Nach der Vorstellung von PGP/INLINE und dem kurzen Überblick über MIME im ersten Teil geht es in dieser Folge um PGP/MIME.

PGP/MIME

PGP/MIME wird wie PGP/INLINE von PGP/GnuPG verwendet und basiert auf den Standards RFC 4880 ("OpenPGP Message Format") und RFC 3156 ("MIME Security with OpenPGP").

Der RFC 4880 definiert die Methoden und den Aufbau von mit OpenPGP verschlüsselten bzw. signierten Daten. Und RFC 3156 definiert, wie die in RFC 1847 ("Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted") allgemein beschriebenen MIME-Inhaltstypen in OpenPGP spezifische Inhaltstypen zur Verschlüsselung und Signierung übertragen werden müssen. Dazu werden drei Content-Types definiert:

  • "application/pgp-encrypted" zur Übertragung von verschlüsselten Nachrichten,
  • "application/pgp-signature" für signierte Nachrichten und
  • "application/pgp-keys" für die Übertragung von öffentlichen Schlüsseln (was hier nicht interessiert, da es von der Schwachstelle nicht betroffen ist).

Verschlüsselte PGP/MIME-E-Mail

Der Vorteil von PGP/MIME ist, dass Nachricht und Anhänge zusammen verschlüsselt und signiert werden. Ein Beispiel für eine PGP/MIME-kodierte verschlüsselte E-Mail sehen Sie in Listing 1.

Listing 1: Eine PGP/MIME-kodierte verschlüsselte E-Mail

Return-Path: <absender@absender-domain.example>
Delivered-To: empfaenger@empfaenger-domain.example
Received: from mail.absender-domain.example (mail.absender-domain.example [1.2.3.4])
    by mail.empfaenger-domain.example (Postfix) with ESMTPS id 9C3271AC8D10
    for <empfaenger@empfaenger-domain.example.com>; Wed, 20 Jun 2018 14:03:13 +0200 (CEST)
Message-ID: <602F47E5-81C0-4981-9729-354A32783CC7@absender-domain.example>
Date: Wed, 20 Jun 2018 14:03:12 +0200
From: Absender <absender@absender-domain.example>
Subject: PGP/MIME-Testmail
To: Empfaenger <empfaenger@empfaenger-domain.example>
User-Agent: SupertollerMailClient 1.23
MIME-Version: 1.0
Content-Type: multipart/encrypted;
   protocol="application/pgp-encrypted";
   boundary="--------------MIME-BOUNDARY------------"
 
This is an OpenPGP/MIME encrypted message (RFC 2440 and 3156)
--------------MIME-BOUNDARY------------
Content-Type: application/pgp-encrypted
Content-Description: PGP/MIME version identification

Version: 1

--------------MIME-BOUNDARY------------
Content-Type: application/octet-stream; name="encrypted.asc"
Content-Description: OpenPGP encrypted message
Content-Disposition: inline; filename="encrypted.asc"

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.5.0 (GNU/Hurd)

TvSuoPOH5FGLfdWw/e4SlCIp2HISzs8EurdY/rVfJ/kOs6fZap4zdzKqZG7AGWnI
Ifvb11Rq0Npz0f55lRaGKAORbVMIBA2W+ddV/p17QsSJpOwO4QcnJGLS/aXr1paD
[...]
1ylhz8EmyL/Id+j96/hOBCGSNml5GvhrstxHqRftr6S7DwZ/YM44J51kMX1ybYyf
5sKEqWX2Cr9Y1IiZGWiiA+jNL1+Mdx6l4+KxBbQ/TRiHPik=
=K731
-----END PGP MESSAGE-----

--------------MIME-BOUNDARY------------

Der verschlüsselte Text befindet sich in einer Datei im Anhang mit dem Namen "encrypted.asc". Das hat zwei Vorteile: Zum einen sieht ein Angreifer nur diese eine Datei und weiß im Gegensatz zu einer Mail im PGP/INLINE-Formate nicht, ob und wenn ja was für Anhänge enthalten sind. Zum anderen können Benutzer eines Mail-Clients, der PGP/MIME nicht unterstützt, diesen Anhang einfach als Datei sichern und die dann mit GnuPG manuell entschlüsseln.

Ein Mail-Client, der PGP/MIME unterstützt, erhält nach der Entschlüsselung eine normale MIME-kodierte Nachricht samt Anhängen, die er dann ganz normal anzeigen kann.

Signierte PGP/MIME-E-Mail

Ein Beispiel für eine PGP/MIME-kodierte signierte E-Mail sehen Sie in Listing 2.

Listing 2: Eine PGP/MIME-kodierte signierte E-Mail

Return-Path: <absender@absender-domain.example>
Delivered-To: empfaenger@empfaenger-domain.example
Received: from mail.absender-domain.example (mail.absender-domain.example [1.2.3.4])
    by mail.empfaenger-domain.example (Postfix) with ESMTPS id 9C3271AC8D10
    for <empfaenger@empfaenger-domain.example.com>; Wed, 20 Jun 2018 14:03:13 +0200 (CEST)
Message-ID: <602F47E5-81C0-4981-9729-354A32783CC7@absender-domain.example>
Date: Wed, 20 Jun 2018 14:03:12 +0200
From: Absender <absender@absender-domain.example>
Subject: PGP/MIME-Testmail
To: Empfaenger <empfaenger@empfaenger-domain.example>
User-Agent: SupertollerMailClient 1.23
MIME-Version: 1.0
Content-Type: multipart/signed; 
   micalg="pgp-sha256"; 
   protocol="application/pgp-signature";
   boundary="--------------MIME-BOUNDARY------------"

This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------MIME-BOUNDARY------------
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
 
Dieser Text wurde mit PGP signiert!
 
--------------MIME-BOUNDARY------------
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"
 
-----BEGIN PGP SIGNATURE-----
 
iIAEAREIACgFAk9iABQhGGhrcDovL2V1LnBvb2wuc2tzLWtleXNlcnZlcnMubmV0
AAoJEGLYuQlqnqZhkD0A/i4qij4MR/yJXtrbh8C2CeVkw9QQgdjT6FqEULgBScxY
AQCkAAPmGrob5nSmH0iVn2NLxRmXU3ASrWpqrKE1GwgDOA==
=MK+T
-----END PGP SIGNATURE-----
 
--------------MIME-BOUNDARY------------

Der Parameter micalg (Message Integrity Check Algorithm) gibt den verwendeten Hashalgorithmus an. Der erste Teil der E-Mail besteht aus der Nachricht selbst, also dem Klartext, der signiert wurde. In diesem Fall also "Dieser Text wurde mit PGP signiert!". Der zweite Teil der E-Mail mit dem Content-Type application/pgp-signature enthält die eigentliche Signatur, die wieder als Datei dargestellt und bei Bedarf als solche gespeichert werden kann.

Verschlüsselte und signierte PGP/MIME-E-Mail

Die obigen Verfahren werden kombiniert: Die Nachricht wird (ggf. samt ihrer Anhänge) zuerst signiert und danach zusammen mit der Signatur als verschlüsselte E-Mail übertragen.

In der nächsten Folge wird das dritte für verschlüsselte E-Mails verwendete Format vorgestellt: S/MIME.

Carsten Eilers

>
        </div>
                
        <footer class= Kategorien: Grundlagen

Trackbacks

Keine Trackbacks