gnu.crypto.key.srp6
Class SRP6KeyAgreement
java.lang.Object
gnu.crypto.key.BaseKeyAgreementParty
gnu.crypto.key.srp6.SRP6KeyAgreement
- All Implemented Interfaces:
- IKeyAgreementParty
- Direct Known Subclasses:
- SRP6Host, SRP6TLSClient, SRP6TLSServer, SRP6User
- 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, 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:
- SRP Protocol Design
Thomas J. Wu.
- Version:
- $Revision: 1.2 $
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
SOURCE_OF_RANDOMNESS
public static final java.lang.String SOURCE_OF_RANDOMNESS
- See Also:
- Constant Field Values
SHARED_MODULUS
public static final java.lang.String SHARED_MODULUS
- See Also:
- Constant Field Values
GENERATOR
public static final java.lang.String GENERATOR
- See Also:
- Constant Field Values
HASH_FUNCTION
public static final java.lang.String HASH_FUNCTION
- See Also:
- Constant Field Values
USER_IDENTITY
public static final java.lang.String USER_IDENTITY
- See Also:
- Constant Field Values
USER_PASSWORD
public static final java.lang.String USER_PASSWORD
- See Also:
- Constant Field Values
HOST_PASSWORD_DB
public static final java.lang.String HOST_PASSWORD_DB
- See Also:
- Constant Field Values
THREE
protected static final java.math.BigInteger THREE
mda
protected IMessageDigest mda
N
protected java.math.BigInteger N
g
protected java.math.BigInteger g
K
protected java.math.BigInteger K
- The shared secret key.
SRP6KeyAgreement
protected SRP6KeyAgreement()
engineSharedSecret
protected byte[] engineSharedSecret()
throws KeyAgreementException
- Specified by:
engineSharedSecret
in class BaseKeyAgreementParty
- Throws:
KeyAgreementException
engineReset
protected void engineReset()
- Specified by:
engineReset
in class BaseKeyAgreementParty
uValue
protected java.math.BigInteger uValue(java.math.BigInteger A,
java.math.BigInteger B)
Copyright © 2001, 2002, 2003
Free Software Foundation,
Inc. All Rights Reserved.