lamps WG Draft with Alexey and DKG (Note: this needs to go to some external writable place)

master
Bernie Hoeneisen 4 years ago
parent d059dfd675
commit ed5bef5050

@ -0,0 +1,42 @@
#!/usr/bin/make -f
NAME := draft-ietf-lamps-header-protection-req
REV := 00-pre20190623
DRAFT := $(NAME)-$(REV)
OUTPUTS = $(DRAFT).xml $(DRAFT).txt $(DRAFT).html
all: $(OUTPUTS)
$(DRAFT).xml: $(NAME).mkd \
../shared/author_tags/bernie_hoeneisen.mkd \
../shared/author_tags/alexey_melnikov.mkd \
../shared/author_tags/daniel_kahn_gillmor.mkd \
../shared/text-blocks/key-words-rfc2119.mkd \
../shared/text-blocks/mitm.mkd \
#../shared/text-blocks/implementation-status.mkd \
#../shared/author_tags/claudio_luck.mkd \
#../shared/references/implementation-status.mkd \
# ../shared/references/ed-keysync.mkd \
# ../shared/references/isoc-btn.mkd \
#../shared/text-blocks/handshake.mkd \
# ../shared/text-blocks/trustwords.mkd \
# ../shared/text-blocks/tofu.mkd \
# ../shared/ascii-arts/basic-msg-flow.mkd \
# ../shared/ascii-arts/pep_id_system.mkd \
# to match backslash at the end of the previous line
kramdown-rfc2629 $(NAME).mkd > $(DRAFT).xml
$(DRAFT).txt: $(DRAFT).xml
xml2rfc $(DRAFT).xml
$(DRAFT).html: $(DRAFT).xml
xml2rfc --html $(DRAFT).xml
clean:
rm -f $(OUTPUTS)
distclean:
rm -f -r $(NAME)-* .refcache
.PHONY: clean all

