summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3217.txt
blob: 86afc226efac7cb5828d1eaafac25ac1e94bfdcc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
Network Working Group                                         R. Housley
Request for Comments: 3217                              RSA Laboratories
Category: Informational                                    December 2001


                    Triple-DES and RC2 Key Wrapping

Status of this Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2001).  All Rights Reserved.

Abstract

   This document specifies the algorithm for wrapping one Triple-DES key
   with another Triple-DES key and the algorithm for wrapping one RC2
   key with another RC2 key.  These key wrap algorithms were originally
   published in section 12.6 of RFC 2630.  They are republished since
   these key wrap algorithms have been found to be useful in contexts
   beyond those supported by RFC 2630.

1  Introduction

   Management of symmetric cryptographic keys often leads to situations
   where one symmetric key is used to encrypt (or wrap) another.  Key
   wrap algorithms are commonly used in two situations.  First, key
   agreement algorithms (such as Diffie-Hellman [DH-X9.42]) generate a
   pairwise key-encryption key, and a key wrap algorithm is used to
   encrypt the content-encryption key or a multicast key with the
   pairwise key-encryption key.  Second, a key wrap algorithm is used to
   encrypt the content-encryption key, multicast key, or session key in
   a locally generated storage key-encryption key or a key-encryption
   key that was distributed out-of-band.

   This document specifies the algorithm for wrapping one Triple-DES key
   with another Triple-DES key [3DES], and it specifies the algorithm
   for wrapping one RC2 key with another RC2 key [RC2].  Encryption of a
   Triple-DES key with another Triple-DES key uses the algorithm
   specified in section 3.  Encryption of a RC2 key with another RC2 key
   uses the algorithm specified in section 4.  Both of these algorithms
   rely on the key checksum algorithm specified in section 2.  Triple-
   DES and RC2 content-encryption keys are encrypted in Cipher Block
   Chaining (CBC) mode [MODES].



Housley                      Informational                      [Page 1]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


   In this document, the key words MUST, MUST NOT, REQUIRED, SHOULD,
   SHOULD NOT, RECOMMENDED, and MAY are to be interpreted as described
   by Scott Bradner in [STDWORDS].

2  Key Checksum

   The key checksum algorithm is used to provide a key integrity check
   value.  The algorithm is:

   1. Compute a 20 octet SHA-1 [SHA1] message digest on the key that is
      to be wrapped.
   2. Use the most significant (first) eight octets of the message
      digest value as the checksum value.

3  Triple-DES Key Wrapping and Unwrapping

   This section specifies the algorithms for wrapping and unwrapping one
   Triple-DES key with another Triple-DES key [3DES].

   The same key wrap algorithm is used for both Two-key Triple-DES and
   Three-key Triple-DES keys.  When a Two-key Triple-DES key is to be
   wrapped, a third DES key with the same value as the first DES key is
   created.  Thus, all wrapped Triple-DES keys include three DES keys.
   However, a Two-key Triple-DES key MUST NOT be used to wrap a Three-
   key Triple-DES key that is comprised of three unique DES keys.

3.1  Triple-DES Key Wrap

   The Triple-DES key wrap algorithm encrypts a Triple-DES key with a
   Triple-DES key-encryption key.  The Triple-DES key wrap algorithm is:

   1. Set odd parity for each of the DES key octets comprising the
      Three-Key Triple-DES key that is to be wrapped, call the result
      CEK.
   2. Compute an 8 octet key checksum value on CEK as described above in
      Section 2, call the result ICV.
   3. Let CEKICV = CEK || ICV.
   4. Generate 8 octets at random, call the result IV.
   5. Encrypt CEKICV in CBC mode using the key-encryption key.  Use the
      random value generated in the previous step as the initialization
      vector (IV).  Call the ciphertext TEMP1.
   6. Let TEMP2 = IV || TEMP1.
   7. Reverse the order of the octets in TEMP2.  That is, the most
      significant (first) octet is swapped with the least significant
      (last) octet, and so on.  Call the result TEMP3.
   8. Encrypt TEMP3 in CBC mode using the key-encryption key.  Use an
      initialization vector (IV) of 0x4adda22c79e82105.  The ciphertext
      is 40 octets long.



Housley                      Informational                      [Page 2]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


   Note:  When the same Three-Key Triple-DES key is wrapped in different
   key-encryption keys, a fresh initialization vector (IV) must be
   generated for each invocation of the key wrap algorithm.

