RFC 3335

MIME-based Secure Peer-to-Peer Business Data Interchange over the Internet

๐Ÿ“… published September 2002, from ietf

๐ŸŽ€ RFC 3335: MIME-based Secure Peer-to-Peer Business Data Interchange over the Internet ๐ŸŽ€

Okay bestie, here's the quick tea โ˜• before we dive in:

  • RFC number: 3335
  • Working group: Network Working Group
  • Category: Standards Track โœจ
  • Date: September 2002
  • Authors: T. Harding (Cyclone Commerce), R. Drummond (Drummond Group), and C. Shih (Gartner Group) ๐Ÿ’…
  • Obsoletes / Updates: the title block doesn't list anything it obsoletes or updates ๐Ÿ™ˆ

Status of This Memo โœจ

This doc is an Internet standards track protocol spec for the whole Internet community, and it's literally asking for your thoughts and suggestions for improvements ๐Ÿซถ If you want to know where this protocol stands in standardization, check the current edition of the "Internet Official Protocol Standards" (STD 1). Also, distribution of this memo is unlimited, so share away ๐ŸŒˆ

Copyright (C) The Internet Society (2002). All Rights Reserved.

Abstract ๐Ÿ’œ

Okay so this doc is about sending structured business data securely over SMTP. ๐Ÿ“ฌ That covers Electronic Data Interchange (EDI), which means either the American Standards Committee X12 or UN/EDIFACT (Electronic Data Interchange for Administration, Commerce and Transport), plus XML or any other data used for business-to-business interchange ๐Ÿ’ผ The data gets wrapped up in standard MIME content-types ๐ŸŽ For authentication and privacy, you use Cryptographic Message Syntax (S/MIME) or OpenPGP security body parts ๐Ÿ” And the authenticated acknowledgements? Those use multipart/signed replies to the original SMTP message ๐Ÿฆ‹

Table of Contents ๐ŸŒธ

   1.0   Introduction .................................................3
   2.0   Overview .....................................................4
   2.1   Purpose of a Security Guideline for MIME EDI .................4
   2.2   Definitions ..................................................4
   2.2.1 Terms ........................................................4
   2.2.2 The Secure Transmission Loop .................................5
   2.2.3 Definition of Receipts .......................................5
   2.3   Assumptions ..................................................6
   2.3.1 EDI Process Assumptions ......................................6
   2.3.2 Flexibility Assumptions ......................................7
   3.0   Referenced RFCs and Their Contribution .......................8
   3.1   RFC 821 SMTP [7] .............................................8
   3.2   RFC 822 Text Message Format [3] ..............................8
   3.3   RFC 1847 MIME Security Multiparts [6] ........................8
   3.4   RFC 1892 Multipart/Report [9] ................................8
   3.5   RFC 1767 EDI Content [2] .....................................9
   3.6   RFC 2015, 3156, 2440 PGP/MIME [4] ............................9
   3.7   RFC 2045, 2046, and 2049 MIME [1] ............................9
   3.8   RFC 2298 Message Disposition Notification [5] ................9
   3.9   RFC 2633 and 2630 S/MIME Version 3 Message Specifications [8] 9
   4.0   Structure of an EDI MIME Message - Applicability .............9
   4.1   Introduction .................................................9
   4.2   Structure of an EDI MIME Message - PGP/MIME .................10
   4.2.1 No Encryption, No Signature .................................10
   4.2.2 No Encryption, Signature ....................................10
   4.2.3 Encryption, No Signature ....................................10
   4.2.4 Encryption, Signature .......................................10
   4.3   Structure of an EDI MIME Message - S/MIME ...................10
   4.3.1 No encryption, No Signature..................................10
   4.3.2 No encryption, Signature ....................................10
   4.3.3 Encryption, No Signature ....................................11
   4.3.4 Encryption, Signature .......................................11
   5.0   Receipts ....................................................11
   5.1   Introduction ................................................11
   5.2   Requesting a Signed Receipt .................................13
   5.2.1 Additional Signed Receipt Considerations ....................16
   5.3   Message Disposition Notification Format .....................17
   5.3.1 Message Disposition Notification Extensions .................18
   5.3.2 Disposition Mode, Type, and Modifier Use ....................19
   5.4   Message Disposition Notification Processing .................21
   5.4.1 Large File Processing .......................................21
   5.4.2 Example .....................................................22
   6.0   Public Key Certificate Handling .............................24
   6.1   Near Term Approach ..........................................24
   6.2   Long Term Approach ..........................................24
   7.0   Security Considerations .....................................25
   8.0   Acknowledgments .............................................26
   9.0   References ..................................................26
   Appendix IANA Registration Form ...................................28
   Authors' Addresses ................................................28
   Full Copyright Statement ..........................................29

1.0 Introduction ๐Ÿงš

Earlier work on Internet EDI was all about specifying MIME content types for EDI data ([2] RFC 1767). This doc builds on RFC 1767 to add a whole set of data security features: data privacy, data integrity/authenticity, non-repudiation of origin, and non-repudiation of receipt ๐Ÿ”ฅ It also works with the RFCs that already exist and tries really hard to "re-invent" as little as possible ๐Ÿ’… Even though this doc focuses on EDI data, any other data type is supported too โœจ

With the "receipts" enhancement described below (5.2), you can do secure Internet MIME-based EDI by using and complying with these RFCs:

The goal is to define clearly and precisely how these all fit together, and what user agents have to do to be compliant with this document ๐ŸŽ€

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. ๐Ÿ“–

2.0 Overview ๐ŸŒˆ

2.1 Purpose of a Security Guideline for MIME EDI ๐Ÿ’–

The point of these specs is to make sure EDI user agents can interoperate, while invoking some or all of the security features people commonly expect ๐Ÿซถ This doc is also NOT limited to strict EDI use. It applies to any electronic commerce application where business data needs to be exchanged over the Internet in a secure way ๐Ÿ”

2.2 Definitions ๐Ÿ“š

