RFC 1115 HISTORIC EMAIL · CRYPTOGRAPHY · ENCRYPTION

PEM Part III: Privacy enhancement for Internet electronic mail: Part III - algorithms, modes, and identifiers

Algorithm identifiers and specifications for Privacy Enhanced Mail.

On rfc-editor.org ↗
PUBLISHED
August 1989
AUTHORS
J. Linn
STREAM
Legacy
OBSOLETED BY
RFC 1423 — PEM algorithms
SYMMETRIC ALGORITHMS
DES-ECB, DES-EDE, DES-CBC
ASYMMETRIC ALGORITHM
RSA
INTEGRITY ALGORITHMS
MAC (64 bits), MD2 (128 bits)
REPLACED BY
RFC 1423
DOI
10.17487/RFC1115

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                            J. Linn
Request for Comments:  1115                                          DEC
                                                  IAB Privacy Task Force
                                                             August 1989


           Privacy Enhancement for Internet Electronic Mail:
             Part III -- Algorithms, Modes, and Identifiers

STATUS OF THIS MEMO

   This RFC suggests a draft standard elective protocol for the Internet
   community, and requests discussion and suggestions for improvement.
   This RFC provides definitions, references, and citations for
   algorithms, usage modes, and associated identifiers used in RFC-1113
   and RFC-1114 in support of privacy-enhanced electronic mail.
   Distribution of this memo is unlimited.

ACKNOWLEDGMENT

   This RFC is the outgrowth of a series of IAB Privacy Task Force
   meetings and of internal working papers distributed for those
   meetings.  I would like to thank the following Privacy Task Force
   members and meeting guests for their comments and contributions at
   the meetings which led to the preparation of this RFC: David
   Balenson, Curt Barker, Jim Bidzos, Matt Bishop, Morrie Gasser, Russ
   Housley, Steve Kent (chairman), Dan Nessett, Mike Padlipsky, Rob
   Shirey, and Steve Wilbur.

Table of Contents

   1.  Executive Summary                                             2
   2.  Symmetric Encryption Algorithms and Modes                     2
   2.1.  DES Modes                                                   2
   2.1.1.  DES in ECB mode (DES-ECB)                                 2
   2.1.2.  DES in EDE mode (DES-EDE)                                 2
   2.1.3.  DES in CBC mode (DES-CBC)                                 3
   3.  Asymmetric Encryption Algorithms and Modes                    3
   3.1.  RSA                                                         3
   4.  Integrity Check Algorithms                                    3
   4.1.  Message Authentication Code (MAC)                           4
   4.2.  RSA-MD2 Message Digest Algorithm                            4
   4.2.1.  Discussion                                                4
   4.2.2.  Reference Implementation                                  5
   NOTES                                                             7

1.  Executive Summary

   This RFC provides definitions, references, and citations for algorithms,
   usage modes, and associated identifiers used in RFC-1113 and RFC-1114
   in support of privacy-enhanced electronic mail in the Internet
   community.  As some parts of this material are cited by both RFC-1113
   and RFC-1114, and as it is anticipated that some of the definitions
   herein may be changed, added, or replaced without affecting the citing
   RFCs, algorithm-specific material has been placed into this separate
   RFC.  The text is organized into three primary sections; dealing with
   symmetric encryption algorithms, asymmetric encryption algorithms, and
   integrity check algorithms.

2.  Symmetric Encryption Algorithms and Modes

   This section identifies alternative symmetric encryption algorithms
   and modes which may be used to encrypt DEKs, MICs, and message text,
   and assigns them character string identifiers to be incorporated in
   encapsulated header fields to indicate the choice of algorithm
   employed.  (Note: all alternatives presently defined in this category
   correspond to different usage modes of the DEA-1 (DES) algorithm,
   rather than to other algorithms per se.)

2.1.  DES Modes

   The Block Cipher Algorithm DEA-1, defined in ANSI X3.92-1981 [3] may
   be used for message text, DEKs, and MICs.  The DEA-1 is equivalent to
   the Data Encryption Standard (DES), as defined in FIPS PUB 46 [4].
   The ECB and CBC modes of operation of DEA-1 are defined in ISO IS 8372
   [5].

2.1.1.  DES in ECB mode (DES-ECB)

   The string "DES-ECB" indicates use of the DES algorithm in Electronic
   Codebook (ECB) mode.  This algorithm/mode combination is used for DEK
   and MIC encryption.