3.2  Triple-DES Key Unwrap

   The Triple-DES key unwrap algorithm decrypts a Triple-DES key using a
   Triple-DES key-encryption key.  The Triple-DES key unwrap algorithm
   is:

   1. If the wrapped key is not 40 octets, then error.
   2. Decrypt the wrapped key in CBC mode using the key-encryption key.
      Use an initialization vector (IV) of 0x4adda22c79e82105.  Call the
      output TEMP3.
   3. Reverse the order of the octets in TEMP3.  That is, the most
      significant (first) octet is swapped with the least significant
      (last) octet, and so on.  Call the result TEMP2.
   4. Decompose TEMP2 into IV and TEMP1.  IV is the most significant
      (first) 8 octets, and TEMP1 is the least significant (last) 32
      octets.
   5. Decrypt TEMP1 in CBC mode using the key-encryption key.  Use the
      IV value from the previous step as the initialization vector.
      Call the ciphertext CEKICV.
   6. Decompose CEKICV into CEK and ICV.  CEK is the most significant
      (first) 24 octets, and ICV is the least significant (last) 8
      octets.
   7. Compute an 8 octet key checksum value on CEK as described above in
      Section 2.  If the computed key checksum value does not match the
      decrypted key checksum value, ICV, then error.
   8. Check for odd parity each of the DES key octets comprising CEK.
      If parity is incorrect, then error.
   9. Use CEK as a Triple-DES key.

3.3  Triple-DES Key Wrap Algorithm Identifier

   Some security protocols employ ASN.1 [X.208-88, X.209-88], and these
   protocols employ algorithm identifiers to name cryptographic
   algorithms.  To support these protocols, the Triple-DES key wrap
   algorithm has been assigned the following algorithm identifier:

      id-alg-CMS3DESwrap OBJECT IDENTIFIER ::= { iso(1) member-body(2)
         us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 6 }

   The AlgorithmIdentifier parameter field MUST be NULL.







Housley                      Informational                      [Page 3]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


3.4  Triple-DES Key Wrap Example

   This section contains a Triple-DES Key Wrap example.  Intermediate
   values corresponding to the named items in section 3.1 are given in
   hexadecimal.

   CEK:     2923 bf85 e06d d6ae 5291 49f1 f1ba e9ea b3a7 da3d 860d 3e98
   KEK:     255e 0d1c 07b6 46df b313 4cc8 43ba 8aa7 1f02 5b7c 0838 251f
   ICV:     181b 7e96 86e0 4a4e
   CEKICV:  2923 bf85 e06d d6ae 5291 49f1 f1ba e9ea b3a7 da3d 860d 3e98
            181b 7e96 86e0 4a4e
   IV:      5dd4 cbfc 96f5 453b
   TEMP1:   cfc1 a789 c675 dd2a b49a 3204 ef92 cc03 5c1f 973b 7a79 60f6
            a44d cc5f 729d 8449
   TEMP2:   5dd4 cbfc 96f5 453b cfc1 a789 c675 dd2a b49a 3204 ef92 cc03
            5c1f 973b 7a79 60f6 a44d cc5f 729d 8449
   TEMP3:   4984 9d72 5fcc 4da4 f660 797a 3b97 1f5c 03cc 92ef 0432 9ab4
            2add 75c6 89a7 c1cf 3b45 f596 fccb d45d
   RESULT:  6901 0761 8ef0 92b3 b48c a179 6b23 4ae9 fa33 ebb4 1596 0403
            7db5 d6a8 4eb3 aac2 768c 6327 75a4 67d4

4  RC2 Key Wrapping and Unwrapping

   This section specifies the algorithms for wrapping and unwrapping one
   RC2 key with another RC2 key [RC2].

   RC2 supports variable length keys.  RC2 128-bit keys MUST be used as
   key-encryption keys; however, the wrapped RC2 key MAY be of any size.

4.1  RC2 Key Wrap

   The RC2 key wrap algorithm encrypts a RC2 key with a RC2 key-
   encryption key.  The RC2 key wrap algorithm is:

   1.  Let the RC2 key be called CEK, and let the length of CEK in
       octets be called LENGTH.  LENGTH is a single octet.
   2.  Let LCEK = LENGTH || CEK.
   3.  Let LCEKPAD = LCEK || PAD.  If the length of LCEK is a multiple
       of 8, the PAD has a length of zero.  If the length of LCEK is not
       a multiple of 8, then PAD contains the fewest number of random
       octets to make the length of LCEKPAD a multiple of 8.
   4.  Compute an 8 octet key checksum value on LCEKPAD as described
       above in Section 2, call the result ICV.
   5.  Let LCEKPADICV = LCEKPAD || ICV.
   6.  Generate 8 octets at random, call the result IV.
   7.  Encrypt LCEKPADICV in CBC mode using the key-encryption key.  Use
       the random value generated in the previous step as the
       initialization vector (IV).  Call the ciphertext TEMP1.