@ -0,0 +1,900 @@
---
coding: utf-8
title: "Problem Statement and Requirements for Header Protection"
abbrev: Header Protection requirements
docname: draft-ietf-lamps-header-protection-req-00
category: info
stand_alone: yes
pi: [toc, sortrefs, symrefs, comments]
author:
{::include ../shared/author_tags/alexey_melnikov.mkd}
{::include ../shared/author_tags/bernie_hoeneisen.mkd}
{::include ../shared/author_tags/daniel_kahn_gillmor.mkd}
#{::include ../shared/author_tags/claudio_luck.mkd}
normative:
# RFC822:
# RFC1847:
# RFC1341:
RFC2045: # MIME part 1 #
RFC2119:
RFC5322: # SMTP #
RFC8551: # S/MIME #
informative:
# RFC8301:
# RFC8463:
# RFC2046:
# RFC3156:
RFC3501: # IMAP #
RFC4949: # Internet Security Glossary #
# RFC4880:
# RFC5321:
# RFC5490:
RFC6376: # DKIM #
RFC6532: # internationalized email headers #
RFC7208: # SPF #
# RFC7258:
# RFC7435:
RFC7489: # DMARC #
# RFC7942:
I-D.melnikov-lamps-header-protection:
I-D.birk-pep:
I-D.marques-pep-email:
I-D.luck-lamps-pep-header-protection:
# I-D.marques-pep-handshake:
# I-D.birk-pep-trustwords:
# I-D.marques-pep-rating:
--- abstract
Issues with email header protection in S/MIME have been recently
raised in the IETF LAMPS Working Group. The need for amendments to the
existing specification regarding header protection was expressed.
In LAMPS voices have also been expressed, that whatever mechanism will
be chosen, it should not be limited to S/MIME, but also applicable to
PGP/MIME.
This document describes the problem statement, generic use cases, and
requirments. Additionally it drafts possible solutions to address the
challenge. Finally some best practices are collected.
--- middle
# Introduction
A range of protocols for the protection of electronic mail (email)
exist, which allow to assess the authenticity and integrity of the
email headers section or selected header fields from the domain-level
perspective, specifically DomainKeys Identified Mail (DKIM)
{{RFC6376}} and Sender Policy Framework (SPF) {{RFC7208}} and
Domain-based Message Authentication, Reporting, and Conformance
(DMARC) {{RFC7489}}. These protocols, while essential to responding to
a range of attacks on email, do not offer full end-to-end protection
to the headers section and are not capable of providing privacy for
the information contained therein.
The need for means of Data Minimization, which includes data
spareness and hiding of all information, which technically can be
hidden, has grown in importance over the past years.
A standard for end-to-end protection of the email headers section
exists for S/MIME since version 3.1. (cf. {{RFC8551}}):
> In order to protect outer, non-content-related message header fields
> (for instance, the "Subject", "To", "From", and "Cc" fields), the
> sending client MAY wrap a full MIME message in a message/rfc822
> wrapper in order to apply S/MIME security services to these header
> fields.
No mechanism for header protection has been standardized for PGP
(Pretty Good Privacy) yet.
End-to-end protection for the email headers section is currently not
widely implemented -- neither for messages protected by means of
S/MIME nor PGP. At least two variants of header protection are known
to be implemented.
<!-- HB: preserved as ommented out for the moment, as we may re-use part of this
A recently submitted Internet-Draft
{{I-D.melnikov-lamps-header-protection}} discusses the two variants
and the challenges with header protection for S/MIME. The two variants
are referred to as:
* Option 1: Memory Hole
* Option 2: Wrapping with message/rfc822 or message/global
pEp (pretty Easy privacy) {{I-D.birk-pep}} for email
{{I-D.marques-pep-email}} already implements an option quite similar
to Option 2, adapting the S/MIME standards to PGP/MIME (cf.
{{progressive-header-disclosure}}, ff.). Existing
implementations of pEp have also added inbound support for "Memory
Hole" referred to above as Option 1, thus being able to study the
differences and the implementator's challenges.
Interoperability and implementation symmetry between PGP/MIME and S/MIME is
planned by pEp, but still in an early stage of development.
-->
This document describes the problem statement, generic use cases
({{use-cases}}) and requirements for header protection
({{requirements}}) Additionally it drafts possible solutions to
address the challenge. However, the final solution will be determined
by the IETF LAMPS WG. Finally, some best practices are collected.
<!-- HB: preserved as ommented out for the moment, as we may re-use part of this
and describes progressive header disclosure as
implemented in the "pEp message format version 2". This format
inherently offers header protection, and may be implemented
independently by mail user agents otherwise not conforming to pEp
standards ({{progressive-header-disclosure}}, ff.).
-->
\[...\]
# Conventions Used in This Document
{::include ../shared/text-blocks/key-words-rfc2119.mkd}
## Terminology
The following terms are defined in this document:
* Header Field:: cf. {{RFC5322}}
* Header Section: cf. {{RFC5322}}
* Signed-only message: a multipart/signed or application/pkcs7-mime
containing SignedData message which doesn't contain any encrypted
layer. I.e. this is a message which is not encrypted and not
encrypted + signed.
<!-- {::include ../shared/text-blocks/handshake.mkd} -->
<!-- {::include ../shared/text-blocks/trustwords.mkd} -->
<!-- {::include ../shared/text-blocks/tofu.mkd} -->
{::include ../shared/text-blocks/mitm.mkd}
# Problem Statement
The LAMPS charter contains the folllowing Work Item:
> Update the specification for the cryptographic protection of email
> headers -- both for signatures and encryption -- to improve the
> implementation situation with respect to privacy, security, usability
> and interoperability in cryptographically-protected electronic mail.
> Most current implementations of cryptographically-protected electronic
> mail protect only the body of the message, which leaves significant
> room for attacks against otherwise-protected messages.
\[...\]
# Use Cases
In the following, we show the generic use cases that need to be addressed
independently of whether S/MIME, PGP/MIME or any other technology is
used for which Header Protection (HP) is to be applied to.
## Interactions
The main interaction case for Header Protection (HP) is:
~~~~
1) Both peers (sending and receiving side) fully support HP
~~~~
For backward compatibility of legacy clients -- unaware of any HP -- the
following intermediate interactions need to be considered as well:
~~~~
2) The sending side fully supports HP, while the receiving side does
not support any HP
3) The sending side does not support any HP, while the receiving
side fully supports HP (trivial case)
4) Neither the sending side nor the receiving side supports any HP
(trivial case)
~~~~
The following intermediate use cases may need to be considered as well
for backward compatibility with legacy HP systems, such as S/MIME
since version 3.1 (cf. {{RFC8551}}), in the following designated as legacy
HP:
~~~~
5) The sending side fully supports HP, while the receiving side
supports legacy HP only
6) The sending side supports legacy HP only, while the receiving side
fully supports HP
7) Both peers (sending and receiving side) support legacy HP only
8) The sending side supports legacy HP only, while the receiving side
does not support any HP
9) The sending side does not support any HP, while the receiving side
supports legacy HP only (trivial case)
~~~~
Note: It is to be decided whether to ensure legacy HP systems do not
conflict with any new solution for HP at all or whether (and to which
degree) backward compatibility to legacy HP systems shall be
maintained.
## Protection Levels
The following protection levels need to be considered:
a) signature and encryption
b) signature only
c) encryption only \[\[ TODO: verify whether relevant \]\]
# Requirements
In the following a list of requirements that need to be addressed
independently of whether S/MIME, PGP/MIME or any other technology is
used to apply HP to.
## General Requirements
This subsection is listing the requirements to address use case 1)
(cf. {{interactions}}).
~~~~
G1: Define the format for HP for all protection levels. This includes
MIME structure, Content-Type (including charset and name),
Content-Disposition (including filename), and
Content-Transfer-Encoding.
G2: Define how a public key should be included.
G3: To foster wide implementation of the new solution, it shall be
easily implementable. Unless needed for maximizing protection and
privacy, existing implementations shall not require substantial
changes in the existing code base. In particular also MIME
libraries widely used shall not need to be changed to comply with
the new mechanism for HP.
G4: Ensure that man-in-the-middle attack (MITM) cf. {{RFC4949}}, in
particular downgrade attacks, are mitigated as good as possible.
~~~~
### Sending Side
~~~~
GS1: Determine which Header Fields (HFs) should or must be protected
at least for signed only email.
GS2: Determine which HFs should or must be sent in clear of an
encrypted email.
GS3: Determine which HF should not or must not be included in the
visible header (for transport) of an encrypted email, with the
default being that whatever is not needed from GS2 is not put
into the unencrypted transport headers, thus fulfilling data
minimization requirements (including data spareness and hiding
of all information that technically can be hidden).
GS4: Determine which HF to not to include to any HP part (e.g. Bcc).
~~~~
### Receiving Side
~~~~
GR1: Determine how HF should be displayed to the user in case of
conflicting information between the protected and unprotected
headers.
GR2: Ensure that man-in-the-middle attack (MITM) cf. {{RFC4949}}, in
particular downgrade attacks, can be detected.
~~~~
## Additional Requirements for Backward-Compatibility With Legacy Clients Unaware of Header Protection
This sub-section addresses the use cases 2) - 4) (cf. {{interactions}})
~~~~
B1: Depending on the solution, define a means to distinguish between
forwarded messages and encapsulated messages using new HP
mechanism.
~~~~
### Sending side
~~~~
BS1: Define how full HP support can be indicated to outgoing
messages.
BS2: Define how full HP support of the receiver can be detected or
guessed.
BS3: Ensure a HP unaware receiving side easily can display the
"Subject" HF to the user.
~~~~
### Receiving side
~~~~
BR1: Define how full HP support can be detected in incoming messages.
~~~~
## Additional Requirements for Backward-Compatibility with Legacy Header Protection Systems (if supported)
This sub-section addresses the use cases 5) - 9) (cf. {{interactions}}).
~~~~
LS1: Depending on the solution, define a means to distinguish between
forwarded messages, legacy encapsulated messages, and
encapsulated messages using new HP mechanism.
LS2: The solution should be backward compatible to existing solutions
and aim to minimize the implementation effort to include support
for existing solutions.
~~~~
### Sending Side
~~~~
LSS1: Determine how legacy HP support can be indicated to outgoing
messages.
LSS2: Determine how legacy HP support of the receiver can be detected
or guessed.
~~~~
### Receiving Side
~~~~
LSR1: Determine how legacy HP support can be detected in incoming
messages.
~~~~
<!-- =========================================================================== -->
# Options to Achieve Header Protection
In the following a set of Options to achieve Email Header
Protection. It is expected that the IETF LAMPS WG chooses an option to
update {{RFC8551}} wrt. Header Protection.
## Option 1: Memory Hole {#memory-hole}
Memory Hole approach works by copying the normal message header
fields into the MIME header section of the top level protected body
part. Since the MIME body part header section is itself covered by
the protection mechanisms (signing and/or encryption) it shares the
protections of the message body.
\[\[ TODO: \[DKG\] add more information on memory hole]\]
## Option 2: Wrapping with message/rfc822 or message/global {#rfc822-wrapping}
Wrapping with message/rfc822 (or message/global) works by copying the
normal message header fields into the MIME header section of the top
level protect body part
\[\[ HB: Not sure this is well expressed: In option 2 the whole
message is copied into the MIME body part as message/rfc822 element. \]\]
and then prepending them with "Content-Type: message/rfc822;
forwarded=no\r\n" or "Content-Type: message/global; forwarded=no\r\n",
where \r\n is US-ASCII CR followed by US-ASCII LF. Since the MIME
body part header section is itself covered by the protection
mechanisms (signing and/or encryption) it shares the protections of
the message body.
### Content-Type property "forwarded"
This section outlines how the new "forwarded" Content-Type header
field parameter could be defined (probabely in a separate document)
and how header section wrapping works:
This document defines a new Content-Type header field parameter
[RFC2045] with name "forwarded". The parameter value is case-
insensitive and can be either "yes" or "no". (The default value
being "yes"). The parameter is only meaningful with media type
"message/rfc822" and "message/global" {{RFC6532}} when used within
S/MIME signed or encrypted body parts. The value "yes" means that
the message nested inside "message/rfc822" ("message/global") is a
forwarded message and not a construct created solely to protect the
inner header section.
Instructions in {{RFC8551}} describing how to protect the Email message
header section {{RFC5322}}, by wrapping the message inside a message/
rfc822 container {{RFC2045}} are thus updated to read:
> In order to protect outer, non-content-related message header
> fields (for instance, the "Subject", "To", "From", and "Cc"
> fields), the sending client MAY wrap a full MIME message in a
> message/rfc822 wrapper in order to apply S/MIME security services
> to these header fields. It is up to the receiving client to
> decide how to present this "inner" header section along with the
> unprotected "outer" header section.
> When an S/MIME message is received, if the top-level protected
> MIME entity has a Content-Type of message/rfc822 or message/global
> without the "forwarded" parameter or with the "forwarded"
> parameter set to "no", it can be assumed that the intent was to
> provide header protection. This entity SHOULD be presented as the
> top-level message, taking into account header section merging
> issues as previously discussed.
### Handling of S/MIME protected header
\[\[This section needs more work. Don't treat anything in it as
unchangeable.\]\]
For a signed-only message, it is RECOMMENDED that all "outer" header
fields are copied into the "inner" protected body part. This would
mean that all header fields are signed. In this case, the "outer"
header fields simply match the protected header fields. And in the
case that the "outer" header fields differ, they can simply be
replaced with their protected versions when displayed to the user.
When generating encrypted or encrypted+signed S/MIME messages which
protect header fields:
1. If a header field is being encrypted because it is sensitive, its
true value MUST NOT be included in the outer header. If the
header field is mandatory according to {{RFC5322}}, a stub value (or
a value indicating that the outer value is not to be used) is to
be included in the outer header section.
2. The outer header section SHOULD be minimal in order to avoid
disclosure of confidential information. It is recommended that
the outer header section only contains "Date" (set to the same
value as in the inner header field, or, if the Date value is also
sensitive, to Monday 9am of the same week), possibly "Subject"
and "To"/"Bcc" header fields. In particular, Keywords, In-Reply-
To and References header fields SHOULD NOT be included in the
outer header; "To" and "Cc" header fields should be omitted and
replaced with "Bcc: undisclosed-recipients;".
But note that having key header fields duplicated in the outer
header is convenient for many message stores (e.g. IMAP) and
clients that can't decode S/MIME encrypted messages. In
particular, Subject/To/Cc/Bcc/Date header field values are
returned in IMAP ENVELOPE FETCH data item {{RFC3501}}, which is
frequently used by IMAP clients in order to avoid parsing message
header.
3. The "Subject" header field value of the outer header section
SHOULD either be identical to the inner "Subject" header field
value, or contain a clear indication that the outer value is not
to be used for display (the inner header field value would
contain the true value).
Note that recommendations listed above typically only apply to non
MIME header fields (header fields with names not starting with
"Content-" prefix), but there are exception, e.g. Content-Language.
Note that the above recommendations can also negatively affect
antispam processing.
When displaying S/MIME messages which protect header fields (whether
they are signed-only, encrypted or encrypted+signed):
1. The outer headers might be tampered with, so a receiving client
SHOULD ignore them, unless they are protected in some other
way(*). If a header field is present in the inner header, only
the inner header field value MUST be displayed (and the
corresponding outer value must be ignored). If a particular
header field is only present in the outer header, it MAY be
ignored (not displayed) or it MAY be displayed with a clear
indicator that it is not trustworthy(*).
(*) - this only applies if the header field is not protected is
some other way, for example with a DKIM signature that validates
and is trusted.
### Mail User Agent Algorithm for deciding which version of a header
field to display
\[\[TBD: describe how to recurse to find the innermost protected root
body part, extract header fields from it and propogate them to the
top level. This should also work for triple-wrapped messages.\]\]
## Option 3: Progressive Header Disclosure {#progressive-header-disclosure}
This option is similar to Option 2 (cf. {{rfc822-wrapping}}). It also
makes use the Content-Type property "forwarded"
(cf. {{content-type-property-forwarded}}).
## Design principles
pretty Easy privacy (pEp) {{I-D.birk-pep}} is working on
bringing state-of-the-art automatic cryptography known from areas like
TLS to electronic mail (email) communication. pEp is determined to
evolve the existing standards as fundamentally and comprehensively as
needed to gain easy implementation and integration, and for easy use
for regular Internet users. pEp for email wants to attaining to good
security practice while still retaining backward compatibility for
implementations widespread.
To provide the required stability as a foundation for good security
practice, pEp for email defines a fixed MIME structure for its innermost
message structure, so to remove most attack vectors which have permitted the
numerous EFAIL vulnerabilities. (TBD: ref)
Security comes just next after privacy in pEp, for which reason the
application of signatures without encryption to messages in transit is not
considered purposeful. pEp for email herein referenced, and further described
in {{I-D.marques-pep-email}}, either expects to transfer messages in cleartext
without signature or encryption, or transfer them encrypted and with enclosed
signature and necessary public keys so that replies can be immediately
upgraded to encrypted messages.
The pEp message format is equivalent to the S/MIME standard in ensuring header
protection, in that the whole message is protected instead, by wrapping it and
providing cryptographic services to the whole original message. The pEp
message format is different compared to the S/MIME standard in that the pEp
protocols propose opportunistic end-to-end security and signature, by allowing
the transport of the necessary public key material along with the original
messages.
For the purpose of allowing the insertion of such public keys, the root entity
of the protected message is thus nested once more into an additional
multipart/mixed MIME entity. The current pEp proposal is for PGP/MIME, while
an extension to S/MIME is next.
pEp's proposal is strict in that it requires that the cryptographic services
applied to the protected message MUST include encryption. It also mandates a
fixed MIME structure for the protected message, which always MUST include a
plaintext and optionally an HTML representation (if HTML is used) of the same
message, and requires that all other optional elements to be eventually
presented as attachments. Alternatively the whole protected message could
represent in turn a wrapped pEp wrapper, which makes the message structure
fully recursive on purpose (e.g., for the purpose of anonymization through
onion routing).
For the purpose of implementing mixnet routing for email, it is foreseen to
nest pEp messages recursively. A protected message can in turn contain a
protected message due for forwarding. This is for the purpose to increase
privacy and counter the necessary leakage of plaintext addressing in the
envelope of the email.
The recursive nature of the pEp message format allows for the implementation
of progressive disclosure of the necessary transport relevant header fields
just as-needed to the next mail transport agents along the transmission path.
pEp has also implemented the above (in {{content-type-property-forwarded}})
described Content-Type property "forwarded" to distinguish between
encapsulated and forwarded emails.
## Candidate Header Fields for Header Protection
By default, all headers of the original message SHOULD be wrapped with the
original message, with one exception:
* the header field "Bcc" MUST NOT be added to the protected headers.
## Stub Outside Headers
The outer message requires a minimal set of headers to be in place for being
eligible for transport. This includes the "From", "To", "Cc", "Bcc", "Subject"
and "Message-ID" header fields. The protocol hereby defined also depends on the
"MIME-Version", "Content-Type", "Content-Disposition" and eventually the
"Content-Transport-Encoding" header field to be present.
Submission and forwarding based on SMTP carries "from" and "receivers"
information out-of-band, so that the "From" and "To" header fields are not
strictly necessary. Nevertheless, "From", "Date", and at least one destination
header field is mandatory as per {{RFC5322}}. They SHOULD be conserved for
reliability.
The following header fields should contain a verbatim copy of the header
fields of the inner message:
* Date
* From
* To
* Cc (*)
* Bcc (*)
The entries with an asterisk mark (*) should only be set if also present in the
original message.
## More information
More information on progressive header disclosure can be found in
{{I-D.marques-pep-email}} and
{{I-D.luck-lamps-pep-header-protection}}. The latter is a predecessor
of this document.
# Examples
Examples in subsequent sections assume that an email client is trying
to protect (sign) the following initial message:
~~~~
Date: Mon, 25 Sep 2017 17:31:42 +0100 (GMT Daylight Time)
From: "Alexey Melnikov" <alexey.melnikov@example.net>
Message-ID: <e4a483cb-1dfb-481d-903b-298c92c21f5e@mattingly.example.net>
MIME-Version: 1.0
MMHS-Primary-Precedence: 3
Subject: Meeting at my place
To: somebody@example.net
X-Mailer: Isode Harrier Web Server
Content-Type: text/plain; charset=us-ascii
This is an important message that I don't want to be modified.
Without message header protection the corresponding signed message
might look like this. (Lines prepended by "O: " are the outer
header.)
O: Date: Mon, 25 Sep 2017 17:31:42 +0100 (GMT Daylight Time)
O: Message-ID: <e4a483cb-1dfb-481d-903b-298c92c21f5e@mattingly.example.net>
O: Subject: Meeting at my place
O: From: "Alexey Melnikov" <alexey.melnikov@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
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--
~~~~
## Option 1: Memory Hole {#memory-hole-example}
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 header section. Lines prepended by
"I: " are the inner header section.
~~~~
O: Date: Mon, 25 Sep 2017 17:31:42 +0100 (GMT Daylight Time)
O: Message-ID: <e4a483cb-1dfb-481d-903b-298c92c21f5e@mattingly.example.net>
O: Subject: Meeting at my place
O: From: "Alexey Melnikov" <alexey.melnikov@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
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@mattingly.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--
~~~~
## Option 2: Wrapping with message/rfc822 or message/global {#rfc822-wrapping-example}
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 header section. Lines prepended by
"I: " are the inner header section. Lines prepended by "W: " are the
wrapper.
~~~~
O: Date: Mon, 25 Sep 2017 17:31:42 +0100 (GMT Daylight Time)
O: Message-ID: <e4a483cb-1dfb-481d-903b-298c92c21f5e@mattingly.example.net>
O: Subject: Meeting at my place
O: From: "Alexey Melnikov" <alexey.melnikov@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@mattingly.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--
~~~~
## Option 3 Progressive Header Disclosure {#progressive-header-disclosure-example}
This looks similar as in option 2. Specific examples can be found in
{{I-D.luck-lamps-pep-header-protection}}.
<!-- =========================================================================== -->
# Security Considerations
This document talks about UI considerations, including security
considerations, when processing messages protecting header fields.
One of the goals of this document is to specify UI for displaying
such messages which is less confusing/misleading and thus more
secure.
The document is not defining new protocol, so it doesn't create any
new security concerns not already covered by S/MIME {{RFC8551}}, MIME
[RFC2045] and Email {{RFC5322}} in general.
# Privacy Considerations
\[\[ TODO \]\]
# IANA Considerations
This document requests no action from IANA.
\[\[ RFC Editor: This section may be removed before publication. \]\]
# Acknowledgements
Special thanks go to Krista Bennett and Volker Birk for valuable input to
this draft and Hernani Marques for reviewing.
\[\[ TODO \[AM\]: Do we need to mention: Wei Chuang, Steve Kille, David
Wilson and Robert Williams (copied from Acknowledgements section of
{{I-D.melnikov-lamps-header-protection}} \]\]
Special thanks to Claudio Luck who authored a predecessor of this
document. Essential parts of his work have been merged into this one.
David Wilson came up with the idea of defining a new Content-Type
header field parameter to distinguish forwarded messages from inner
header field protection constructs.
--- back
# Document Changelog
\[\[ RFC Editor: This section is to be removed before publication \]\]
* draft-ietf-lamps-header-protection-req-00
* Initial version
# Open Issues
\[\[ RFC Editor: This section should be empty and is to be removed
before publication. \]\]
* filename of the document
* does draft-ietf-lamps-header-protection-req work to keep
draft-ietf-lamps-header-protection free for the specification? Or
do we expect only one document at the end of the day?
* Signed-only protection needs further study
* pEp only does header protection by applying both signing and
encryption. Technically it is also possible to sign, but not
encrypt the protected messages. This needs further study.
<!--
LocalWords: utf docname toc sortrefs symrefs Oberer Graben uri Ucom
LocalWords: Winterthur Hoeneisen GmbH Zuerich bernhard hoeneisen rfc
LocalWords: ucom ietf melnikov birk trustwords keysync Volker ann cb
LocalWords: ISOC bnet OpenPGP pgp msg asc pEpkey MUAs UI
LocalWords: UX Programme Changelog
-->

@ -0,0 +1,13 @@
-
ins: A. Melnikov
name: Alexey Melnikov
org: Isode Ltd
street: 14 Castle Mews
city: Hampton, Middlesex
code: TW12 2NP
country: UK
email: alexey.melnikov@isode.com

@ -0,0 +1,10 @@
-
ins: D. Gillmor
name: Daniel Kahn Gillmor
org: American Civil Liberties Union
street: 125 Broad St.
city: New York, NY
code: 10004
country: USA
email: dkg@fifthhorseman.net
Loading…
Cancel
Save