Feedback as submited by Alexey

master
Bernie Hoeneisen 3 years ago
parent 37b03756ec
commit 6dcff55888

File diff suppressed because it is too large Load Diff

@ -1,479 +0,0 @@
### This file is only of temporary nature.
### It will be enhanced and renamed later
### to comply with markdown / XML2RFC format
#############################################
# Definitions / Glossary
{::include ../shared/text-blocks/key-words-rfc2119.mkd}
{::include ../shared/text-blocks/terms-intro.mkd}
<!-- {::include ../shared/text-blocks/handshake.mkd} -->
<!-- {::include ../shared/text-blocks/trustwords.mkd} -->
<!-- {::include ../shared/text-blocks/tofu.mkd} -->
{::include ../shared/text-blocks/mitm.mkd}
* S/MIME: Secure/Multipurpose Internet Mail Extensions (cf. {{RFC8551}})
* PGP/MIME: MIME Security with OpenPGP (cf. {{RFC3156}})
* Message: An Email Message that consists of header fields
(collectively called "the Header Section of the message") followed,
optionally, by a Body; cf. {{RFC5322}}.
* Transport: The entity taking care of the transport of a Message
towards the receiver or from the sender. The Transport is
typically implemented in MTA (Mail Transfer Agent).
* Header Field (HF): cf. {{RFC5322}} Header Fields are lines beginning
with a field name, followed by a colon (":"), followed by a field
body (value), and terminated by CRLF; cf. {{RFC5322}}.
Note: To avoid ambiguity, this document does not use the terms
"Header" or "Headers" in isolation, but instead always uses "Header
Field" to refer to the individual field and "Header Section" to
refer to the entire collection; cf. {{RFC5322}}.
* Header Section (HS): The Header Section is a sequence of lines of
characters with special syntax as defined in {{RFC5322}}. It is the
(top) section of a message containing the Header Fields.
* Body: The Body is simply a sequence of characters that follows the
Header Section and is separated from the Header Section by an empty
line (i.e., a line with nothing preceding the CRLF); cf {{RFC5322}}.
It is the (bottom) section of Message containing the payload of a
Message. Typically, the Body consists of a (multipart) MIME
{{RFC2045}} construct.
* MIME Header Section (part): The collection of MIME Header Fields
describing the following MIME structure as defined in {{RFC2045}}.
* Header Protection (HP): cryptographic protection of email Header
Sections (or parts of it) for signatures and/or encryption
* Protection Levels (PL): One of 'signature and encryption',
'signature only' or 'encryption only' (see also below)
* Signature and encryption (protection level): If cryptographic
signing and encryption are applied to a message.
* Signature only (protection level): If cryptographic signing, but no
encryption, is applied to a message.
* Encryption only (protection level): If encryption (but no
cryptographic signing) is applied to a message.
* Original Message: The message to be protected before any protection
related processing has been applied on the sender side.
* Inner Message: The message to be protected, shortly before
protection measures are applied to on the sender side or the message
shortly after unwrapping on the receiver side. Typically the Inner
Message is in clear text and often the Inner Message is the same or
similar as the Original Message. The Inner Message MUST be the same
on the sender and the receiver side.
* Outer Message: The Message as handed over to the Transport or
received from the Transport respectively. The Outer Message
typically differs on the sender and the receiver side.
* User Facing Message: The message used for rendering after the Outer
Message Header Section has been merged with the Inner Message Header
Section.
* Essential Header Fields: The Header Fields an Outer Message Header
Section SHOULD contain at least; cf. {{HF-include-outer}}.
* Protected: Protected refers to the parts of a message where
protection measures of any Protection Levels have been applied to.
* Protected Message: A message that protection measures of any
Protection Levels have been applied to.
* Unprotected: Unprotected refers to the parts of a message where
no protection measures of any Protection Levels have been applied to.
* Unprotected Message: A message that no protection measures of any
Protection Levels have been applied to.
* Data Minimization: Data spareness and hiding all technically
concealable information whenever possible.
# Specification
This section contains the specification for Header Protection in
S/MIME to update and clarify Section 3.1 of {{RFC8551}} (S/MIME
4.0). This specification is likely to be integrated into S/MIME at
some later stage.
Furthermore, it is likely that PGP/MIME {{RFC3156}} will also take
over this specification or parts of it.
The following covers the Interaction if all parties (sending and
receiving side) implement this specification. For backward
compatibility cf. {{backward-compatibility}}.
This specification applies to the protection levels "signature &
encryption" and "signature only". It generally NOT RECOMMENDED to send
message with protection level "encryption only". On the other hand,
messages with protection level "encryption only" may arrive at the
receiving side. While not targeted to protection level "encryption
only", this specification is assumed to also function for "encryption
only".
Note: It is for further study whether or not more guidance for
handling messages with protection level "encryption only" at the
receiving side is needed.
## MIME Format
As per S/MIME version 3.1 and later (cf. {{RFC8551}}), the sending
client wraps a full MIME message in a message/rfc822 wrapper in order
to apply S/MIME security services to these header fields.
To help the receiving side to distinguish between forwarded and
wrapped message, a "forwarded" Content-Type header field parameter is
added as defined in {{I-D.melnikov-iana-reg-forwarded}}.
In the simplest case, a message looks as follows:
~~~
<Outer Message Header Section (unprotected)>
<Outer Message Body (protected)>
<MIME Header Section>
<Inner Message Header Section>
<Inner Message Body>
~~~
The following example demonstrates how header section and payload of a
protect body part might look like. For example, this will be the
first body part of a multipart/signed message or the signed and/or
encrypted payload of the application/pkcs7-mime body part. Lines
prepended by "O: " are the Outer Message Header Section. Lines
prepended by "I: " are the Inner Message Header Section. Lines
prepended by "W: " are the wrapper (MIME Header Section):
~~~
O: Date: Mon, 25 Sep 2017 17:31:42 +0100 (GMT Daylight Time)
O: Message-ID: <e4a483cb-1dfb-481d-903b-298c92c21f5e@matt.example.net>
O: Subject: Meeting at my place
O: From: "Alexey Melnikov" <alexey.melnikov@example.net>
O: To: somebody@example.net
O: MIME-Version: 1.0
O: Content-Type: multipart/signed; charset=us-ascii; micalg=sha1;
O: protocol="application/pkcs7-signature";
O: boundary=.cbe16d2a-e1a3-4220-b821-38348fc97237
This is a multipart message in MIME format.
--.cbe16d2a-e1a3-4220-b821-38348fc97237
W: Content-Type: message/rfc822; forwarded=no
W:
I: Date: Mon, 25 Sep 2017 17:31:42 +0100 (GMT Daylight Time)
I: From: "Alexey Melnikov" <alexey.melnikov@example.net>
I: Message-ID: <e4a483cb-1dfb-481d-903b-298c92c21f5e@matt.example.net>
I: MIME-Version: 1.0
I: MMHS-Primary-Precedence: 3
I: Subject: Meeting at my place
I: To: somebody@example.net
I: X-Mailer: Isode Harrier Web Server
I: Content-Type: text/plain; charset=us-ascii
This is an important message that I don't want to be modified.
--.cbe16d2a-e1a3-4220-b821-38348fc97237
Content-Transfer-Encoding: base64
Content-Type: application/pkcs7-signature
[[base-64 encoded signature]]
--.cbe16d2a-e1a3-4220-b821-38348fc97237--
~~~
The Outer Message Header Section is unprotected, while the remainder
(Outer Message Body) is protected. The Inner Message Body consists of
the MIME header Section and the Inner Message (Header Section and
Body). The Inner Message Header Section is the same as (or a subset
of) the Original Message Header Section
(cf. {{HF-include-inner}}). The Inner Message Body is the same as the
Original Message Body (before header protection has been applied).
The original message itself may contain any defined MIME structure.
There may also be an additional MIME layer with Media-Type
"multipart/mixed" in the Outer Message Body to contain the Inner
Message (as "message/rfc822") along with other MIME part(s).
### Alternative Option Autocrypt "Protected Headers" (Ex-"Memory Hole")
An alternative Option (based on the former autocrypt "Memory Hole" approach)
to be considered, is described in
{{I-D.autocrypt-lamps-protected-headers}}.
That option emphasizes backward compatibility challenges to existing Mail
User Agents (MUAs) that do encryption, but are unaware of Header
Protection (see also {{backward-compatibility}}).
That option suggests to use the Media-Type "text/plain" to contain the
Inner Message (as opposed to "message/rfc822",
cf. {{mime-Format}}). That approach may become problematic once the
Content of "text/plain" needs to be parsed.
Regarding MIME type "message/rfc822" {{rfc2046}} specifies:
> Plain text does not provide for or allow formatting commands, font
> attribute specifications, processing instructions, interpretation
> directives, or content markup. Plain text is seen simply as a
> linear sequence of characters, possibly interrupted by line breaks
> or page breaks"
Existing MIME parsers and libraries implemented according to
{{rfc2046}} are likely to be changed to implement the option described
in {{I-D.autocrypt-lamps-protected-headers}}, as that option differs
from the current MIME Standard (cf. {{rfc2046}}).
The impact of using "text/plain", while containing in fact a
"message/rfc822", to the MIME standards and real world deployments is
for further study.
For further information, the reader is encouraged to consult
{{I-D.autocrypt-lamps-protected-headers}}.
## Header Fields to Include to the Inner Message Header Section {#HF-include-inner}
It is RECOMMEND that the Inner Messages contains all the original
Header Fields with the exception of those specified in
{{HF-exclude-inner}}.
## Header Fields to Exclude from the Inner Message Header Section {#HF-exclude-inner}
The following Header Fields MUST NOT be included to the Inner Message
nor to any other protected part of the message:
* Bcc
## Header Fields to Include to the Outer Message Header Section {#HF-include-outer}
The Outer Message Header Section is a subset of the Inner Message
Header Section plus the Header Fields specified in
{{HF-exclude-inner}} plus the MIME Header Section part to describe the
encryption or signature.
To maximize Privacy, it is strongly RECOMMENDED to follow the
principle of Data Minimization, which includes data spareness and
hiding all technically concealable information whenever possible.
However, the Outer Message Header Section SHOULD contain at least the
Essential Header Fields and MUST also contain the Header Fields of the
MIME Header Section part.
The Essential Header Fields are defined as the following Header
Fields:
* From
* To
* Date
* Message-ID
* Subject
Not including those may trigger Spam Detection to flag the message as
Spam and/or lead to User Experience (UX) issues.
For further Data Minimization the values of these Header Fields MAY be
obfuscated, which is discussed further in {{obfuscation-outer-HF}}.
The MIME Header Section part is the collection of MIME Header Fields
describing the following MIME structure as defined in {{RFC2045}}.
A MIME Header Section part typically includes the following Header
Fields:
* MIME-Version
* Content-Type
* Content-Transfer-Encoding
* Content-Disposition
The following example shows the MIME header of an S/MIME signed
message (using application/pkcs7-mime with SignedData):
~~~
MIME-Version: 1.0
Content-Type: application/pkcs7-mime; smime-type=signed-data;
name=smime.p7m
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7m
~~~
Depending on the scenario, further Header Fields MAY be exposed in the
Outer Message Header Section, however - as stated above - this is NOT
RECOMMENDED unless justified. Such Header Fields may include
* Cc
* Bcc
* References
* Reply-To
* In-Reply-To
\[\[ Open Issue: Should Cc HF be included anyways, if present and if To HF
is not obfuscated? \]\]
### Obfuscation of Outer Message Header Fields {#obfuscation-outer-HF}
If certain values of the following Outer Message Header Fields are
obfuscated, those SHOULD assume the following values:
~~~
* From: "Obfuscated" anonymous@anonymous.invalid
* To: "Obfuscated" anonymous@anonymous.invalid
* Date: Thu, 01 Jan 1970 00:00:00 +0000 (UTC)
* Subject: ...
* Message-ID: <randomly generated ID>
~~~
Note: Alternative for Date: set to Monday 9am of the same week
In any case, it MUST be ensured that the Transport has access to the
envelope information containing the source and destination(s) of a
message.
\[\[ TODO: Do we need this explanation about the envelope? \]\]
Note: It is for further study to what extent Header Field obfuscation
(adversely) impacts Spam Filtering.
## Header Fields to Exclude from the Outer Message Header Section {#HF-exclude-outer}
The Outer Message Header Section SHOULD NOT contain any non-essential
Header Fields. The essential Header Fields are defined in
{#HF-include-outer}.
## Message Processing
### Sending Side
For a protected message the following steps are applied before a
message can be handed over to the Transport:
#### Step 1: Decide on Protection Level and Information Disclosure {#sender-side-step-1}
The entity applying protection to a message must decide:
* Which protection level (signature and/or encryption) is applied to
the message? This depends on user request and/or local policy as
well as availability of cryptographic keys.
* Which Header Fields shall be part of the Outer Message Header
Section? This typically depends on local policy. By Default the
Header Fields listed in {{HF-include-outer}} are part of the Outer
Message Header Section.
* Which of these Header Fields are to be obfuscated? This depends on
local policy and/or specific Privacy requirements of the user. By
Default no Header Field is obfuscated. (cf. {{obfuscation-outer-HF}})
#### Step 2: Compose the Outer Message Header Section {#sender-side-step-2}
Depending on the decision in {{sender-side-step-1}}, compose the Outer
Message Header Section. Note, that this also includes the necessary
MIME Header Section part for the following protection layer. Outer
Header Fields that are not obfuscated SHOULD contain the same values
as in the Original Message (except for MIME Header Section part, which
depends on the protection level selected in {{sender-side-step-1}}).
#### Step 3: Apply Protection to the Original Message {#sender-side-step-3}
Depending on the protection level in selected in
{{sender-side-step-1}} apply signature and/or encryption to the
original message (as per {{RFC8551}}) and include the result to the
message as Outer Message Body.
The resulting (Outer) Message is then typically handed over to the
Transport.
\[\[ TODO: Example \]\]
### Receiving Side
When a protected message is received the following steps are applied:
#### Step 1: Decrypt message and/or check signature {#received-side-step-1}
Depending on the protection level the received message is decrypted
and/or its signature is checked as per {{RFC8551}}.
#### Step 2: Construct the Receiving User Facing Message {#received-side-step-2}
The receiving User Facing Message is constructed as follows:
* The Header Section of the User Facing Message MUST consist of the
Outer Message Header Fields that are not contained in the Inner
Message Header Section, and the Inner Message Header Fields
(i.e. the Inner Message Header Field MUST always take precedence).
* The Body of the User Facing Message Body MUST be the same as the
Inner Message Body.
The resulting message is handed over for further processing, which
typically involves rendering it to the user.
Note: It is for further study whether and, if yes, how the Outer
Message Header Section (as received from the Transport) is
preserved for the user.
## Backward Compatibility
{{I-D.autocrypt-lamps-protected-headers}} describes a possibility to
achieve backward compatibility with existing S/MIME (and PGP/MIME)
implementations unaware of this specification (Legacy Display). It
mainly focuses on email clients that do not render emails using header
protection (nicely) and may confuse the user. While this has been
observed occasionally in PGP/MIME (cf. {{RFC3156}}), the extent of
this problem with S/MIME implementations is still unclear. (Note: At
this time, none of the samples in
{{I-D.autocrypt-lamps-protected-headers}} applies header protection as
specified in Section 3.1 of {{RFC8551}}, which is wrapping as Media
Type "message/rfc822".)
Should serious Backward Compatibly issues with rendering at the
receiver show up, {{I-D.autocrypt-lamps-protected-headers}} may serve
as a basis to mitigate those.
Another variant of backward compatibility has been implemented by pEp
{{I-D.pep-email}}, i.e. pEp Message Format 1.0. At this time pEp
has only been implementing PGP/MIME, but not yet S/MIME.
## Further Considerations
\[\[ TODO \]\]
Loading…
Cancel
Save