2.2.1 Terms ๐Ÿ’…

   EDI                  Electronic Data Interchange

   EC                   Electronic Commerce

   Receipt              The functional message that is sent from a
                        receiver to a sender to acknowledge
                        receipt of an EDI/EC interchange.

   Signed Receipt       Same as above, but with a digital
                        signature.

   Message Disposition  The Internet messaging format used to
   Notification         convey a receipt.  This term is used
                        interchangeably with receipt.  A signed
                        MDN is a signed receipt.

   Non-repudiation of   NRR is a "legal event" that occurs when
   Receipt (NRR)        the original sender of an EDI/EC
                        interchange has verified the signed
                        receipt coming back from the receiver.
                        NRR IS NOT a functional or a technical
                        message.

   PGP/MIME             Digital envelope security based on the
                        Pretty Good Privacy (PGP) standard
                        (Zimmerman), integrated with MIME Security
                        Multiparts [6].

   S/MIME               A format and protocol for adding
                        Cryptographic signature and/or encryption
                        services to Internet MIME messages.

2.2.2 The Secure Transmission Loop ๐Ÿ”

Okay so this doc is all about the formats and protocols for swapping EDI content that has had security applied to it, using the Internet's messaging environment ๐Ÿ’Œ

The "secure transmission loop" for EDI goes like this: one organization sends a signed and encrypted EDI interchange to another organization and asks for a signed receipt. Later, the receiving organization sends that signed receipt back to the sender โœจ Here's the flow:

  • The organization sending EDI/EC data signs and encrypts the data using either PGP/MIME or S/MIME. On top of that, the message requests a signed receipt back to the sender ๐ŸŽ€
  • The receiving organization decrypts the message and verifies the signature. That gets you verified integrity of the data and authenticity of the sender ๐Ÿ”“
  • The receiving organization then sends a signed receipt back to the sending organization, in the form of a message disposition notification. This signed receipt contains the hash of the signature from the received message, which tells the sender that the message was verified and/or decrypted properly ๐Ÿฅฐ

Everything above describes functionality that would satisfy all the security requirements if you implemented it. The spec doesn't force anything, though. It leaves full flexibility for users to decide how much of those security features they want to deploy with their trading partners ๐ŸŒธ

2.2.3 Definition of Receipts ๐Ÿงพ

Receipt, or signed receipt, is the term for both the functional activity and the message that acknowledges receipt of an EDI/EC interchange. The first term is used when the acknowledgement is for an interchange that results in a receipt which is NOT signed. The second term is used when the acknowledgement is for an interchange that results in a receipt which IS signed. The method for requesting a receipt or a signed receipt is defined in RFC 2298, "An Extensible Message Format for Message Disposition Notifications" ๐Ÿ“ฌ

The "rule" is:

  • If a receipt is requested, explicitly specifying that the receipt be signed, then the receipt MUST be returned with a signature. ๐Ÿ”
  • If a receipt is requested, explicitly specifying that the receipt be signed, but the recipient cannot support the requested protocol format or requested MIC algorithms, then a receipt, either signed or unsigned SHOULD be returned. ๐Ÿค
  • If a signature is not explicitly requested, or if the signed receipt request parameter is not recognized by the UA, a receipt may or may not be returned. This behavior is consistent with the MDN RFC 2298. ๐Ÿ™ƒ

Then there's "Non-Repudiation of Receipt (NRR)." NRR refers to a legal event that happens only when the original sender of an interchange has verified the signed receipt coming back from the message's recipient. Note that NRR is not possible without signatures ๐Ÿ’€

2.3 Assumptions ๐ŸŒŸ

2.3.1 EDI Process Assumptions ๐ŸŽ€

okay so bestie, this is where the spec gets really specific about what it's assuming. ๐Ÿง

  • Encrypted object is an EDI Interchange ๐Ÿ’Œ

This specification assumes that a typical EDI interchange is the lowest level object that will be subject to security services. In ANSI X12, that means everything between, and including, segments ISA and IEA. In EDIFACT, it means everything between, and including, segments UNA/UNB and UNZ. So the EDI interchanges, envelope segments included, stay intact and unreadable during secure transport. ๐Ÿ”’โœจ

  • EDI envelope headers are encrypted ๐Ÿ™ˆ

Following on from that, EDI envelope headers are not visible in the MIME package. Routing from existing commercial EDI networks (called Value Added Networks, or VANs) to the Internet could be made more efficient, so some envelope information might need to be pulled out and made visible in the future. This specification doesn't go into any detail on that, though. ๐ŸŒธ

  • X12.58 and UN/EDIFACT security considerations ๐Ÿ’…

The two biggest EDI standards bodies, ANSI X12 and EDIFACT, have their own built-in security provisions. X12.58 is the security mechanism for ANSI X12, and AUTACK provides security for EDIFACT. This specification does not dictate whether you use these security standards or not. They're both fully compatible with this specification, even if they're a bit redundant with it. ๐Ÿซถ

2.3.2 Flexibility Assumptions ๐Ÿฆ‹

  • Encrypted or unencrypted data ๐Ÿ”“

This specification lets EDI message exchanges happen with EDI data that's either unprotected or protected by encryption. ๐Ÿ’–

  • Signed or unsigned data โœ๏ธ

This specification lets EDI message exchanges happen with or without a digital signature on the original EDI transmission. ๐Ÿ‘‘

  • Use of receipt or not ๐Ÿ“ฌ

This specification lets EDI message transmissions happen with or without a request for receipt notification. Heads up though: if a signed receipt notification is requested, a mic value is REQUIRED as part of the returned receipt. The only exception is when an error condition happens and a mic value can't be returned. In error cases, an unsigned receipt or MDN SHOULD be returned with the correct "disposition modifier" error value. ๐Ÿšจ

  • Formatting choices ๐ŸŽจ

This specification defines two methods for formatting EDI contents that have security applied to them:

  • PGP/MIME
  • S/MIME

