Skip to content

Mailformate im Überblick: S/MIME

Im Entwickler Magazin 5.2018 habe ich die Grundlagen der E-Mail-Verschlüsselung beschrieben, und im Entwickler Magazin 6.2018 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 und PGP/MINE im zweiten geht es zum Abschluss in dieser Folge um S/MIME.

S/MIME

Wie schon erwähnt wird in RFC 1847 allgemein definiert, wie signierte und/oder verschlüsselte Daten im MIME-Format kodiert werden müssen. Dazu wurden zwei MIME-Content-Types definiert:

  • "multipart/signed" für signierte Nachrichten und
  • "multipart/encrypted" für verschlüsselte Nachrichten.

S/MIME, erstmals in RFC 2633 und aktuell in RFC 5751 spezifiziert, unterstützt "multipart/signed" für signierte Nachrichten, verwendet aber das eigene Format "application/pkcs7-mime" für die verschlüsselten Nachrichten. Dabei kann wieder frei gewählt werden, ob E-Mails nur verschlüsselt, nur signiert oder signiert und verschlüsselt werden sollen.

Signierte Mails mit S/MIME

Wie auch bei PGP/MIME enthält eine signierte Nachricht im "multipart/signed"-Format einen Block mit den Klartext-Daten, die signiert wurden, und einen zweiten mit der Signatur sowie dem Zertifikat mit dem öffentlichen Schlüssel des Absenders.

Außer der Klartext-Signatur mit dem Content-Type "multipart/signed" können auch sog. Opak-Signaturen verschickt werden. Die bestehen aus einem einzigen, Base64-kodierten (aber nicht verschlüsselten!) Datenblock, der sowohl die signierten Inhalte auch die Signatur enthält. Die Mail sieht dann vergleichbar der verschlüsselten Mail in Listing 4 aus, nur dass der "smime-type" den Wert "signed-data" hat.

Mailclients, die S/MIME nicht unterstützen, zeigen diese Mails daher als leere Mails mit einem Anhang mit dem smime.p7m an.

Verschlüsselte Mails mit S/MIME

Der Content-Type "application/pkcs7-mime" besitzt den optionalen Parameter "smime-type", der die Art der kodierten Daten festlegt. Mögliche Werte sind:

  • "enveloped-data" für verschlüsselte Daten,
  • "signed-data" für signierte Daten und
  • "certs-only" für die Übertragung von Zertifikaten.

Außerdem gibt es den optionalen, aber erwünschten Header "Content-Disposition", der ebenfalls die Art der Daten anzeigt:

  • smime.p7m sind signierte oder verschlüsselte Daten,
  • smime.p7s ist eine Signatur und
  • smime.p7c ist ein Zertifikat.

Ein Beispiel für eine verschlüsselte S/MIME-E-Mail sehen Sie in Listing 1.

Listing 1: Eine S/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: S/MIME-Testmail
To: Empfaenger <empfaenger@empfaenger-domain.example>
User-Agent: SupertollerMailClient 1.23
MIME-Version: 1.0
Content-Type: application/pkcs7-mime;
   smime-type=enveloped-data;
   name=smime.p7m
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
   filename=smime.p7m

ydC4gRGFzIG2NobMO8c3NlbHQsIG51ciBCYXNlNjlzdCBnYXIgbmljaHQgdmVycQta29kaWVQWJl
IgVGV4dCBzb3dpZXNciBkYSBkZXvIHp1c2FtbWVuZgd2lyZCBpc3QgZGFzI2VzY2huaXR0ZW4GF1
G90YWwgZWdY2ggdhbC4uLg==

Der Mail-Body ist komplett verschlüsselt (und im Format Base64 kodiert), so dass er nur von den Empfängern gelesen werden kann, für die er verschlüsselt wurde. Es gibt keine Hinweise auf enthaltene Anhänge.

Signierte und verschlüsselte Mails mit S/MIME

Wird eine E-Mail sowohl signiert als auch verschlüsselt gibt es dazu zwei Möglichkeiten: Das bevorzuge "Sign-then-Encrypt"-Format und das von S/MIME ebenfalls unterstützte "Encrypt-then-Sign". Im ersten Fall wird die Nachricht im "application/pkcs7-mime"-Format übertragen, die Signatur ist Bestandteil der verschlüsselten Nachricht. Im zweiten Fall werden in einer Nachricht im "multipart/signed"-Format im ersten Block die verschlüsselte Nachricht und im zweiten die Signatur und das Zertifikat übertragen

Soviel zum Thema "Mailformate für verschlüsselte und/oder signierte E-Mails". In der nächsten Folge geht es mit dem normalen Thema weiter:

Carsten Eilers

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

Trackbacks

Keine Trackbacks