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
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 implementarsetUserVerifier(String, VerifierInfo)
como um método noOP, ou um método que lança uma exceção informando que o store é de leitura apenas.Criação da interface SRPVerifierStore.
Crie uma implementação da interfaceSRPVerifierStore
personalizada que pode obter oVerifierInfo
a partir do store que você criou.OverifyUserChallenge(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.Criação do JNDI MBean.
Crie um MBean que expõe a interfaceSRPVerifierStore
disponível ao JNDI e expõe quaisquer parâmetros requeridos.Oorg.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 doSRPVerifierStore
.
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étodocalculateVerifier
que executa o algoritmo hash da senha. A senha de resultado leva a formaH(salt | H(username | ':' | password))
, onde oH
é 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 og
, incluindo um default adequado através doSRPConf.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 doSRPConf.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; }