This specification relies on the guidelines set forth in RFC 2015/3156/2440, as reflected in [4] "MIME Security with Pretty Good Privacy" (PGP); OpenPGP Message Format, and RFC 2633/2630 [8] "S/MIME Version 3 Message Specification; Cryptographic Message Syntax". PGP/MIME or S/MIME is defined in this Applicability statement. ๐Ÿง

  • Hash function, message digest choices ๐Ÿ”

When a signature is used, it is RECOMMENDED that the SHA1 hash algorithm be used for all outgoing messages. Both MD5 and SHA1 SHOULD be supported for incoming messages.

Hold on, it's giving permutations! ๐Ÿคฏ In summary, the following eight possibilities exist in any given trading relationship:

(1) Sender sends unencrypted data, does not request a receipt.

(2) Sender sends unencrypted data, requests a signed or unsigned receipt. The receiver sends back the signed or unsigned receipt.

(3) Sender sends encrypted data, does not request a receipt.

(4) Sender sends encrypted data, requests a signed or unsigned receipt. The receiver sends back the signed or unsigned receipt.

(5) Sender sends signed data, does not request a signed or unsigned receipt.

(6) Sender sends signed data, requests a signed or unsigned receipt. Receiver sends back the signed or unsigned receipt.

(7) Sender sends encrypted and signed data, does not request a signed or unsigned receipt.

(8) Sender sends encrypted and signed data, requests a signed or unsigned receipt. Receiver sends back the signed or unsigned receipt.

NOTE: Users can choose any of the eight possibilities, but only example (8), when a signed receipt is requested, offers the whole suite of security features described in the "Secure transmission loop" above. โœจ

3.0 Referenced RFCs and Their Contribution ๐Ÿ“š

3.1 RFC 821 SMTP [7] ๐Ÿ“ฎ

This is the core mail transfer standard that all MTAs need to adhere to. ๐Ÿ’Œ

3.2 RFC 822 Text Message Format [3] ๐Ÿ“

Defines message header fields and the parts making up a message. ๐Ÿงพ

3.3 RFC 1847 MIME Security Multiparts [6] ๐Ÿ›ก๏ธ

This document defines security multiparts for MIME: multipart/encrypted and multipart/signed. ๐Ÿ”

3.4 RFC 1892 Multipart/report [9] ๐Ÿ“Š

This RFC defines the use of the multipart/report content type, something that the MDN RFC 2298 builds upon. ๐Ÿงฉ

3.5 RFC 1767 EDI Content [2] ๐Ÿงพ

This RFC defines the use of content type "application" for ANSI X12 (application/EDI-X12), EDIFACT (application/EDIFACT) and mutually defined EDI (application/EDI-Consent). ๐ŸŽ€

3.6 RFC 2015, 3156, 2440 PGP/MIME [4] ๐Ÿ”‘

These RFCs define the use of content types "multipart/encrypted", "multipart/signed", "application/pgp encrypted" and "application/pgp-signature" for defining MIME PGP content. ๐Ÿ’œ

3.7 RFC 2045, 2046, and 2049 MIME [1] ๐ŸŒˆ

These are the basic MIME standards, and every MIME-related RFC builds on them, this one included. Key contributions include the definitions of "content type", "sub-type" and "multipart", as well as encoding guidelines. Those guidelines establish 7-bit US-ASCII as the canonical character set to be used in Internet messaging. ๐Ÿซง

3.8 RFC 2298 Message Disposition Notification [5] ๐Ÿ“ฌ

This Internet RFC defines how a message disposition notification (MDN) is requested, and the format and syntax of the MDN. The MDN is the basis upon which receipts and signed receipts are defined in this specification. ๐Ÿฆ„

3.9 RFC 2633 and 2630 S/MIME Version 3 Message Specifications [8] ๐ŸŽ

This specification describes how MIME shall carry CMS Objects. ๐Ÿ’…

4.0 Structure of an EDI MIME Message - Applicability ๐Ÿงธ

4.1 Introduction ๐Ÿ—บ๏ธ

The structures below are described hierarchically, in terms of which RFCs are applied to form the specific structure. For details on how to code in compliance with all the RFCs involved, go straight to the RFCs referenced. ๐Ÿ“–

These structures only describe the initial transmission. Receipts and requests for receipts are handled in section 5. ๐Ÿซถ

4.2 Structure of an EDI MIME Message - PGP/MIME ๐Ÿ”

4.2.1 No Encryption, No Signature ๐ŸŒธ

-RFC822/2045
  -RFC1767 (application/EDIxxxx or /xml)

4.2.2 No Encryption, Signature โœ๏ธ

-RFC822/2045
  -RFC1847 (multipart/signed)
    -RFC1767 (application/EDIxxxx or /xml)
    -RFC2015/2440/3156 (application/pgp-signature)

4.2.3 Encryption, No Signature ๐Ÿ™ˆ

-RFC822/2045
  -RFC1847 (multipart/encrypted)
    -RFC2015/2440/3156 (application/pgp-encrypted)
      -"Version: 1"
    -RFC2015/2440/3156 (application/octet-stream)
      -RFC1767 (application/EDIxxxx or /xml) (encrypted)

4.2.4 Encryption, Signature ๐Ÿ‘‘

-RFC822/2045
  -RFC1847 (multipart/encrypted)
    -RFC2015/2440/3156 (application/pgp-encrypted)
      -"Version: 1"
    -RFC2015/2440/3156 (application/octet-stream)
      -RFC1847 (multipart/signed)(encrypted)
        -RFC1767 (application/EDIxxxx or /xml)(encrypted)
        -RFC2015/2440/3156 (application/pgp-signature)(encrypted)

4.3 Structure of an EDI MIME Message - S/MIME ๐Ÿง

4.3.1 No Encryption, No Signature ๐ŸŽ€

-RFC822/2045
  -RFC1767 (application/EDIxxxx or /xml)

4.3.2 No Encryption, Signature ๐Ÿ’–

