gnu.crypto.key.srp6
public abstract class SRP6KeyAgreement extends BaseKeyAgreementParty
The Secure Remote Password (SRP) key agreement protocol, also known as SRP-6, is designed by Thomas J. Wu (see references). The protocol, and its elements are described as follows:
N A large safe prime (N = 2q+1, where q is prime)
All arithmetic is done modulo N.
g A generator modulo N
s User's salt
I Username
p Cleartext Password
H() One-way hash function
^ (Modular) Exponentiation
u Random scrambling parameter
a,b Secret ephemeral values
A,B Public ephemeral values
x Private key (derived from p and s)
v Password verifier
The host stores passwords using the following formula:
x = H(s | H(I ":" p)) (s is chosen randomly)
v = g^x (computes password verifier)
The host then keeps {I, s, v} in its password database.
The authentication protocol itself goes as follows:
User -> Host: I, A = g^a (identifies self, a = random number)
Host -> User: s, B = 3v + g^b (sends salt, b = random number)
Both: u = H(A, B)
User: x = H(s, p) (user enters password)
User: S = (B - 3g^x) ^ (a + ux) (computes session key)
User: K = H(S)
Host: S = (Av^u) ^ b (computes session key)
Host: K = H(S)
Reference:
Version: $Revision: 1.3 $
| Field Summary | |
|---|---|
| protected BigInteger | g |
| static String | GENERATOR |
| static String | HASH_FUNCTION |
| static String | HOST_PASSWORD_DB |
| protected BigInteger | K The shared secret key. |
| protected BigInteger | N |
| protected SRP | srp |
| static String | SHARED_MODULUS |
| static String | SOURCE_OF_RANDOMNESS |
| protected static BigInteger | THREE |
| static String | USER_IDENTITY |
| static String | USER_PASSWORD |
| Constructor Summary | |
|---|---|
| protected | SRP6KeyAgreement() |
| Method Summary | |
|---|---|
| protected void | engineReset() |
| protected byte[] | engineSharedSecret() |
| protected BigInteger | uValue(BigInteger A, BigInteger B) |