2.1.2.  DES in EDE mode (DES-EDE)

   The string "DES-EDE" indicates use of the DES algorithm in
   Encrypt-Decrypt-Encrypt (EDE) mode as defined by ANSI X9.17 [2] for
   key encryption and decryption with pairs of 64-bit keys.  This
   algorithm/mode combination is used for DEK and MIC encryption.

2.1.3.  DES in CBC mode (DES-CBC)

   The string "DES-CBC" indicates use of the DES algorithm in Cipher
   Block Chaining (CBC) mode.  This algorithm/mode combination is used
   for message text encryption only.  The CBC mode definition in IS 8372
   is equivalent to that provided in FIPS PUB 81 [6] and in ANSI X3.106-
   1983 [7].

3.  Asymmetric Encryption Algorithms and Modes

   This section identifies alternative asymmetric encryption algorithms and
   modes which may be used to encrypt DEKs and MICs, and assigns them
   character string identifiers to be incorporated in encapsulated
   header fields to indicate the choice of algorithm employed.  (Note:
   only one alternative is presently defined in this category.)

3.1.  RSA

   The string "RSA" indicates use of the RSA public-key encryption
   algorithm, as described in [8].  This algorithm is used for DEK and
   MIC encryption, in the following fashion: the product n of a
   individual's selected primes p and q is used as the modulus for the
   RSA encryption algorithm, comprising, for our purposes, the
   individual's public key.  A recipient's public key is used in
   conjunction with an associated public exponent (either 3 or 1+2**16)
   as identified in the recipient's certificate.

   When a MIC must be padded for RSA encryption, the MIC will be
   right-justified and padded on the left with zeroes.  This is also
   appropriate for padding of DEKs on singly-addressed messages, and for
   padding of DEKs on multi-addressed messages if and only if an exponent
   of 3 is used for no more than one recipient.  On multi-addressed
   messages in which an exponent of 3 is used for more than one recipient,
   it is recommended that a separate 64-bit pseudorandom quantity be
   generated for each recipient, in the same manner in which IVs are
   generated.  (Reference [9] discusses the rationale for this
   recommendation.)  At least one copy of the pseudorandom quantity should
   be included in the input to RSA encryption, placed to the left of the
   DEK.

4.  Integrity Check Algorithms

   This section identifies the alternative algorithms which may be used
   to compute Message Integrity Check (MIC) and Certificate Integrity
   Check (CIC) values, and assigns the algorithms character string
   identifiers for use in encapsulated header fields and within
   certificates to indicate the choice of algorithm employed.

   MIC algorithms which utilize DEA-1 cryptography are computed using a key
   which is a variant of the DEK used for message text encryption.  The
   variant is formed by modulo-2 addition of the hexadecimal quantity
   F0F0F0F0F0F0F0F0 to the encryption DEK.

   For compatibility with this specification, a privacy-enhanced mail
   implementation must be able to process both MAC (Section 2.1) and
   RSA-MD2 (Section 2.2) MICs on incoming messages.  It is a sender option
   whether MAC or RSA-MD2 is employed on an outbound message addressed to
   only one recipient.  However, use of MAC is strongly discouraged for
   messages sent to more than a single recipient.  The reason for this
   recommendation is that the use of MAC on multi-addressed mail fails to
   prevent other intended recipients from tampering with a message in a
   manner which preserves the message's appearance as an authentic message
   from the sender.  In other words, use of MAC on multi-addressed mail
   provides source authentication at the granularity of membership in the
   message's authorized address list (plus the sender) rather than at a
   finer (and more desirable) granularity authenticating the individual
   sender.

4.1.  Message Authentication Code (MAC)

   A message authentication code (MAC), denoted by the string "MAC", is
   computed using the DEA-1 algorithm in the fashion defined in FIPS PUB
   113 [1].  This algorithm is used only as a MIC algorithm, not as a CIC
   algorithm.

   As noted above, use of the MAC is not recommended for multicast
   messages, as it does not preserve authentication and integrity among
   individual recipients, i.e., it is not cryptographically strong enough
   for this purpose.  The message's canonically encoded text is padded at
   the end, per FIPS PUB 113, with zero-valued octets as needed in order to
   form an integral number of 8-octet encryption quanta.  These padding
   octets are inserted implicitly and are not transmitted with a message.
   The result of a MAC computation is a single 64-bit value.

4.2.  RSA-MD2 Message Digest Algorithm

