RFC 7281
Authentication-Results Registration for S/MIME Signature Verification
RFC 7281 π Authentication-Results Registration for S/MIME Signature Verification
okay bestie, this is RFC 7281 π It was written by A. Melnikov of Isode Ltd and published as an Independent Submission in the Informational category. The date is June 2014 and the ISSN is 2070-1721. It doesn't obsolete or update any other RFCs, since its header has no Obsoletes or Updates line. π¦
Abstract πΈ
okay so RFC 7001 is the one that defines the Authentication-Results header field, which is how you share the results of message authentication checks β¨ This doc adds a brand new authentication method you can use in that header for S/MIME-related signature checks. it's giving organized π
Status of This Memo π
this one is not an Internet Standards Track spec, it's just published for info purposes π§
it's a contribution to the RFC Series, and it's totally independent of any other RFC stream. the RFC Editor picked to publish it at their own discretion and makes no claims about whether you should implement or deploy it π documents the RFC Editor approves aren't a candidate for any level of Internet Standard, see Section 2 of RFC 5741 for the deets π«Ά
for the current status, errata, or to send feedback, check http://www.rfc-editor.org/info/rfc7281 π
Copyright Notice π
Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved. π
this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were on the day it was published. please read them carefully bestie, they explain your rights and restrictions for this doc π
Table of Contents π¦
1. Introduction ....................................................2
2. Conventions Used in This Document ...............................2
3. "smime" Authentication Method ...................................2
3.1. S/MIME Results .............................................3
3.2. Email Authentication Parameters for S/MIME .................4
3.2.1. body.smime-part .....................................4
3.2.2. body.smime-identifier ...............................4
3.2.3. body.smime-serial and body.smime-issuer .............5
3.3. Examples ...................................................5
4. IANA Considerations .............................................7
5. Security Considerations .........................................9
6. References .....................................................10
6.1. Normative References ......................................10
6.2. Informative References ....................................10
Appendix A. Acknowledgements ......................................11
1. Introduction β¨
so [RFC7001] is the spec for the Authentication-Results header field, which carries the results of message authentication checks π S/MIME signature verification (and alteration) sometimes happens in border message transfer agents, guards, and gateways (see [RFC3183] for an example) π that means there's a real need to tell Mail User Agents (MUAs) and downstream filters what happened with the signature check π this doc defines a new authentication method for exactly that, for use in the Authentication-Results header field for S/MIME-related signature checks π₯
2. Conventions Used in This Document π
the formal syntax is written in Augmented Backus-Naur Form (ABNF) [RFC5234], and it includes the core rules from Appendix B of [RFC5234] too π§
3. "smime" Authentication Method π
S/MIME signature and countersignature verification is represented by the "smime" method, and that method is defined in [RFC5751] π¦
3.1. S/MIME Results π
these are the result values S/MIME [RFC5751] uses, and they're giving main character energy π
+-----------+-------------------------------------------------------+
| Result | Meaning |
| code | |
+-----------+-------------------------------------------------------+
| none | The message was not signed. |
| | |
| pass | The message was signed, the signature or signatures |
| | were acceptable to the verifier, and the signature(s) |
| | passed verification tests. |
| | |
| fail | The message was signed and the signature or |
| | signatures were acceptable to the verifier, but they |
| | failed the verification test(s). |
| | |
| policy | The message was signed and signature(s) passed |
| | verification tests, but the signature or signatures |
| | were not acceptable to the verifier. |
| | |
| neutral | The message was signed but the signature or |
| | signatures contained syntax errors or were not |
| | otherwise able to be processed. This result is also |
| | used for other failures not covered elsewhere in this |
| | list. |
| | |
| temperror | The message could not be verified due to some error |
| | that is likely transient in nature, such as a |
| | temporary inability to retrieve a certificate or |
| | Certificate Revocation List (CRL). A later attempt |
| | may produce a final result. |
| | |
| permerror | The message could not be verified due to some error |
| | that is unrecoverable, such as a required header |
| | field being absent or the signer's certificate not |
| | being available. A later attempt is unlikely to |
| | produce a final result. |
+-----------+-------------------------------------------------------+
okay so a signature is "acceptable to the verifier" if it passes local policy checks, or if there are no specific local policy checks at all π
for example, a verifier might insist that the domain in the rfc822Name subjectAltName of the signing certificate matches the domain of the sender's address (the Sender header field if it's there, the From header field otherwise), so third-party signatures don't get in π
ββοΈ [RFC5751] advises that if a message fails verification, it should be treated as an unsigned message π₯Ί a fail report lets the receiver decide how to handle the failure for themselves β¨ but a neutral or none report skips that choice entirely, so the message gets treated as if it was never signed π
3.2. Email Authentication Parameters for S/MIME π
this doc defines a few new authentication parameters for sharing S/MIME info β¨ stuff like where the S/MIME signature lives, and the identity tied to whoever signed the message or one of its body parts π«Ά
3.2.1. body.smime-part π§
body.smime-part holds the MIME body part reference that contains the S/MIME signature π its syntax is in the smime-part ABNF production below. application/pkcs7-signature or application/pkcs7-mime (containing SignedData) body parts get referenced with the <section> syntax (see Section 6.4.5 of [RFC3501]) π¦ if the signature being verified is wrapped in another Cryptographic Message Syntax (CMS) content type, like application/pkcs7-mime containing EnvelopedData which then contains SignedData, the inner signature body part can be referenced using "section[/section..." syntax πΈ
smime-part = section ["/" smime-subpart]
smime-subpart = smime-part
section = <Defined in Section 6.4.5 of [RFC3501]>
3.2.2. body.smime-identifier π
body.smime-identifier holds the email address [RFC5322] tied to the S/MIME signature referenced in the matching body.smime-part π that address can be spelled out in the signer's X.509 certificate, or it can be derived from the signer's identity β¨ and fun fact: this email address can line up with a countersignature too π
3.2.3. body.smime-serial and body.smime-issuer π₯
body.smime-serial holds the serialNumber of the X.509 certificate tied to the S/MIME signature (see Section 4.1.2.2 of [RFC5280]) referenced in the matching body.smime-part π
body.smime-issuer holds the issuer name DN (distinguished name), for example "CN=CA1,ST=BC,c=CA", of that same X.509 certificate (see Section 4.1.2.4 of [RFC5280]) π
okay bestie, the rule is that either both or neither ofbody.smime-serialandbody.smime-issuershould be in anAuthentication-Resultsheader field π
these two are for when the entity adding the Authentication-Results header field can't derive body.smime-identifier (the email address) π§ for example, this can come up when gatewaying from X.400 π
3.3. Examples π
okay so here's a full example message, bestie π§ it's a signed email from aliceDss@example.com, and the Authentication-Results header says the S/MIME check failed because the certificate is revoked by CRL. the header even points at part 2 of the message as the signature part π
Return-Path: <aliceDss@example.com>
Authentication-Results: example.net;
smime=fail (certificate is revoked by CRL)
body.smime-identifier=aliceDss@example.com
body.smime-part=2
Received: from ietfa.example.com (localhost [IPv6:::1])
by ietfa.example.com (Postfix) with ESMTP id 2875111E81A0;
Fri, 06 Sep 2002 00:35:14 -0700 (PDT)
MIME-Version: 1.0
To: User2@example.com
From: aliceDss@example.com
Subject: Example 4.8
Message-Id: <020906002550300.249@example.com>
Date: Fri, 06 Sep 2002 00:25:21 -0700
Content-Type: multipart/signed;
micalg=SHA1;
boundary="----=_NextBoundary____Fri,_06_Sep_2002_00:25:21";
protocol="application/pkcs7-signature"
This is a multi-part message in MIME format.
------=_NextBoundary____Fri,_06_Sep_2002_00:25:21
This is some sample content.
------=_NextBoundary____Fri,_06_Sep_2002_00:25:21
Content-Type: application/pkcs7-signature; name=smime.p7s
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7s
MIIDdwYJKoZIhvcNAQcCoIIDaDCCA2QCAQExCTAHBgUrDgMCGjALBgkqhkiG9w0BBwGgggL
gMIIC3DCCApugAwIBAgICAMgwCQYHKoZIzjgEAzASMRAwDgYDVQQDEwdDYXJsRFNTMB4XDT
k5MDgxNzAxMTA0OVoXDTM5MTIzMTIzNTk1OVowEzERMA8GA1UEAxMIQWxpY2VEU1MwggG2M
IIBKwYHKoZIzjgEATCCAR4CgYEAgY3N7YPqCp45PsJIKKPkR5PdDteoDuxTxauECE//lOFz
SH4M1vNESNH+n6+koYkv4dkwyDbeP5u/t0zcX2mK5HXQNwyRCJWb3qde+fz0ny/dQ6iLVPE
/sAcIR01diMPDtbPjVQh11Tl2EMR4vf+dsISXN/LkURu15AmWXPN+W9sCFQDiR6YaRWa4E8
baj7g3IStii/eTzQKBgCY40BSJMqo5+z5t2UtZakx2IzkEAjVc8ssaMMMeUF3dm1nizaoFP
VjAe6I2uG4Hr32KQiWn9HXPSgheSz6Q+G3qnMkhijt2FOnOLl2jB80jhbgvMAF8bUmJEYk2
RL34yJVKU1a14vlz7BphNh8Rf8K97dFQ/5h0wtGBSmA5ujY5A4GEAAKBgFzjuVp1FJYLqXr
d4z+p7Kxe3L23ExE0phaJKBEj2TSGZ3V1ExI9Q1tv5VG/+onyohs+JH09B41bY8i7RaWgSu
OF1s4GgD/oI34a8iSrUxq4Jw0e7wi/ZhSAXGKsZfoVi/G7NNTSljf2YUeyxDKE8H5BQP1Gp
2NOM/Kl4vTyg+W4o4GBMH8wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBsAwHwYDVR0j
BBgwFoAUcEQ+gi5vh95K03XjPSC8QyuT8R8wHQYDVR0OBBYEFL5sobPjwfftQ3CkzhMB4v3
jl/7NMB8GA1UdEQQYMBaBFEFsaWNlRFNTQGV4YW1wbGUuY29tMAkGByqGSM44BAMDMAAwLQ
IUVQykGR9CK4lxIjONg2q1PWdrv0UCFQCfYVNSVAtcst3a53Yd4hBSW0NevTFjMGECAQEwG
DASMRAwDgYDVQQDEwdDYXJsRFNTAgIAyDAHBgUrDgMCGjAJBgcqhkjOOAQDBC4wLAIUM/mG
f6gkgp9Z0XtRdGimJeB/BxUCFGFFJqwYRt1WYcIOQoGiaowqGzVI
------=_NextBoundary____Fri,_06_Sep_2002_00:25:21--
4. IANA Considerations π
okay bestie, IANA has added entries to the "Email Authentication Methods" sub-registry of the "Email Authentication Parameters" registry π there are three smime body properties in there, all active and all version 1, and each one points back to Section 3.2.1 or the other 3.2 bits of [RFC7281] π¦
+------+----------+-------+------------+----------------+-------+------+
|Method| Defined | ptype | Property | Value |Status | Ver- |
| | in | | | | | sion |
+------+----------+-------+------------+----------------+-------+------+
| smime| [RFC5751]| body | smime-part | A reference to |active | 1 |
| | | | | the MIME body | | |
| | | | | part that | | |
| | | | | contains the | | |
| | | | | signature, as | | |
| | | | | defined in | | |
| | | | | Section 3.2.1 | | |
| | | | | of [RFC7281]. | | |
| | | | | | | |
| smime| [RFC5751]| body | smime- | The email |active | 1 |
| | | | identifier | address | | |
| | | | | [RFC5322] | | |
| | | | | associated | | |
| | | | | with the | | |
| | | | | S/MIME | | |
| | | | | signature. | | |
| | | | | The email | | |
| | | | | address can be | | |
| | | | | specified | | |
| | | | | explicitly or | | |
| | | | | derived from | | |
| | | | | the identity | | |
| | | | | of the signer. | | |
| | | | | Note that this | | |
| | | | | email address | | |
| | | | | can correspond | | |
| | | | | to a counter- | | |
| | | | | signature. | | |
| | | | | | | |
| smime| [RFC5751]| body | smime- | serialNumber |active | 1 |
| | | | serial | of the | | |
| | | | | certificate | | |
| | | | | associated | | |
| | | | | with the | | |
| | | | | S/MIME | | |
| | | | | signature (see | | |
| | | | | Section | | |
| | | | | 4.1.2.2 of | | |
| | | | | [RFC5280]. | | |
| | | | | | | |
| smime| [RFC5751]| body | smime- | Issuer name DN |active | 1 |
| | | | issuer | (e.g., "CN=CA1,| | |
| | | | | ST=BC,c=CA") | | |
| | | | | of the | | |
| | | | | certificate | | |
| | | | | associated | | |
| | | | | with the | | |
| | | | | S/MIME | | |
| | | | | signature (see | | |
| | | | | Section | | |
| | | | | 4.1.2.4 of | | |
| | | | | [RFC5280]. | | |
+------+----------+-------+------------+----------------+-------+------+
and then there's the "Email Authentication Result Names" sub-registry of that same registry, where IANA added seven result codes, all active and all using the smime method. each one points to Section 3.1 of [RFC7281] for its meaning β¨
+-----------+-----------+----------+-----------------------+--------+
| Code | Defined | Auth | Meaning | Status |
| | | Method | | |
+-----------+-----------+----------+-----------------------+--------+
| none | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
| | | | | |
| pass | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
| | | | | |
| fail | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
| | | | | |
| policy | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
| | | | | |
| neutral | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
| | | | | |
| temperror | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
| | | | | |
| permerror | [RFC7281] | smime | [RFC7281] Section 3.1 | active |
+-----------+-----------+----------+-----------------------+--------+
5. Security Considerations π
okay this part is SERIOUS bestie π this document doesn't add any new security considerations on top of what's already covered in [RFC7001] and [RFC5751]. the stuff that's relevant here is weak cryptography sent over plaintext, algorithms getting weaker and breaking over time, and message processing changing based on whether a signature is present (all from [RFC5751]). the [RFC7001] ones that matter most are Forged Header Fields, Misleading Results, Internal Mail Transfer Agent (MTA) Lists, and Compromised Internal Hosts β¨
and yes, we're repeating something from RFC 7001, Section 7.1, because it's THAT important π
An MUA or filter that accesses a mailbox whose messages are handled by a non-conformant MTA, and understands Authentication-Results header fields, could potentially make false conclusions based on forged header fields. A malicious user or agent could forge a header field using the DNS domain of a receiving ADMD as the authserv-id token in the value of the header field and, with the rest of the value, claim that the message was properly authenticated. The non-conformant MTA would fail to strip the forged header field, and the MUA could inappropriately trust it. For this reason, it is best not to have processing of the Authentication-Results header field enabled by default; instead, it should be ignored, at least for the purposes of enacting filtering decisions, unless specifically enabled by the user or administrator after verifying that the border MTA is compliant. It is acceptable to have an MUA aware of this specification but have an explicit list of hostnames whose Authentication-Results header fields are trustworthy; however, this list should initially be empty.
so to say it again, super clearly π«Ά: whenever possible, MUAs should implement their own S/MIME signature verification instead of relying on this specification π₯
also, agents that add Authentication-Results header fields with the S/MIME authentication method might not be able to verify S/MIME signatures inside encrypted CMS content types like EnvelopedData [RFC5652] π so agents processing those header fields can't treat a missing S/MIME Authentication-Results header field as proof that the signature is missing, invalid, or valid. not me reading that and going "wait, so the absence means NOTHING?" π
6. References π
6.1. Normative References
- [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1", RFC 3501, March 2003.
- [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, January 2008.
- [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, May 2008.
- [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, October 2008.
- [RFC5751] Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.2 Message Specification", RFC 5751, January 2010.
- [RFC7001] Kucherawy, M., "Message Header Field for Indicating Message Authentication Status", RFC 7001, September 2013.
6.2. Informative References
- [RFC3183] Dean, T. and W. Ottaway, "Domain Security Services using S/MIME", RFC 3183, October 2001.
- [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, RFC 5652, September 2009.
Appendix A. Acknowledgements π
okay bestie, big thank-you moment π«Ά Murray S. Kucherawy, David Wilson, Jim Schaad, SM, and Steve Kille all gave comments and corrections on this document, and it is so much better because of them β¨ the whole group chat of standards people is iconic π
Author's Address π
Alexey Melnikov is the author, and the contact details are below π¦
Alexey Melnikov
Isode Ltd
14 Castle Mews
Hampton, Middlesex TW12 2NP
United Kingdom
EMail: Alexey.Melnikov@isode.com
π¦ where this page comes from
- ietf: rfc7281 2014-06
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms