RE: New Triple-DES Key Wrap Algorithm Section

Paul Van Oorschot <paul.vanoorschot@entrust.com> Fri, 05 March 1999 17:42 UTC

Received: from mail.proper.com (mail.proper.com [206.86.127.224]) by ietf.org (8.9.1a/8.9.1a) with ESMTP id MAA18055 for <smime-archive@odin.ietf.org>; Fri, 5 Mar 1999 12:42:23 -0500 (EST)
Received: (from majordomo@localhost) by mail.proper.com (8.8.8/8.8.5) id IAA05191 for ietf-smime-bks; Fri, 5 Mar 1999 08:00:33 -0800 (PST)
Received: from gatekeeper.entrust.com (gatekeeper.entrust.com [204.101.128.170]) by mail.proper.com (8.8.8/8.8.5) with SMTP id HAA05171 for <ietf-smime@imc.org>; Fri, 5 Mar 1999 07:57:48 -0800 (PST)
Received: id KAA01606; Fri, 5 Mar 1999 10:53:28 -0500
Received: by gateway id <FR0Z4CNN>; Fri, 5 Mar 1999 10:55:38 -0500
Message-ID: <91AE69321799D211AEC500105A9C4696894D69@sothmxs05.entrust.com>
From: Paul Van Oorschot <paul.vanoorschot@entrust.com>
To: cme@ACM.ORG, berson@anagram.com, bschanni@BayNetworks.com, kent@bbn.com, pcain@bbn.com, mhetzel@bell-labs.com, brickell@certco.com, djohnson@certicom.ca, schneier@counterpane.com, daw@cs.berkeley.edu, denning@cs.cosc.georgetown.edu, smid@csmes.ncsl.nist.gov, omura@cylink.com, dickie@EMPIRE.eclipse.ncsc.mil, carlisle.adams@entrust.com, paulv@entrust.com, Blake.greenlee@greenlee.com, benaloh@microsoft.com, bfox@microsoft.com, cjwagne@missi.ncsc.mil, jis@mit.edu, TACAR.PRV-7.PROVO@novell.com, merkle@parc.xerox.com, BSnow@radium.ncsc.mil, burt@RSA.COM, ekr@rtfm.com, jlinn@securitydynamics.com, ams@terisa.com, rivest@theory.lcs.mit.edu, balenson@tis.com, denny@tis.com, acc@tycho.ncsc.mil, jhs@tycho.ncsc.mil, smatyas@us.ibm.com, desmedt@uwm.edu, ietf-smime@imc.org, 'Russ Housley' <housley@spyrus.com>
Subject: RE: New Triple-DES Key Wrap Algorithm Section
Date: Fri, 05 Mar 1999 10:50:48 -0500
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.1960.3)
Content-Type: text/plain; charset="iso-8859-1"
Sender: owner-ietf-smime@imc.org
Precedence: bulk
List-Archive: <http://www.imc.org/ietf-smime/mail-archive/>
List-Unsubscribe: <mailto:ietf-smime-request@imc.org?body=unsubscribe>

Russ - does this mean that you have chosen a new, non-standard algorithm?

Paul.

