HMAC-MD5 IP Auth: HMAC-MD5 IP Authentication with Replay Prevention
A keyed MD5 transform for the IP Authentication Header, with an optional counter against replayed packets.
Oehler, M. and R. Glenn, "HMAC-MD5 IP Authentication with Replay Prevention", RFC 2085, DOI 10.17487/RFC2085, February 1997, <https://www.rfc-editor.org/info/rfc2085>.
@misc{rfc2085,
series = {Request for Comments},
number = 2085,
howpublished = {RFC 2085},
publisher = {RFC Editor},
doi = {10.17487/RFC2085},
url = {https://www.rfc-editor.org/info/rfc2085},
author = {M. Oehler and R. Glenn},
title = {{HMAC-MD5 IP Authentication with Replay Prevention}},
pagetotal = 6,
year = 1997,
month = feb,
} RFC text
Contents
Network Working Group M. Oehler
Request for Comments: 2085 NSA
Category: Standards Track R. Glenn
NIST
February 1997
HMAC-MD5 IP Authentication with Replay Prevention
Status of This Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
This document describes a keyed-MD5 transform to be used in
conjunction with the IP Authentication Header [RFC-1826]. The
particular transform is based on [HMAC-MD5]. An option is also
specified to guard against replay attacks.
Table of Contents
1. Introduction...................................................1
1.1 Terminology.................................................2
1.2 Keys........................................................2
1.3 Data Size...................................................3
2. Packet Format..................................................3
2.1 Replay Prevention...........................................4
2.2 Authentication Data Calculation.............................4
3. Security Considerations........................................5
Acknowledgments....................................................5
References.........................................................6
Authors' Addresses.................................................6
1. Introduction
The Authentication Header (AH) [RFC-1826] provides integrity and
authentication for IP datagrams. The transform specified in this
document uses a keyed-MD5 mechanism [HMAC-MD5]. The mechanism uses
the (key-less) MD5 hash function [RFC-1321] which produces a message
digest. When combined with an AH Key, authentication data is
produced. This value is placed in the Authentication Data field of
the AH [RFC-1826]. This value is also the basis for the data
integrity service offered by the AH protocol.
To provide protection against replay attacks, a Replay Prevention
field is included as a transform option. This field is used to help
prevent attacks in which a message is stored and re-used later,
replacing or repeating the original. The Security Parameters Index
(SPI) [RFC-1825] is used to determine whether this option is included
in the AH.
Familiarity with the following documents is assumed: "Security
Architecture for the Internet Protocol" [RFC-1825], "IP
Authentication Header" [RFC-1826], and "HMAC-MD5: Keyed-MD5 for
Message Authentication" [HMAC-MD5].
All implementations that claim conformance or compliance with the IP
Authentication Header specification [RFC-1826] MUST implement this
HMAC-MD5 transform.
1.1 Terminology
In this document, the words that are used to define the
significance of each particular requirement are usually capitalized.
These words are:
- MUST
This word or the adjective "REQUIRED" means that the item is an
absolute requirement of the specification.
- SHOULD
This word or the adjective "RECOMMENDED" means that there might
exist valid reasons in particular circumstances to ignore this item,
but the full implications should be understood and the case carefully
weighed before taking a different course.
1.2 Keys
The "AH Key" is used as a shared secret between two communicating
parties. The Key is not a "cryptographic key" as used in a
traditional sense. Instead, the AH key (shared secret) is hashed with
the transmitted data and thus, assures that an intervening party
cannot duplicate the authentication data.
Even though an AH key is not a cryptographic key, the rudimentary
concerns of cryptographic keys still apply. Consider that the
algorithm and most of the data used to produce the output is known.
The strength of the transform lies in the singular mapping of the key
(which needs to be strong) and the IP datagram (which is known) to
the authentication data. Thus, implementations should, and as
frequently as possible, change the AH key. Keys need to be chosen at
random, or generated using a cryptographically strong pseudo-random
generator seeded with a random seed. [HMAC-MD5]
All conforming and compliant implementations MUST support a key
length of 128 bits or less. Implementations SHOULD support longer
key lengths as well. It is advised that the key length be chosen to
be the length of the hash output, which is 128 bits for MD5. For
other key lengths the following concerns MUST be considered.
A key length of zero is prohibited and implementations MUST prevent
key lengths of zero from being used with this transform, since no
effective authentication could be provided by a zero-length key.
Keys having a length less than 128 bits are strongly discouraged as
it would decrease the security strength of the function. Keys longer
than 128 bits are acceptable, but the extra length may not
significantly increase the function strength. A longer key may be
advisable if the randomness of the key is suspect. MD5 operates on
64-byte blocks. Keys longer than 64-bytes are first hashed using
MD5. The resulting hash is then used to calculate the authentication
data.
1.3 Data Size
MD5 produces a 128-bit value which is used as the authentication
data. It is naturally 64 bit aligned and thus, does not need any
padding for machines with native double words.
2. Packet Format
+---------------+---------------+---------------+---------------+
| Next Header | Length | RESERVED |
+---------------+---------------+---------------+---------------+
| SPI |
+---------------+---------------+---------------+---------------+
| Replay Prevention |
| |
+---------------+---------------+---------------+---------------+
| |
+ Authentication Data |
| |
+---------------+---------------+---------------+---------------+
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
The Next Header, RESERVED, and SPI fields are specified in [RFC-
1826]. The Length field is the length of the Replay Prevention field
and the Authentication Data in 32-bit words.
2.1 Replay Prevention
The Replay Prevention field is a 64-bit value used to guarantee that
each packet exchanged between two parties is different. Each IPsec
Security Association specifies whether Replay Prevention is used for
that Security Association. If Replay Prevention is NOT in use, then
the Authentication Data field will directly follow the SPI field.
The 64-bit field is an up counter starting at a value of 1.
The secret shared key must not be used for a period of time that
allows the counter to wrap, that is, to transmit more than 2^64
packets using a single key.
Upon receipt, the replay value is assured to be increasing. The
implementation may accept out of order packets. The number of packets
to accept out of order is an implementation detail. If an "out of
order window" is supported, the implementation shall ensure that any
and all packets accepted out of order are guaranteed not to have
arrived before. That is, the implementation will accept any packet at
most once.
When the destination address is a multicast address, replay
protection is in use, and more than one sender is sharing the same
IPsec Security Association to that multicast destination address,
then Replay Protection SHOULD NOT be enabled. When replay protection
is desired for a multicast session having multiple senders to the
same multicast destination address, each sender SHOULD have its own
IPsec Security Association.
[ESP-DES-MD5] provides example code that implements a 32 packet
replay window and a test routine to show how it works.
2.2 Authentication Data Calculation
The authentication data is the output of the authentication algorithm
(MD5). This value is calculated over the entire IP datagram. Fields
within the datagram that are variant during transit and the
authentication data field itself, must contain all zeros prior to the
computation [RFC-1826]. The Replay Prevention field if present, is
included in the calculation.
The definition and reference implementation of MD5 appears in [RFC-
1321]. Let 'text' denote the data to which HMAC-MD5 is to be applied
and K be the message authentication secret key shared by the parties.
If K is longer than 64-bytes it MUST first be hashed using MD5. In
this case, K is the resulting hash.
We define two fixed and different strings ipad and opad as follows
(the 'i' and 'o' are mnemonics for inner and outer):
ipad = the byte 0x36 repeated 64 times
opad = the byte 0x5C repeated 64 times.
To compute HMAC-MD5 over the data `text' we perform
MD5(K XOR opad, MD5(K XOR ipad, text))
Namely,
(1) append zeros to the end of K to create a 64 byte string
(e.g., if K is of length 16 bytes it will be appended with 48
zero bytes 0x00)
(2) XOR (bitwise exclusive-OR) the 64 byte string computed in step
(1) with ipad
(3) append the data stream 'text' to the 64 byte string resulting
from step (2)
(4) apply MD5 to the stream generated in step (3)
(5) XOR (bitwise exclusive-OR) the 64 byte string computed in
step (1) with opad
(6) append the MD5 result from step (4) to the 64 byte string
resulting from step (5)
(7) apply MD5 to the stream generated in step (6) and output
the result
This computation is described in more detail, along with example
code and performance improvements, in [HMAC-MD5]. Implementers
should consult [HMAC-MD5] for more information on this technique
for keying a cryptographic hash function.
3. Security Considerations
The security provided by this transform is based on the strength of
MD5, the correctness of the algorithm's implementation, the security
of the key management mechanism and its implementation, the strength
of the associated secret key, and upon the correctness of the
implementations in all of the participating systems. [HMAC-MD5]
contains a detailed discussion on the strengths and weaknesses of
MD5.
Acknowledgments
This document is largely based on text written by Hugo Krawczyk. The
format used was derived from work by William Simpson and Perry
Metzger. The text on replay prevention is derived directly from work
by Jim Hughes.
References
[RFC-1825] Atkinson, R., "Security Architecture for the Internet
Protocol", RFC 1852, Naval Research Laboratory,
July 1995.
[RFC-1826] Atkinson, R., "IP Authentication Header",
RFC 1826, August 1995.
[RFC-1828] Metzger, P., and W. Simpson, "IP Authentication using
Keyed MD5", RFC 1828, August 1995.
[RFC-1321] Rivest, R., "The MD5 Message-Digest Algorithm",
RFC 1321, April 1992.
[HMAC-MD5] Krawczyk, H., Bellare, M., and R. Canetti,
"HMAC: Keyed-Hashing for Message Authentication",
RFC 2104, February 1997.
[ESP-DES-MD5] Hughes, J., "Combined DES-CBC, MD5, and Replay
Prevention Security Transform", Work in Progress.
Authors' Addresses
Michael J. Oehler
National Security Agency
Atn: R23, INFOSEC Research and Development
9800 Savage Road
Fort Meade, MD 20755
EMail: mjo@tycho.ncsc.mil
Robert Glenn
NIST
Building 820, Room 455
Gaithersburg, MD 20899
EMail: rob.glenn@nist.gov
AI ELI5
On this page
§1Introduction
The Authentication Header (AH) of RFC 1826 provides integrity and authentication for IP datagrams. This RFC specifies a keyed-MD5 transform for it, based on HMAC-MD5. MD5 is a key-less hash function that produces a message digest. Combined with an AH Key, it yields authentication data, which is placed in the Authentication Data field and is also the basis of the data integrity service.
For protection against replay attacks, a Replay Prevention field is included as a transform option. The Security Parameters Index (SPI) is used to determine whether this option is included in the AH.
All implementations that claim conformance with the IP Authentication Header specification MUST implement this HMAC-MD5 transform.
The packet's seal is made by mixing a secret with the packet's contents. A counter is an optional extra to catch copied packets.
§2Keys and Data Size
The AH Key is a shared secret between two communicating parties. It is not a cryptographic key in the traditional sense: it is hashed with the transmitted data so that an intervening party cannot duplicate the authentication data. Even so, the usual concerns about keys apply. Keys need to be chosen at random, or generated with a cryptographically strong pseudo-random generator seeded with a random seed, and implementations should change the key as frequently as possible.
Implementations MUST support a key length of 128 bits or less and SHOULD support longer ones. The advice is to use the hash output length, 128 bits for MD5. A key length of zero is prohibited and MUST be prevented. Keys shorter than 128 bits are strongly discouraged. MD5 works on 64-byte blocks, so keys longer than 64 bytes are first hashed with MD5.
MD5 produces a 128-bit value, used as the authentication data. It is naturally 64 bit aligned, so no padding is needed for machines with native double words.
The secret has to be hard to guess and not empty. A longer secret is fine, but a very short one is weak.
§3The Packet Format
The header carries a Next Header field, a Length field, a RESERVED field, the SPI, the Replay Prevention field and the Authentication Data. Next Header, RESERVED and SPI are specified in RFC 1826. The Length field is the length of the Replay Prevention field and the Authentication Data in 32-bit words.
If Replay Prevention is not in use for the Security Association, the Authentication Data field directly follows the SPI field.
The header is a label with the packet's type, its size, which secret deal it belongs to, the counter and finally the seal itself.
| Field | Name | Size | Value | Description |
|---|---|---|---|---|
NEXT-HEADER | Next Header | 1 byte | Specified in RFC 1826. | |
LENGTH | Length | 1 byte | Length of Replay Prevention and Authentication Data in 32-bit words. | |
RESERVED | RESERVED | 2 bytes | Specified in RFC 1826. | |
SPI | SPI | 4 bytes | Security Parameters Index. | |
REPLAY | Replay Prevention | 8 bytes | Up counter starting at 1; optional per Security Association. | |
AUTH-DATA | Authentication Data | 16 bytes | MD5 output, 128 bits. |
§4Computing the Authentication Data
The authentication data is the output of MD5, calculated over the entire IP datagram. Fields that vary in transit, and the authentication data field itself, must contain all zeros before the computation. The Replay Prevention field, if present, is included.
With K as the shared key (hashed with MD5 first if longer than 64 bytes) and text as the data, two fixed strings are defined: ipad is the byte 0x36 repeated 64 times and opad is the byte 0x5C repeated 64 times. The result is MD5(K XOR opad, MD5(K XOR ipad, text)).
In steps: pad K with zeros to 64 bytes, XOR with ipad, append the text, apply MD5, XOR the padded K with opad, append the MD5 result, and apply MD5 again. Implementers are pointed to RFC 2104 for more detail, example code and performance improvements.
The secret is mixed with the packet and scrambled once, then mixed with a different pattern and scrambled again. The final scramble is the seal.
§5Replay Prevention
The Replay Prevention field is a 64-bit value that guarantees each packet exchanged between two parties is different. Each IPsec Security Association specifies whether it is used. The field is an up counter starting at a value of 1, and the shared key must not be used long enough for the counter to wrap, that is, to send more than 2^64 packets with one key.
On receipt the value is assured to be increasing. An implementation may accept out-of-order packets within a window whose size is an implementation detail, but it must ensure that any packet accepted out of order has not arrived before, so each packet is accepted at most once.
When the destination is a multicast address and several senders share the same Security Association, replay protection SHOULD NOT be enabled. For replay protection in that case, each sender SHOULD have its own Security Association.
Every packet gets the next number on a ticket. If an old ticket number shows up again, it is turned away. With many senders sharing one ticket roll, the numbers get muddled, so each sender should have its own roll.
§6Strength and Limits
The security of this transform depends on the strength of MD5, the correctness of the algorithm's implementation, the security of the key management mechanism, the strength of the secret key, and the correctness of the implementations in all participating systems. The RFC refers readers to RFC 2104 for a detailed discussion of the strengths and weaknesses of MD5.
A lock is only as good as the lock itself, the key and everyone using it properly.