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.Utilpossui um métodocalculateVerifierque executa o algoritmo hash de senha. A senha resultante leva a forma deH(salt | H(username | ':' | password)), ondeHé a função hash de segurança SHA, conforme definido pelo RFC2945. O nome do usuário é convertido a partir da sequência a umbyte[], 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.SRPConffornece diversas configurações para og, incluindo o padrão útil obtido através doSRPConf.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.SRPConffornece diversas configurações para oN, incluindo um bom padrão que pode ser obtido através doSRPConf.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.
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 osetUserVerifier(String, VerifierInfo)como um métodonoOp, ou um método que lança uma exceção declarando que o armazenamento é de leitura apenas.Crie uma Interface SRPVerifierStore
Você deve criar uma implementação de interfaceSRPVerifierStorepersonalizada que entende como obter oVerifierInfoa partir do armazenamento criado.OverifyUserChallenge(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çãoSRPLoginModulede cliente especifica a opçãohasAuxChallenge.Crie o JNDI MBean
Você deverá criar um MBean que expõe a interfaceSRPVerifierStoredisponível ao JNDI e expõe quaisquer parâmetros configuráveis requeridos.Oorg.jboss.security.srp.SRPVerifierStoreServicepermitirá que você implemente isto, embora você possa implementar também o MBean usando a implementação do arquivo de propriedades Java doSRPVerifierStore(refira-se à Seção 13.3, “Amostra da Senha Remota de Segurança”).