[gnutls-devel] RSAES-PKCS1-v1_5 incompatible behavior

KIKUCHI Masashi kikuchi at lepidum.co.jp
Fri Dec 28 12:03:43 CET 2012


Hello,

I sent this mail to bugs at gnutls.org yesterday but I received following
error message.  So, I re-send it to this ML.

> You need to subscribe in order to post to this mailing list.
>
> http://lists.gnutls.org/mailman/listinfo/gnutls-devel


GnuTLS server randomly sends illformed 'public-key-encrypted' data.

RSAES-PKCS1-v1_5(RFC2437 7.2.1 Encryption operation) says:
> 2. Convert the encoded message EM to an integer message
>   representative m: m = OS2IP (EM)
>
>  3. Apply the RSAEP encryption primitive (Section 5.1.1) to the public
>    key (n, e) and the message representative m to produce an integer
>    ciphertext representative c: c = RSAEP ((n, e), m)
>
> 4. Convert the ciphertext representative c to a ciphertext C of
>   length k octets: C = I2OSP (c, k)

The implementation in GnuTLS uses "length m" instead of "length k".
When the leading byte of "m" is zero, these two length does not match.

http://git.savannah.gnu.org/cgit/gnutls.git/tree/lib/nettle/pk.c?id=gnutls_3_1_5#n224

This results illformed 'public-key-encrypted' data and random handshake
failure.


Next, the implementation of decryption conversely uses "length C"
instead of "length k" and does not check RSAES-PKCS1-V1_5-DECRYPT Step 1:

> 1. If the length of the ciphertext C is not k octets, output
>   "decryption error" and stop.

http://git.savannah.gnu.org/cgit/gnutls.git/tree/lib/nettle/pk.c?id=gnutls_3_1_5#n270

This results in hiding the former bug when client and server are both
GnuTLS.

There are same problems in sign/verify functions.

To reproduce this handshake failure, use GnuTLS client and OpenSSL
server and run many handshakes (> 256 times).

This is OpenSSL log message when GnuTLS sends wrong signature.
> 3075704456:error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature
length:rsa_sign.c:175:
> 3075704456:error:1408807B:SSL routines:SSL3_GET_CERT_VERIFY:bad
signature:s3_srvr.c:3049:


Regards,




More information about the Gnutls-devel mailing list