home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / tripwire / part03 / tripwire-1.0 / sigs / md5 / md5.doc
Text File  |  1993-04-19  |  19KB  |  527 lines

  1.  
  2.  
  3.  
  4.  
  5. Network Working Group                                          R. Rivest
  6. INTERNET-DRAFT                       MIT Laboratory for Computer Science
  7.                                                                 S. Dusse
  8.                                                  RSA Data Security, Inc.
  9.                                                             10 July 1991
  10.  
  11.  
  12.                     The MD5 Message-Digest Algorithm
  13.  
  14.  
  15. STATUS OF THIS MEMO
  16.  
  17.    This draft document will be submitted to the RFC editor as a protocol
  18.    specification. Comments should be sent to <pem-dev@tis.com> or to the
  19.    authors. Distribution of this memo is unlimited.
  20.  
  21.  
  22. ACKNOWLEDGEMENT
  23.  
  24.    We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle,
  25.    David Chaum, and Noam Nisan for numerous helpful comments and
  26.    suggestions.
  27.  
  28.  
  29. Table of Contents
  30.  
  31.    1. Executive Summary                                                1
  32.    2. Terminology and Notation                                         2
  33.    3. MD5 Algorithm Description                                        3
  34.    4. Summary                                                          7
  35.    5. Summary of Differences Between MD4 and MD5                       7
  36.    6. Security Considerations                                          7
  37.    References                                                          8
  38.    Authors' Addresses                                                  8
  39.    APPENDIX - Reference Implementation                                 9
  40.  
  41.  
  42.  
  43. 1. Executive Summary
  44.  
  45.    This document describes the MD5 message-digest algorithm. The
  46.    algorithm takes as input an input message of arbitrary length and
  47.    produces as output a 128-bit "fingerprint" or "message digest" of the
  48.    input. It is conjectured that it is computationally infeasible to
  49.    produce two messages having the same message digest, or to produce
  50.    any message having a given prespecified target message digest. The
  51.    MD5 algorithm is intended for digital signature applications, where a
  52.    large file must be "compressed" in a secure manner before being
  53.    encrypted with a private (secret) key under a public-key cryptosystem
  54.    such as RSA.
  55.  
  56.  
  57.  
  58.  
  59. Rivest and Dusse                                                [Page 1]
  60. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  61.  
  62.  
  63.    The MD5 algorithm is designed to be quite fast on 32-bit machines. In
  64.    addition, the MD5 algorithm does not require any large substitution
  65.    tables; the algorithm can be coded quite compactly.
  66.  
  67.    The MD5 algorithm is an extension of the MD4 message digest algorithm
  68.    [1,2]. MD5 is slightly slower than MD4, but is more "conservative" in
  69.    design. MD5 was designed because it was felt that MD4 was perhaps
  70.    being adopted for use more quickly than justified by the existing
  71.    critical review; because MD4 was designed to be exceptionally fast,
  72.    it is "at the edge" in terms of risking successful cryptanalytic
  73.    attack. MD5 backs off a bit, giving up a little in speed for a much
  74.    greater likelihood of ultimate security. It incorporates some
  75.    suggestions made by various reviewers, and contains additional
  76.    optimizations.
  77.  
  78.    The MD5 algorithm is being placed in the public domain for review and
  79.    possible adoption as a standard.
  80.  
  81.    A version of this document including the C source code in the
  82.    appendix is available by FTP from RSA.COM in the file "pub/md5.doc".
  83.  
  84.    This document may be referred to, unofficially, as Internet draft
  85.    [MD5-A].
  86.  
  87.    For OSI-based applications, MD5's object identifier is
  88.  
  89.    md5 OBJECT IDENTIFIER ::=
  90.      {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5}
  91.  
  92.    In the X.509 type AlgorithmIdentifier [3], the parameters for MD5
  93.    should have type NULL.
  94.  
  95.  
  96. 2. Terminology and Notation
  97.  
  98.    In this document a "word" is a 32-bit quantity and a "byte" is an
  99.    eight-bit quantity. A sequence of bits can be interpreted in a
  100.    natural manner as a sequence of bytes, where each consecutive group
  101.    of eight bits is interpreted as a byte with the high-order (most
  102.    significant) bit of each byte listed first. Similarly, a sequence of
  103.    bytes can be interpreted as a sequence of 32-bit words, where each
  104.    consecutive group of four bytes is interpreted as a word with the
  105.    low-order (least significant) byte given first.
  106.  
  107.    Let x_i denote "x sub i". If the subscript is an expression, we
  108.    surround it in braces, as in x_{i+1}. Similarly, we use ^ for
  109.    superscripts (exponentiation), so that x^i denotes x to the i-th
  110.    power.
  111.  
  112.    Let the symbol "+" denote addition of words (i.e., modulo-2^32
  113.    addition). Let X <<< s denote the 32-bit value obtained by circularly
  114.    shifting (rotating) X left by s bit positions. Let not(X) denote the
  115.  
  116.  
  117. Rivest and Dusse                                                [Page 2]
  118. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  119.  
  120.  
  121.    bit-wise complement of X, and let X v Y denote the bit-wise OR of X
  122.    and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY
  123.    denote the bit-wise AND of X and Y.
  124.  
  125.  
  126. 3. MD5 Algorithm Description
  127.  
  128.    We begin by supposing that we have a b-bit message as input, and that
  129.    we wish to find its message digest. Here b is an arbitrary
  130.    nonnegative integer; b may be zero, it need not be a multiple of
  131.    eight, and it may be arbitrarily large. We imagine the bits of the
  132.    message written down as follows:
  133.  
  134.                             m_0 m_1 ... m_{b-1}
  135.  
  136.    The following five steps are performed to compute the message digest
  137.    of the message.
  138.  
  139.  
  140. 3.1 Step 1. Append Padding Bits
  141.  
  142.    The message is "padded" (extended) so that its length (in bits) is
  143.    congruent to 448, modulo 512. That is, the message is extended so
  144.    that it is just 64 bits shy of being a multiple of 512 bits long.
  145.    Padding is always performed, even if the length of the message is
  146.    already congruent to 448, modulo 512 (in which case 512 bits of
  147.    padding are added).
  148.  
  149.    Padding is performed as follows: a single "1" bit is appended to the
  150.    message, and then enough zero bits are appended so that the length in
  151.    bits of the padded message becomes congruent to 448, modulo 512.
  152.  
  153.  
  154. 3.2 Step 2. Append Length
  155.  
  156.    A 64-bit representation of b (the length of the message before the
  157.    padding bits were added) is appended to the result of the previous
  158.    step. In the unlikely event that b is greater than 2^64, then only
  159.    the low-order 64 bits of b are used. (These bits are appended as two
  160.    32-bit words and appended low-order word first in accordance with the
  161.    previous conventions.)
  162.  
  163.    At this point the resulting message (after padding with bits and with
  164.    b) has a length that is an exact multiple of 512 bits. Equivalently,
  165.    this message has a length that is an exact multiple of 16 (32-bit)
  166.    words. Let M[0 ... N-1] denote the words of the resulting message,
  167.    where N is a multiple of 16.
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175. Rivest and Dusse                                                [Page 3]
  176. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  177.  
  178.  
  179. 3.3 Step 3. Initialize MD Buffer
  180.  
  181.    A four-word buffer (A,B,C,D) is used to compute the message digest.
  182.    Here each of A, B, C, D is a 32-bit register. These registers are
  183.    initialized to the following values in hexadecimal, low-order bytes
  184.    first):
  185.  
  186.                             word A: 01 23 45 67
  187.                             word B: 89 ab cd ef
  188.                             word C: fe dc ba 98
  189.                             word D: 76 54 32 10
  190.  
  191.  
  192. 3.4 Step 4. Process Message in 16-Word Blocks
  193.  
  194.    We first define four auxiliary functions that each take as input
  195.    three 32-bit words and produce as output one 32-bit word.
  196.  
  197.                          F(X,Y,Z) = XY v not(X) Z
  198.                          G(X,Y,Z) = XZ v Y not(Z)
  199.                          H(X,Y,Z) = X xor Y xor Z
  200.                        I(X,Y,Z) = Y xor (X v not(Z))
  201.  
  202.    In each bit position F acts as a conditional: if X then Y else Z.
  203.    (The function F could have been defined using + instead of v since XY
  204.    and not(X)Z will never have 1's in the same bit position.) It is
  205.    interesting to note that if the bits of X, Y, and Z are independent
  206.    and unbiased, the each bit of F(X,Y,Z) will be independent and
  207.    unbiased.
  208.  
  209.    The functions G, H, and I are similar to the function F, in that they
  210.    act in "bitwise parallel" to produce their output from the bits of X,
  211.    Y, and Z, in such a manner that if the corresponding bits of X, Y,
  212.    and Z are independent and unbiased, then each bit of G(X,Y,Z),
  213.    H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that
  214.    the function H is the bit-wise "xor" or "parity" function of its
  215.    inputs.
  216.  
  217.    Do the following:
  218.  
  219.    /* Process each 16-word block. */
  220.    For i = 0 to N/16-1 do
  221.  
  222.        /* Copy block i into X. */
  223.        For j = 0 to 15 do
  224.            Set X[j] to M[i*16+j].
  225.        end /* of loop on j */
  226.  
  227.        /* Save A as AA, B as BB, C as CC, and D as DD. */
  228.        AA = A
  229.        BB = B
  230.        CC = C
  231.  
  232.  
  233. Rivest and Dusse                                                [Page 4]
  234. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  235.  
  236.  
  237.        DD = D
  238.  
  239.        /* Round 1. */
  240.        /* Let FF(a,b,c,d,X[k],s,t) denote the operation
  241.            a = b + ((a + F(b,c,d) + X[k] + t) <<< s). */
  242.        /* Here the additive constants t are chosen as follows:
  243.           In step i, the additive constant is the integer part of
  244.           4294967296 times abs(sin(i)), where i is in radians. */
  245.        /* Let S11 = 7, S12 = 12, S13 = 17, and S14 = 22. */
  246.        /* Do the following 16 operations. */
  247.        FF (a, b, c, d, X[ 0], S11, 3614090360); /* Step 1 */
  248.        FF (d, a, b, c, X[ 1], S12, 3905402710); /* 2 */
  249.        FF (c, d, a, b, X[ 2], S13,  606105819); /* 3 */
  250.        FF (b, c, d, a, X[ 3], S14, 3250441966); /* 4 */
  251.        FF (a, b, c, d, X[ 4], S11, 4118548399); /* 5 */
  252.        FF (d, a, b, c, X[ 5], S12, 1200080426); /* 6 */
  253.        FF (c, d, a, b, X[ 6], S13, 2821735955); /* 7 */
  254.        FF (b, c, d, a, X[ 7], S14, 4249261313); /* 8 */
  255.        FF (a, b, c, d, X[ 8], S11, 1770035416); /* 9 */
  256.        FF (d, a, b, c, X[ 9], S12, 2336552879); /* 10 */
  257.        FF (c, d, a, b, X[10], S13, 4294925233); /* 11 */
  258.        FF (b, c, d, a, X[11], S14, 2304563134); /* 12 */
  259.        FF (a, b, c, d, X[12], S11, 1804603682); /* 13 */
  260.        FF (d, a, b, c, X[13], S12, 4254626195); /* 14 */
  261.        FF (c, d, a, b, X[14], S13, 2792965006); /* 15 */
  262.        FF (b, c, d, a, X[15], S14, 1236535329); /* 16 */
  263.  
  264.        /* Round 2. */
  265.        /* Let GG(a,b,c,d,X[k],s,t) denote the operation
  266.            a = b + ((a + G(b,c,d) + X[k] + t) <<< s). */
  267.        /* Let S21 = 5, S22 = 9, S23 = 14, and S24 = 20. */
  268.  
  269.        /* Do the following 16 operations. */
  270.        GG (a, b, c, d, X[ 1], S21, 4129170786); /* 17 */
  271.        GG (d, a, b, c, X[ 6], S22, 3225465664); /* 18 */
  272.        GG (c, d, a, b, X[11], S23,  643717713); /* 19 */
  273.        GG (b, c, d, a, X[ 0], S24, 3921069994); /* 20 */
  274.        GG (a, b, c, d, X[ 5], S21, 3593408605); /* 21 */
  275.        GG (d, a, b, c, X[10], S22,   38016083); /* 22 */
  276.        GG (c, d, a, b, X[15], S23, 3634488961); /* 23 */
  277.        GG (b, c, d, a, X[ 4], S24, 3889429448); /* 24 */
  278.        GG (a, b, c, d, X[ 9], S21,  568446438); /* 25 */
  279.        GG (d, a, b, c, X[14], S22, 3275163606); /* 26 */
  280.        GG (c, d, a, b, X[ 3], S23, 4107603335); /* 27 */
  281.        GG (b, c, d, a, X[ 8], S24, 1163531501); /* 28 */
  282.        GG (a, b, c, d, X[13], S21, 2850285829); /* 29 */
  283.        GG (d, a, b, c, X[ 2], S22, 4243563512); /* 30 */
  284.        GG (c, d, a, b, X[ 7], S23, 1735328473); /* 31 */
  285.        GG (b, c, d, a, X[12], S24, 2368359562); /* 32 */
  286.  
  287.        /* Round 3. */
  288.        /* Let HH(a,b,c,d,X[k],s,t) denote the operation
  289.  
  290.  
  291. Rivest and Dusse                                                [Page 5]
  292. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  293.  
  294.  
  295.            a = b + ((a + H(b,c,d) + X[k] + t) <<< s). */
  296.        /* Let S31 = 4, S32 = 11, S33 = 16, and S34 = 23. */
  297.  
  298.        /* Do the following 16 operations. */
  299.        HH (a, b, c, d, X[ 5], S31, 4294588738); /* 33 */
  300.        HH (d, a, b, c, X[ 8], S32, 2272392833); /* 34 */
  301.        HH (c, d, a, b, X[11], S33, 1839030562); /* 35 */
  302.        HH (b, c, d, a, X[14], S34, 4259657740); /* 36 */
  303.        HH (a, b, c, d, X[ 1], S31, 2763975236); /* 37 */
  304.        HH (d, a, b, c, X[ 4], S32, 1272893353); /* 38 */
  305.        HH (c, d, a, b, X[ 7], S33, 4139469664); /* 39 */
  306.        HH (b, c, d, a, X[10], S34, 3200236656); /* 40 */
  307.        HH (a, b, c, d, X[13], S31,  681279174); /* 41 */
  308.        HH (d, a, b, c, X[ 0], S32, 3936430074); /* 42 */
  309.        HH (c, d, a, b, X[ 3], S33, 3572445317); /* 43 */
  310.        HH (b, c, d, a, X[ 6], S34,   76029189); /* 44 */
  311.        HH (a, b, c, d, X[ 9], S31, 3654602809); /* 45 */
  312.        HH (d, a, b, c, X[12], S32, 3873151461); /* 46 */
  313.        HH (c, d, a, b, X[15], S33,  530742520); /* 47 */
  314.        HH (b, c, d, a, X[ 2], S34, 3299628645); /* 48 */
  315.  
  316.        /* Round 4. */
  317.        /* Let II(a,b,c,d,X[k],s,t) denote the operation
  318.            a = b + ((a + I(b,c,d) + X[k] + t) <<< s). */
  319.        /* Let S41 = 6, S42 = 10, S43 = 15, and S44 = 21. */
  320.  
  321.        /* Do the following 16 operations. */
  322.        II (a, b, c, d, X[ 0], S41, 4096336452); /* 49 */
  323.        II (d, a, b, c, X[ 7], S42, 1126891415); /* 50 */
  324.        II (c, d, a, b, X[14], S43, 2878612391); /* 51 */
  325.        II (b, c, d, a, X[ 5], S44, 4237533241); /* 52 */
  326.        II (a, b, c, d, X[12], S41, 1700485571); /* 53 */
  327.        II (d, a, b, c, X[ 3], S42, 2399980690); /* 54 */
  328.        II (c, d, a, b, X[10], S43, 4293915773); /* 55 */
  329.        II (b, c, d, a, X[ 1], S44, 2240044497); /* 56 */
  330.        II (a, b, c, d, X[ 8], S41, 1873313359); /* 57 */
  331.        II (d, a, b, c, X[15], S42, 4264355552); /* 58 */
  332.        II (c, d, a, b, X[ 6], S43, 2734768916); /* 59 */
  333.        II (b, c, d, a, X[13], S44, 1309151649); /* 60 */
  334.        II (a, b, c, d, X[ 4], S41, 4149444226); /* 61 */
  335.        II (d, a, b, c, X[11], S42, 3174756917); /* 62 */
  336.        II (c, d, a, b, X[ 2], S43,  718787259); /* 63 */
  337.        II (b, c, d, a, X[ 9], S44, 3951481745); /* 64 */
  338.  
  339.        /* Then perform the following additions. (That is, increment each
  340.           of the four registers by the value it had before this block
  341.           was started.) */
  342.        A = A + AA
  343.        B = B + BB
  344.        C = C + CC
  345.        D = D + DD
  346.  
  347.  
  348.  
  349. Rivest and Dusse                                                [Page 6]
  350. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  351.  
  352.  
  353.  
  354.    end /* of loop on i */
  355.  
  356.  
  357. 3.5 Step 5. Output
  358.  
  359.    The message digest produced as output is A, B, C, D. That is, we
  360.    begin with the low-order byte of A, and end with the high-order byte
  361.    of D.
  362.  
  363.    This completes the description of MD5. A reference implementation in
  364.    C is given in the Appendix.
  365.  
  366.  
  367. 4. Summary
  368.  
  369.    The MD5 message-digest algorithm is simple to implement, and provides
  370.    a "fingerprint" or message digest of a message of arbitrary length.
  371.    It is conjectured that the difficulty of coming up with two messages
  372.    having the same message digest is on the order of 2^64 operations,
  373.    and that the difficulty of coming up with any message having a given
  374.    message digest is on the order of 2^128 operations. The MD5 algorithm
  375.    has been carefully scrutinized for weaknesses. It is, however, a
  376.    relatively new algorithm and further security analysis is of course
  377.    justified, as is the case with any new proposal of this sort.
  378.  
  379.  
  380. 5. Summary of Differences Between MD4 and MD5
  381.  
  382.    The following are the differences between MD4 and MD5:
  383.  
  384.      --   A fourth round has been added.
  385.  
  386.      --   Each step now has a unique additive constant.
  387.  
  388.      --   The function g in round 2 was changed from (XY v XZ v YZ)
  389.           to (XZ v Y not(Z)) to make g less symmetric.
  390.  
  391.      --   Each step now adds in the result of the previous step.
  392.           This promotes a faster "avalanche effect".
  393.  
  394.      --   The order in which input words are accessed in rounds 2
  395.           and 3 is changed, to make these patterns less like each
  396.           other.
  397.  
  398.      --   The shift amounts in each round have been approximately
  399.           optimized, to yield a faster "avalanche effect". The
  400.           shifts in different rounds are distinct.
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407. Rivest and Dusse                                                [Page 7]
  408. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  409.  
  410.  
  411. 6. Security Considerations
  412.  
  413.    The level of security discussed in this memo is considered to be
  414.    sufficient for implementing very high security hybrid digital-
  415.    signature schemes based on MD5 and a public-key cryptosystem.
  416.  
  417.  
  418. References
  419.  
  420.      [1]  Rivest, R.L., The MD4 Message Digest Algorithm (RFC 1186),
  421.           October 1990.
  422.  
  423.      [2]  Rivest, R.L., The MD4 message digest algorithm, presented at
  424.           CRYPTO '90 (Santa Barbara, CA, August 11-15, 1990).
  425.  
  426.      [3]  CCITT, The Directory---Authentication Framework
  427.           (Recommendation X.509), 1988.
  428.  
  429.  
  430.  
  431.  
  432. Authors' Addresses
  433.  
  434.    Ronald L. Rivest
  435.    Massachusetts Institute of Technology
  436.    Laboratory for Computer Science
  437.    NE43-324
  438.    545 Technology Square
  439.    Cambridge, MA  02139-1986
  440.    Phone: (617) 253-5880
  441.    EMail: rivest@theory.lcs.mit.edu
  442.  
  443.    Steve Dusse
  444.    RSA Data Security, Inc.
  445.    10 Twin Dolphin Drive
  446.    Redwood City, CA  94065
  447.    Phone: (415) 595-8782
  448.    EMail: dusse@rsa.com
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465. Rivest and Dusse                                                [Page 8]
  466. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  467.  
  468.  
  469.  
  470. APPENDIX - Reference Implementation
  471.  
  472.    This appendix contains the following files:
  473.  
  474.      md5.h -- header file for implementation of MD5
  475.  
  476.      md5.c -- the source code for MD5 routines
  477.  
  478.      md5driver.c -- sample test routines
  479.  
  480.      session -- sample results of running md5driver
  481.  
  482.    It is not difficult to improve this implementation on particular
  483.    platforms, an exercise left to the reader. Following are some
  484.    suggestions:
  485.  
  486.      1.   Change MD5Update so that the context is not used at all
  487.           if it is empty (mdi == 0) and 64 or more bytes remain
  488.           (inLen >= 64). In other words, call Transform with inBuf
  489.           in this case. (This requires that byte ordering is
  490.           correct in inBuf.)
  491.  
  492.      2.   Implement a procedure MD5UpdateLong modeled after
  493.           MD5Update where inBuf is UINT4 * instead of unsigned char
  494.           *. MD5UpdateLong would call Transform directly with 16-
  495.           word blocks from inBuf. Call this instead of MD5Update in
  496.           general. This works well if you have an I/O procedure
  497.           that can read long words from a file.
  498.  
  499.      3.   On "little-endian" platforms where the lowest-address
  500.           byte in a long word is the least significant (and there
  501.           are no alignment restrictions), change MD5Update to call
  502.           Transform directly with 64-byte blocks from inBuf
  503.           (typecast to a UINT4 *).
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523. Rivest and Dusse                                                [Page 9]
  524. INTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  525.  
  526.  
  527.