Existem muitos sites na Internet que exigem informações de login, e a única maneira de se proteger contra a reutilização de senhas é a "promessa" de que as senhas sejam colocadas em hash no servidor, o que nem sempre é verdade.
Então, eu me pergunto, quão difícil é criar uma página da Web que faça hash de senhas no computador cliente (com Javascript), antes de enviá-las ao servidor, onde elas seriam re-hash? Em teoria, isso não oferece nenhuma segurança extra, mas, na prática, isso pode ser usado para proteger contra "sites não autorizados" que não hash sua senha no servidor.
javascript
security
client-relations
hashing
client-side
Martín Fixman
fonte
fonte
clear
, é apenas uma masturbação matemática nesse ponto. Eu tive que consertar um sistema que herdei, que foi projetado da maneira exata que você e o OP descrevem, sendo constantemente invadido por adolescentes com o Wireshark. Nós o bloqueamos apenas quando colocamos aREAL
criptografia e criptografamos e assinamos todas as cargas de e para o servidor, a manipulação da conta parou e nunca mais aconteceu depois disso.Respostas:
Por que não é usado? Porque é muito trabalho extra para ganho zero. Esse sistema não seria mais seguro. Pode até ser menos seguro porque dá a falsa impressão de ser mais seguro, levando os usuários a adotar práticas menos seguras (como reutilização de senha, senhas de dicionário etc.).
fonte
Como exatamente isso protege você? Parece que tudo o que você quer fazer é hash a senha com hash, o que é meio inútil. Porque a senha com hash se tornaria a senha.
Que tal não usar a mesma senha para mais de um site. Teoricamente, os sites que usam hash a senha são para impedir o acesso à sua conta, caso estejam comprometidos. Usar a mesma senha para vários sites é simplesmente estúpido.
Se você usou javascript, tudo o que o "hacker" precisa fazer é usar o mesmo método nas senhas com hash e hash. Depois de obter as informações do hash, é apenas o tempo necessário para calcular a senha -> o mesmo hash no banco de dados, o que impede o acesso a uma conta.
fonte
Porque isso agregaria pouco ou nenhum valor. O motivo do hash é que, se o seu banco de dados for invadido, o hacker não terá uma lista de senhas válidas, apenas hashes. Portanto, eles não poderiam se passar por nenhum usuário. Seu sistema não tem conhecimento da senha.
Seguro vem de certificados SSL, além de alguma forma de autenticação. Desejo que meus usuários forneçam uma senha para que eu possa calcular o hash dela.
Além disso, o algoritmo de hash estaria no servidor em uma área mais segura. Colocando-o no cliente, é muito fácil obter o código-fonte para Javascript, mesmo que seus arquivos de scripts referenciados ocultos.
fonte
A solução é mais simples que isso. Certificados de cliente. Eu crio um certificado de cliente na minha máquina. Quando me registro em um site, fazemos um aperto de mão usando meu certificado de cliente e o certificado do servidor.
Nenhuma senha é trocada e, mesmo que alguém hackear o banco de dados, tudo o que eles terão é a chave pública do meu certificado de cliente (que deve ser salgada e criptografada pelo servidor para um nível adicional de segurança).
O certificado do cliente pode ser armazenado em um cartão inteligente (e carregado em um cofre online seguro usando uma senha mestra).
A beleza de tudo isso é que ele remove o conceito de phishing ... você nunca digita uma senha em um site, apenas aperta as mãos com esse site. Tudo o que eles recebem é a sua chave pública, que é inútil sem uma chave privada. A única suscetibilidade é encontrar uma colisão durante um aperto de mão e isso funcionaria apenas uma vez em um único site.
A Microsoft tentou fornecer algo assim no Windows com o Cardspace e posteriormente o enviou como um padrão aberto. OAuth é um pouco semelhante, mas depende de uma "parte emissora" intermediada. Os InfoCards, por outro lado, podem ser emitidos automaticamente. Essa é a solução real para o problema da senha ... removendo completamente as senhas.
OAuth é um passo na direção certa.
fonte
a maioria das respostas aqui parece não entender completamente o ponto do hash de senha do lado do cliente.
o objetivo não é proteger o acesso ao servidor no qual você está efetuando login, pois a interceptação de um hash não é mais segura do que a interceptação de uma senha de texto sem formatação.
o objetivo é realmente proteger a senha do usuário , o que geralmente é muito mais valioso do que o acesso individual ao login do site, já que a maioria dos usuários reutiliza sua senha em vários sites (eles não deveriam, mas a realidade é que eles fazem isso, não deve ser descartado) )
O ssl é ótimo para proteção contra ataques mitm, mas se um aplicativo de login for comprometido no servidor, o ssl não protegerá seus usuários. se alguém obteve acesso malicioso a um servidor da Web, provavelmente será capaz de interceptar senhas em texto sem formatação porque, na maioria dos casos, as senhas são apenas hash por um script no servidor. o invasor pode tentar essas senhas em outros sites (geralmente mais valiosos) usando nomes de usuário semelhantes.
segurança é defesa profunda e o hash do lado do cliente simplesmente adiciona outra camada. lembre-se de que, embora seja importante proteger o acesso ao seu próprio site, proteger o sigilo das senhas de seus usuários é muito mais importante devido à reutilização de senhas em outros sites.
fonte
Definitivamente, é possível e, na verdade, você não precisa esperar por um site.
Dê uma olhada no SuperGenPass . É um bookmarklet.
Ele simplesmente reconhece os campos de senhas, concatena o que você digita com o domínio do site, mistura-o, manipula-o de maneira a obter apenas caracteres "admitidos" na senha e somente então sua senha-hash é enviada por fio.
Ao usar o domínio do site no processo, você obtém uma senha exclusiva por site, mesmo que sempre reutilize a mesma senha.
Não é extremamente seguro (base64-MD5), mas você distribui perfeitamente uma implementação baseada em sha-2, se desejar.
A única desvantagem é que, se o domínio mudar, nesse caso, você precisará solicitar ao site que redefina sua senha, porque não conseguirá recuperá-la por conta própria ... embora isso não ocorra com frequência, por isso considero uma trade-off aceitável.
fonte
password
e / ou um SHA-256password
com algum sal que é conhecido pelo cliente, um homem no meio do anexo pode capturá-la.Gosto da resposta do X4u, mas, na minha opinião, algo como isso deve ser integrado ao navegador / à especificação html - pois, no momento, é apenas metade da resposta.
Aqui está um problema que tenho como usuário - não tenho idéia se minha senha será hash do outro lado quando armazenada no banco de dados. As linhas entre mim e o servidor podem muito bem ser criptografadas, mas não faço ideia do que acontece com a minha senha quando ela chega ao destino - ela pode ser armazenada como texto sem formatação. O administrador do banco de dados pode acabar vendendo o banco de dados e, antes que você perceba, o mundo inteiro sabe sua senha.
A maioria dos usuários reutiliza senhas. Pessoas não técnicas, porque não conhecem melhor. Pessoas técnicas, porque quando você chega à 15ª senha, a maioria das pessoas não tem chance de se lembrar delas, a menos que as anotem (o que todos sabemos também é uma má idéia).
Se o Chrome ou o IE ou o que quer que estivesse usando pudesse me dizer que uma caixa de senha instantaneamente será hash do lado do cliente usando um sal gerado pelo servidor e efetivamente proteger a própria senha - então eu saberia que, como usuário, poderia reutilizar uma senha com menos risco. Eu ainda iria querer os canais criptografados, assim como não quero que nenhum beiral caísse durante a transmissão.
O usuário precisa saber que sua senha nem sequer está disponível para ser enviada ao servidor - apenas o hash. No momento, mesmo usando a solução da X4U, eles não têm como saber se esse é o caso, porque você não sabe se essa tecnologia está em uso.
fonte
Eu acho que é um bom método para usar ao criar algo como uma estrutura, CMS, software de fórum etc., onde você não controla os servidores nos quais ele pode estar instalado. Ou seja, SIM, você sempre deve recomendar o uso de SSL para logins e atividades de logon, mas alguns sites que usam o framework / cms não o possuem, portanto ainda podem se beneficiar com isso.
Como outros já apontaram, o benefício aqui NÃO é que um ataque MITM não permita que outra pessoa faça login neste site específico como você, mas sim que esse invasor não poderá usar o mesmo nome de usuário / senha para faça login em possivelmente dezenas de outros sites nos quais você possa ter contas.
Esse esquema deve usar um sal aleatório ou uma combinação de sais específicos de site e de usuário, para que alguém que obtenha a senha não possa usá-la para o mesmo nome de usuário em outros sites (mesmo sites usando o esquema de hash idêntico). ) nem contra outros usuários do site que possam ter a mesma senha.
Outros sugeriram que os usuários criassem senhas únicas para cada site que usassem ou usassem gerenciadores de senhas. Embora este seja um bom conselho em teoria, todos sabemos que é tolice confiar no mundo real. A porcentagem de usuários que fazem uma dessas coisas é pequena e duvido que isso mude em breve.
Portanto, um hasher de senha javascript é o mínimo que um desenvolvedor de framework / cms pode fazer para limitar o dano de alguém que intercepte senhas em trânsito (o que é fácil através de redes wifi hoje em dia) se o proprietário do site e os usuários finais estiverem sendo negligentes sobre segurança (o que provavelmente são).
fonte