-RFC822/2045
  -RFC1847 (multipart/signed)
    -RFC1767 (application/EDIxxxx or /xml)
    -RFC2633 (application/pkcs7-signature)

4.3.3 Encryption, No Signature ๐Ÿฆ‹

-RFC822/2045
  -RFC2633 (application/pkcs7-mime)
    -RFC1767 (application/EDIxxxx or /xml) (encrypted)

4.3.4 Encryption, Signature ๐ŸŒˆ

-RFC822/2045
  -RFC2633 (application/pkcs7-mime)
    -RFC1847 (multipart/signed) (encrypted)
      -RFC1767 (application/EDIxxxx or /xml) (encrypted)
      -RFC2633 (application/pkcs7-signature) (encrypted)

5.0 Receipts ๐Ÿ“ฌโœจ

5.1 Introduction

Okay so, to get non-repudiation of receipt (NRR) ๐Ÿ”, the receiving trading partner's UA (User Agent) has to implement a signed receipt. That's a message disposition notification that gets digitally signed ๐Ÿ’…. The notification is the one specified by RFC 2298, and the receiving partner signs it as part of a multipart/signed MIME message โœจ.

The following support for signed receipts is REQUIRED:

  1. The ability to create a multipart/report; where the report-type = disposition-notification.
  2. The ability to calculate a message integrity check (MIC) on the received message. The calculated MIC value will be returned to the sender of the message inside the signed receipt.
  3. The ability to create a multipart/signed content with the message disposition notification as the first body part, and the signature as the second body part.
  4. The ability to return the signed receipt to the sending trading partner.

The signed receipt is used to notify a sending trading partner that requested it that:

  1. The receiving trading partner acknowledges receipt of the sent EDI Interchange.
  2. If the sent message was signed, then the receiving trading partner has authenticated the sender of the EDI Interchange.
  3. If the sent message was signed, then the receiving trading partner has verified the integrity of the sent EDI Interchange.

Regardless of whether the EDI Interchange was sent in S/MIME or PGP/MIME format, the receiving trading partner's UA MUST provide the following basic processing ๐Ÿซถ:

  1. If the sent EDI Interchange is encrypted, then the encrypted symmetric key and initialization vector (if applicable) is decrypted using the receiver's private key.
  2. The decrypted symmetric encryption key is then used to decrypt the EDI Interchange.
  3. The receiving trading partner authenticates signatures in a message using the sender's public key. The authentication algorithm performs the following:
    • a) The message integrity check (MIC or Message Digest) is decrypted using the sender's public key.
    • b) A MIC on the signed contents (the MIME header and encoded EDI object, as per RFC 1767) in the message received is calculated using the same one-way hash function that the sending trading partner used.
    • c) The MIC extracted from the message that was sent, and the MIC calculated using the same one-way hash function that the sending trading partner used, is compared for equality.
  4. The receiving trading partner formats the MDN and sets the calculated MIC into the "Received-content-MIC" extension field.
  5. The receiving trading partner creates a multipart/signed MIME message according to RFC 1847.
  6. The MDN is the first part of the multipart/signed message, and the digital signature is created over this MDN, including its MIME headers.
  7. The second part of the multipart/signed message contains the digital signature. The "protocol" option specified in the second part of the multipart/signed is as follows:

S/MIME: protocol = "application/pkcs-7-signature"

PGP/MIME: protocol = "application/pgp-signature"

  1. The signature information is formatted according to S/MIME or PGP/MIME specifications.

The EDI Interchange and the RFC 1767 MIME EDI content header can actually be part of a multi-part MIME content-type. When the EDI Interchange is part of a multi-part MIME content-type, the MIC MUST be calculated across the entire multi-part content, including the MIME headers. ๐Ÿงฉ

The signed MDN, when received by the sender of the EDI Interchange, can be used by the sender:

  1. As an acknowledgment that the EDI Interchange sent was delivered and acknowledged by the receiving trading partner. The receiver does this by returning the original message id of the sent message in the MDN portion of the signed receipt.
  2. As an acknowledgment that the integrity of the EDI Interchange was verified by the receiving trading partner. The receiver does this by returning the calculated MIC of the received EDI Interchange (and 1767 MIME headers) in the "Received-content-MIC" field of the signed MDN.
  3. As an acknowledgment that the receiving trading partner has authenticated the sender of the EDI Interchange.
  4. As a non-repudiation of receipt when the signed MDN is successfully verified by the sender with the receiving trading partner's public key and the returned MIC value inside the MDN is the same as the digest of the original message. ๐Ÿ‘‘

5.2 Requesting a Signed Receipt

Message Disposition Notifications are requested as per RFC 2298, "An Extensible Message Format for Message Disposition Notification". A request that the receiving user agent issue a message disposition notification is made by placing the following header into the message to be sent ๐Ÿ“จ:

MDN-request-header = "Disposition-notification-to" ":"
                      mail-address

The mail-address field is specified as an RFC 822 user@domain address, and is the return address for the message disposition notification.

In addition to requesting a message disposition notification, a message disposition notification that is digitally signed (what has been referred to as a signed receipt) can be requested by placing the following in the message header following the "Disposition-Notification-To" line:

Disposition-notification-options =
      "Disposition-Notification-Options" ":"
      disposition-notification-parameters

where

disposition-notification-parameters =
                  parameter *(";" parameter)

where

parameter = attribute "=" importance ", " 1#value

where

importance = "required" | "optional"

So the Disposition-notification-options string could be:

signed-receipt-protocol=optional, <protocol symbol>;
signed-receipt-micalg=optional, <micalg1>, <micalg2>,...;

The currently supported values for <protocol symbol> are "pkcs7-signature", for the S/MIME detached signature format, or "pgp-signature", for the PGP signature format.

The currently supported values for MIC algorithm values are:

Algorithm   Value
used

MD5         md5
SHA-1       sha1