> ----------
> From: 	Russ Housley[SMTP:housley@spyrus.com]
> Sent: 	Thursday, March 04, 1999 11:51 AM
> To: 	cme@ACM.ORG; berson@anagram.com; bschanni@BayNetworks.com;
> kent@bbn.com; pcain@bbn.com; mhetzel@bell-labs.com; brickell@certco.com;
> djohnson@certicom.ca; schneier@counterpane.com; daw@cs.berkeley.edu;
> denning@cs.cosc.georgetown.edu; smid@csmes.ncsl.nist.gov;
> omura@cylink.com; dickie@EMPIRE.eclipse.ncsc.mil;
> carlisle.adams@entrust.com; paulv@entrust.com;
> Blake.greenlee@greenlee.com; benaloh@microsoft.com; bfox@microsoft.com;
> cjwagne@missi.ncsc.mil; jis@mit.edu; TACAR.PRV-7.PROVO@novell.com;
> merkle@parc.xerox.com; BSnow@radium.ncsc.mil; burt@RSA.COM; ekr@rtfm.com;
> jlinn@securitydynamics.com; ams@terisa.com; rivest@theory.lcs.mit.edu;
> balenson@tis.com; denny@tis.com; acc@tycho.ncsc.mil; jhs@tycho.ncsc.mil;
> smatyas@us.ibm.com; desmedt@uwm.edu; ietf-smime@imc.org
> Subject: 	New Triple-DES Key Wrap Algorithm Section
> 
> All:
> 
> I greatly appreciate the work that everyone has put into the open debate
> on
> key wrapping.
> 
> The 44th IETF meeting is coming up rapidly, and I would like to close this
> debate prior to the meeting.  To that end, I selected the
> double-encryption
> algorithm.  An updated CMS document has not been posted yet, so I have
> attached the text associated with key wrapping.
> 
> Based on the discussion on this list, I believe that the double-encryption
> algorithm meet the security requirements, and it is easily implemented
> with
> building blocks that are otherwise needed to implement CMS.
> 
> I will gladly facilitate the further discussion of the general wrapping
> algorithm if the participants are interested.  I do not think that
> discussion should occur on the IETF S/MIME Working Group mail list, but I
> will arrange for a separate list to be created if you want to pursue the
> general wrap algorithm.
> 
> Russ
> 
> 
> = = = = = = = = = =
> 
> 12.6  Triple-DES and RC2 Key Wrap Algorithms
> 
>    CMS implementations must include encryption of a Triple-DES content-
>    encryption key with a Triple-DES key-encryption key using the
>    algorithm specified in Sections 12.6.2 and 12.6.3.  CMS
>    implementations should include encryption of a RC2 content-encryption
>    key with a RC2 key-encryption key using the algorithm specified in
>    Sections 12.6.4 and 12.6.5.  Triple-DES and RC2 content-encryption
>    keys are encrypted in Cipher Block Chaining (CBC) mode [MODES].
> 
>    Key Transport algorithms allow for the content-encryption key to be
>    directly encrypted; however, key agreement and symmetric key-
>    encryption key algorithms encrypt the content-encryption key with a
>    second symmetric encryption algorithm.  This section describes how
>    the Triple-DES or RC2 content-encryption key is formatted and
>    encrypted.
> 
>    Key agreement algorithms generate a pairwise key-encryption key, and
>    a key wrap algorithm is used to encrypt the content-encryption key
>    with the pairwise key-encryption key.  Similarly, a key wrap
>    algorithm is used to encrypt the content-encryption key in a
>    previously distributed key-encryption key.
> 
>    The key-encryption key is generated by the key agreement algorithm or
>    distributed out of band.  For key agreement of RC2 key-encryption
>    keys, 128 bits must be generated as input to the key expansion
>    process used to compute the RC2 effective key [RC2].
> 
>    The same algorithm identifier is used for both 2-key and 3-key
>    Triple-DES.  When the length of the content-encryption key to be
>    wrapped is a 2-key Triple-DES key, a third key with the same value as
>    the first key is created.  Thus, all Triple-DES content-encryption
>    keys are wrapped like 3-key Triple-DES keys.
> 
> 12.6.1  Key Checksum
> 
>    The CMS Checksum Algorithm is used to provide a content-encryption
>    key integrity check value.  The algorithm is:
> 
>    1.  Compute a 20 octet SHA-1 [SHA1] message digest on the
>        content-encryption key.
>    2.  Use the most significant (first) eight octets of the message
>        digest value as the checksum value.
> 
> 12.6.2  Triple-DES Key Wrap
> 
>    The Triple-DES key wrap algorithm encrypts a Triple-DES content-
>    encryption 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 content-encryption key, call the result CEK.
>    2.  Compute an 8 octet key checksum value on CEK as described above
>        in Section 12.6.1, 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.
> 
>    Note:  When the same content-encryption key is wrapped in different
>    key-encryption keys, a fresh initialization vector (IV) must be
>    generated for each invocation of the key wrap algorithm.
> 
> 12.6.3  Triple-DES Key Unwrap
> 
>    The Triple-DES key unwrap algorithm decrypts a Triple-DES content-
>    encryption key using a Triple-DES key-encryption key.  The Triple-DES
>    key unwrap algorithm is:
> 
>    1.  If the wrapped content-encryption key is not 40 octets, then
>        error.
>    2.  Decrypt the wrapped content-encryption 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 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 the 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 12.6.1.  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 there is an error.
>    9. Use CEK as the content-encryption key.
> 
> 12.6.4  RC2 Key Wrap
> 
>    The RC2 key wrap algorithm encrypts a RC2 content-encryption key with a
> 
>    RC2 key-encryption key.  The RC2 key wrap algorithm is:
> 
>    1.  Let the content-encryption key be called CEK, and let the length
>        of the content-encryption key in octets be called LENGTH.
>    2.  Compute an 8 octet key checksum value on CEK as described above
>        in Section 12.6.1, call the result ICV.
>    3.  Let CEKICV = LENGTH || CEK || ICV.  LENGTH is a single octet.
>    4.  Let CEKICVPAD = CEKICV || PAD.  If the length of CEKICV is a
>        multiple of 8, the PAD has a length of zero.  If the length of
>        CEKICV is not a multiple of 8, then PAD contains the fewest
>        number of random octets to make CEKICVPAD a multiple of 8.
>    5.  Generate 8 octets at random, call the result IV.
>    5.  Encrypt CEKICVPAD 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.
> 
>    Note:  When the same content-encryption key is wrapped in different
>    key-encryption keys, a fresh initialization vector (IV) must be
>    generated for each invocation of the key wrap algorithm.
> 
> 12.6.5  RC2 Key Unwrap
> 
>    The RC2 key unwrap algorithm decrypts a RC2 content-encryption key
>    using a RC2 key-encryption key.  The RC2 key unwrap algorithm is:
> 
>    1.  If the wrapped content-encryption key is not a multiple of 8
>        octets, then error.
>    2.  Decrypt the wrapped content-encryption 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 ciphertext CEKICVPAD.
>    6.  Decompose the CEKICVPAD into LENGTH, CEK, ICV, and PAD.  LENGTH is
>        the most significant (first) octet.  CEK is the following LENGTH
>        octets.  ICV is the following 8 octets.  PAD is the remaining
>        octets, if any.
>    7.  If PAD is more than 7 octets, then error.
>    8.  Compute an 8 octet key checksum value on CEK as described above
>        in Section 12.6.1.  If the computed key checksum value does not
>        match the decrypted key checksum value, ICV, then error.
>    9.  Use CEK as the content-encryption key.
> 
> Security Considerations
> 
>    Section 12.6 specifies key wrap algorithms used to encrypt a Triple-
>    DES [3DES] content-encryption key with a Triple-DES key-encryption
>    key or to encrypt a RC2 [RC2] content-encryption key with a RC2 key-
>    encryption key.  The key wrap algorithms make use of CBC mode
>    [MODES].  These key wrap algorithms have been reviewed for use with
>    Triple and RC2.  They have not been reviewed for use with other
>    cryptographic modes or other encryption algorithms.  Therefore, if a
>    CMS implementation wishes to support ciphers in addition to Triple-
>    DES or RC2, then additional key wrap algorithms need to be defined to
>    support the additional ciphers.
> 
>