Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

17.6.2. Configuration du protocole SRP (Secure Remote Password)

Afin d'utiliser le protocole SRP (Secure Remote Password) dans votre application, vous devrez tout d'abord créer un MBean qui implémente l'interface SRPVerifierStore. Vous trouverez des informations sur l'implémentation à Implémentation SRPVerifierStore.

Procédure 17.5. Intégrer le store de mots de passe existant

  1. Créer un store d'informations de mots de passe hachés.

    Si vos mots de passe sont déjà stockés sous une forme hachée irréversible, vous aurez besoin de faire cela sur la base utilisateur.
    Vous pouvez implémenter un setUserVerifier(String, VerifierInfo) en tant que méthode noOp, ou d'une méthode qui envoie une exception signifiant que le store est en lecture-seule.
  2. Créer l'interface SRPVerifierStore.

    Créer une implémentation d'interface SRPVerifierStore personnalisée qui puisse obtenir VerifierInfo du store que vous avez créé.
    Le verifyUserChallenge(String, Object) peut servir à intégrer des schémas basés token de matériel existant comme SafeWord ou Radius dans l'algorithme SRP. Cette méthode d'interface est appelée uniquement lorsque la configuration SRPLoginModule du client spécifie l'option hasAuxChallenge.
  3. Créer le MBean JNDI.

    Créer un MBean qui expose l'interface SRPVerifierStore disponible à JNDI, et expose tous les paramètres configurables requis.
    Le service org.jboss.security.srp.SRPVerifierStoreService par défaut vous permet d'implémenter ceci. Vous pouvez également implémenter le MBean par une implémentation de fichier de propriétés Java du SRPVerifierStore.
Implémentation SRPVerifierStore

L'implémentation par défaut de l'interface SRPVerifierStore n'est pas recommandée pour les systèmes de production, car elle exige que toutes les informations de hachage de mot de passe soient disponibles sous forme de fichier d'objets sérialisés.

L'implémentation du SRPVerifierStore fournit un accès à l'objet SRPVerifierStore.VerifierInfo pour un nom d'utilisateur donné. La méthode getUserVerifier(String) est appelée par le SRPService au départ d'une session SRP utilisateur pour obtenir les paramètres requis par l'algorithme SRP.

Éléments d'un Objet VerifierInfo

nom d'utilisateur
Le nom d'utilisateur ou l'ID utilisateur pour s'authentifier
verifier
Un hachage unidirectionnel du mot de passe que l'utilisateur saisit comme preuve d'identité. La classe org.jboss.security.Util inclut une méthode calculateVerifier qui exécute l'algorithme de hachage de mot de passe. Le mot de passe de sortie prend la forme H(salt | H(username | password)), où H est la fonction de hachage sécurisée SHA, telle que définie par RFC2945. Le nom d'utilisateur est converti d'une chaîne en un byte [] en utilisant le codage UTF-8.
salt
Un nombre aléatoire utilisé pour augmenter la difficulté d'une attaque de force brute de dictionnaire sur la base de données de mot de passe de vérification au cas où la base de données soit compromise. La valeur doit être générée à partir d'un algorithme de cryptage fort composé de nombres aléatoires lorsque le mot de passe en texte clair existant de l'utilisateur est haché.
g
Le générateur primitif d'algorithme SRP. Cela peut être un paramètre fixe bien connu plutôt qu'un paramètre par utilisateur. La classe d'utilitaire de org.jboss.security.srp.SRPConf fournit plusieurs paramètres pour g, avec une valeur par défaut appropriée obtenue par l'intermédiaire de SRPConf.getDefaultParams().g().
N
SRP algorithm safe-prime modulus. Cela peut être un paramètre fixe bien connu, plutôt qu'un paramètre par utilisateur. La classe d'utilitaire de org.jboss.security.srp.SRPConf fournit plusieurs paramètres pour «N», y compris un bon nombre de valeurs par défaut obtenues via SRPConf.getDefaultParams().N().

Exemple 17.15. L'interface SRPVerifierStore

package org.jboss.security.srp;

import java.io.IOException;
import java.io.Serializable;
import java.security.KeyException;

public interface SRPVerifierStore
{
    public static class VerifierInfo implements Serializable
    {

        public String username;


        public byte[] salt;
        public byte[] g;
        public byte[] N;
    }
    

    public VerifierInfo getUserVerifier(String username)
        throws KeyException, IOException;

    public void setUserVerifier(String username, VerifierInfo info)
        throws IOException;


     public void verifyUserChallenge(String username, Object auxChallenge)
         throws SecurityException;
}