Remove the weak key checks from the builtin rc4 enc provider. There
authorGreg Hudson <ghudson@mit.edu>
Mon, 28 Mar 2011 23:35:54 +0000 (23:35 +0000)
committerGreg Hudson <ghudson@mit.edu>
Mon, 28 Mar 2011 23:35:54 +0000 (23:35 +0000)
is no standards support for avoiding RC4 weak keys, so rejecting them
causes periodic failures.  Heimdal and Microsoft do not check for weak
keys.  Attacks based on these weak keys are probably thwarted by the
use of a confounder, and even if not, the reduction in work factor is
not terribly significant for 128-bit keys.

ticket: 6886
target_version: 1.9.1
tags: pullup

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24750 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/crypto/builtin/enc_provider/rc4.c

index dc78837ed4710af67d2c3c511e21c30b4941c4f7..6fca98b4ff7b26f0e4ee0a8ed5f39c79659f17d3 100644 (file)
@@ -36,16 +36,6 @@ static krb5_error_code k5_arcfour_init(ArcfourContext *ctx, const unsigned char
 static void k5_arcfour_crypt(ArcfourContext *ctx, unsigned char *dest,
                              const unsigned char *src, unsigned int len);
 
-static const unsigned char arcfour_weakkey1[] = {0x00, 0x00, 0xfd};
-static const unsigned char arcfour_weakkey2[] = {0x03, 0xfd, 0xfc};
-static const struct {
-    size_t length;
-    const unsigned char *data;
-} arcfour_weakkeys[] = {
-    { sizeof (arcfour_weakkey1), arcfour_weakkey1},
-    { sizeof (arcfour_weakkey2), arcfour_weakkey2},
-};
-
 static inline unsigned int k5_arcfour_byte(ArcfourContext * ctx)
 {
     unsigned int x;
@@ -87,13 +77,6 @@ k5_arcfour_init(ArcfourContext *ctx, const unsigned char *key,
     if (key_len != 16)
         return KRB5_BAD_MSIZE;     /*this is probably not the correct error code
                                      to return */
-    for (counter=0;
-         counter < sizeof(arcfour_weakkeys)/sizeof(arcfour_weakkeys[0]);
-         counter++)
-        if (!memcmp(key, arcfour_weakkeys[counter].data,
-                    arcfour_weakkeys[counter].length))
-            return KRB5DES_WEAK_KEY; /* most certainly not the correct error */
-
     state = &ctx->state[0];
     ctx->x = 0;
     ctx->y = 0;