4.2.1.  Discussion

   The RSA-MD2 Message Digest Algorithm, denoted by the string "RSA-MD2",
   is computed using an algorithm defined in this section.  It has been
   provided by Ron Rivest of RSA Data Security, Incorporated for use in
   support of privacy-enhanced electronic mail, free of licensing
   restrictions.  This algorithm should be used as a MIC algorithm
   whenever a message is addressed to multiple recipients.  It is also
   the only algorithm currently defined for use as CIC.  While its
   continued use as the standard CIC algorithm is anticipated, RSA-MD2
   may be supplanted by later recommendations for MIC algorithm
   selections.

   The RSA-MD2 message digest algorithm accepts as input a message of any
   length and produces as output a 16-byte quantity.  The attached
   reference implementation serves to define the algorithm; implementors
   may choose to develop optimizations suited to their operating
   environments.

4.2.2.  Reference Implementation

/* RSA-MD2 Message Digest algorithm in C  */
/*  by Ronald L. Rivest 10/1/88  */

#include <stdio.h>

/**********************************************************************/
/* Message digest routines:                                           */
/* To form the message digest for a message M                         */
/*    (1) Initialize a context buffer md using MDINIT                 */
/*    (2) Call MDUPDATE on md and each character of M in turn         */
/*    (3) Call MDFINAL on md                                          */
/* The message digest is now in md->D[0...15]                         */
/**********************************************************************/
/* An MDCTX structure is a context buffer for a message digest        */
/*  computation; it holds the current "state" of a message digest     */
/*  computation                                                       */
struct MDCTX
{
   unsigned char  D[48];   /* buffer for forming digest in */
                           /* At the end, D[0...15] form the message */
                           /*  digest */
   unsigned char  C[16];   /* checksum register */
   unsigned char  i;       /* number of bytes handled, modulo 16 */
   unsigned char  L;       /* last checksum char saved */
};
/* The table S given below is a permutation of 0...255 constructed    */
/*  from the digits of pi.  It is a ``random'' nonlinear byte         */
/*  substitution operation.                                           */
int S[256] = {
        41, 46, 67,201,162,216,124,  1, 61, 54, 84,161,236,240,  6, 19,
        98,167,  5,243,192,199,115,140,152,147, 43,217,188, 76,130,202,
        30,155, 87, 60,253,212,224, 22,103, 66,111, 24,138, 23,229, 18,
       190, 78,196,214,218,158,222, 73,160,251,245,142,187, 47,238,122,
       169,104,121,145, 21,178,  7, 63,148,194, 16,137, 11, 34, 95, 33,
       128,127, 93,154, 90,144, 50, 39, 53, 62,204,231,191,247,151,  3,
       255, 25, 48,179, 72,165,181,209,215, 94,146, 42,172, 86,170,198,
        79,184, 56,210,150,164,125,182,118,252,107,226,156,116,  4,241,
        69,157,112, 89,100,113,135, 32,134, 91,207,101,230, 45,168,  2,
        27, 96, 37,173,174,176,185,246, 28, 70, 97,105, 52, 64,126, 15,
        85, 71,163, 35,221, 81,175, 58,195, 92,249,206,186,197,234, 38,
        44, 83, 13,110,133, 40,132,  9,211,223,205,244, 65,129, 77, 82,
       106,220, 55,200,108,193,171,250, 36,225,123,  8, 12,189,177, 74,
       120,136,149,139,227, 99,232,109,233,203,213,254, 59,  0, 29, 57,
       242,239,183, 14,102, 88,208,228,166,119,114,248,235,117, 75, 10,
        49, 68, 80,180,143,237, 31, 26,219,153,141, 51,159, 17,131, 20,
};
/*The routine MDINIT initializes the message digest context buffer md.*/
/* All fields are set to zero.                                        */
void MDINIT(md)
  struct MDCTX *md;
  { int i;
    for (i=0;i<16;i++) md->D[i] = md->C[i] = 0;
    md->i = 0;
    md->L = 0;
  }
