13.2. Configuração da Informação de Senha Remota de Segurança

Você deve criar um serviço MBean que fornece uma implementação da interface SRPVerifierStore que integra-se com seus armazenamentos de informação de segurança existentes. Informações sobre a interface SRPVerifierStore podem ser encontradas no Exemplo 13.2, “A interface SRPVerifierStore ”.

Nota

A implementação padrão da interface SRPVerifierStore não é recomendada para um ambiente de segurança de produção uma vez que isto requer todas as informações hash de senha a serem disponibilizadas como um arquivo de objetos serializados.

Exemplo 13.2. A 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;
}
A função primária de uma implementação SRPVerifierStore é fornecer acesso ao objeto SRPVerifierStore.VerifierInfo para o nome do 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 algorítimo SRP. Os elementos dos objetos são os seguintes:
user name
O nome ou id do usuário usado para o logon.
verifier
O hash unidirecional de senha ou PIN que o usuário insere como prova de identidade. A classe org.jboss.security.Util possui um método calculateVerifier que executa o algoritmo hash de senha. A senha resultante leva a forma de H(salt | H(username | ':' | password)), onde H é a função hash de segurança SHA, conforme definido pelo RFC2945. O nome do usuário é convertido a partir da sequência a um byte[], usando a codificação UTF-8.
salt
Número alternado usado para aumentar a dificuldade do ataque de dicionário de força bruta na verificação do banco de dados de senha, no evento em que o banco de dados estiver comprometido. O valor deve ser gerado a partir de um algoritmo de número aleatório quando a senha de texto simples existente estiver com hash.
g
O gerador primitivo do algoritmo SRP. Ele pode ser um parâmetro fixo conhecido 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 o padrão útil obtido através do SRPConf.getDefaultParams().g().
N
Os módulos de segurança primordial do algoritmo SRP. Isto pode ser um parâmetro fixo bem conhecido ao invés de uma configuração por usuário. A classe da utilidade org.jboss.security.srp.SRPConf fornece diversas configurações para o N, incluindo um bom padrão que pode ser obtido através do SRPConf.getDefaultParams().N().

Procedimento 13.1. Integração do Armazenamento de Senha Existente

Leia este procedimento para melhor entendimento das etapas envolvidas na integração do seu armazenamento de senha existente.
  1. Crie o Armazenamento da Informação de Senha com Hash

    Caso suas senhas já tenham sido armazenadas em um formulário com hash irreversível, este procedimento pode apenas ser feito baseando-se no usuário (por exemplo, como parte de um procedimento de atualização).
    Você pode implementar o setUserVerifier(String, VerifierInfo) como um método noOp, ou um método que lança uma exceção declarando que o armazenamento é de leitura apenas.
  2. Crie uma Interface SRPVerifierStore

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

    Você deverá criar um MBean que expõe a interface SRPVerifierStore disponível ao JNDI e expõe quaisquer parâmetros configuráveis requeridos.
    O org.jboss.security.srp.SRPVerifierStoreService permitirá que você implemente isto, embora você possa implementar também o MBean usando a implementação do arquivo de propriedades Java do SRPVerifierStore (refira-se à Seção 13.3, “Amostra da Senha Remota de Segurança”).