Housley                      Informational                      [Page 4]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


   8.  Let TEMP2 = IV || TEMP1.
   9.  Reverse the order of the octets in TEMP2.  That is, the most
       significant (first) octet is swapped with the least significant
       (last) octet, and so on.  Call the result TEMP3.
   10. Encrypt TEMP3 in CBC mode using the key-encryption key.  Use an
       initialization vector (IV) of 0x4adda22c79e82105.

   Note:  When the same RC2 key is wrapped in different key-encryption
   keys, a fresh initialization vector (IV) must be generated for each
   invocation of the key wrap algorithm.

4.2  RC2 Key Unwrap

   The RC2 key unwrap algorithm decrypts a RC2 key using a RC2 key-
   encryption key.  The RC2 key unwrap algorithm is:

   1.  If the wrapped key is not a multiple of 8 octets, then error.
   2.  Decrypt the wrapped key in CBC mode using the key-encryption key.
       Use an initialization vector (IV) of 0x4adda22c79e82105.  Call
       the output TEMP3.
   3.  Reverse the order of the octets in TEMP3.  That is, the most
       significant (first) octet is swapped with the least significant
       (last) octet, and so on.  Call the result TEMP2.
   4.  Decompose the TEMP2 into IV and TEMP1.  IV is the most
       significant (first) 8 octets, and TEMP1 is the remaining octets.
   5.  Decrypt TEMP1 in CBC mode using the key-encryption key.  Use the
       IV value from the previous step as the initialization vector.
       Call the plaintext LCEKPADICV.
   6.  Decompose the LCEKPADICV into LCEKPAD, and ICV.  ICV is the least
       significant (last) octet 8 octets.  LCEKPAD is the remaining
       octets.
   7.  Compute an 8 octet key checksum value on LCEKPAD as described
       above in Section 2.  If the computed key checksum value does not
       match the decrypted key checksum value, ICV, then error.
   8.  Decompose the LCEKPAD into LENGTH, CEK, and PAD.  LENGTH is the
       most significant (first) octet.  CEK is the following LENGTH
       octets.  PAD is the remaining octets, if any.
   9.  If the length of PAD is more than 7 octets, then error.
   10. Use CEK as an RC2 key.

4.3  RC2 Key Wrap Algorithm Identifier

   Some security protocols employ ASN.1 [X.208-88, X.209-88], and these
   protocols employ algorithm identifiers to name cryptographic
   algorithms.  To support these protocols, the RC2 key wrap algorithm
   has been assigned the following algorithm identifier:





Housley                      Informational                      [Page 5]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


      id-alg-CMSRC2wrap OBJECT IDENTIFIER ::= { iso(1) member-body(2)
         us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 7 }

   The AlgorithmIdentifier parameter field MUST be RC2wrapParameter:

      RC2wrapParameter ::= RC2ParameterVersion

      RC2ParameterVersion ::= INTEGER

   The RC2 effective-key-bits (key size) greater than 32 and less than
   256 is encoded in the RC2ParameterVersion.  For the effective-key-
   bits of 40, 64, and 128, the rc2ParameterVersion values are 160, 120,
   and 58 respectively.  These values are not simply the RC2 key length.
   Note that the value 160 must be encoded as two octets (00 A0),
   because the one octet (A0) encoding represents a negative number.

4.4  RC2 Key Wrap Example

   This section contains a RC2 Key Wrap example.  Intermediate values
   corresponding to the named items in section 4.1 are given in
   hexadecimal.

   CEK:        b70a 25fb c9d8 6a86 050c e0d7 11ea d4d9
   KEK:        fd04 fd08 0607 07fb 0003 feff fd02 fe05
   LENGTH:     10
   LCEK:       10b7 0a25 fbc9 d86a 8605 0ce0 d711 ead4 d9
   PAD:        4845 cce7 fd12 50
   LCEKPAD:    10b7 0a25 fbc9 d86a 8605 0ce0 d711 ead4
               d948 45cc e7fd 1250
   ICV:        0a6f f19f db40 4988
   LCEKPADICV: 10b7 0a25 fbc9 d86a 8605 0ce0 d711 ead4
               d948 45cc e7fd 1250 0a6f f19f db40 4988
   IV:         c7d9 0059 b29e 97f7
   TEMP1:      a01d a259 3793 1260 e48c 55f5 04ce 70b8
               ac8c d79e ffe8 9932 9fa9 8a07 a31f f7a7
   TEMP2:      c7d9 0059 b29e 97f7 a01d a259 3793 1260
               e48c 55f5 04ce 70b8 ac8c d79e ffe8 9932
               9fa9 8a07 a31f f7a7
   TEMP3:      a7f7 1fa3 078a a99f 3299 8eff 9ed7 8cac
               b870 ce04 f555 8ce4 6012 9337 59a2 1da0
               f797 9eb2 5900 d9c7
   RESULT:     70e6 99fb 5701 f783 3330 fb71 e87c 85a4
               20bd c99a f05d 22af 5a0e 48d3 5f31 3898
               6cba afb4 b28d 4f35