/* The routine MDUPDATE updates the message digest context buffer to  */
/*  account for the presence of the character c in the message whose  */
/*  digest is being computed.  This routine will be called for each   */
/*   message byte in turn.                                            */
void MDUPDATE(md,c)
  struct MDCTX *md;
  unsigned char c;
  { register unsigned char i,j,t,*p;
    /**** Put i in a local register for efficiency ****/
       i = md->i;
    /**** Add new character to buffer ****/
       md->D[16+i] = c;
       md->D[32+i] = c ^ md->D[i];
    /**** Update checksum register C and value L ****/
       md->L = (md->C[i] ^= S[0xFF & (c ^ md->L)]);
    /**** Increment md->i by one modulo 16 ****/
       i = md->i = (i + 1) & 15;
    /**** Transform D if i=0 ****/
       if (i == 0)
         { t = 0;
           for (j=0;j<18;j++)
             {/*The following is a more efficient version of the loop:*/
               /*  for (i=0;i<48;i++) t = md->D[i] = md->D[i] ^ S[t]; */
               p = md->D;
               for (i=0;i<8;i++)
                 { t = (*p++ ^= S[t]);
                   t = (*p++ ^= S[t]);
                   t = (*p++ ^= S[t]);
                   t = (*p++ ^= S[t]);
                   t = (*p++ ^= S[t]);

                   t = (*p++ ^= S[t]);
                 }
               /* End of more efficient loop implementation */
               t = t + j;
             }
         }
  }
/* The routine MDFINAL terminates the message digest computation and  */
/* ends with the desired message digest being in md->D[0...15].       */
void MDFINAL(md)
  struct MDCTX *md;
  { int i,padlen;
    /* pad out to multiple of 16 */
       padlen  = 16 - (md->i);
       for (i=0;i<padlen;i++) MDUPDATE(md,(unsigned char)padlen);
    /* extend with checksum */
    /* Note that although md->C is modified by MDUPDATE, character    */
    /* md->C[i] is modified after it has been passed to MDUPDATE, so  */
    /* the net effect is the same as if md->C were not being modified.*/
    for (i=0;i<16;i++) MDUPDATE(md,md->C[i]);
  }

/**********************************************************************/
/* End of message digest implementation                               */
/**********************************************************************/

NOTES:

  [1]  Federal Information Processing Standards Publication 113,
       Computer Data Authentication, May 1985.

  [2]  ANSI X9.17-1985, American National Standard, Financial
       Institution Key Management (Wholesale), American Bankers
       Association, April 4, 1985, Section 7.2.

  [3]  American National Standard Data Encryption Algorithm (ANSI
       X3.92-1981), American National Standards Institute, Approved 30
       December 1980.

  [4]  Federal Information Processing Standards Publication 46,  Data
       Encryption Standard, 15 January 1977.

  [5]  Information Processing Systems: Data Encipherment: Modes of
       Operation of a 64-bit Block Cipher.

  [6]  Federal Information Processing Standards Publication 81,
       DES Modes of Operation, 2 December 1980.

  [7]  American National Standard for Information Systems - Data
       Encryption  Algorithm - Modes of Operation (ANSI X3.106-1983),
       American National Standards Institute - Approved 16 May 1983.

  [8]  CCITT, Recommendation X.509, "The Directory: Authentication
       Framework", Annex C.

  [9]  Moore, J., "Protocol Failures in Cryptosystems",
       Proceedings of the IEEE, Vol. 76, No. 5, Pg. 597, May 1988.

Author's Address

       John Linn
       Secure Systems
       Digital Equipment Corporation
       85 Swanson Road, BXB1-2/D04
       Boxborough, MA  01719-1326

       Phone: 508-264-5491

       EMail: Linn@ultra.enet.dec.com

AI ELI5

On this page
PROBLEMPrivacy Enhanced Mail (PEM) needs to specify which encryption and authentication algorithms implementors may use, along with their identifiers for mail headers.
MECHANISMRFC 1115 catalogs the symmetric algorithms (DES in various modes), asymmetric algorithms (RSA), and integrity check algorithms (MAC and RSA-MD2) permitted in PEM, assigning each a string identifier.
HISTORICRFC 1115 is Historic and was replaced by RFC 1423 as part of the PEM suite upgrade. Modern email encryption uses S/MIME.

§1Algorithm Catalog for Privacy Enhanced Mail

Privacy Enhanced Mail (PEM) is a framework for secure electronic mail developed by the Internet Architecture Board (IAB) Privacy Task Force. The core PEM specifications are RFC 1113 (general concepts), RFC 1114 (procedures), and RFC 1115 (algorithms and identifiers). RFC 1115 provides the technical details about which encryption and authentication algorithms PEM implementations may use.

This RFC serves as a reference for implementors and defines the character string identifiers that appear in PEM message headers to declare which algorithms were used. By centralizing algorithm specifications in a separate document, the PEM standards can be updated for algorithms independently of the main protocol rules. The document covers symmetric encryption (DES), asymmetric encryption (RSA), and integrity check algorithms (MAC and RSA-MD2).

PEM is a way to send secret email. This document lists all the different encryption methods you can use and gives each one an official name.

