The Content-MD5 Header Field
An optional MIME header that carries an MD5 digest so a receiver can check a message body arrived intact.
Myers, J. and M. Rose, "The Content-MD5 Header Field", RFC 1864, DOI 10.17487/RFC1864, October 1995, <https://www.rfc-editor.org/info/rfc1864>.
@misc{rfc1864,
series = {Request for Comments},
number = 1864,
howpublished = {RFC 1864},
publisher = {RFC Editor},
doi = {10.17487/RFC1864},
url = {https://www.rfc-editor.org/info/rfc1864},
author = {J. Myers and M. Rose},
title = {{The Content-MD5 Header Field}},
pagetotal = 4,
year = 1995,
month = oct,
} RFC text
Contents
Network Working Group J. Myers
Request For Comments: 1864 Carnegie Mellon
Obsoletes: 1544 M. Rose
Dover Beach Consulting, Inc.
October 1995
The Content-MD5 Header Field
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
This memo specifies an optional header field, Content-MD5, for use
with MIME-conformant messages.
Table of Contents
1. Introduction .............................................. 1
2. Generation of the Content-MD5 Field ....................... 2
3. Processing the Content-MD5 field .......................... 3
4. Security Considerations ................................... 3
5. Acknowledgements .......................................... 3
6. References ................................................ 3
7. Authors' Addresses ........................................ 4
1. Introduction
Despite all of the mechanisms provided by MIME [1] which attempt to
protect data from being damaged in the course of email transport, it
is still desirable to have a mechanism for verifying that the data,
once decoded, are intact. For this reason, this memo defines the use
of an optional header field, Content-MD5, which may be used as a
message integrity check (MIC), to verify that the decoded data are
the same data that were initially sent. The Content-MD5 header may
also be placed in the encapsulated headers of an object of type
message/external-body, to be used to verify that the retreived and
decoded data are the same data that were initially referenced.
MD5 is an algorithm for computing a 128 bit "digest" of arbitrary-
length data, with a high degree of confidence that any alterations in
the data will be reflected in alterations in the digest. The MD5
algorithm itself is defined in [2]. This memo specifies how the
algorithm may be used as an integrity check for MIME mail.
2. Generation of the Content-MD5 Field
The Content-MD5 field is generated by only an originating user agent.
Message relays and gateways are expressly forbidden from generating a
Content-MD5 field.
Use of the Content-MD5 field is completely optional, but its use is
recommended whenever data integrity is desired, but Privacy-Enhanced
Mail services [3] are not available. (Consult Section 4 for further
details.) The Content-MD5 field may only be added to MIME entities of
a `leaf' nature, i.e., the Content-MD5 field may be used with any
content type other than multipart or message/rfc822.
To generate the value of the Content-MD5 field, the MD5 algorithm is
computed on the canonical form of the MIME entity's object. In
particular, this means that the sender applies the MD5 algorithm on
the data immediately after conversion to canonical form, before
applying any content-transfer-encoding, and that the receiver also
applies the MD5 algorithm on the canonical form, after undoing any
content-transfer-encoding. For textual data, this means the MD5
algorithm must be computed on data in which the canonical form for
newlines applies, that is, in which each newline is represented by a
CR-LF pair. The canonical encoding model of MIME is described in
Appendix G of [1].
The output of the MD5 algorithm is a 128 bit digest. When viewed in
network byte order (big-endian order), this yields a sequence of 16
octets of binary data. These 16 octets are then encoded according to
the base64 algorithm in order to obtain the value that is placed in
the Content-MD5 field. Thus, if the application of the MD5 algorithm
over the raw data of a MIME entity results in a digest having the
(unlikely) value of "Check Integrity!", then that MIME entity's
header could contain the field
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Finally, as discussed in Appendix B of [1], textual data is regularly
altered in the normal delivery of mail. Because the addition or
deletion of trailing white space will result in a different digest,
either the quoted-printable or base64 algorithm should be employed as
a content-transfer-encoding when the Content-MD5 field is used.
3. Processing the Content-MD5 field
If the Content-MD5 field is present, a recipient user agent may
choose to use it to verify that the contents of a MIME entity have
not been modified during transport. Message relays and gateways are
expressly forbidden to alter their processing based on the presence
of the Content-MD5 field. However, a message gateway is allowed to
remove the Content-MD5 field if the corresponding MIME entity is
translated into a different content-type.
4. Security Considerations
This document specifies a data integrity service that protects data
from accidental modification while in transit from the sender to the
recipient. A secure data integrity service, such as that provided by
Privacy Enhanced Mail [3], is conjectured to protect data from all
modifications.
5. Acknowledgements
This memo is based almost entirely on text originally written by
Nathaniel Borenstein of Bellcore. In addition, several improvements
were suggested by Keith Moore of the University of Tennessee,
Knoxville.
6. References
[1] Borenstein, N., and N. Freed, "MIME (Multipurpose Internet Mail
Extensions) Part One: Mechanisms for Specifying and Describing
the Format of Internet Message Bodies", RFC 1521, Bellcore,
Innosoft, September 1993.
[2] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, MIT
Laboratory for Computer Science and RSA Data Security, Inc.,
April 1992.
[3] Linn, J., "Privacy Enhancement for Internet Electronic Mail, Part
I: Message Encryption and Authentication Procedures", RFC 1421,
IAB IRTF PSRG, IETF PEM WG, February 1993.
7. Authors' Addresses
John G. Myers
Carnegie Mellon University
EMail: jgm+@cmu.edu
Marshall T. Rose
Dover Beach Consulting, Inc.
EMail: mrose@dbc.mtview.ca.us
AI ELI5
On this page
§1A Message Integrity Check
MIME tries to protect data during email transport, but it is still desirable to verify that the data, once decoded, are intact. This memo defines the optional Content-MD5 header field as a message integrity check. It may also appear in the encapsulated headers of a message/external-body object to verify the retrieved data.
MD5 computes a 128 bit digest of arbitrary-length data with a high degree of confidence that any change in the data changes the digest. The algorithm is defined elsewhere (RFC 1321); this memo specifies how to use it for MIME mail.
A message can get scrambled in the mail. A short fingerprint of the message lets the reader check it is still the same.
§2Generating the Field
Only an originating user agent generates the field. Relays and gateways are expressly forbidden to. Its use is optional but recommended when data integrity is wanted and Privacy-Enhanced Mail is not available. It may be added only to leaf entities, that is, any content type other than multipart or message/rfc822.
The MD5 algorithm is computed on the canonical form of the entity, before any content-transfer-encoding, with newlines as CR-LF pairs. The 128 bit digest gives 16 octets, which are base64-encoded to form the field value. Because trailing white space changes the digest, quoted-printable or base64 should be used as the content-transfer-encoding.
The sender's mail program makes the fingerprint from the message in its plain, standard form. Mail relays along the way are not allowed to add one.
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==§3Checking the Field
If the field is present, a recipient user agent may choose to use it to verify that the entity was not modified during transport. The receiver computes the digest on the canonical form after undoing any content-transfer-encoding.
Relays and gateways are expressly forbidden to change their processing because the field is present. A gateway may remove the field if it translates the entity into a different content-type.
The reader's mail program can redo the fingerprint and compare. The post offices in the middle must not treat the package differently because of it.
§4Security Limits
The field provides a data integrity service that protects against accidental modification in transit. The RFC says only a secure integrity service, such as that of Privacy Enhanced Mail, is conjectured to protect against all modifications. So Content-MD5 should not be treated as protection against a deliberate attacker.
The fingerprint catches accidents, like a bent corner. It does not stop someone who wants to swap the contents on purpose.