Re: A New Triple-DES Key Wrap Algorithm
Russ Housley <housley@spyrus.com> Fri, 26 February 1999 17:47 UTC
Received: (from majordomo@localhost) by mail.proper.com (8.8.8/8.8.5) id JAA03471 for ietf-smime-bks; Fri, 26 Feb 1999 09:47:21 -0800 (PST)
Received: from thehub.knight-hub.com (root@thehub.knight-hub.com [205.177.16.3]) by mail.proper.com (8.8.8/8.8.5) with ESMTP id JAA03467 for <ietf-smime@imc.org>; Fri, 26 Feb 1999 09:47:07 -0800 (PST)
Received: from rhousley.spyrus.com ([205.177.169.194]) by thehub.knight-hub.com (8.8.8/8.8.8) with SMTP id MAA00501; Fri, 26 Feb 1999 12:51:53 -0500
Message-Id: <4.1.19990226122207.009b3f00@209.172.119.123>
X-Sender: rhousley#207.212.34.30@209.172.119.123
X-Mailer: QUALCOMM Windows Eudora Pro Version 4.1
Date: Fri, 26 Feb 1999 12:51:44 -0500
To: Bob Jueneman <BJUENEMAN@novell.com>
From: Russ Housley <housley@spyrus.com>
Subject: Re: A New Triple-DES Key Wrap Algorithm
Cc: ietf-smime@imc.org, 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, Tolga Acar <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
In-Reply-To: <s6d13675.049@prv-mail20.provo.novell.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
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>
Bob: You raise an interesting point, but I think it can be easily solved by a random IV for the first encryption. Of course, this makes the result one block longer. And, we would need a different IV for each wrapping. Russ At 10:50 AM 2/22/99 -0700, Bob Jueneman wrote: >Russ, > >There is a possible attack on the double encryption wrap algorithm >that is a result of the constant IV construction. For that reason, I would >strongly prefer the OAEP construction. Although it may look complicated >because there are more steps, the number of line of code is really of no >consequence at all, but the execution time is important for performance. > >Also, I continue to insist that we should not invent n-squared algorithm >IDs for every possible combination of CEK algorithm and key length >plus KEK algorithm and key length. Instead, I would _greatly_ prefer to >first wrap the CEK in a ASN.1 structure that defines the CEK algorithm >and key length, then whiten that structure with OAEP, encrypt the resulting >string with the KEK algorithm, and then provide generic instructions as >to how to decode the result, either by wrapping the entire wrapped key >blob in ASN.1 (preferably) or some other way. > >Here's the attack on the double-encryption wrapping: > >Although most exhaustive search engines divide up the search process >across multiple machines in order to find a single key as quickly as possible >(e.g., the series of RSA challenge ciphers), there is another approach >based on the use of an associative memory that I wrote up back >in the '70's but never published. I call it my "vacuum-cleaner" attack. > >Assume for the sake or argument that there are lots and lots of keys >that have been or will be used to encrypt a known plaintext or >stereotyped message. (This is a standard assumption in cryptanalysis.) >Actually, the attack will succeed with a somewhat weaker condition -- >it isn't necessary to actually know the plaintext -- it is sufficient that >the plaintext be unvarying. > >Let's also assume that each key is used for some interesting purpose -- >sufficiently interesting that it may not be necessary to crack each and every >key -- just a few would be useful. For example, if I were trying to carry on >a credit card attack, I don't have to find the key for Bill Gates' or >Donald Trump's credit card -- just about anyone's will do, and the more >the merrier. > >So for every new key that I have the engine try, I contrive to compare >the result of encrypting the known plaintext against millions of valid >ciphertexts that have been intercepted, looking for a match. Assuming >an effectively inexhaustible supply of ciphertexts is available, this attack >multiplies the effectiveness of the key search engine by an order of a million >or more, depending on the size of the associative memory that is available. > >(The use of an associative memory isn't essential -- it was just a gedanken >experiment to speed up the comparison process without requiring sorting.) > >Two things should be noted. First, this attack is independent of the KEK >encryption algorithm used, assuming a fixed block size. In other words, >this would apply to single-DES, triple-DES, umpty-DES, 2048-bit RSA, >or whatever, assuming a constant session key and constant padding. > >Second, the attack is also independent of the length or type of session >key that is used, except that the yield is a Birthday Problem function of the >length of the key. But given a fixed input, i.e., no random whitening or >changing IV, then two or more matching outputs must imply a matching >session key. > >This leads to a rather surprising result -- even if the KEK performs double >encryption using triple-DES (or any other algorithm without whitening) >to wrap a 40 bit key, two matching session keys can be found with >approximately 50% probability after only 2^20 or a million or so session >keys have been generated. > >Perhaps more surprisingly, at least to people who haven't been down this path, >changing session keys more rapidly may hurt more than it helps -- it just >exposes that many more keys to attack. Changing the session key often >in the middle of a session may help limit the ability of the attacker to >access the entire message, and hence limits the attacker's "take," but it >increases the chances that a potentially interesting fragment of text >may be exposed. > >I'm sure that someone would observe that sending even a million content >encryption key encrypted in a constant KEK would be extremely unlikely >in an S/MIME context, but whether that would really be true would require >a more subtle, protocol-dependent analysis than I would care to make, >and in addition I very much want to standardize on one key wrapping >algorithm that is protocol independent, and not just for S/MIME. > >Obviously the above attack can be defeated by prepending some >additional randomness or by changing the IV. But is also what the OAEP >approach does, and rather more elegantly. By the time we have to add >either a changing IV or some additional randomness (how much would be >required would have to be decided) the length would probably be close >to that required for OAEP, which is a much more general solution. > >In my mind, at least, some extra bytes in the wrapped key is no big deal, >but I would like the efficiency to be a good as possible. Triple-DES is >expensive enough in terms of computational efficiency in software, >especially in terms of the initial key expansion, and doing it twice >would be worse yet. > >Because the new export regulations permit the use of double the key length >used for data encryption to be used for key encryption, we are going to be >using triple-DES in encrypt-decrypt-encrypt mode with only two keys (A-B-A) for >key wrapping of all export-grade CEK keys. > >This can be optimized by saving the key expansion of the first encryption, and >then reusing it for the final encryption. This technique could potentially be >extended to the double encryption wrapping algorithm, by saving the key >expansion used for all three steps, but in order to do that the >"double-triple-DES" >algorithm would probably have to be a single algorithm that is invoked -- >it would be quite difficult to securely save state across two separate >encryption >operations. > >So my preference, as I said earlier, would be to wrap the CEK in ASN.1, >whiten with OAEP, and then encrypt using whatever KEK algorithm and >key length is required, so we don't have to keep re-analyzing this problem >for every new CEK or KEK algorithm or key length. > >If we can define appropriate algorithm IDs, I'm willing and eager to adopt such >a standard for _all_ wrapped keys generated and used within our Novell >International Cryptographic Infrastructure (NICI), even before S/MIME v3 >progresses to a full standard. I'd be willing to assign an algorithm OID >from the >Novell tree, or we could probably get one from PKCS if there would be any >problem getting one assigned by the IANA. > >Regards, > >Bob > > >> Russ Housley <housley@spyrus.com> 02/20/99 02:17PM >>> >All: > >Right now, I am leaning toward the double encryption wrap algorithm. I >think it will be easy to implement, and it yeilds a shorter result that the >OAEP method. To convince myself that it was easy to implement, I did an >implementation. It took me about two hours while watching an old Jimmy >Stewart movie. Of course, I already have SHA-1 and Triple-DES CBC >routines. S/MIME v3 will require these algorithms for other capabilities >besides key wrapping. > >If someone else is willing to do an implementation, I would like to compare >results. This will allow a test vector to be included with the algorithm >description. > >Does anyone have any strong objections to the double encryption wrap >algorithm being selected? > >Russ > > >>WRAP ALOGRITHM #1: DOUBLE ENCRYPTION >> >>Key Checksum >> >>The CMS Checksum Algorithm is used to provide an content-encryption key >>integrity check value. The algorithm is: >> >>1. Compute a 20 octet SHA-1 message digest on the >> content-encryption key. >>2. Use the most significant (first) eight octets of the >> message digest value as the checksum value. >> >>Triple-DES Key Wrap >> >>1. Set odd parity for each of the DES key octets comprising >> the content-encryption key, call the result CEK. >>2. Compute a 8 octet key checksum value on CEK as described above, >> call the result ICV. >>3. Let CEKICV = CEK || ICV. >>4. Encrypt CEKICV in CBC mode using the key-encryption key. Use >> an IV of 0xc302e3c1ad8bb738. >>5. Reverse the order of the ciphertext octets. That is, the most >> significant (first) octet is swapped with the least significant >> (last) octet, and so on. Call the result TEMP. >>6. Encrypt TEMP in CBC mode using the key-encryption key. Use >> an IV of 0x61a197e5b132e196. The ciphertext is 32 octets long. > >Robert R. Jueneman >Security Architect >Network Security Development >Novell, Inc. >122 East 1700 South >Provo, UT 84606 >bjueneman@novell.com >1-801-861-7387
- A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Bruce Schneier
- RE: A New Triple-DES Key Wrap Algorithm Burt Kaliski
- Re: A New Triple-DES Key Wrap Algorithm Dr Stephen Henson
- RE: A New Triple-DES Key Wrap Algorithm Carl Ellison
- RE: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Peter Gutmann
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Peter Gutmann
- RE: Re: A New Triple-DES Key Wrap Algorithm bartley.o'malley
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm David Wagner
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Carl Ellison
- Re: A New Triple-DES Key Wrap Algorithm Snow, Brian D.
- Re: A New Triple-DES Key Wrap Algorithm Peter Gutmann
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- RE: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm David Wagner
- Re: A New Triple-DES Key Wrap Algorithm Stephen Kent
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- RE: A New Triple-DES Key Wrap Algorithm Burt Kaliski
- RE: A New Triple-DES Key Wrap Algorithm Burt Kaliski
- Re: A New Triple-DES Key Wrap Algorithm Peter Gutmann
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- RE: A New Triple-DES Key Wrap Algorithm Jim Schaad (Exchange)
- Re: A New Triple-DES Key Wrap Algorithm Dr Stephen Henson
- Re: A New Triple-DES Key Wrap Algorithm EKR
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Russ Housley
- New Triple-DES Key Wrap Algorithm Section Russ Housley
- RE: A New Triple-DES Key Wrap Algorithm Paul Van Oorschot
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Don Johnson
- RE: A New Triple-DES Key Wrap Algorithm Kevin Kingdon
- RE: A New Triple-DES Key Wrap Algorithm Don Johnson
- Re: A New Triple-DES Key Wrap Algorithm Bob Jueneman
- Re: A New Triple-DES Key Wrap Algorithm Peter Gutmann
- RE: A New Triple-DES Key Wrap Algorithm Burt Kaliski
- RE: A New Triple-DES Key Wrap Algorithm Tolga Acar