[7377] in cryptography@c2.net mail archive

home help back first fref pref prev next nref lref last post

Re: outlook certs - solved

daemon@ATHENA.MIT.EDU (Eric Young)
Thu Jun 22 23:56:40 2000

Message-ID: <39528687.B49D6B60@pobox.com>
Date: Fri, 23 Jun 2000 07:35:03 +1000
From: Eric Young <eay@pobox.com>
MIME-Version: 1.0
To: Matt Thomlinson <mattt@Exchange.Microsoft.com>
Cc: pgut001@cs.auckland.ac.nz, Pawel Krawczyk <kravietz@alfa.ceti.pl>,
        Markku-Juhani Saarinen <mjos@cc.jyu.fi>, cryptography@c2.net
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

> Matt Thomlinson wrote:
> I now believe you've decoded the below incorrectly because the leading bit
> is set, making this a signed number which may have made some of your tools
> croak. Decoding by hand, I get the following mod/exp:
> 
> 3047 0240  (asn, len, int tag, length of 40)
> 
> modulus:
> DFAA A0F4 0CA3 853E 6942 C98D AC3F 1257 4ADB 50CB 263F 99E0 A922 1166 CD1E
> 959C 34EF BC66 84DF E3F7 3C62 F6B0 7D20 FE89 3B52 846F DD21 E099 C187 A1E3
> FE1B 14C3
> 
> 
> 0203 (int tag, length of 3)
> exponent:
> 0100 01

It is definitely a bug in the ASN.1 encoding of the certificate.
ASN.1 has definite rules about how to encode/decode INTEGERs.

# Print the contents of the certificates public key
ssleay asn1parse -offset 186 -length 73 <cert.pem
    0:d=0  hl=2 l=  71 cons: SEQUENCE          
    2:d=1  hl=2 l=  64 prim: INTEGER           :-2156600CF45D7BC297BE377354
C1EEA9B625B035DAC1672057DEEF9A33E26B64CC11449A7C211D09C49E0A5083E00277C5AE7
C9123DF20673F795F1D02E5EC3D
   68:d=1  hl=2 l=   3 prim: INTEGER           :010001

The problem is that the ASN_INTEGER is encoded as
02 BER_INTEGER
40 length 0x40
DF first byte	(if top bit is set, the number is negative)
AA second byte
This means that the modulus has been encoded as a negative ASN1_INTEGER,
(the 0x80 bit is set in the first byte).  There should be a leading 0x00.
ASN.1 negative numbers are stored in twos complement form.  The
SSLeay/OpenSSL X509 printing tool is not displaying the 'negative' sign,
but the conversion from -ve twos complement to the internal libraries
bignum representation is occurring (negatives converted to '+ve' and
a flag is used to store the sign).

The other place where this shows up quite often is in the form of -ve serial
numbers on the certificates.

Another one for Peter Gutmann's collection of miss implemented ASN.1.

eric


home help back first fref pref prev next nref lref last post