home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1997 December
/
Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso
/
drafts
/
draft_s_z
/
draft-sabin-esp-des3-lzs-md5-00.txt
< prev
next >
Wrap
Text File
|
1996-10-23
|
40KB
|
1,062 lines
Internet Draft October 1996 (Expires April 1997)
M. Sabin, Consultant
R. Monsour, Hi/fn Inc.
Combined 3DES-CBC, LZS Compression, HMAC, and Replay Prevention
ESP Transform
<draft-sabin-esp-des3-lzs-md5-00.txt>
Status of this Memo
This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
To learn the current status of any Internet-Draft, please check the
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
ftp.isi.edu (US West Coast).
Abstract
This document proposes the "3DES-CBC-LZS-HMAC-Replay" security
transform for the IP Encapsulating Security Payload (ESP). The
proposed transform combines triple-DES encryption, LZS compression,
HMAC authentication, and replay prevention into a single packet
format. The transform is compatible with implementations that do not
support compression and with implementations that support only
single-DES encryption. Compression is performed prior to encryption,
which has the side benefit of reducing the amount of data that must
be encrypted.
This document is based on the IPsec Working Group's proposed
"Combined DES-CBC, HMAC, and Replay Prevention Security Transform,"
cited later in this document.
Acknowledgments
This memo is based on the document "Combined DES-CBC, HMAC, and
Replay Prevention Security Transform," by the IPsec Working Group, J.
Sabin, et al [Page 1]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
Hughes, editor [Hughes96]. Much of the text of that document is
repeated here, with details specific to LZS and triple-DES added.
The LZS details are similar to those in "PPP Stac LZS Compression
Protocol," by R. Friend and W. A. Simpson [RFC-1974].
Table of Contents
1. Introduction
2. Packet Format
3. Encode Procedure
4. Decode Procedure
5. Generating Key Material
6. Security Considerations
7. References
8. Author's Addresses
9. Appendix: Guidelines for Resetting Compression History
1. Introduction
Encrypted data is random in nature and not compressible. When an IP
packet is encrypted, the usual techniques for compressing it -- e.g.,
PPP compression -- do not work. If both compression and encryption
are desired, compression must be performed first.
1.1 Compression with ESP
ESP is well suited to combining compression with encryption, for a
variety of reasons:
- ESP is the place were encryption is applied to an IP packet.
It is straightforward to precede the encryption step by a
compression step. A side benefit of compressing the data first
is that the amount of data which must be encrypted is reduced.
In some implementations, compression is done in hardware and
encryption in software, and this represents a significant
reduction in software processing.
- ESP supports routing of opaque data. When a packet is
encrypted, intermediate nodes along a route are not able to
decrypt it. Nevertheless, the encrypted packet can be routed,
because ESP has been designed with this in mind. When a packet
is compressed within ESP, the situation is similar:
intermediate nodes are not able to decompress it (at least
without additional expense), but ESP ensures that the
compressed packet can be routed.
- ESP provides a security parameters index (SPI) that links a
packet to security parameters negotiated elsewhere. A
Sabin, et al [Page 2]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
destination node uses the SPI to look up the ESP transform
needed to decode an incoming packet. If compression details
are included in ESP transform specifications, a destination
node can also use the SPI to determine if a packet needs to be
decompressed, and if so, by what algorithm. Source and
destination nodes can maintain multiple compression histories
(described in a later section), one history for each SPI.
1.2 Background of LZS Compression
The LZS algorithm is a lossless compression method that uses a
sliding window of 2,048 bytes. During compression, redundant
sequences of data are replaced with tokens that represent those
sequences. During decompression, the original sequences are
substituted for the tokens, in such a way that the original data
is exactly recovered. LZS differs from lossy schemes, such as
those often used for video compression, that do not exactly
reproduce the original data.
Details of LZS formatting can be found in [ANSI94].
The efficiency of the LZS algorithm depends on the degree of
redundancy in the original data. A typical compression ratio for
disk files is 2:1. LZS achieves a compression ratio of 2.34:1 on
the University of Calgary Text Compression Corpus [Calgary].
The LZS algorithm is stateful. It maintains a "history" in which
compression information is stored. The compression operation
requires a "compression history" and the decompression operation a
"decompression history." Each of these histories is initialized to
a start state before any data is processed. Thereafter, as data
is compressed and decompressed, the two histories remain
synchronized, provided that the decompressor processes all the
data generated by the compressor, in the order in which it is
generated.
An LZS compression/decompression history pair can be reset to the
start state at any time. This can be used to restore
synchronization between compressor and decompressor when data
received by the decompressor has been lost or corrupted. This is
particularly important in IP, where the delivery of individual
packets is not guaranteed.
When LZS compression is applied to a block of data, it sometimes
happens that the "compressed" block is actually larger than the
original, uncompressed block. In IP, it would be undesirable to
transmit a block that has expanded in this way. Accordingly, when
LZS results in expansion, this specification calls for the
transmitter to send the uncompressed data instead of the
compressed data. The packet format includes a bit to signal the
Sabin, et al [Page 3]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
receiver that the packet contents are not compressed.
When the transmitter sends uncompressed data, it still updates its
compression history as if it had actually compressed the data.
This enhances its ability to compress future data. When the
receiver receives uncompressed data, it updates its decompression
history using the uncompressed data. This keeps the decompression
history in sync with the compression history.
An application can maintain multiple compression and/or
decompression processes by maintaining multiple histories, one
history for each process. Each process operates independently of
the others. This is useful in IPsec, since it allows each
security association (as indexed by the SPI) to have its own
history.
1.3 Licensing
Source and object licenses for LZS are available on a
non-discriminatory basis. Hardware implementations are also
available. For more information, contact Hi/fn at the address
listed with the authors' addresses.
1.4 3DES-CBC-LZS-HMAC-Replay ESP Transform
The transform proposed in this memo combines triple-DES in CBC
mode (3DES-CBC), LZS compression, HMAC authentication, and replay
prevention. The proposed transform is based heavily on the
transform presented in [Hughes96]. Much of the text from that
document has been repeated here.
The goals of the transform are: privacy; compression;
authenticity; integrity; and defense against replay.
- Privacy is provided by 3DES-CBC [RFC-1851], which is a
variant of conventional DES-CBC [FIPS-46] [FIPS-46-1] [FIPS-74]
[FIPS-81].
- Compression is provided by the LZS algorithm [ANSI94].
- Integrity is provided by HMAC [Krawczyk96].
- Authentication is provided since only the source and
destination know the HMAC key. If the HMAC is correct, it
proves that it must have been added by the source.
- Replay prevention is provided by the combination of a
constantly increasing count, the SPI and the HMAC key.
Integrity of the count is provided by the HMAC.
Sabin, et al [Page 4]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
3DES-CBC encryption uses a double-length key (112 bits) or a
triple-length key (168 bits). Triple-length is usually preferred for
security reasons, but some hardware devices only support
double-length. Accordingly, this transform supports both
double-length and triple-length keys as a negotiated parameter.
The transform also supports single-length keys (56 bits) as a
negotiated parameter. This makes it compatible with implementations
that only support conventional (i.e., single) DES-CBC.
1.5 Requirements 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.
- MAY: This word, or the adjective "OPTIONAL," means that the
item is truly optional. One vendor might choose to include the
item because of a particular marketplace requirement or because
it enhances the product, while another vendor might omit the
item.
Sabin, et al [Page 5]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
2. Packet Format
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
| Security Parameters Index (SPI) | ^
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | |
| Initialization Vector (optional) | |
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ---
| Replay Prevention Field (count) | | ^
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| |HMAC |
| Payload Data (compressed or uncompressed) | | |
| | | |
| +-+-+-+-+-+-+-+-| | |
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 3DES
| Padding (0-7 bytes) | | CBC
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| | Pad Length | CC | Payload Type | v |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- |
| | |
| HMAC digest | |
| | v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
2.1 Security Parameters Index
This field contains a 32-bit value identifying the security
association for this packet. The value is negotiated at key setup
and MUST NOT be 0.
2.2 Initialization Vector
The use of an explicit initialization vector (IV) MAY be
negotiated. The purpose of this mode is to support devices that
automatically generate IV's and cannot operate using a constant
IV_key_.
This field is optional and is only used when an explicit IV is
negotiated during key exchange. This field contains random data
or the last ciphertext block of the previous packet.
2.3 Replay Prevention
This field contains an unsigned, 32-bit, incrementing counter.
The counter is initialized to a mutually agreed upon value (see
Sabin, et al [Page 6]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
the section on Generating Key Material).
2.3.1 Security Issues
To defend against replay attacks, the receiver verifies that
received packets have non-repeating counter values. The
simplest approach is for the receiver to reject any packet
whose counter has a value less than or equal to that of any
previously received packet. A consequence of this simple
approach is that out-of-order packets will be rejected.
Alternatively, the receiver MAY choose to operate with a window
of acceptable counter values: a packet will not be rejected if
its counter value is within some value M of the highest counter
value received so far, provided that the counter value has not
been seen before. For an example implementation of such a
strategy, see [Hughes96].
The counter is not allowed to cycle back to its starting value.
This requires that the key be changed before 2^32 packets have
been transmitted. The receiver rejects any packet whose
counter value indicates cycling back through the starting
value.
2.3.2 Compression Issues
In addition to defending against replay attacks, the counter
plays a role in the decompression of packets. When a packet is
received out of order, the receiver detects the misordering
because of the counter value. Because LZS is stateful, the
receiver may or may not be able to decompress the out-of-order
packet. If the history was reset by the transmitter
immediately prior to compressing the packet, the receiver can
decompress it, because decompression does not depend on any
previous packets. (The packet includes a flag in the CC field
that indicates whether or not the history was reset.) But if
the history was not reset by the transmitter immediately prior
to compressing the packet, the receiver cannot decompress it.
When a receiver is unable to decompress an out-of-order packet,
the simplest strategy for the receiver is to discard it.
Alternatively, a receiver MAY elect to use a windowing scheme
similar to that described in Section 2.3.1, in order to
accommodate a reasonable spread of out-of-order packets. Note
that if the windowing scheme is used, the receiver must queue
all packets that fall within the window but are not yet
decompressible. This makes it more expensive than the scheme
previously described, which only had to queue counter values.
Decompressing out-of-order packets is only an issue for the
Sabin, et al [Page 7]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
final destination of a packet. Intermediate nodes along a
route do not decompress packets and thus can handle packets in
any order.
2.4 Payload Data
The payload data is either compressed or uncompressed. The value
of the COMPRESSED bit of the CC field is set accordingly. The
payload field is an integral number of bytes in length.
2.5 Padding
The padding is used to align the subsequent "payload type" field
to end on a double-word boundary, counting from the start of the
replay field. Padding bytes SHOULD contain random data.
At a minimum, the number of padding bytes added must be enough to
align the payload type field on the next appropriate boundary.
However, the sender may choose to include additional padding, in
order to hide the actual length of the data. In general, the
sender can use any number of padding bytes in the range of 0-255,
provided that the required alignment is achieved.
2.6 Pad Length
This field indicates the number of padding bytes immediately
preceding it. The range of valid values is 0-255, where a value
of zero indicates the byte immediately preceding the pad length
field is the last byte of payload.
2.7 Compression Control
The Compression Control (CC) field is a single, bit-mapped byte.
The bits are numbered 7 (most significant) to 0 (least
significant). The following bits are defined:
2.7.1 COMPRESSED (bit 7)
This bit is set to 1 to indicate the payload is compressed. It
is cleared to 0 to indicate the payload is not compressed.
In implementations that do not support compression, this bit
is always cleard to 0.
Sabin, et al [Page 8]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
2.7.2 HIST_RESET (bit 6)
This bit is set to 1 to indicate that the compression history
associated with this packet's SPI was reset prior to processing
this packet's payload. In such a case, the receiver must reset
the corresponding decompression history prior to processing the
payload. If the payload is compressed, it can always be
decompressed, because compression is not based on any previous
history.
This bit is cleared to 0 to indicate that the compression
history associated with this packet's SPI was not reset prior
to transmitting the payload. If the payload is compressed, it
can only be decompressed if there have been no missed packets
since the last packet that had the bit set to 1. A packet that
cannot be decompressed because of missing packets is either
rejected or, if the implementation supports it, queued in the
hope that it can be decompressed when the missing packets
arrive.
The transmitter SHOULD adopt a policy of periodically resetting
the compression history and setting the HIST_RESET bit. This
allows a receiver that has missed packets to resynchronize its
decompressor. The details of such a policy are up to the
transmitter implementation. An attached appendix gives
guidelines.
The transmitter MUST flush the compressor each time it
transmits a compressed packet, regardless of whether or not it
resets the compression history. Flushing means that all data
going into the compressor is included in the output, i.e., no
data is held back in the hope of achieving better compression.
Flushing is necessary to prevent a packet's data from spilling
over into a later packet.
2.8 Payload Type
This field indicates the type of payload, using the IP
Protocol/Payload value. Values are described in [RFC-1700].
2.9 HMAC Digest
The HMAC digest is a 128-bit residue, calculated over the SPI,
replay, payload, padding, pad length, CC, and payload type.
Details of the calculation can be found in [Krawczyk96].
HMAC is a keyed algorithm based on MD5. It uses the HMAC key
described in the section on keys.
Sabin, et al [Page 9]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
3. Encode Procedure
For compression, the LZS algorithm is used.
For encryption, CBC chaining is used. The initialization vector is
either the contents of the IV field or the IV_key_:
IV or
IV_key_ count|x1 x2 x3
| | | |
|--------(+) ----------(+) ----------(+)
| | | | |
--------- | --------- | ---------
k1--| DES | | k1--| DES | | k1--| DES |
|encrypt| | |encrypt| | |encrypt|
--------- | --------- | ---------
| | | | |
--------- | --------- | ---------
k2--| DES | | k2--| DES | | k2--| DES |
|decrypt| | |decrypt| | |decrypt|
--------- | --------- | ---------
| | | | |
--------- | --------- | ---------
k3--| DES | | k3--| DES | | k3--| DES |
|encrypt| | |encrypt| | |encrypt|
--------- | --------- | ---------
|------| |------| |----...
| | |
y1 y2 y3
In the figure: count is the value in the replay prevention field;
x1, x2, x3 are the plaintext (x1 is 32 bits, all others are 64 bits);
y1, y2, y3 are the ciphertext; k1, k2, k3 are the 56-bit portions of
the triple-length key. (When a double-length key is used, k3 = k1.
When a single-length key is used, k3 = k2 = k1.)
The transform is carried out in the following steps:
i) If the transmitter chooses to reset the compression history,
it does so, and it sets the HIST_RESET bit of the CC field to 1.
Otherwise, it clears the HIST_RESET bit to 0.
ii) The transmitter decides whether or not to compress the
payload.
- If the transmitter chooses to compress the payload, the LZS
algorithm is applied. The resulting compressed data is
formatted according to [ANSI94]. The COMPRESSED bit of the CC
Sabin, et al [Page 10]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
field is set to 1.
- If the transmitter chooses not to compress the payload, the
COMPRESSED bit of the CC field is set to 0. The compression
history is updated with the uncompressed payload.
iii) The payload is encapsulated with the SPI, IV (if used),
replay, padding, pad length, CC, and payload type. The padding
and pad length are appropriately adjusted. The replay is
incremented by one from its previous value.
iv) The HMAC is calculated. The calculation uses the HMAC_key_
and spans the SPI, IV (if used), replay, payload, padding, pad
length, CC, and payload type. The result is placed in the HMAC
digest field.
v) The replay, payload, padding, pad length, CC, payload type,
and HMAC digest are encrypted using 3DES-CBC with the appropriate
DES_key_. The initialization vector is the IV field, if used, or
the appropriate IV_key_.
An implementation SHOULD monitor the results of the payload
compression operation and reject the operation if it results in
expansion. In such a case, the uncompressed payload SHOULD be
transmitted.
Sabin, et al [Page 11]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
4. Decode Procedure
For decryption, CBC chaining is used:
IV or
IV_key_ y1 y2 y3
| | | |
| |------- |------- |----...
| | | | | |
| --------- | --------- | ---------
| k3--| DES | | k3--| DES | | k3--| DES |
| |decrypt| | |decrypt| | |decrypt|
| --------- | --------- | ---------
| | | | | |
| --------- | --------- | ---------
| k2--| DES | | k2--| DES | | k2--| DES |
| |encrypt| | |encrypt| | |encrypt|
| --------- | --------- | ---------
| | | | | |
| --------- | --------- | ---------
| k1--| DES | | k1--| DES | | k1--| DES |
| |decrypt| | |decrypt| | |decrypt|
| --------- | --------- | ---------
| | | | | |
|---------(+) |---------(+) |---------(+)
| | |
(count|x1) x2 x3
For decompression, the LZS algorithm is used. The decompression
maintains a state variable "expected_count," which tracks the value
of count expected in the next packet. Expected_count is initialized
to the starting value of the replay count; this value was mutually
agreed upon, as described in the section on Generating Key Material.
In the procedure described here, it is assumed that out-of-order
packets are not queued for the purposes of decompression. Compressed
packets that cannot be immediately decompressed are discarded.
Implementations MAY choose a scheme that queues packets, allowing
some spread of out-of-order packets to be decompressed; this was
discussed in Section 2.3.2.
The transform is carried out in the following steps:
i) The replay, payload, padding, pad length, CC, payload type,
and HMAC digest are decrypted using 3DES-CBC and the appropriate
DES_key_. The initialization vector is the IV field, if used, or
the appropriate IV_key_.
ii) The count is checked for replay attack using the window
Sabin, et al [Page 12]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
algorithm discussed in Section 2.3.1. If the packet is duplicate
or too old, the packet is discarded.
iii) The HMAC is calculated. The calculation uses the HMAC_key_
and spans the SPI, IV (if used), replay, payload, padding, pad
length, CC, and payload type. The calculated digest is compared
against the decrypted digest at the end of the packet. If the two
do not match, the packet is discarded.
iv) The HIST_RESET bit of the CC is checked.
- If HIST_RESET = 1, the decompression history is reset, and
expected_count is set to (count + 1).
- If HIST_RESET = 0, the value of count is compared to
expected_count. If the two match, expected_count is set to
(count + 1). If the two do not match, expected_count is
unchanged; and if COMPRESSED = 1, the packet is discarded.
(Queuing out-of-order packets is not considered here, but an
implementation MAY choose to implement queuing instead of
immediate discard, as discussed in Section 2.3.2.)
v) The COMPRESSED bit of the CC is checked. If COMPRESSED = 1,
decompression is applied to the payload data. If COMPRESSED = 0,
decompression is not applied, and the decompression history is
updated with the uncompressed data.
An implementation MAY choose to perform a "sanity check" prior to the
above procedure. In the sanity check, the first block of data is
decrypted using the appropriate DES_key_ and IV_key_, and the
decrypted value of the replay count is checked. If the count is way
out of range -- e.g., more than 2^16 away from the expected value --
the packet is discarded as non-authentic. This helps defend against
clogging attacks, in which an attacker tries to tie up the receiver's
resources by having it decrypt meaningless packets. Note that if the
sanity check passes, the above procedure MUST still be performed.
5. Generating Key Material
The key management layer provides several negotiated parameters:
- The master secret K.
- The length of the DES symmetric keys: triple length (168 bits),
double length (112 bits), or single length (56 bits).
- Compression support: yes or no.
The master secret K is used to derive the following symmetric keys:
Sabin, et al [Page 13]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
DES_Key_I1, DES_Key_I2, and DES_Key_I3 are the three parts of the
triple-length DES key for traffic from the initiator -> responder.
When a double-length key is used, DES_Key_I3 = DES_Key_I1.
When a single-length key is used, DES_Key_I3 = DES_KEY_I2 =
DES_Key_I1.
DES_Key_R1, DES_Key_R2, and DES_Key_R3 are the three parts of the
triple-length DES key for traffic from the responder -> initiator.
When a double-length key is used, DES_Key_R3 = DES_Key_R1.
When a single-length key is used, DES_Key_R3 = DES_KEY_R2 =
DES_Key_R1.
HMAC_Key_I is the key for the HMAC Algorithm for traffic from the
initiator -> responder.
HMAC_Key_R is the key for the HMAC Algorithm for traffic from the
responder -> initiator.
IV_key_I is used to stop code book attacks on the first block for
traffic from the initiator -> responder.
IV_key_R is used to stop code book attacks on the first block for
traffic from the responder -> initiator.
RP_key_I is the initial value and wrap point for the replay
prevention field for traffic from the initiator -> responder.
RP_key_R is the initial value and wrap point for the replay
prevention field for traffic from the responder -> initiator.
The vertical bar symbol "|" is used to denote concatenation of bit
strings.
MD5(x|y) denotes the result of applying the MD5 function to the
concatenated bit strings x and y.
Truncate(x,n) denotes the result of truncating x to its first n bits.
IV_Key_I = Truncate(MD5( I_Pad_I | K ),64)
IV_Key_R = Truncate(MD5( I_Pad_R | K ),64)
HMAC_Key_I = MD5( H_Pad_I | K )
HMAC_Key_R = MD5( H_Pad_R | K )
RP_Key_I = Truncate(MD5( R_Pad_I | K ),32)
RP_Key_R = Truncate(MD5( R_Pad_R | K ),32)
For triple-length DES keys:
DES_Key_I1 = Truncate(MD5( D_Pad_I1 | K ),64)
DES_Key_I2 = Truncate(MD5( D_Pad_I2 | K ),64)
DES_Key_I3 = Truncate(MD5( D_Pad_I3 | K ),64)
DES_Key_R1 = Truncate(MD5( D_Pad_R1 | K ),64)
Sabin, et al [Page 14]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
DES_Key_R2 = Truncate(MD5( D_Pad_R2 | K ),64)
DES_Key_R3 = Truncate(MD5( D_Pad_R3 | K ),64)
For double-length DES keys:
DES_Key_I1 = Truncate(MD5( D_Pad_I1 | K ),64)
DES_Key_I2 = Truncate(MD5( D_Pad_I2 | K ),64)
DES_Key_I3 = DES_Key_I1
DES_Key_R1 = Truncate(MD5( D_Pad_R1 | K ),64)
DES_Key_R2 = Truncate(MD5( D_Pad_R2 | K ),64)
DES_Key_R3 = DES_Key_R1
For single-length DES keys:
DES_Key_I1 = Truncate(MD5( D_Pad_I1 | K ),64)
DES_Key_I3 = DES_Key_I2 = DES_Key_I1
DES_Key_R1 = Truncate(MD5( D_Pad_R1 | K ),64)
DES_Key_R3 = DES_Key_R2 = DES_Key_R1
Note: Each DES_Key_ is in the usual "7 bits plus parity" format,
which is why the above procedure generates 64 bits instead of 56
bits. The values of the parity bits in each DES_Key_ should either
be corrected or ignored.
Each _Pad_is a 512 bit string, as follows:
D_Pad_I1 = 0x5C repeated 64 times
D_Pad_I2 = 0xA3 repeated 64 times
D_Pad_I3 = 0xCA repeated 64 times
D_Pad_R1 = 0x3A repeated 64 times
D_Pad_R2 = 0xA5 repeated 64 times
D_Pad_R3 = 0xC3 repeated 64 times
I_Pad_I = 0xAC repeated 64 times
I_Pad_R = 0x55 repeated 64 times
H_Pad_I = 0x53 repeated 64 times
H_Pad_R = 0x3C repeated 64 times
R_Pad_I = 0x35 repeated 64 times
R_Pad_R = 0xCC repeated 64 times
(Implementation note: The 16 byte intermediate residuals can be
precalculated from these constants and stored to reduce processing
overhead.)
6. Security Considerations
The transform described in this draft is immune to the [Bellovin96]
attacks.
The implications of the size of K can be found in [Blaze96].
Sabin, et al [Page 15]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
7. References
[ANSI94] American National Standards Institute, Inc., "Data
Compression Method for Information Systems," ANSI X3.241-1994,
August 1994.
[Blaze96] Blaze, M., Diffie, W., Rivest, R., Schneir, B., Shimomura,
T., Thompson, E., Wiener, M., "Minimal Key Lengths for Symmetric
Ciphers to Provide Adequate Commercial Security,"
http://theory.lcs.mit.edu/~rivest/bsa-final-report.ascii, January
1996.
[Calgary] Text Compression Corpus, University of Calgary, available
at
ftp://ftp.cpsc.ucalgary.ca/pub/projects/text.compression.corpus.
[FIPS-46] US National Bureau of Standards, "Data Encryption
Standard," Federal Information Processing Standard (FIPS)
Publication 46, January 1977.
[FIPS-46-1] US National Bureau of Standards, "Data Encryption
Standard," Federal Information Processing Standard (FIPS)
Publication 46-1, January 1988.
[FIPS-74] US National Bureau of Standards, "Guidelines for
Implementing and Using the Data Encryption Standard," Federal
Information Processing Standard (FIPS) Publication 74, April 1981.
[FIPS-81] US National Bureau of Standards, "DES Modes of Operation,"
Federal Information Processing Standard (FIPS) Publication 81,
December 1980.
[Hughes96] Hughes, J. editor, "Combined DES-CBC, HMAC, and Replay
Prevention Security Transform," work-in-progress, available from
ftp://ds.internic.net/internet-drafts
/draft-ietf-ipsec-esp-des-md5-03.txt.
[Krawczyk96] Krawczyk, H., Bellare, M., Canetti, R., "HMAC-MD5:
Keyed-MD5 for Message Authentication," work-in-progress, available
from
ftp://ds.internic.net/internet-drafts
/draft-ietf-ipsec-hmac-md5-00.txt.
[RFC-1700] Reynolds, J., and Postel, J., "Assigned Numbers," STD 2,
RFC-1700, UCS/Information Sciences Institute, October 1994.
[RFC-1974] Friend, R., and Simpson, W.A., "PPP Stac LZS Compression
Protocol," RFC-1974, Stac Electronics, August 1996.
[RFC-1851] Karn, P., Metzger, P., and Simpson, W., "The ESP Triple
Sabin, et al [Page 16]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
DES Transform," RFC-1851, Qualcomm, September 1995.
8. Authors' Addresses
Michael Sabin
883 Mango Avenue
Sunnyvale, CA 94087
Email: mike.sabin@worldnet.att.net
Robert Monsour
Hi/fn Inc.
12636 High Bluff Drive
San Diego, CA 92130
Email: rmonsour@hifn.com
9. Appendix: Guidelines for Resetting Compression Histories
The following table offers some guidance on how frequently an LZS
compression history can be reset. The table considers two
parameters: "payload_bytes," the number of bytes in each payload; and
"reset_bytes," the number of bytes between history resets.
Reset_bytes is a multiple of payload_bytes, since an integer number
of payloads is processed between resets. Each entry in the table
shows the compression ratio that was achieved when compressing a test
file with the corresponding values of payload_bytes and reset_bytes.
The test file was the University of Calgary Text Compression Corpus
[Calgary]. The length of the file prior to compression was 3,278,000
bytes. When the entire file was compressed as a single payload, a
compression ratio of 2.34 resulted.
| reset_bytes
| 64 128 256 512 1024 2048 4096 8192 16384
------------+-----------------------------------------------------
packet_bytes|
64 | 1.18 1.26 1.37 1.48 1.61 1.74 1.84 1.89 1.92
128 | 1.28 1.40 1.53 1.67 1.82 1.93 1.99 2.03
256 | 1.43 1.56 1.71 1.86 1.98 2.05 2.08
512 | 1.58 1.73 1.89 2.01 2.08 2.11
1024 | 1.74 1.90 2.02 2.09 2.13
2048 | 1.91 2.03 2.10 2.14
4096 | 2.04 2.10 2.14
8192 | 2.11 2.14
16384 | 2.14
The table suggests that not there is not much degradation in
compression ratio if the compression history is reset after several
Sabin, et al [Page 17]
INTERNET DRAFT 3DES-CBC-LZS-HMAC-Replay ESP October 1996
thousand bytes have been processed. Resetting after less than 1,000
bytes is probably too soon -- the compression ratio degrades
significantly. But waiting longer than about 8,000 bytes gains
little -- the compression ratio does not increase much.
Sabin, et al [Page 18]