(Historical Note: Some early implementations of EDIINT emitted and expected "rsa-md5" and "rsa-sha1" for the micalg parameter.) Receiving agents SHOULD be able to recover gracefully from a micalg parameter value that they do not recognize. ๐Ÿ•ฐ๏ธ

An example of a formatted options line would be as follows:

Disposition-notification-options:
  signed-receipt-protocol=optional, pkcs7-signature;
  signed-receipt-micalg=optional, sha1, md5

The semantics of the "signed-receipt-protocol" parameter are as follows:

  1. The "signed-receipt-protocol" parameter is used to request a signed receipt from the recipient trading partner. It also specifies the format in which the signed receipt should be returned to the requester.

The "signed-receipt-micalg" parameter is a list of MIC algorithms preferred by the requester for use in signing the returned receipt. The list of MIC algorithms should be honored by the recipient from left to right.

Both the "signed-receipt-protocol" and the "signed-receipt-micalg" option parameters are REQUIRED when requesting a signed receipt.

  1. The "importance" attribute of "optional" is defined in the MDN RFC 2298 and has the following meaning:

Parameters with an importance of "optional" permit a UA that does not understand the particular options parameter to still generate a MDN in response to a request for a MDN. A UA that does not understand the "signed-receipt-protocol" parameter, or the "signed-receipt-micalg" will obviously not return a signed receipt.

The importance of "optional" is used for the signed receipt parameters because it is RECOMMENDED that an MDN be returned to the requesting trading partner even if the recipient could not sign it.

The returned MDN will contain information on the disposition of the message as well as why the MDN could not be signed. See the Disposition field in section 5.3 for more information.

Within an EDI trading relationship, if a signed receipt is expected and is not returned, then the validity of the transaction is up to the trading partners to resolve. In general, if a signed receipt is required in the trading relationship and is not received, the transaction will likely not be considered valid. ๐Ÿค”

5.2.1 Additional Signed Receipt Considerations

The "rules" stated in Section 2.2.3 for signed receipts are as follows:

  1. When a receipt is requested, explicitly specifying that the receipt be signed, then the receipt MUST be returned with a signature.
  2. When a receipt is requested, explicitly specifying that the receipt be signed, but the recipient cannot support either the requested protocol format, or requested MIC algorithms, then either a signed or unsigned receipt SHOULD be returned.
  3. When a signature is not explicitly requested, or if the signed receipt request parameter is not recognized by the UA, then no receipt, an unsigned receipt, or a signed receipt MAY be returned by the recipient.

NOTE: For Internet EDI, it is RECOMMENDED that when a signature is not explicitly requested, or if parameters are not recognized, the UA send back at a minimum an unsigned receipt. If a signed receipt was always returned as a policy, whether requested or not, then any false unsigned receipts can be repudiated. ๐Ÿ’œ

When a request for a signed receipt is made, but there is an error in processing the contents of the message, a signed receipt MUST still be returned. The request for a signed receipt SHALL still be honored, though the transaction itself may not be valid. The reason for why the contents could not be processed MUST be set in the "disposition-field". ๐Ÿšจ

When a request for a signed receipt is made, the "Received-content-MIC" MUST always be returned to the requester. The "Received-content-MIC" MUST be calculated as follows:

  • For any signed messages, the MIC to be returned is calculated on the RFC 1767 MIME header and content. Canonicalization as specified in RFC 1848 MUST be performed before the MIC is calculated, since the sender requesting the signed receipt was also REQUIRED to canonicalize.
  • For encrypted, unsigned messages, the MIC to be returned is calculated on the decrypted RFC 1767 MIME header and content. The content after decryption MUST be canonicalized before the MIC is calculated.
  • For unsigned, unencrypted messages, the MIC MUST be calculated over the message contents prior to Content-Transfer-Encoding and without the MIME or any other RFC 822 headers, since these are sometimes altered or reordered by MTAs.

5.3 Message Disposition Notification Format ๐ŸŽ€

okay so the format of a message disposition notification is specified in RFC 2298, bestie ๐Ÿ’– For Internet EDI, this is the format we're using:

  • content-type - per RFC 1892 and the RFC 2298 specification
  • reporting-ua-field - per RFC 2298 specification
  • MDN-gateway-field - per RFC 2298 specification
  • original-recipient-field - per RFC 2298 specification
  • final-recipient-field - per RFC 2298 specification
  • original-message-id-field - per RFC 2298 specification
  • disposition-field - the following disposition-mode values SHOULD be used for Internet EDI:
    • "automatic-action" - The disposition described by the disposition type was a result of an automatic action, rather than an explicit instruction by the user for this message. ๐Ÿค–
    • "manual-action" - The disposition described by the disposition type was a result of an explicit instruction by the user rather than some sort of automatically performed action. ๐Ÿ™‹โ€โ™€๏ธ
    • "MDN-sent-automatically" - The MDN was sent because the UA had previously been configured to do so. โš™๏ธ
    • "MDN-sent-manually" - The user explicitly gave permission for this particular MDN to be sent. "MDN-sent-manually" is meaningful with "manual-action", but not with "automatic-action". ๐Ÿ’…
  • disposition-field - the following disposition-type values SHOULD be used for Internet EDI:
    • "processed" - The message has been processed in some manner (e.g., printed, faxed, forwarded, gatewayed) without being displayed to the user. The user may or may not see the message later. โœจ
    • "failed" - A failure occurred that prevented the proper generation of an MDN. More information about the cause of the failure may be contained in a Failure field. The "failed" disposition type is not to be used for the situation in which there is some problem in processing the message other than interpreting the request for an MDN. The "processed" or other disposition type with appropriate disposition modifiers is to be used in such situations. ๐Ÿ’€
  • disposition-field - the following disposition-modifier values SHOULD be used for Internet EDI:
    • "error" - An error of some sort occurred that prevented successful processing of the message. Further information is contained in an Error field. ๐Ÿšจ
    • "warning" - The message was successfully processed but some sort of exceptional condition occurred. Further Information is contained in a Warning field. โš ๏ธ

