Quando desenvolvemos um sistema seguro, temos que
supor que todas as pessoas possuem o código fonte do sistema. Assim, se seu programa está seguro somente enquanto o
.class não for decompilado, então não há segurança nenhuma!
Falando em autenticação de senha... o método com
Message Digest (MD5, SHA-1, etc..) é muito interessante, pois o server pode
autenticar o cliente sem mesmo saber a senha... Mas cuidado! se o cliente
calcula o digest e envia ao servidor.. basta um usuário "malicioso" conhecer o digest do cliente (interceptando mensagens, etc..),
e ele (o usuário malicioso) pode simplesmente enviar diretamente o
digest pro servidor, conseguindo uma autenticação, mesmo sem saber a
senha.
Isto pode ser resolvido se o servidor souber sim a
senha. Então o cliente faz um digest com a senha junto com um número aleatório
(por exemplo), e evia pro servidor o digest e o número. O servidor por sua vez,
pega o número aleatório que o cliente enviou e faz um digest com a senha do
cliente. Se o digest do servidor der igual ao digest do cliente, então o cliente
estará autenticado. O único problema é que o servidor vai ter que saber as
senhas dos clientes.. e aí vc teria que pensar num modo de garantir que as
senhas estejam seguras no lado servidor.
Luiz Felipe Molina.
----- Original Message -----
Sent: Sunday, May 12, 2002 12:26 AM
Subject: Re: [java-list] Password
Paulo,
o que exatamente você não pode gravar no .class?
A senha?
O que você poderia estar fazendo seria utilizar
um algoritmo de criptografia para cifrar a senha antes de gravá-la no
arquivo e decifrá-lo ao efetuar a conexão com o banco de dados. Claro que não
poderia ser um algoritmo fácil de ser descoberto, você poderia ofuscar a
classe para dificultar um pouco as coisas.
Algo mais sofisticado seria usar um algoritmo que
use chaves simétricas e além de guardar a chave usada no .class, guardá-la
também em um local seguro para ser usada sempre que a senha for trocada. O uso
de chaves assimétricas não traz nenhuma real vantagem, fora a desnecessidade
de grande segurança para guardar a chave a ser usada para cifrar a
palavra.
Bem, tudo isso não vai te proteger totalmente,
nada impede que um bom conhecedor de Java decompile a sua classe e descubra
como funciona o mecanismo, mesmo que ela esteja ofuscada (para tal esforço
provavelmente seria alguém mal intencionado). Mais do que uma criptografia, é
necessária uma política de segurança, que impeça o acesso ao sistema nos
níveis de hardware e software e que também involva as pessoas da
empresa.
Samuel
----- Original Message -----
Sent: Friday, May 10, 2002 10:01
AM
Subject: Re: [java-list] Password
ola ALL,
Obrigado pela ajuda. O meu
problema é que preciso gravar a senha de acesso ao banco em um arquivo
.properties por exemplo. Pois minha aplicacao lera desse arquivo para
conectar ao banco. Isso que vc falou está correto para os demais usuários,
mas e o user que se logará no banco como proceder? Eu nao posso deixar
gravado dentro do .class, pois trata-se de uma aplicacao comercial, entao
como fazer? Quero pegar a senha, criptografa-la, grava-la em um .properties,
e quando precisar acessar o banco, ler o arquivo, descriptografar a senha,
autenticar no banco.
Caso
vc tenha QUALQUER ajuda/exemplo agradeço muito.
"Valeu ;) "
Atenciosamente PAULO BRANCO DIRETIVA DIGITAL
Garante sim.
A função
hash funciona assim: Dado um texto de entrada, uma saída é gerada. A
partir da saída, é impossível se chegar novamente ao texto da entrada.
Mas dada a mesma entrada, a mesma saída é gerada. Se vc aplica essa
função na senha do usuário quando o está cadastrando ou trocando de
senha, o que fica guardado é essa saída, que não significa nada
para ninguém que venha a pegar esse arquivo. Quando o usuário vai
logar, vc aplica a função na entrada dele e, se bater o resultado com o
que está guardado, ele bateu a senha correta. Esse tipo de
autenticação é usado no UNIX.
JP
---
[EMAIL PROTECTED] wrote: > Mas Marco, na realidade esse
algoritmo nao garante >
seguranca nenhuma, ou > nao? > Como gravar em um arquivo essa
"password" se quando > transformada em string > fica
identica? > > Atenciosamente > PAULO BRANCO >
DIRETIVA DIGITAL > > > > > "Marco Aurelio
Vilela Garcia" <[EMAIL PROTECTED]> > 06/05/2002 12:54 >
Please respond to java-list > > >
To: <[EMAIL PROTECTED]> >
cc: >
Subject: Re: [java-list] Password >
> > Caro Matheus; > No caso de criptografar uma senha,
eu sugiro que não > utilize nada para > criptografia. A
documentação ainda está fraca, pois > a API de criptografia >
foi liberada para usuários fora dos EUA há muito > pouco tempo. É
possível > obter uma funcionalidade parecida usando um digesto >
de mensagem. > O procedimento é o seguinte: uma classe irá, a >
partir da sua senha, criar > uma string que parece ser criptografada.
Mas não se > trata de criptografia, > é > apenas uma
forma de autenticação. Eu estou usando > isso para armazenar >
senhas > numa base de dados. Estou satisfeito até agora. >
> Logo abaixo escrevo um código para vc experimentar. >
> Abraços > Marco > > > > import
java.security.*; > > /** > * @author
Marco Aurélio Vilela Garcia > * @version 1,0 >
*/ > public final class PasswordEncDec { > >
public static String cryptSenha(String senha){ >
try{ >
MessageDigest md = > MessageDigest.getInstance("SHA"); >
byte[] buf = senha.getBytes(); >
md.update(buf); >
byte[] digest = md.digest(); >
> return new
String(digest); > } >
catch(NoSuchAlgorithmException nsae){ >
> System.err.println("==============================================="); >
> System.err.println("==============================================="); >
System.err.println("
Erro > acontecendo no > PasswordEncDec"); >
System.err.println("
Método > cryptSenha "); >
System.err.println("Exceção: "+
nsae); >
> System.err.println("==============================================="); >
> System.err.println("==============================================="); >
return null; >
} > } > } > > >
> ----- Original Message ----- > From: "MATHEUS Fabio O
CONFAB" > <[EMAIL PROTECTED]> > To:
<[EMAIL PROTECTED]> > Sent: Monday, May 06, 2002 8:54
AM > Subject: [java-list] Password > > >
Pessoall, > > Alguém teria um exemplo simples de criptografia
de > uma string, ou > simplesmente só o algoritimo?? >
Qquer ajuda seria importante.. > > Grato e boa semana! >
Fábio Oliveira Matheus > Confab Industrial S/A. - Depto.
Sistemas > Pindamonhangaba - São Paulo - Brasil > E-Mail:
[EMAIL PROTECTED] > Fone: 12-244-9316 Fax:
12-244-9304 > > > >
------------------------------ LISTA SOUJAVA >
---------------------------- > http://www.soujava.org.br -
Sociedade de Usuários > Java da Sucesu-SP > dúvidas mais
comuns: > http://www.soujava.org.br/faq.htm > regras da
lista: > http://www.soujava.org.br/regras.htm >
historico: > http://www.mail-archive.com/java-list%40soujava.org.br >
para sair da lista: envie email para >
[EMAIL PROTECTED] > ------------------------------------------------------------------------- >
> > > ------------------------------ LISTA
SOUJAVA > ---------------------------- >
http://www.soujava.org.br - Sociedade de Usuários > Java
da Sucesu-SP > dúvidas mais comuns: >
http://www.soujava.org.br/faq.htm > regras da lista: >
http://www.soujava.org.br/regras.htm >
historico: > http://www.mail-archive.com/java-list%40soujava.org.br >
para sair da lista: envie email para >
[EMAIL PROTECTED]
> ------------------------------------------------------------------------- >
> > > >
__________________________________________________ Do You
Yahoo!? Yahoo! Health - your guide to health and
wellness http://health.yahoo.com
------------------------------
LISTA SOUJAVA ---------------------------- http://www.soujava.org.br
- Sociedade de Usuários Java da Sucesu-SP dúvidas mais
comuns: http://www.soujava.org.br/faq.htm regras da lista:
http://www.soujava.org.br/regras.htm historico:
http://www.mail-archive.com/java-list%40soujava.org.br para sair da
lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------
|