home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_ietf_i / draft-ietf-ipsec-esp-3des-md5-00.txt < prev    next >
Text File  |  1996-11-05  |  25KB  |  755 lines

  1.  
  2. Security Working Group                               IPsec Working Group
  3. INTERNET DRAFT                                       Naganand Doraswamy, Editor
  4.                                                      November 1996
  5.                                                      Expires in Six months
  6.  
  7.  
  8.     Combined 3DES-CBC, HMAC and Replay Prevention Security Transform
  9.                  <draft-ietf-ipsec-esp-3des-md5-00.txt>
  10.  
  11.  
  12.  
  13. Status of this Memo
  14.  
  15.    This document is a submission to the IETF Internet Protocol Security
  16.    (IPSEC) Working Group. Comments are solicited and should be addressed
  17.    to the working group mailing list (ipsec@tis.com) or to the editor.
  18.  
  19.    This document is an Internet-Draft.  Internet Drafts are working
  20.    documents of the Internet Engineering Task Force (IETF), its areas,
  21.    and its working Groups. Note that other groups may also distribute
  22.    working documents as Internet Drafts.
  23.  
  24.    Internet-Drafts draft documents are valid for a maximum of six months
  25.    and may be updated, replaced, or obsoleted by other documents at any
  26.    time. It is inappropriate to use Internet-Drafts as reference
  27.    material or to cite them other than as "work in progress."
  28.  
  29.    To learn the current status of any Internet-Draft, please check the
  30.    "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
  31.    Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
  32.    munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
  33.    ftp.isi.edu (US West Coast).
  34.  
  35.    Distribution of this memo is unlimited.
  36.  
  37. Abstract
  38.  
  39.    This draft describes a combination of privacy, authentication,
  40.    integrity and replay prevention into a single packet format.
  41.  
  42.    This document is the result of significant work by several major con-
  43.    tributors and the IPsec working group as a whole. These contributors,
  44.    cited later in this document, provided many of the key technical
  45.    details summarized in this document. [IB93] [IBK93]
  46.  
  47. Requirements Terminology
  48.  
  49.    In this document, the words that are used to define the  significance
  50.    of  each particular requirement are usually capitalised.  These words
  51.    are:
  52.  
  53.  
  54.  
  55. Naganand                     November 1, 1996                   [Page 1]
  56.  
  57.  
  58.  
  59. INTERNET DRAFT                                            November 1996
  60.  
  61.  
  62.    - MUST
  63.  
  64.       This word or the adjective "REQUIRED" means that the  item  is  an
  65.       absolute requirement of the specification.
  66.  
  67.    - SHOULD
  68.  
  69.       This word or the adjective "RECOMMENDED" means  that  there  might
  70.       exist  valid  reasons  in  particular circumstances to ignore this
  71.       item, but the full implications should be understood and the  case
  72.       carefully weighed before taking a different course.
  73.  
  74.    - MAY
  75.  
  76.       This word or the adjective "OPTIONAL" means that this item is tru-
  77.       ly  optional.  One vendor might choose to include the item because
  78.       a particular marketplace requires it or because  it  enhances  the
  79.       product, for example; another vendor may omit the same item.
  80.  
  81.    For the purpose of this RFC, the terms conformance and compliance are
  82.    synonymous.
  83.  
  84. 1.  Discussion
  85.  
  86.    This draft allows a combination of MD5 and 3DES-CBC. In addition to
  87.    privacy, the goal of this transform is to ensure that the packet is
  88.    authentic, can not be modified in transit, or replayed.
  89.  
  90.    The claims of privacy, integrity, authentication, and replay preven-
  91.    tion are made in this draft. A good general text describing the
  92.    methods and algorithm are in [Schneier95].
  93.  
  94.    Privacy is provided by 3DES-CBC [FIPS-46] [FIPS-46-1] [FIPS-74]
  95.    [FIPS-81].
  96.  
  97.    Integrity is provided by HMAC [Krawczyk96].
  98.  
  99.    Authentication is provided since only the source and destination know
  100.    the HMAC key. If the HMAC is correct, it proves that it must have
  101.    been added by the source.
  102.  
  103.    Replay prevention is provided by the combination of a constantly
  104.    increasing count, the SPI and the HMAC key. The integrity of the
  105.    replay field is provided by the HMAC.
  106.  
  107.  
  108.  
  109. Naganand                     November 1, 1996                   [Page 2]
  110.  
  111.  
  112.  
  113.  
  114.  
  115. INTERNET DRAFT                                            November 1996
  116.  
  117.  
  118. 2.  Packet Format
  119.  
  120.  
  121.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
  122.  |                Security Parameters Index (SPI)                | ^
  123.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
  124.  |                                                               | |
  125.  +                Initialization Vector (Optional)               + |
  126.  |                                                               | |
  127.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |  ---
  128.  |                 Replay Prevention Field (count)               | |   ^
  129.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |   |
  130.  |                                                               | |   |
  131.  ~                      Payload Data                             ~ |   |
  132.  |                                                               |HMAC |
  133.  +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |  3DES
  134.  |               |         Padding (0-7 bytes)                   | |  CBC
  135.  +-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |   |
  136.  |                               |  Pad Length   | Payload Type  | v   |
  137.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---  |
  138.  |                                                               |     |
  139.  ~                        HMAC digest                            ~     |
  140.  |                                                               |     v
  141.  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    ---
  142.  
  143.  
  144.  
  145.  
  146. 2.1.  Security Parameters Index
  147.  
  148.    This field is negotiated at key setup and MUST not be 0 [RFC-1825]
  149.  
  150. 2.2.  Initialization Vector
  151.  
  152.    The use of an explicit Initialization Vector MAY be negotiated. The
  153.    purpose of this mode is to support devices that automatically gen-
  154.    erate IVs and can not operate using a constant IV_key_.
  155.  
  156.    This field is optional and is only used when an explicit IV is nego-
  157.    tiated during key exchange.  This field  contains random data or
  158.    contains the last cyphertext block of a previous packet sent or
  159.    received.
  160.  
  161.    For the packet which the explicit IV is received, the explicit IV is
  162.    used in place of the constant IV_key_ described later in this docu-
  163.    ment.
  164.  
  165.  
  166.  
  167. Naganand                     November 1, 1996                   [Page 3]
  168.  
  169.  
  170.  
  171.  
  172.  
  173. INTERNET DRAFT                                            November 1996
  174.  
  175.  
  176. 2.3.  Replay Prevention
  177.  
  178.    Replay Prevention is an unsigned 32 bit incrementing counter starting
  179.    at a mutual agreed upon value (see Key Material) and is enforced to
  180.    be within a mutually negotiated window size.
  181.  
  182.    The key (K, as described in a later section) MUST be changed fre-
  183.    quently enough so that the counter is not allowed to return to the
  184.    initial value; in other words, the key MUST be changed before 2^32
  185.    packets are transmitted using this key. For a given SPI, counter
  186.    wrapping MUST be considered to be a replay attack. (While a wrap is a
  187.    replay attack, there is always the possibility that a packet can get
  188.    duplicated, so the presence of a single or small number of duplicate
  189.    packets is not an absolute indication of a replay attack.)
  190.  
  191.    The receiver MUST verify that for a given SPI the packets received
  192.    have non-repeating (non-duplicate) counter values. This can be imple-
  193.    mented as a simple increasing count test or the receiver MAY choose
  194.    to accept out-of-order packets as long as it is guaranteed that pack-
  195.    ets can be received only once. For example, an implementation can use
  196.    a sliding receive window. If such a receive window is supported, the
  197.    receiver MUST ensure that it will accept packets within the current
  198.    window only once, and reject any packets it receives with a value
  199.    that is less than the lower bound of the window.
  200.  
  201.    Negotiated window sizes of 1 and 32 are suggested and larger multi-
  202.    ples of 32 are allowed. 1 indicates that only constantly increasing
  203.    replay numbers are allowed and packets which have replay values less
  204.    than the highest received are always rejected. 32 indicates that are
  205.    within 32 of the highest received, and are guaranteed not to have
  206.    been received before, are allowed.
  207.  
  208.    A window size of 1 MUST be supported. A value of 32 SHOULD be sup-
  209.    ported.
  210.  
  211.    If a value of 32 is negotiated, then the most recent 32 packets are
  212.    allowed to arrive out of order. That is, these 32 packets can arrive
  213.    in any sequence relative to each other except that these packets are
  214.    guaranteed to arrive only once. Appendix A has actual code that
  215.    implement a 32 packet replay window and a test routine. The purpose
  216.    of this routine is to show how it could be implemented.
  217.  
  218. 2.4.  Payload
  219.  
  220.    The payload contains data that is described by the payload type
  221.    field. This field is an integral number of bytes in length; the fol-
  222.    lowing padding and pad length fields will help provide alignment to a
  223.    four octet boundary.
  224.  
  225.  
  226.  
  227. Naganand                     November 1, 1996                   [Page 4]
  228.  
  229.  
  230.  
  231.  
  232. INTERNET DRAFT                                            November 1996
  233.  
  234.  
  235. 2.5.  Padding
  236.  
  237.    The padding (pad bytes and pad length field) is used to align the
  238.    following "payload type" field to end on a four octet boundary (when
  239.    counting from the start of the replay field).
  240.  
  241.    Padding bytes SHOULD be initialized with random data.
  242.  
  243.    At a minimum, the number of pad bytes added MUST be enough to align
  244.    the payload type field on the next appropriate boundary. However, the
  245.    sender MAY choose to include additional padding, provided that the
  246.    alignment is maintained. In total, the sender can add 0-255 bytes of
  247.    padding.
  248.  
  249. 2.6.  Pad Length
  250.  
  251.    The pad length field indicates the number of pad bytes immediately
  252.    preceding it. The range of valid values is 0-255, where a value of
  253.    zero indicates that the byte immediately preceding the pad length
  254.    field is the last byte of the payload.
  255.  
  256. 2.7.  Payload Type
  257.  
  258.    Describes what the payload is. The values are described in:
  259.  
  260.         ftp://ftp.isi.edu/in-notes/iana/assignments/protocol-numbers
  261.  
  262.  
  263. 2.8.  HMAC Digest
  264.  
  265.    The HMAC digest is a 128 bit residue described in [Krawczyk96]. This
  266.    covers the SPI, replay, payload, padding, pad length, payload type.
  267.  
  268.    HMAC is a keyed algorithm, where both directions are keyed
  269.    separately.  The implementation MUST use the HMAC_key_ as described
  270.    in the section on keys.
  271.  
  272. 3.  Encryption Transform Procedure
  273.  
  274.    Triple encryption in Outer-CBC mode with a constant IV_key_ is used
  275.    (IV_key_I for the initiator -> responder direction and IV_key_R for the
  276.    responder -> initiator direction). The IV_key_ remains constant for all
  277.    packets send in this direction.
  278.  
  279.    If an explicit IV is negotiated, 64 bits of random or the last
  280.    cyphertext block of a previous packet send or receive can be used.
  281.  
  282.  
  283.  
  284. Naganand                     November 1, 1996                   [Page 5]
  285.  
  286.  
  287.  
  288.  
  289.  
  290. INTERNET DRAFT                                            November 1996
  291.  
  292.  
  293.    IV or
  294.    IV_key_   count|x1             x2                x3
  295.        |         |                 |                 |
  296.        |--------(+)     ----------(+)     ----------(+)
  297.                  |      |          |      |          |
  298.              ---------  |      ---------  |      ---------
  299.          k1--|  DES  |  |  k1--|  DES  |  |  k1--|  DES  |
  300.              |encrypt|  |      |encrypt|  |      |encrypt|
  301.              ---------  |      ---------  |      ---------
  302.                  |      |          |      |          |
  303.              ---------  |      ---------  |      ---------
  304.          k2--|  DES  |  |  k2--|  DES  |  |  k2--|  DES  |
  305.              |decrypt|  |      |decrypt|  |      |decrypt|
  306.              ---------  |      ---------  |      ---------
  307.                  |      |          |      |          |
  308.              ---------  |      ---------  |      ---------
  309.          k3--|  DES  |  |  k3--|  DES  |  |  k3--|  DES  |
  310.              |encrypt|  |      |encrypt|  |      |encrypt|
  311.              ---------  |      ---------  |      ---------
  312.                  |------|          |------|          |----...
  313.                  |                 |                 |
  314.                 y1                 y2                y3
  315.  
  316.  
  317.  
  318.  
  319.    Where count is the Replay counter. x1, x2, x3 are the plaintext (x1
  320.    is 32 bits, all others are 64 bits). y1, y2, y3 are the ciphertext.
  321.    k1, k2, k3 corresponds to DES_KEY_[R|I]1, DES_KEY_[R|I]2, and
  322.    DES_KEY_[R|I]3. 
  323.  
  324.    This transformation is comprised of the following 3 steps.
  325.  
  326.       1. Taking the data and encapsulating it with the SPI, IV (if
  327.       present), count, pad, pad length, and payload type.
  328.  
  329.       2. Calculating the HMAC using the HMAC_key_ and creating the dig-
  330.       est from the SPI, IV (if present), count, data, pad, pad length,
  331.       and payload type and placing the result into the HMAC digest
  332.       field.
  333.  
  334.       3. Encrypting the count, data, pad, pad length, payload type, and
  335.       HMAC digest using 3DES and the appropriate DES_key_ and IV_key_.
  336.       (Note that the first DES block is a combination of the count and
  337.       the first word of plaintext.)
  338.  
  339.  
  340.  
  341.  
  342. Naganand                     November 1, 1996                   [Page 6]
  343.  
  344.  
  345.  
  346.  
  347.  
  348. INTERNET DRAFT                                            November 1996
  349.  
  350.  
  351. 4.  Decryption Transform Procedure
  352.  
  353.    Triple encryption in Outer-CBC with  constant IV_key_ is used. If an IV is
  354.    present in the packet, then the IV_key_ is not used and is replaced by the
  355.    IV. 
  356.  
  357.    IV or
  358.    IV_key_      y1                y2                y3
  359.      |          |                 |                 |
  360.      |          |-------          |-------          |----...
  361.      |          |      |          |      |          |
  362.      |      ---------  |      ---------  |      ---------
  363.      |  k3--|  DES  |  |  k3--|  DES  |  |  k3--|  DES  |
  364.      |      |decrypt|  |      |decrypt|  |      |decrypt|
  365.      |      ---------  |      ---------  |      ---------
  366.      |          |      |          |      |          |
  367.      |      ---------  |      ---------  |      ---------
  368.      |  k2--|  DES  |  |  k2--|  DES  |  |  k2--|  DES  |
  369.      |      |encrypt|  |      |encrypt|  |      |encrypt|
  370.      |      ---------  |      ---------  |      ---------
  371.      |          |      |          |      |          |
  372.      |      ---------  |      ---------  |      ---------
  373.      |  k1--|  DES  |  |  k1--|  DES  |  |  k1--|  DES  |
  374.      |      |decrypt|  |      |decrypt|  |      |decrypt|
  375.      |      ---------  |      ---------  |      ---------
  376.      |          |      |          |      |          |
  377.      |---------(+)     |---------(+)     |---------(+)
  378.                 |                 |                 |
  379.            (count|x1)             x2                x3
  380.  
  381.  
  382.  
  383.  
  384.    Decryption is comprised of the following 4 steps.
  385.  
  386.       1. (Optional step) Decrypt the first bock of data using the
  387.       appropriate DES_key_ and IV_key_ (or IV) and then do a quick "san-
  388.       ity check" of the count. If the count has decreased below the win-
  389.       dow or has increased by more than 65k, then it is safe to discard
  390.       this packet as either a replay, non-authentic or too old. If the
  391.       count is within 65K, then the probability that the packet is
  392.       authentic is 65535/65536. (The following replay check and HMAC
  393.       check are both still required).
  394.  
  395.       2. Decrypt the count (if not already done), data, pad, pad length,
  396.       and payload type using DES and the appropriate DES_key_ and
  397.       IV_key_ (or IV).
  398.  
  399.  
  400.  
  401. Naganand                     November 1, 1996                   [Page 7]
  402.  
  403.  
  404.  
  405.  
  406.  
  407. INTERNET DRAFT                                            November 1996
  408.  
  409.  
  410.       3. Calculate the HMAC using the HMAC_key_ and create the digest
  411.       from the SPI, IV (if present) count, data, pad, pad length, and
  412.       payload type and checking the result at digest at the end of the
  413.       packet. If the digest is incorrect, discard the packet.
  414.  
  415.       4. Check the count using the window algorithm discussed above. If
  416.       the packet is duplicate or too old, discard the packet.
  417.  
  418.  
  419. 5.  Key Material
  420.  
  421.    The key K is provided by the key management layer. This key is used
  422.    to derive the symmetric keys, they are:
  423.  
  424.       DES_Key_I1, DES_KEY_I2, and DES_KEY_I3 are the keys used for
  425.       3DES for traffic from the initiator -> responder. DES_KEY_I1 is the inner
  426.       most key and DES_KEY_I3 is the outermost key. 
  427.  
  428.       DES_Key_R1, DES_KEY_R2, and DES_KEY_R3 are the keys used for
  429.       3DES for traffic from the initiator -> responder. DES_KEY_R3 is the inner
  430.       most key and DES_KEY_R1 is the outermost key. 
  431.  
  432.       HMAC_Key_I is the key for the HMAC Algorithm for traffic from the
  433.       initiator -> responder.
  434.  
  435.       HMAC_Key_R is the key for the HMAC Algorithm for traffic from the
  436.       responder -> initiator.
  437.  
  438.       IV_key_I is used to stop code book attacks on the first block for
  439.       traffic from the initiator -> responder.
  440.  
  441.       IV_key_R is used to stop code book attacks on the first block for
  442.       traffic from the responder -> initiator.
  443.  
  444.       RP_key_I is the initial value and wrap point for the replay
  445.       prevention field for traffic from the initiator -> responder.
  446.  
  447.       RP_key_R is the initial value and wrap point for the replay
  448.       prevention field for traffic from the responder -> initiator.
  449.  
  450.    The vertical bar symbol "|" is used to denote concatenation of bit
  451.    strings.
  452.  
  453.    MD5(x|y) denotes the result of applying the MD5 function to the con-
  454.    catenated bit strings x and y.
  455.  
  456.    Truncate(x,n) denotes the result of truncating x to its first n bits.
  457.  
  458.  
  459.  
  460. Naganand                     November 1, 1996                   [Page 8]
  461.  
  462.  
  463.  
  464.  
  465.  
  466. INTERNET DRAFT                                            November 1996
  467.  
  468.  
  469.        DES_Key_I1  = Truncate(MD5( 0 | D_PAD_I | K ),64)
  470.        DES_Key_I2  = Truncate(MD5( 1 | D_PAD_I | K ),64)
  471.        DES_Key_I3  = Truncate(MD5( 2 | D_PAD_I | K ),64)
  472.        DES_Key_R1  = Truncate(MD5( 0 | D_PAD_R | K ),64)
  473.        DES_Key_R2  = Truncate(MD5( 1 | D_PAD_R | K ),64)
  474.        DES_Key_R3  = Truncate(MD5( 2 | D_PAD_R | K ),64)
  475.         IV_Key_I  = Truncate(MD5( I_Pad_I | K ),64)
  476.         IV_Key_R  = Truncate(MD5( I_Pad_R | K ),64)
  477.       HMAC_Key_I  =          MD5( H_Pad_I | K )
  478.       HMAC_Key_R  =          MD5( H_Pad_R | K )
  479.         RP_Key_I  = Truncate(MD5( R_Pad_I | K ),32)
  480.         RP_Key_R  = Truncate(MD5( R_Pad_R | K ),32)
  481.  
  482.  
  483.    where each _Pad_is 512 bit string.
  484.  
  485.       D_Pad_I = 0x5C repeated 63 times.
  486.       D_Pad_R = 0x3A repeated 63 times.
  487.       I_Pad_I = 0xAC repeated 64 times.
  488.       I_Pad_R = 0x55 repeated 64 times.
  489.       H_Pad_I = 0x53 repeated 64 times.
  490.       H_Pad_R = 0x3C repeated 64 times.
  491.       R_Pad_I = 0x35 repeated 64 times.
  492.       R_Pad_R = 0xCC repeated 64 times.
  493.  
  494.  
  495.    (Implementation note, The 16 byte intermediate residuals can be  pre-
  496.    calculated from these constants and stored to reduce processing over-
  497.    head).
  498.  
  499. 6.  Security Considerations
  500.  
  501.    The ESP-3DES-HMAC-RP transform described in this draft is immune to
  502.    the [Bellovin96] attacks. (AH [RFC-1826], in some modes, can also
  503.    provide immunity to these attack.)
  504.  
  505.    The implications of the size of K can be found in [Blaze96].
  506.  
  507. 7.  References
  508.  
  509.    [Bellovin96] Bellovin, S., "Problem Areas for the IP Security Proto-
  510.    cols", AT&T Research, ftp://ftp.research.att.com/dist/smb/badesp.ps,
  511.    July, 1996.
  512.  
  513.    [FIPS-46] US National Bureau of Standards, "Data Encryption Stan-
  514.    dard", Federal Information Processing Standard (FIPS) Publication 46,
  515.    January 1977.
  516.  
  517.  
  518.  
  519.  
  520. Naganand                     November 1, 1996                   [Page 9]
  521.  
  522.  
  523.  
  524.  
  525. INTERNET DRAFT                                            November 1996
  526.  
  527.  
  528.    [FIPS-46-1] US National Bureau of Standards, "Data Encryption Stan-
  529.    dard", Federal Information Processing Standard (FIPS) Publication
  530.    46-1, January 1988.
  531.  
  532.    [FIPS-74] US National Bureau of Standards, "Guidelines for Implement-
  533.    ing and Using the Data Encryption Standard", Federal Information Pro-
  534.    cessing Standard (FIPS) Publication 74, April 1981.
  535.  
  536.    [FIPS-81] US National Bureau of Standards, "DES Modes of Operation"
  537.    Federal Information Processing Standard (FIPS) Publication 81,
  538.    December 1980.
  539.  
  540.    [Krawczyk96] Krawczyk, H., Bellare, M., Canetti, R., "HMAC-MD5:
  541.    Keyed-MD5 for Message Authentication", work-in-progress,
  542.    http://info.internet.isi.edu:80/in-drafts/files/draft-ietf-ipsec-
  543.    hmac-md5-00.txt, March, 1996
  544.  
  545.    [Maughan96] Maughan, D., Schertler, M. Internet Security Association
  546.    and Key Management Protocol (ISAKMP), work-in-progress,
  547.    http://info.internet.isi.edu:80/in-drafts/files/draft-ietf-ipsec-
  548.    isakmp-04.txt, February, 1996
  549.  
  550.    [Orman96] Orman, H., "The Oakley Key Determination Protocol", work-
  551.    in-progress, http://info.internet.isi.edu:80/in-drafts/files/draft-
  552.    ietf-ipsec-oakley-00.txt, February, 1996.
  553.  
  554.    [RFC-1825] Atkinson, R, "Security Architecture for the Internet Pro-
  555.    tocol", ftp://ds.internic.net/rfc/rfc1825.txt, August 1995.
  556.  
  557.    [RFC-1826] Atkinson, R, "IP Authentication Header",
  558.    ftp://ds.internic.net/rfc/rfc1826.txt, August 1995.
  559.  
  560.    [Schneier95] Schneier, B., "Applied Cryptography Second Edition",
  561.    John Wiley & Sons, New York, NY, 1995.  ISBN 0-471-12845-7
  562.  
  563.    [Blaze96] Blaze M., Diffie, W., Rivest, R., Schneier, B., Shimomura,
  564.    T., Thompson, E., Wiener, M., "Minimal Key Lengths for Symmetric
  565.    Ciphers to Provide Adequate Commercial Security",
  566.    http://theory.lcs.mit.edu/~rivest/bsa-final-report.ascii, January,
  567.    1996
  568.  
  569.    [IB93] John Ioannidis and Matt Blaze, "Architecture and Implementa-
  570.    tion of Network-layer Security Under Unix", Proceedings of USENIX
  571.    Security Symposium, Santa Clara, CA, October 1993.
  572.  
  573.    [IBK93] John Ioannidis, Matt Blaze, & Phil Karn, "swIPe: Network-
  574.    Layer Security for IP", presentation at the Spring 1993 IETF Meeting,
  575.    Columbus, Ohio.
  576.  
  577.  
  578.  
  579. Naganand                     November 1, 1996                   [Page 10]
  580.  
  581.  
  582.  
  583.  
  584. INTERNET DRAFT                                            November 1996
  585.  
  586.  
  587. 8.  Acknowledgements
  588.  
  589.    This document is based on the document "Combined DES-CBC, HMAC, and
  590.    Replay Prevention Security Transform," by the IPsec Working Group, J.
  591.    Naganand, editor [Naganand96].  Much of the text of that document is
  592.    repeated here, with the details of DES replaced with 3DES. I would like to
  593.    thank Bob Baldwin, Steve Bellovin, Hugo Krawcyzk, Hilarie Orman, and Bill
  594.    Sommerfeld for their suggestions on key generation for 3DES.
  595.  
  596.  
  597.    The IPsec working group can be contacted through the chairs:
  598.  
  599.         Ran Atkinson
  600.         <rja@cisco.com>
  601.         Cisco Systems
  602.  
  603.         Paul Lambert
  604.         <PALAMBER@us.oracle.com>
  605.         Oracle Corporation
  606.  
  607.  
  608. 9.  Editor's Address
  609.  
  610.         Naganand Doraswamy
  611.         <naganand@ftp.com>
  612.         Ftp Software, Inc.
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636. Naganand                     November 1, 1996                  [Page 11]
  637.  
  638.  
  639.  
  640.  
  641.  
  642. INTERNET DRAFT                                            November 1996
  643.  
  644.  
  645.  
  646. Appendix A
  647.  
  648.    This is a routine that implements a 32 packet window. This is intend-
  649.    ed on being an implementation sample.
  650.  
  651.    #include <stdio.h>
  652.    #include <stdlib.h>
  653.    typedef unsigned long u_long;
  654.  
  655.    enum {
  656.        ReplayWindowSize = 32
  657.    };
  658.  
  659.    u_long bitmap = 0;          /* session state - must be 32 bits */
  660.    u_long lastSeq = 0;         /* session state */
  661.  
  662.    /* Returns 0 if packet disallowed, 1 if packet permitted */
  663.    int ChkReplayWindow(u_long seq);
  664.  
  665.    int ChkReplayWindow(u_long seq) {
  666.        u_long diff;
  667.  
  668.        if (seq == 0) return 0; /* first == 0 or wrapped */
  669.        if (seq > lastSeq) {    /* new larger sequence number */
  670.            diff = seq - lastSeq;
  671.            if (diff < ReplayWindowSize) { /* In window */
  672.                bitmap = (bitmap << diff) | 1; /* set bit for this packet */
  673.            } else bitmap = 1;  /* This packet has a "way larger" */
  674.            lastSeq = seq;
  675.            return 1;           /* larger is good */
  676.        }
  677.        diff = lastSeq - seq;
  678.        if (diff >= ReplayWindowSize) return 0; /* too old or wrapped */
  679.        if (bitmap & (1l << diff)) return 0; /* this packet already seen */
  680.        bitmap |= (1l << diff);  /* mark as seen */
  681.        return 1;               /* out of order but good */
  682.    }
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695. Naganand                     November 1, 1996                  [Page 12]
  696.  
  697.  
  698.  
  699.  
  700.  
  701. INTERNET DRAFT                                            November 1996
  702.  
  703.  
  704.  
  705. char string_buffer[512];
  706. #define STRING_BUFFER_SIZE sizeof(string_buffer)
  707.  
  708. int main() {
  709.     int result;
  710.     u_long last, current, bits;
  711.  
  712.     printf("Input initial state (bits in hex, last msgnum):\n");
  713.     if (!fgets(string_buffer, STRING_BUFFER_SIZE, stdin)) exit(0);
  714.     sscanf(string_buffer, "%lx %lu", &bits, &last);
  715.     if (last != 0)
  716.     bits |= 1;
  717.     bitmap = bits;
  718.     lastSeq = last;
  719.     printf("bits:%08lx last:%lu\n", bitmap, lastSeq);
  720.     printf("Input value to test (current):\n");
  721.  
  722.     while (1) {
  723.         if (!fgets(string_buffer, STRING_BUFFER_SIZE, stdin)) break;
  724.         sscanf(string_buffer, "%lu", ¤t);
  725.         result = ChkReplayWindow(current);
  726.         printf("%-3s", result ? "OK" : "BAD");
  727.         printf(" bits:%08lx last:%lu\n", bitmap, lastSeq);
  728.     }
  729.     return 0;
  730. }
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749. Naganand                     November 1, 1996                  [Page 13]
  750.  
  751.  
  752.  
  753.  
  754.  
  755.