§2Symmetric Encryption: DES Modes

All symmetric encryption algorithms defined in RFC 1115 are different usage modes of the Data Encryption Standard (DES), also called DEA-1. DES is a single-key block cipher with a 64-bit block size. The RFC specifies three modes of operation.

DES-ECB (Electronic Codebook mode) encrypts each 64-bit block independently using the same key. It is simple but less secure because identical plaintext blocks produce identical ciphertext blocks. DES-ECB is used only for encrypting the Data Encryption Key (DEK) and Message Integrity Check (MIC) values, never for message text.

DES-EDE (Encrypt-Decrypt-Encrypt mode), as defined in ANSI X9.17, applies DES encryption, then decryption, then encryption again using a pair of 64-bit keys. This triple operation strengthens the encryption and is also used only for DEK and MIC encryption.

DES-CBC (Cipher Block Chaining mode) links each ciphertext block to the next using an initialization vector, so identical plaintext blocks produce different ciphertext. CBC mode is used exclusively for encrypting message text because it provides better security than ECB.

DES is the main encryption method. ECB is simplest but weak. CBC is better for messages. EDE is stronger for protecting the encryption keys themselves.

§3Asymmetric Encryption: RSA

RFC 1115 specifies RSA (Rivest-Shamir-Adleman) as the only asymmetric (public-key) encryption algorithm for PEM. RSA uses a public key (the product of two large primes) and a private key to encrypt and decrypt data. In PEM, RSA is used to encrypt the DEK (Data Encryption Key) and the MIC (Message Integrity Check), allowing a sender to send the same encrypted message to multiple recipients by encrypting the symmetric key once for each recipient's public key.

The RFC specifies that a recipient's public key includes a modulus and a public exponent (either 3 or 65537). When encrypting, if the data is shorter than the modulus, it is padded with zeros on the left. For multi-recipient messages using the exponent 3, the RFC recommends a different approach: a separate pseudorandom padding value should be generated for each recipient to prevent certain attacks.

RSA is a two-key system: one key is public (everyone knows it), one is private (only you know it). PEM uses it to send the same secret message to many people by encrypting the key once for each person.

§4Integrity Check Algorithms

RFC 1115 defines two algorithms for computing Message Integrity Checks (MICs), which authenticate that a message has not been altered. The Message Authentication Code (MAC) uses DES in a special mode (defined in FIPS PUB 113) to generate a 64-bit integrity value. The MAC is computed using a variant of the DEK created by XORing the DEK with the hexadecimal constant F0F0F0F0F0F0F0F0.

However, RFC 1115 strongly discourages using MAC for multi-recipient messages because it does not provide individual sender authentication; all authorized recipients could modify the message while preserving a valid MAC. For multi-recipient messages and for certificate integrity checks, RFC 1115 specifies RSA-MD2, a cryptographic hash algorithm that produces a 16-byte digest. MD2 was provided by Ron Rivest of RSA Data Security free of licensing restrictions specifically for use in PEM.

MAC is like a quick checksum that proves a message was not changed. MD2 is stronger and lets you prove who specifically sent the message. For messages to many people, MD2 is required.

§5RSA-MD2 Message Digest

RFC 1115 includes a complete reference implementation of the RSA-MD2 message digest algorithm in C. MD2 accepts a message of any length and outputs a 16-byte (128-bit) digest. The algorithm works by processing the message in 16-byte chunks, maintaining internal buffers and a checksum register.

The algorithm uses a large substitution table (called S-table), derived from the digits of pi, to add nonlinearity to the computation. The implementation provided in the RFC serves as the authoritative definition; implementors may optimize it for their environment but must produce identical results. MD2 later became widely used in other cryptographic contexts before being superseded by more modern hash functions like SHA-1 and SHA-2.

MD2 is a recipe for turning any message into a short fingerprint that is very hard to forge. This fingerprint proves the message came from someone who knew the right secret key.

§6References

[1]Federal Information Processing Standards Publication 113, Computer Data Authentication, May 1985.
[2]ANSI X9.17-1985, American National Standard, Financial Institution Key Management (Wholesale), American Bankers Association, April 4, 1985.
[3]American National Standard Data Encryption Algorithm (ANSI X3.92-1981), American National Standards Institute, Approved 30 December 1980.
[4]Federal Information Processing Standards Publication 46, Data Encryption Standard, 15 January 1977.
[8]CCITT, Recommendation X.509, "The Directory: Authentication Framework", Annex C.