5.3.1 Message Disposition Notification Extensions ๐Ÿงฉ

okay so the following "extension field" is being added to support signed receipts for RFC 1767 MIME content type, and for multipart MIME content types that include the RFC 1767 MIME content type. The extension field defined below follows the disposition-field in the MDN.

The Received-content-MIC extension field is set when the integrity of the received message is verified. The MIC is the base64 encoded quantity computed over the received message with a hash function. For details of "what" the Received-content-MIC should be calculated over, see Section 5.2.1. The algorithm used to calculate the Received-content-MIC value MUST be the same as the micalg value used by the sender in the multipart/signed message. When no signature is received, or the mic-alg parameter is not supported, then it is RECOMMENDED that the SHA1 algorithm be used to calculate the MIC on the received message or message contents. ๐Ÿ”

This field is set only when the contents of the message are processed successfully. This field is used in conjunction with the recipient's signature on the MDN in order for the sender to verify "non-repudiation of receipt". ๐Ÿงพ

- extension field = "Received-content-MIC"  ":"  MIC

  where:

  <MIC> = <base64MicValue> "," <micalg>

  <base64MicValue> = the result of one way hash function, base64
                     encoded.

  < micalg> = the micalg value defined in RFC1847, an IANA
              registered MIC algorithm ID token.

5.3.2 Disposition Mode, Type, and Modifier Use ๐Ÿ’–

Guidelines for using the disposition-mode, disposition-type, and disposition-modifier fields within Internet EDI are covered in this section. The disposition-mode, disposition-type', and disposition-modifier' fields are described in detail in RFC 2298. The disposition-mode', disposition-type" and disposition-modifier" values SHOULD be used as follows:

5.3.2.1 Successful Processing โœ…

When the request for a receipt or signed receipt is made, and the received message contents are successfully processed by the receiving EDI UA, a receipt or MDN SHOULD be returned with the "disposition-type" set to there is no explicit way for a user to control the sending of the MDN, then the first part of the "disposition-mode" should be set to "automatic-action". When the MDN is being sent under user configurable control, then the first part of the "disposition-mode" should be set to "manual-action". Since a request for a signed receipt should always be honored, the user MUST not be allowed to configure the UA to not send a signed receipt when the sender requests one. ๐Ÿ™…โ€โ™€๏ธ

The second part of the "disposition-mode" is set to "MDN-sent-manually" if the user gave explicit permission for the MDN to be sent. Again, the user MUST not be allowed to explicitly refuse to send a signed receipt when the sender requests one. The second part of the "disposition-mode" is set to "MDN-sent-automatically" whenever the EDI UA sends the MDN automatically, regardless of whether the sending was under a user's, administrator's, or under software control. ๐Ÿค–

Since EDI content is generally handled automatically by the EDI UA, a request for a receipt or signed receipt will generally return the following in the "disposition-field":

  Disposition: automatic-action/MDN-sent-automatically; processed

Note this specification does not restrict the use of the "disposition-mode" to just automatic actions. Manual actions are valid, as long as it is kept in mind that a request for a signed receipt MUST be honored. ๐Ÿซถ

5.3.2.2 Unprocessed Content ๐Ÿ™ˆ

The request for a signed receipt requires the use of two "disposition-notification-options", which specify the protocol format of the returned signed receipt, and the MIC algorithm used to calculate the mic over the message contents. The "disposition-field" values that should be used when the message content is being rejected or ignored, for instance if the EDI UA determines that a signed receipt cannot be returned because it does not support the requested protocol format, so the EDI UA chooses not to process the message contents itself, should be specified in the MDN "disposition-field" as follows:

  Disposition: "disposition-mode";
    failed/Failure: unsupported format

The syntax of the "failed" "disposition-type" is general, allowing the sending of any textual information along with the "failed" "disposition-type". For use in Internet EDI, the following "failed" values are defined:

  • "Failure: unsupported format"
  • "Failure: unsupported MIC-algorithms"

5.3.2.3 Content Processing Errors ๐Ÿšจ

When errors occur while processing the received message content, the "disposition-field" should be set to the "processed" "disposition-type" value and the "error" "disposition-modifier" value. For use in Internet EDI, the following "error" "disposition-modifier" values are defined:

  • "Error: decryption-failed" - the receiver could not decrypt the message contents.
  • "Error: authentication-failed" - the receiver could not authenticate the sender.
  • "Error: integrity-check-failed" - the receiver could not verify content integrity.
  • "Error: unexpected-processing-error" - a catch-all for any additional processing errors.

An example of how the "disposition-field" would look when content processing errors are detected is as follows:

  Disposition: "disposition-mode";
    processed/Error: decryption-failed

5.3.2.4 Content Processing Warnings โš ๏ธ

Situations arise in EDI where, even if a trading partner cannot be authenticated correctly, the trading partners still agree to continue processing the EDI transactions. Transaction reconciliation is done between the trading partners at a later time. In the content processing warning situations described above, the "disposition-field" SHOULD be set to the "processed" "disposition-type" value, and the "warning" "disposition-modifier" value. For use in Internet EDI, the following "warning" "disposition-modifier" value is defined:

  • "Warning: authentication-failed, processing continued"

An example of how the "disposition-field" would look when content processing warnings are detected is as follows:

  Disposition: "disposition-mode"; processed/Warning:
                authentication-failed, processing continued

5.4 Message Disposition Notification Processing ๐Ÿ“ฌ

5.4.1 Large File Processing ๐Ÿง

Large EDI Interchanges sent via SMTP can be automatically fragmented by some message transfer agents. A subtype of message/partial is defined in RFC 2045 [1] to allow large objects to be delivered as separate pieces of mail and to be automatically reassembled by the receiving user agent. Using message/partial can help alleviate fragmentation of large messages by different message transfer agents, but it does not completely eliminate the problem. It is still possible that a piece of a partial message, upon re-assembly, may prove to contain a partial message as well. This is allowed by the Internet standards, and it is the responsibility of the user agent to reassemble the fragmented pieces. ๐Ÿงฉ

