I noticed the exact same code being present in the mozilla 1.7.13 source ... I 
wonder what the correct consequence would be? Have us crypto people proof-read 
all relevant source code? Better educate developers?

Interestingly the attacker's playground between the 0, 1, 0 and the hash gets 
bigger with larger key sizes, so I wonder if attacks get easier for longer 
keys...

Cheers,
Ulrich

> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> 
> For another example of just how badly this kind of thing can 
> be done, look at this code excerpt from Firefox version 
> 1.5.0.7, which is the fixed version.  There are two PKCS-1 
> parsing functions, one which returns the hash and its prefix, 
> the other of which is given the hash and asked whether it 
> matches the RSA-signed value.  This is from the latter one:
> 
>     /*
>      * check the padding that was used
>      */
>     if (buffer[0] != 0 || buffer[1] != 1)
>         goto loser;
>     for (i = 2; i < modulus_len - hash_len - 1; i++) {
>         if (buffer[i] == 0)
>             break;
>         if (buffer[i] != 0xff)
>             goto loser;
>     }
> 
>     /*
>      * make sure we get the same results
>      */
>     if (PORT_Memcmp(buffer + modulus_len - hash_len, hash, 
> hash_len) != 0)
>         goto loser;
> 
>     PORT_Free(buffer);
>     return SECSuccess;
> 
> Here, buffer holds the result of the RSA exponentiation, of 
> size modulus_len, and we are passed hash of size hash_len to compare.
> 
> I don't think this code is used, fortunately.  It will accept 
> anything of the form 0, 1, 0, garbage, hash.  Just goes to 
> show how easy it is to get this kind of parsing wrong.
> 
> (Note, this is from 
> mozilla/security/nss/lib/softoken/rsawrapr.c:RSA_CheckSign())
> 

---------------------------------------------------------------------
The Cryptography Mailing List
Unsubscribe by sending "unsubscribe cryptography" to [EMAIL PROTECTED]

Reply via email to