12.5.2. Configuração do Protocolo Secure Remote Password (ISRP - Senha Remota de Segurança)

Para uso do Protocolo Secure Remote Password (SRP) no seu aplicativo, você primeiro cria um MBean que implementa a interface SRPVerifierStore. A informação sobre a implantação é fornecida na Implementação do SRPVerifierStore.

Procedimento 12.3. Integração do Store de Senha Existente

  1. Criação do store de informação de senha com hash.

    Caso suas senhas já estiverem com store em uma forma de hash inversível, você precisa realizar isto baseado por usuário.
    Você pode implementar setUserVerifier(String, VerifierInfo) como um método noOP, ou um método que lança uma exceção informando que o store é de leitura apenas.
  2. Criação da interface SRPVerifierStore.

    Crie uma implementação da interface SRPVerifierStore personalizada que pode obter o VerifierInfo a partir do store que você criou.
    O verifyUserChallenge(String, Object) pode ser usado para integrar o token de hardware existente baseados em esquemas como o SafeWord ou Radius no algoritmo SRP. Este método de interface é chamado apenas quando a configuração SRPLoginModule do cliente especifica a opção hasAuxChallenge.
  3. Criação do JNDI MBean.

    Crie um MBean que expõe a interface SRPVerifierStore disponível ao JNDI e expõe quaisquer parâmetros requeridos.
    O org.jboss.security.srp.SRPVerifierStoreService default permite que você implemente isto. Você pode também implementar o MBean usando a implementação do arquivo das propriedades Java do SRPVerifierStore.
Implementação do SRPVerifierStore

A implementação da interface SRPVerifierStore não é recomendada para os sistemas de produção, uma vez que isto requer toda a informação do hash da senha esteja disponível como um arquivo de objetos serializados.

A implementação SRPVerifierStore fornece acesso ao objeto SRPVerifierStore.VerifierInfo para um nome de usuário gerado. O método getUserVerifier(String) é chamado pelo SRPService no início de uma sessão SRP do usuário para obter os parâmetros necessários pelo algoritmo SRP.

Os elementos de um Objeto VerifierInfo

nome do usuário
O nome do usuário ou ID do usuário para autenticação
verificador
O hash de uma mão da senha que o usuário insere como prova de identidade. A classe org.jboss.security.Util inclui o método calculateVerifier que executa o algoritmo hash da senha. A senha de resultado leva a forma H(salt | H(username | ':' | password)), onde o H é uma função hash de segurança SHA conforme definido pelo RFC2945. O nome do usuário é convertido a partir de uma sequência para um byte[] usando a codificação UTF-8.
salt
Um número aleatório usado para aumentar a dificuldade de um ataque de dicionário de força bruta na fonte de dados da senha do verificador no evento em que a fonte de dados está comprometida. O valor deve ser gerado a partir de um algoritmo de número aleatório de maneira criptografada quando a senha de texto limpo existente do usuário estiver com hash.
g
O gerador primitivo do algoritmo SRP. Isto pode ser um parâmetro bem conhecido corrigido ao invés de uma configuração por usuário. A classe de utilidade org.jboss.security.srp.SRPConf fornece diversas configurações para o g, incluindo um default adequado através do SRPConf.getDefaultParams().g().
N
Os módulos primários de segurança do algoritmo SRP. Isto pode ser um parâmetro bem conhecido corrigido ao invés de uma configuração por usuário. A classe de utilidade org.jboss.security.srp.SRPConf fornece diversas configurações para o N incluindo um bom default através do SRPConf.getDefaultParams().N().

Exemplo 12.13. 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;
}