Class SrpClientAuthentication

java.lang.Object
de.bsvrz.dav.daf.communication.srpAuthentication.SrpClientAuthentication

public final class SrpClientAuthentication extends Object
Wrapper-Klasse, die die Nimbus-SRP-Implementierung clientseitig kapselt
  • Method Details

    • authenticate

      SRP-Authentifizierung auf Client-Seite
      Parameters:
      userName - Benutzername
      clientCredentials - 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 nicht
      InconsistentLoginException - Fehlerhafte Authentifikationsdaten (Passwort wahrscheinlich falsch)
      SrpNotSupportedException - Server/Konfiguration unterstützt kein SRP
    • createVerifier

      public static SrpVerifierData createVerifier(SrpCryptoParameter cryptoParams, 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 - Cryptoparameter
      user - Benutzer
      clientCredentials - Passwort oder Login-Token
      Returns:
      Überprüfungscode
    • createVerifier

      public static SrpVerifierData createVerifier(SrpCryptoParameter cryptoParams, 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 - Cryptoparameter
      user - Benutzer
      clientCredentials - Passwort oder Login-Token
      saltBytes - Salt
      Returns:
      Überprüfungscode
    • createLoginToken

      public static ClientCredentials createLoginToken(SrpVerifierData srpVerifierData, 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 mit createVerifier(SrpCryptoParameter, String, ClientCredentials) erzeugt und kann auch später mit UserAdministration.getSrpVerifier(String, String, String, int) abgefragt werden.
      user - Benutzername
      password - 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 mit ClientCredentials.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, 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 Verifier
      user - Benutzername
      clientCredentials - Passwort oder Login-Token
      Returns:
      true: Verifier passt, false: sonst