2015-04-11 18:40:29 -07:00
|
|
|
csrp-gmp
|
|
|
|
========
|
2013-03-14 20:07:01 -07:00
|
|
|
|
2015-04-11 18:40:29 -07:00
|
|
|
csrp-gmp is a minimal C implementation of the [Secure Remote Password
|
|
|
|
protocol](http://srp.stanford.edu/), originally written by Tom Cocagne
|
|
|
|
to depend on OpenSSL, ported to LibGMP by est31.
|
2015-04-11 18:49:51 -07:00
|
|
|
The project is intended for direct inclusion into utilizing programs.
|
|
|
|
It's only dependency is LibGMP.
|
2013-03-14 20:07:01 -07:00
|
|
|
|
|
|
|
SRP Overview
|
|
|
|
------------
|
|
|
|
|
|
|
|
SRP is a cryptographically strong authentication
|
|
|
|
protocol for password-based, mutual authentication over an insecure
|
|
|
|
network connection.
|
|
|
|
|
|
|
|
Unlike other common challenge-response autentication protocols, such
|
|
|
|
as Kereros and SSL, SRP does not rely on an external infrastructure
|
|
|
|
of trusted key servers or certificate management. Instead, SRP server
|
|
|
|
applications use verification keys derived from each user's password
|
|
|
|
to determine the authenticity of a network connection.
|
|
|
|
|
|
|
|
SRP provides mutual-authentication in that successful authentication
|
|
|
|
requires both sides of the connection to have knowledge of the
|
|
|
|
user's password. If the client side lacks the user's password or the
|
|
|
|
server side lacks the proper verification key, the authentication will
|
|
|
|
fail.
|
|
|
|
|
|
|
|
Unlike SSL, SRP does not directly encrypt all data flowing through
|
|
|
|
the authenticated connection. However, successful authentication does
|
|
|
|
result in a cryptographically strong shared key that can be used
|
|
|
|
for symmetric-key encryption.
|
|
|
|
|
2015-04-11 18:40:29 -07:00
|
|
|
Porter's notes
|
|
|
|
--------------
|
2013-03-14 20:07:01 -07:00
|
|
|
|
2015-04-11 18:49:51 -07:00
|
|
|
Compared with [csrp](https://github.com/cocagne/csrp), some things
|
|
|
|
have changed for the outside.
|
2015-04-11 18:40:29 -07:00
|
|
|
As LibGMP doesn't ship with a cryptographically strong PRNG, strong
|
2015-04-14 19:15:16 -07:00
|
|
|
PRNGs provided (and seeded) by the OS are used instead. On non-Windows
|
2015-05-07 23:00:51 -07:00
|
|
|
operating systems, we try to read the file `/dev/urandom`, if this fails,
|
|
|
|
we use a (poorly) seeded pcgrandom instead. The call `srp_random_seed`
|
|
|
|
has been removed.
|
2011-04-01 17:57:26 -07:00
|
|
|
|
2015-04-11 18:40:29 -07:00
|
|
|
The call `srp_user_new` has a new parameter, `username_for_verifier`,
|
|
|
|
allowing to use different usernames for verifier and srp login.
|
2015-04-23 21:58:24 -07:00
|
|
|
Also, `srp_user_start_authentication` and `srp_verifier_new` have new
|
|
|
|
parameters to specify `a` and `b` values.
|
2011-04-01 17:57:26 -07:00
|
|
|
|
2015-05-07 23:00:51 -07:00
|
|
|
Also, some cleanups were done regarding types: lengths are now `size_t`,
|
|
|
|
and the `const` qualifier has been removed at many places where its
|
|
|
|
usage was misleading.
|
|
|
|
|
2015-04-11 18:49:51 -07:00
|
|
|
Added option for `srp_create_salted_verification_key` call to specify
|
2015-05-07 23:00:51 -07:00
|
|
|
a salt. You can now specify `bytes_b` for `srp_verifier_new`,
|
|
|
|
`bytes_a` for `srp_user_start_authentication`, allowing full control
|
|
|
|
over the login process, which is good for unit tests.
|
|
|
|
`csrp-gmp` itself uses this additional flexibility to automatically test
|
|
|
|
for [RFC 5054](https://tools.ietf.org/html/rfc5054) compatibility inside
|
|
|
|
`test_srp.c`.
|
|
|
|
|
|
|
|
`RFC 5054` compatibility especially means that compatibility to csrp's
|
|
|
|
master branch has been dropped. `csrp-gmp` is compatible to the
|
|
|
|
[rfc5054_compat](https://github.com/cocagne/csrp/tree/rfc5054_compat)
|
|
|
|
branch of `csrp` though.
|
2015-04-11 18:49:51 -07:00
|
|
|
|
2015-04-23 21:58:24 -07:00
|
|
|
We ship with OpenSSL's implementation of the SHA256 and SHA-1 hash
|
|
|
|
algorithms. Support for other hash algoritms was dropped (but
|
|
|
|
re-introducing is fairly easy, just copy from an OpenSSL source
|
|
|
|
distribution).
|
2011-04-01 17:57:26 -07:00
|
|
|
|
2015-05-24 12:05:34 -07:00
|
|
|
Quick Compile helper
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
If you want to compile this and get running fast, this is the command
|
|
|
|
you can use on a recent Ubuntu (~15.04) box on a 64 bit arch:
|
|
|
|
|
|
|
|
```
|
|
|
|
cc -L/usr/lib/x86_64-linux-gnu/ -I/usr/include/ -lgmp -I. srp.c test_srp.c -Isha sha/sha*.c -lgmp -o gmp_test
|
|
|
|
```
|
|
|
|
For other distributions/operating systems, you might have to adjust the paths.
|
|
|
|
|
2015-04-11 18:40:29 -07:00
|
|
|
Usage Example
|
|
|
|
-------------
|
2011-04-01 17:57:26 -07:00
|
|
|
|
2015-04-11 18:49:51 -07:00
|
|
|
For an usage example, see `test_srp.c`
|