It is RECOMMENDED that the size of the EDI Interchange sent via SMTP be configurable, so that if fragmentation is needed, message/partial can be used to send the large EDI Interchange in smaller pieces. RFC 2045 [1] defines the use of Content-Type: message/partial.

Note: Support of the message/partial content type for use in Internet EDI is OPTIONAL, and in the absence of knowledge that the recipient supports partial, it SHOULD NOT be used. ๐Ÿ™…โ€โ™€๏ธ

The receiving UA is required to re-assemble the original message before sending the message disposition notification to the original sender of the message. A message disposition notification is used to specify the disposition of the entire message that was sent, and should not be returned by a processing UA until the entire message is received, even if the received message requires re-assembling. the whole message, babe, not just the bits you've got so far ๐Ÿ’œ

5.4.2 Example โœจ

okay so this one is a signed receipt example ๐Ÿ’… it's what a UA sends back after it successfully processes a MIME EDI content type. the sending trading partner asked for a return signed receipt, so the UA is basically saying "got it, all good" ๐ŸŽ€

this example follows the S/MIME application/pkcs-7-signature format ๐Ÿฆ‹

NOTE: this example is only an illustration and is not considered part of the protocol specification ๐Ÿ™ˆ if it ever conflicts with the protocol definitions above or in the other referenced RFCs, the example is the one that's wrong ๐Ÿ’€
     To: <recipient email>
     Subject:
     From: <sender email>
     Date: <date>
     Mime-Version: 1.0
     Content-Type: multipart/signed; boundary="separator";
       micalg=sha1; protocol="application/pkcs7-signature"

     --separator
   & Content-Type:  multipart/report; report-type=disposition
   &   notification;  boundary="xxxxx"
   &
   & --xxxxx
   & Content-Type: text/plain
   &
   & The message sent to Recipient <Recipient@cyclonesoftware.com>
   & has been received, the EDI Interchange was successfully
   & decrypted and its integrity was verified.  In addition, the
   & sender of the message, Sender <Edi_Sender@cyclonesoftware.com>
   & was authenticated as the originator of the message.  There is
   & no guarantee however that the EDI Interchange was
   & syntactically correct, or was received by the EDI
   & application.
   &
   & --xxxxx
   & Content-Type:  message/disposition-notification
   &
   & Reporting-UA: Interchange.cyclonesoftware.com (CI 2.2)
   & Original-Recipient: rfc822; Edi_Recipient@cyclonesoftware.com
   & Final-Recipient: rfc822;  Edi_Recipient@cyclonesoftware.com
   & Original-Message-ID: <17759920005.12345@cyclonesoftware.com >
   & Disposition: automatic-action/MDN-sent-automatically; processed
   & Received-content-MIC: Q2hlY2sgSW50XwdyaXRIQ, sha1
   &
   & --xxxxx
   & Content-Type: message/rfc822
   &
   & To: <recipient email>
   & Subject:
   &
   &  [additional header fields go here]
   &
   & --xxxxx--

     --separator
     Content-Type: application/pkcs7-signature; name=smime.p7s;
     Content-Transfer-Encoding: base64
     Content-Disposition: attachment; filename=smime.p7s

     MIIHygYJKoZIhvcNAQcDoIIHuzCCB7cCAQAxgfIwge8CAQAwg
     ZgwgYMxFjAUBgNVBAMTDVRlcnJ5IEhhcmRpbmcxEDAOBgNVBA
     oTB0NZQ0xPTkUxDDAKBgNVBAsTA04vQTEQMA4GA1UEBxMHU=

   --separator--

Notes:

  • the lines that start with "&" are what the signature is calculated over ๐Ÿ”ฅ

(for the details on how to prepare the multipart/signed with protocol = "application/pkcs7-signature", check out the "S/MIME Message Specification, PKCS Security Services for MIME" ๐Ÿ“š)

Note: okay so as RFC 1892 [9] explains, putting the original message, or parts of it, in the third body part of the multipart/report is not required ๐ŸŒธ that third part is optional. that said, it is RECOMMENDED that you put the received headers from the original message in there, because they can be super helpful when you're tracking problems ๐Ÿ•ต๏ธโ€โ™€๏ธ

also, the textual first body part of the multipart/report can be used to explain the error conditions that the disposition headers report in more detail โœจ when you use it like that, a person can diagnose the problem way better ๐Ÿง ๐Ÿ’–


6.0 Public Key Certificate Handling ๐Ÿ”

6.1 Near Term Approach

okay so for now, the exchange of public keys and the certifying of those keys has to be handled as part of setting up a trading partnership ๐Ÿค the UA and/or EDI application interface must maintain a database of the public keys used for encryption or signatures, plus the mapping between each EDI trading partner ID and its RFC 822 [3] email address ๐Ÿ“‡ how you set up the partnership and configure the secure EDI messaging system might look different between trading partners and software packages, so it's giving "choose your own adventure" ๐Ÿงš

for systems that use X.509 certificates, it is RECOMMENDED that trading partners self-certify each other if they aren't using an agreed upon certification authority ๐ŸŽ€ and it is highly RECOMMENDED that when trading partners are using S/MIME, they also exchange public key certificates following the recommendations in the S/MIME Version 3 Message Specification ๐Ÿ’… the message formats and S/MIME conformance requirements for certificate exchange are spelled out in this document too ๐Ÿ“œ

this applicability statement does NOT require the use of a certification authority ๐Ÿ™Œ so using one is OPTIONAL ๐Ÿฆ‹

6.2 Long Term Approach

in the long run, more Internet-EDI standards might be developed to make setting up a trading partnership easier ๐ŸŒˆ that could include third party authentication of trading partners, plus attributes of the trading relationship too ๐Ÿ’œ

7.0 Security Considerations ๐Ÿšจ

this entire document is about securely transporting business to business data, and it looks at both privacy and authentication issues ๐Ÿ”’ this section is serious business, bestie ๐Ÿ˜ญ