Housley                      Informational                      [Page 6]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


5  References

   [3DES]     American National Standards Institute.  ANSI X9.52-1998,
              Triple Data Encryption Algorithm Modes of Operation.
              1998.

   [CMS]      Housley, R., "Cryptographic Message Syntax", RFC 2630,
              June 1999.

   [DES]      American National Standards Institute.  ANSI X3.106,
              "American National Standard for Information Systems - Data
              Link Encryption".  1983.

   [DH-X9.42] Rescorla, E., "Diffie-Hellman Key Agreement Method", RFC
              2631, June 1999.

   [DSS]      National Institute of Standards and Technology.  FIPS Pub
              186: Digital Signature Standard.  19 May 1994.

   [MODES]    National Institute of Standards and Technology.  FIPS Pub
              81: DES Modes of Operation.  2 December 1980.

   [RANDOM]   Eastlake, D., Crocker, S. and J. Schiller, "Randomness
              Recommendations for Security", RFC 1750, December 1994.

   [RC2]      Rivest, R., "A Description of the RC2 (r) Encryption
              Algorithm", RFC 2268, March 1998.

   [SHA1]     National Institute of Standards and Technology.  FIPS Pub
              180-1: Secure Hash Standard.  17 April 1995.

   [STDWORDS] Bradner, S., "Key Words for Use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [X.208-88] CCITT.  Recommendation X.208: Specification of Abstract
              Syntax Notation One (ASN.1).  1988.

   [X.209-88] CCITT.  Recommendation X.209: Specification of Basic
              Encoding Rules for Abstract Syntax Notation One (ASN.1).
              1988.











Housley                      Informational                      [Page 7]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


6  Security Considerations

   Implementations must protect the key-encryption key.  Compromise of
   the key-encryption key may result in the disclosure of all keys that
   have been wrapped with the key-encryption key, which may lead to the
   disclosure of all traffic protected with those wrapped key.

   Implementations must randomly generate initialization vectors (IVs)
   and padding.  The generation of quality random numbers is difficult.
   RFC 1750 [RANDOM] offers important guidance in this area, and
   Appendix 3 of FIPS Pub 186 [DSS] provides one quality PRNG technique.

   If the key-encryption key and wrapped key are associated with
   different symmetric encryption algorithms, the effective security
   provided to data encrypted with the wrapped key is determined by the
   weaker of the two algorithms.  If, for example, data is encrypted
   with 168-bit Triple-DES and that Triple-DES key is wrapped with a
   40-bit RC2 key, then at most 40 bits of protection is provided.  A
   trivial search to determine the value of the 40-bit RC2 key can
   recover Triple-DES key, and then the Triple-DES key can be used to
   decrypt the content.  Therefore, implementers must ensure that key-
   encryption algorithms are as strong or stronger than content-
   encryption algorithms.

   These key wrap algorithms specified in this document have been
   reviewed for use with Triple-DES and RC2, and they have not been
   reviewed for use with other encryption algorithms.  Similarly, the
   key wrap algorithms make use of CBC mode [MODES], and they have not
   been reviewed for use with other cryptographic modes.

7  Acknowledgments

   This document is the result of contributions from many professionals.
   I appreciate the hard work of all members of the IETF S/MIME Working
   Group.  I extend a special thanks to Carl Ellison, Peter Gutmann, Bob
   Jueneman, Don Johnson, Burt Kaliski, John Pawling, and Jim Schaad for
   their support in defining these algorithms and generating this
   specification.

8  Author Address

   Russell Housley
   RSA Laboratories
   918 Spring Knoll Drive
   Herndon, VA 20170
   USA

   EMail: rhousley@rsasecurity.com



Housley                      Informational                      [Page 8]
^L
RFC 3217            Triple-DES and RC2 Key Wrapping        December 2001


9  Full Copyright Statement

   Copyright (C) The Internet Society (2001).  All Rights Reserved.

   This document and translations of it may be copied and furnished to
   others, and derivative works that comment on or otherwise explain it
   or assist in its implementation may be prepared, copied, published
   and distributed, in whole or in part, without restriction of any
   kind, provided that the above copyright notice and this paragraph are
   included on all such copies and derivative works.  However, this
   document itself may not be modified in any way, such as by removing
   the copyright notice or references to the Internet Society or other
   Internet organizations, except as needed for the purpose of
   developing Internet standards in which case the procedures for
   copyrights defined in the Internet Standards process must be
   followed, or as required to translate it into languages other than
   English.

   The limited permissions granted above are perpetual and will not be
   revoked by the Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an
   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

   Funding for the RFC Editor function is currently provided by the
   Internet Society.



















Housley                      Informational                      [Page 9]
^L