Class SrpClientAuthentication
- java.lang.Object
-
- de.bsvrz.dav.daf.communication.srpAuthentication.SrpClientAuthentication
-
public class SrpClientAuthentication extends java.lang.Object
Wrapper-Klasse, die die Nimbus-SRP-Implementierung clientseitig kapselt
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SrpClientAuthentication.AuthenticationResult
Ergebnis einer ARP-Authentifizierungstatic interface
SrpClientAuthentication.TelegramInterface
Interface mit dem ein Anwender derSrpClientAuthentication
-Klasse Telegramme sendet und empfängt
-
Method Summary
Modifier and Type Method Description static SrpClientAuthentication.AuthenticationResult
authenticate(java.lang.String userName, int passwordIndex, ClientCredentials clientCredentials, SrpClientAuthentication.TelegramInterface telegramInterface)
SRP-Authentifizierung auf Client-Seitestatic ClientCredentials
createLoginToken(SrpVerifierData srpVerifierData, java.lang.String user, char[] password)
Erstellt ein Login-Token, welcher ein binärer Code ist, bit dem sich der Client beim Server ausweisen kann ohne das Passwort im Klartext zu kennen.static ClientCredentials
createRandomToken(SrpCryptoParameter cryptoParams)
Erstellt ein zufälligen Login-Token, dem also kein (bekanntes) Klartext-Passwort zugrunde liegt.static SrpVerifierData
createVerifier(SrpCryptoParameter cryptoParams, java.lang.String user, ClientCredentials clientCredentials)
Erstellt einen SRP-Überprüfungscode mit einem zufälligen Salt.static SrpVerifierData
createVerifier(SrpCryptoParameter cryptoParams, java.lang.String user, ClientCredentials clientCredentials, byte[] saltBytes)
Erstellt einen SRP-Überprüfungscode mit einem festen Salt.static boolean
validateVerifier(SrpVerifierData verifier, java.lang.String user, ClientCredentials clientCredentials)
Überprüft, ob ein Verifier zu einem Benutzernamen und Passwort passt.
-
-
-
Method Detail
-
authenticate
public static SrpClientAuthentication.AuthenticationResult authenticate(java.lang.String userName, int passwordIndex, ClientCredentials clientCredentials, SrpClientAuthentication.TelegramInterface telegramInterface) throws CommunicationError, InconsistentLoginException, SrpNotSupportedException
SRP-Authentifizierung auf Client-Seite- Parameters:
userName
- BenutzernameclientCredentials
- Passwort oder Login-Schlüssel (SRP-"x")telegramInterface
- Klasse/Interface zum Empfangen von Telegrammen über diese Verbindung- Returns:
- Sitzungsschlüssel falls erfolgreich
- Throws:
CommunicationError
- Server antwortet nichtInconsistentLoginException
- Fehlerhafte Authentifikationsdaten (Passwort wahrscheinlich falsch)SrpNotSupportedException
- Server/Konfiguration unterstützt kein SRP
-
createVerifier
public static SrpVerifierData createVerifier(SrpCryptoParameter cryptoParams, java.lang.String user, ClientCredentials clientCredentials)
Erstellt einen SRP-Überprüfungscode mit einem zufälligen Salt. Diese Methode eignet sich um clientseitig ein SRP-Überprüfungscode zu erstellen und um diesen dann zusammen mit dem Salt an den Server zu senden, ohne dass dieser das Passwort jemals sehen kann.- Parameters:
cryptoParams
- Cryptoparameteruser
- BenutzerclientCredentials
- Passwort oder Login-Token- Returns:
- Überprüfungscode
-
createVerifier
public static SrpVerifierData createVerifier(SrpCryptoParameter cryptoParams, java.lang.String user, ClientCredentials clientCredentials, byte[] saltBytes)
Erstellt einen SRP-Überprüfungscode mit einem festen Salt. Diese Methode macht dort Sinn, wo das Salt reproduzierbar identisch sein muss, z.B. wenn die Konfiguration einen Überprüfungscode für nicht vorhandene Benutzer "fälscht" (damit man nicht prüfen kann ob ein Benutzer exisitert oder nicht). Wäre das Salt zufällig könnte man durch mehrmalige Einlog-Versuche feststellen, dass sich das Salt ändert, was auf einen "gefälschten" Benutzer hindeuten würde.- Parameters:
cryptoParams
- Cryptoparameteruser
- BenutzerclientCredentials
- Passwort oder Login-TokensaltBytes
- Salt- Returns:
- Überprüfungscode
-
createLoginToken
public static ClientCredentials createLoginToken(SrpVerifierData srpVerifierData, java.lang.String user, char[] password) throws InconsistentLoginException
Erstellt ein Login-Token, welcher ein binärer Code ist, bit dem sich der Client beim Server ausweisen kann ohne das Passwort im Klartext zu kennen. Dieses Token entspricht dem SRP-"x". Es kann in der passwd-Datei gespeichert werden.- Parameters:
srpVerifierData
- Bestehender Überprüfungscode. Wird beim setzen des Passworts mitcreateVerifier(SrpCryptoParameter, String, ClientCredentials)
erzeugt und kann auch später mitUserAdministration.getSrpVerifier(String, String, String, int)
abgefragt werden.user
- Benutzernamepassword
- Zugehöriges Passwort- Returns:
- Anmeldedaten (
ClientCredentials.hasPassword()
liefert false, da es sich um einen Login-Token handelt). Kann mit toString in eine Hex-Darstellung umgewandelt/serialisiert werden. Die einzelnen Bytes sind mitClientCredentials.getTokenData()
abrufbar. - Throws:
InconsistentLoginException
- Falls die angegebenen Daten (Benutzername/Passwort) nicht zum Verifier passen
-
createRandomToken
public static ClientCredentials createRandomToken(SrpCryptoParameter cryptoParams)
Erstellt ein zufälligen Login-Token, dem also kein (bekanntes) Klartext-Passwort zugrunde liegt.- Parameters:
cryptoParams
- Kryptographische Parameter- Returns:
- Ein zufälliger Login-Token für SRP6
-
validateVerifier
public static boolean validateVerifier(SrpVerifierData verifier, java.lang.String user, ClientCredentials clientCredentials)
Überprüft, ob ein Verifier zu einem Benutzernamen und Passwort passt. Dies sollte nur clientseitig bzw. für Testzwecke benutzt werden, da der Server das Passwort gar nicht kennen darf.- Parameters:
verifier
- Bestehender Verifieruser
- BenutzernameclientCredentials
- Passwort oder Login-Token- Returns:
- true: Verifier passt, false: sonst
-
-