Extracted from S/MIME Version 2 Message Specification:

40-bit encryption is considered weak by most cryptographers ๐Ÿ’€ using weak cryptography offers little real security over sending plain text ๐Ÿ™ˆ but other S/MIME features, like the spec for tripleDES or AES and the ability to announce stronger cryptographic capabilities to the parties you talk to, let senders create messages that use strong encryption ๐Ÿ”ฅ using weak cryptography is never recommended unless the only alternative is no cryptography at all ๐Ÿฅฒ when it's feasible, sending and receiving agents should tell senders and recipients how cryptographically strong their messages are โœจ

Extracted from S/MIME Version 2 Certificate Handling:

there are lots of situations where processing a certificate might fail ๐Ÿ˜ฌ since the processing might be done by a user agent, a security gateway, or some other program, there isn't one single way to handle every failure ๐Ÿคทโ€โ™€๏ธ just because the handling methods aren't listed here, though, don't assume they aren't important ๐Ÿšซ it's actually the opposite: if a certificate isn't provably valid and tied to the message, the processing software should take immediate and noticeable steps to tell the end user about it ๐Ÿšจ๐Ÿšจ

some of the many places where signature and certificate checking might fail include:

  • no certificate chain leads to a trusted CA ๐Ÿ’”
  • no ability to check the CRL for a certificate ๐Ÿ’”
  • an invalid CRL was received ๐Ÿ’”
  • the CRL being checked is expired ๐Ÿ’”
  • the certificate is expired ๐Ÿ’”
  • the certificate has been revoked ๐Ÿ’”

there are definitely other ways a certificate can be invalid, and it's the processing software's job to check all of them thoroughly ๐Ÿง and to decide what to do if a check fails ๐Ÿซถ

8.0 Acknowledgments ๐ŸŒท

huge thank you to the previous authors of the MIME-based Secure EDI IETF Draft: Mats Jansson ๐Ÿ’–

the authors want to give special thanks to Carl Hage, Jun Ding, Dale Moberg, and Karen Rosenthal for giving the team super valuable and very thorough feedback ๐Ÿ‘‘ without people like that, this work would be really hard to finish in a way that's useful to the users and implementers of the technology ๐Ÿ™Œ

and the authors would also like to thank Harald Alvestrand, Jim Galvin, and Roger Fajman for their guidance and input ๐Ÿซถ

9.0 References ๐Ÿ“š

[1] Borenstein, N. and N. Freed, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996.

Borenstein, N. and N. Freed, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", RFC 2046, November 1996.

Borenstein, N. and N. Freed, "Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples", RFC 2049, November 1996.

[2] Crocker, D., "MIME Encapsulation of EDI Objects", RFC 1767, March 1995.

[3] Resnick, P., "Internet Message Format", RFC 2822, April 2001.

[4] Elkins, M., "MIME Security With Pretty Good Privacy (PGP)", RFC 2015, October 1996.

Callas, J., Donnerhacke, L., Finney, H. and R.Thayer "OpenPGP Message Format", RFC 2440, November 1998.

Elkins, M., Del Torto, D., Levien, R. and T. Roessler "MIME Security with OpenPGP", RFC 3156, August 2001.

[5] Fajman, R., "An Extensible Message Format for Message Disposition Notifications", RFC 2298, March 1998.

[6] Galvin, J., Murphy, S., Crocker, S. and N. Freed, "Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted", RFC 1847, October 1995.

[7] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, April 1982.

[8] Ramsdell, B., "S/MIME Version 3 Message Specification; Cryptographic Message Syntax", RFC 2633, June 1999.

Housley, R., "Cryptographic Message Syntax", RFC 2630, June 1999.

[9] Vaudreuil, G., "The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages", RFC 1892, January 1996.

Appendix IANA Registration Form ๐Ÿงพ

A.1 IANA registration of the signed-receipt-protocol content disposition parameter

Parameter-name: signed-receipt-protocol
Syntax: See section 5.2 of this document
Specification: See section 5.2 of this document

A.2 IANA registration of the signed-receipt-micalg content disposition parameter

Parameter-name: signed-receipt-micalg
Syntax: See section 5.2 of this document
Specification: See section 5.2 of this document

A.3 IANA registration of the Received-content-MIC MDN extension field name

Extension field name: Received-content-MIC
Syntax: See section 5.3.1 of this document
Specification: See section 5.3.1 of this document

Authors' Addresses ๐Ÿฆ‹

Terry Harding
Cyclone Commerce
8388 E. Hartford Drive
Scottsdale, Arizona 85255, USA

EMail: tharding@cyclonecommerce.com
Chuck Shih
Gartner Group
251 River Oaks Parkway
San Jose, CA 95134-1913 USA

EMail: chuck.shih@gartner.com
Rik Drummond
Drummond Group
P.O. Box 101567
Ft. Worth, TX 76105 USA

EMail: rik@drummondgroup.com

Okay bestie, the legal stuff matters too, so listen up ๐Ÿ’… Copyright (C) The Internet Society (2002). All Rights Reserved โœจ

This document and translations of it can be copied and furnished to others ๐Ÿฆ‹. Derivative works that comment on or otherwise explain it, or assist in implementing it, can be prepared, copied, published and distributed, in whole or in part, without restriction of any kind ๐ŸŽ€. The one catch is that the above copyright notice and this paragraph have to be included on all such copies and derivative works ๐Ÿซถ. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations ๐Ÿ™ˆ. The exceptions are when it's needed for developing Internet standards, in which case the copyright procedures in the Internet Standards process must be followed, or when it's translated into languages other than English ๐ŸŒ.

The limited permissions above are perpetual and won't be revoked by the Internet Society or its successors or assigns ๐Ÿ’œ. This document and the information in it are provided on an "AS IS" basis, and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ๐Ÿ˜ญ


Acknowledgement ๐ŸŒธ

Funding for the RFC Editor function is currently provided by the Internet Society ๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from