Pergunta

aqui sobre um protocolo que me pediram para implementar, e como garantir que era. Desde parecia claro desde o início que ele era uma merda. Sendo assim eu pergunto:

Vocês podem me apontar para algum protocolo de login muito simples (eu sou nulo em sistemas de criptografia) ?? Estou desenvolvendo lado servidor e cliente do aplicativo e eu tenho meu próprio sistema messengering, então eu tenho a liberdade suficiente.

Apenas 2 características especiais para as suas sugestões.

  1. Simples: a rede esta aplicação vai correr ao longo não é especialmente inseguro e eu só quero evitar o envio da senha em texto simples

  2. Se possível, não uma muito longa troca de mensagens. Quanto menor, melhor.

Foi útil?

Solução

Confira Authentication Response Desafio

  • Server inclui uma string de desafio aleatório no formulário de login
  • Quando você inicia sessão, javascript hashes a senha e, em seguida, hashes que, com o desafio
  • Servidor, em seguida, executa a mesma verificação (o DB deve armazenar senhas com hash, mas este método impede de forma eficaz usando um sal para esse hash, pois você teria que transmitir isso)

Outras dicas

Três protocolo de passagem seria útil. Basicamente, tudo se resume a:

  • Uma pessoa criptografa sua senha e envia-o para a pessoa B.
  • Pessoa B criptografa a senha criptografada, e envia de volta para a pessoa A.
  • Uma pessoa decifra-lo e envia-lo de volta.
  • Pessoa B decifra-lo, e recebe a senha em texto simples.

Desta forma, a senha nunca é enviada em texto simples, nem são as chaves de criptografia. É um protocolo relativamente rápido demais, uma vez que se baseia (presumivelmente) a criptografia simétrica, que é muito rápido.

Armazenar o hash de senha no banco de dados não é o ideal seguro em caso do conteúdo do banco de dados começa em mãos não autorizadas. Não há maneira de reverter o hash diretamente, mas existem em linha dictinonaries (como aqui ) para reverter palavras hash (PASS).

No DB você deve armazenar somethig como:

md5(login_name +  domain_or_appname_salt + password);

O sal nos impede de meia muitas formas de ataques de dicionário.

No lado do cliente (no navegador), você teria um formulário de login com nome de usuário e senha. Um pequeno pedaço de javascript seria hash a userame + app_salt_ e senha, portanto, apenas o login_name e haxixe gerados são enviados para o servidor.

Agora, a senha de texto nunca será enviar para o servidor em texto simples. Então você não deve ter que confiar em HTTPS aqui.

A mesma técnica pode ser utilizada na forma de atualização de senha. Assim, o servidor nunca sabe a senha de texto.

Eu espero que você tenha alguma inspiração desta e de outras respostas.

Happy Hacking!

Huibert

Se suas corridas protocolo sobre TCP você pode apenas escrever a autenticação em claro e, em seguida, enrole a comunicação com SSL. Por exemplo, se você estiver usando porta 1234 para o seu protocolo, você pode em seguida, fechar essa porta no servidor e deixar túnel clientes com SSH. Isso pode ser feito por meio de programação e é uma solução muito comum.

Se o seu protocolo funciona sobre HTTP, você pode fazer isso de uma forma padrão usando HTTPS. Por exemplo autenticação básica através de HTTPS é suficiente seguro para as necessidades especificadas.

Por outro lado, se você nunca quer enviar a senha no fio, você precisa fazer uma autenticação de resposta de desafio.

  1. O servidor envia seqüência aleatória
  2. O cliente envia hash aleatórios + senha
  3. verifica Servidor hash.

Isto tem a desvantagem de que a senha está indo para estar disponível (criptografado em em texto simples) no servidor embora. Se você não quiser armazenar senhas no servidor, então você precisa voltar para o meu primeiro exemplo.

SASL é um mecanismo de autenticação segura. Suporte para SASL é fornecido nas bibliotecas padrão Java para versões 1.5 +.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top