For the latest news and information visit The GNU Crypto project

## 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 | 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:

1. SRP Protocol Design
   Thomas J. Wu.

Field Summary
`protected java.math.BigInteger` `g`
`static java.lang.String` `GENERATOR`
`static java.lang.String` `HASH_FUNCTION`
`static java.lang.String` `HOST_PASSWORD_DB`
`protected java.math.BigInteger` `K` The shared secret key.
`protected java.math.BigInteger` `N`
`static java.lang.String` `SHARED_MODULUS`
`static java.lang.String` `SOURCE_OF_RANDOMNESS`
`protected SRP` `srp`
`protected static java.math.BigInteger` `THREE`
`static java.lang.String` `USER_IDENTITY`
`static java.lang.String` `USER_PASSWORD`

Fields inherited from class gnu.crypto.key.BaseKeyAgreementParty
`complete, initialised, irnd, name, rnd, step, TWO`

Constructor Summary
`protected` `SRP6KeyAgreement()`

Method Summary
`protected void` `engineReset()`
`protected byte[]` `engineSharedSecret()`
`protected java.math.BigInteger` `uValue(java.math.BigInteger A, java.math.BigInteger B)`

Methods inherited from class gnu.crypto.key.BaseKeyAgreementParty
`engineInit, engineProcessMessage, getSharedSecret, init, isComplete, name, nextRandomBytes, processMessage, reset`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### 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

### srp

    protected SRP srp

### N

    protected java.math.BigInteger N

### g

    protected java.math.BigInteger g

### K

    protected java.math.BigInteger K

  The shared secret key.

Constructor Detail

### SRP6KeyAgreement

    protected SRP6KeyAgreement()

Method Detail

### engineSharedSecret

    protected byte[] engineSharedSecret()
                                 throws KeyAgreementException

  Specified by:
    `engineSharedSecret` in class `BaseKeyAgreementParty`
    `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)

For the latest news and information visit The GNU Crypto project

Copyright © 2001, 2002, 2003, 2004 Free Software Foundation, Inc.