the openssl SRP implementation seems to handle salts with leading
zero-bytes incorrectly.

salts are internally passed around as BIGNUM, and converted back
to uchar* before using them.  however, they are only ever needed
as uchar*: only used for SHA1-ing.  so my guess is the conversion
to BIGNUM, and back to uchar* strips leading zeroes.

i encountered this when testing a new client+server tls-srp implementation
(in golang) against openssl.  the authentication fails with salts with
leading zeroes (it succeeds with other salts).  fwiw, i also tested
against gnutls, and could authenticate just fine with such salts.

for example, compare, in file crypto/srp/srp_lib.c (openssl-1.0.1g):

        BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass)

with http://tools.ietf.org/html/rfc5054#section-2.4

        x = SHA1(s | SHA1(I | ":" | P))
        v = g^x % N

where "I" stands for "identity", or "user".

the use of "x" (bytes from sha1) in the calculation of "v" is allowed
due to an implicit conversion to a number, as defined at the bottom of
paragraph 2.1, http://tools.ietf.org/html/rfc5054#section-2.1
however, for salt "s", no such implicit conversion is needed.

and the same goes for (same file):

        char *SRP_create_verifier(const char *user, const char *pass, char 
**salt,
                          char **verifier, const char *N, const char *g)

which calls:

        int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM 
**salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g)

thoughts?  does conversion from uchar* to bignum, and back to uchar*
indeed strip leading zeroes?

i think the salt should always be passed around as just bytes.  in SRP
it is never used for calculations with bignums.

cheers,
mechiel
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to