Entendo que impor um comprimento mínimo às senhas faz muito sentido (para salvar os usuários deles mesmos), mas meu banco exige que as senhas tenham entre 6 e 8 caracteres e comecei a me perguntar ...
- Isso não facilitaria apenas os ataques de força bruta? (Ruim)
- Isso significa que minha senha está sendo armazenada sem criptografia? (Ruim)
Se alguém com (esperançosamente) alguns bons profissionais de segurança de TI trabalhando para eles estiver impondo um tamanho máximo de senha, devo pensar em fazer algo semelhante? Quais são os prós / contras disso?
security
encryption
passwords
nickf
fonte
fonte
Respostas:
As senhas são divididas em hash para 32, 40, 128, qualquer que seja o tamanho. O único motivo para um tamanho mínimo é evitar senhas fáceis de adivinhar. Não há finalidade para um comprimento máximo.
O XKCD obrigatório que explica por que você está fazendo um desserviço ao usuário se você impõe um tamanho máximo:
fonte
Um comprimento máximo especificado em um campo de senha deve ser lido como um AVISO DE SEGURANÇA . Qualquer usuário sensível e consciente da segurança deve assumir o pior e esperar que este site esteja armazenando sua senha literalmente (ou seja, sem hash, conforme explicado pelo epochwolf).
Nesse caso, é o caso:
Se você estiver desenvolvendo um site que aceite senhas, não coloque um limite de senhas tolas, a menos que queira ser tarado com o mesmo pincel.
[Internamente, é claro que seu código pode tratar apenas os primeiros 256/1024 / 2k / 4k / (o que) bytes como "significativos", para evitar triturar senhas gigantescas.]
fonte
Permitir um comprimento de senha completamente ilimitado tem uma grande desvantagem se você aceitar a senha de fontes não confiáveis.
O remetente pode tentar fornecer uma senha tão longa que resulta em uma negação de serviço para outras pessoas. Por exemplo, se a senha tiver 1 GB de dados e você gastar todo o seu tempo, aceite-a até ficar sem memória. Agora, suponha que essa pessoa envie essa senha a você quantas vezes você desejar aceitar. Se você não tomar cuidado com os outros parâmetros envolvidos, isso pode levar a um ataque de negação de serviço.
Definir o limite superior para algo como 256 caracteres parece excessivamente generoso para os padrões atuais.
fonte
Primeiro, não presuma que os bancos tenham bons profissionais de segurança de TI trabalhando para eles. Muitos não .
Dito isto, o tamanho máximo da senha é inútil. Muitas vezes, exige que os usuários criem uma nova senha (argumentos sobre o valor do uso de senhas diferentes em todos os sites, por enquanto), o que aumenta a probabilidade de que eles simplesmente as anotem. Também aumenta bastante a suscetibilidade ao ataque, por qualquer vetor da força bruta à engenharia social.
fonte
Definir o tamanho máximo da senha com menos de 128 caracteres agora é desencorajado pelo OWASP Authentication Cheat Sheet
https://www.owasp.org/index.php/Authentication_Cheat_Sheet
Citando o parágrafo inteiro:
fonte
Um motivo que posso imaginar para impor um tamanho máximo de senha é se o front-end deve interagir com muitos back-end do sistema legado, um dos quais impõe um tamanho máximo de senha.
Outro processo de raciocínio pode ser que, se um usuário for forçado a usar uma senha curta, é mais provável que ele invente uma tagarelice aleatória do que um slogan ou apelido facilmente adivinhado (por seus amigos / família). Obviamente, essa abordagem só é eficaz se o front-end aplicar números / letras misturadas e rejeitar senhas que possuam qualquer palavra do dicionário, incluindo palavras escritas em linguagem L33t.
fonte
Um motivo potencialmente válido para impor um tamanho máximo de senha é que o processo de fazer o hash (devido ao uso de uma função de hash lento como o bcrypt) leva muito tempo; algo que poderia ser abusado para executar um ataque do DOS contra o servidor.
Por outro lado, os servidores devem ser configurados para descartar automaticamente os manipuladores de solicitações que demoram muito tempo. Então, duvido que isso seja um grande problema.
fonte
Eu acho que você está muito certo em ambos os pontos. Se eles estão armazenando o hash das senhas, como deveriam, o tamanho da senha não afeta o esquema do banco de dados. Ter um tamanho de senha aberto gera mais uma variável que um invasor de força bruta deve ter em conta.
É difícil encontrar uma desculpa para limitar o tamanho da senha, além do design inadequado.
fonte
O único benefício que posso obter com um tamanho máximo de senha seria eliminar o risco de um ataque de estouro de buffer causado por uma senha muito longa, mas existem maneiras muito melhores de lidar com essa situação.
fonte
Ignore as pessoas que dizem para não validar senhas longas. Owasp diz literalmente que 128 caracteres devem ser suficientes. Apenas para dar espaço suficiente à respiração, você pode dar um pouco mais, digamos 300, 250, 500, se quiser.
https://www.owasp.org/index.php/Authentication_Cheat_Sheet#Password_Length
fonte
O armazenamento é barato, por que limitar o tamanho da senha. Mesmo se você estiver criptografando a senha, em vez de apenas hash uma cadeia de 64 caracteres, não será necessário muito mais do que uma cadeia de 6 caracteres para criptografar.
Provavelmente, o sistema bancário está sobrepondo um sistema mais antigo, de modo que eles só foram capazes de permitir uma certa quantidade de espaço para a senha.
fonte
Meu banco também faz isso. Ele costumava permitir qualquer senha, e eu tinha uma de 20 caracteres. Um dia eu mudei, e eis que ele me deu um máximo de 8 e tinha cortado caracteres não alfanuméricos que estavam na minha senha antiga. Não fez nenhum sentido para mim.
Todos os sistemas de back-end do banco funcionavam antes quando eu estava usando minha senha de 20 caracteres com caracteres não alfanuméricos, portanto, o suporte ao legado não pode ter sido o motivo. E mesmo que fosse, eles ainda devem permitir que você tenha senhas arbitrárias e, em seguida, crie um hash que atenda aos requisitos dos sistemas legados. Melhor ainda, eles deveriam consertar os sistemas legados.
Uma solução de cartão inteligente não iria bem comigo. Já tenho muitas cartas ... Não preciso de outro truque.
fonte
Se você aceitar uma senha de tamanho arbitrário, será assumido que ela está sendo truncada no tamanho de uma cortina por motivos de desempenho antes de ser hash. O problema do truncamento é que, à medida que o desempenho do servidor aumenta com o tempo, você não pode aumentar facilmente o comprimento antes do truncamento, pois seu hash seria claramente diferente. É claro que você pode ter um período de transição em que ambos os comprimentos sejam hash e verificados, mas isso usa mais recursos.
fonte
Tente não impor nenhuma limitação, a menos que seja necessário. Esteja avisado: pode e será necessário em muitos casos diferentes. Lidar com sistemas legados é uma dessas razões. Teste bem o caso de senhas muito longas (seu sistema pode lidar com senhas longas de 10 MB?). Você pode enfrentar problemas de negação de serviço (DoS) porque as funções de defivação de chave (KDF) que você usará (geralmente PBKDF2, bcrypt, scrypt) levarão muito tempo e recursos. Exemplo da vida real: http://arstechnica.com/security/2013/09/long-passwords-are-good-but-too-much-length-can-be-bad-for-security/
fonte
Deveria haver um comprimento máximo? Esse é um tópico curioso da TI, pois senhas mais longas geralmente são mais difíceis de lembrar e, portanto, mais propensas a serem escritas (um grande não-não por razões óbvias). Senhas mais longas também tendem a ser esquecidas mais, o que, embora não seja necessariamente um risco à segurança, pode levar a problemas administrativos, perda de produtividade etc. Os administradores que acreditam que esses problemas estão pressionando provavelmente impõem comprimentos máximos às senhas.
Pessoalmente, acredito nessa questão específica, para cada usuário. Se você acha que consegue se lembrar de uma senha de 40 caracteres, ainda mais poder para você!
No entanto, as senhas estão rapidamente se tornando um modo de segurança desatualizado, cartões inteligentes e autenticação de certificados se tornam muito difíceis de impossibilitar a força bruta, como você afirma ser um problema, e apenas uma chave pública precisa ser armazenada no servidor com o serviço privado. sempre em seu cartão / computador.
fonte
Senhas mais longas, ou senhas, são mais difíceis de decifrar simplesmente com base no comprimento e mais fáceis de lembrar do que exigir uma senha complexa.
Provavelmente é melhor optar por um comprimento mínimo razoavelmente longo (10+), restringindo o comprimento inútil.
fonte
Os sistemas legados (já mencionados) ou a interface de sistemas externos do fornecedor podem exigir o limite de 8 caracteres. Também poderia ser uma tentativa equivocada de salvar os usuários deles mesmos. Limitá-lo dessa maneira resultará em muitas senhas pssw0rd1, pssw0rd2 etc. no sistema.
fonte
Uma razão pela qual as senhas não podem ser hash é o algoritmo de autenticação usado. Por exemplo, alguns algoritmos de resumo exigem uma versão em texto sem formatação da senha no servidor, pois o mecanismo de autenticação envolve o cliente e o servidor executando as mesmas contas na senha inserida (o que geralmente não produz a mesma saída sempre que a senha é combinado com um 'nonce' gerado aleatoriamente, que é compartilhado entre as duas máquinas).
Muitas vezes, isso pode ser fortalecido, pois o resumo pode ser parcialmente calculado em alguns casos, mas nem sempre. Uma rota melhor é que a senha seja armazenada com criptografia reversível - isso significa que as fontes do aplicativo precisam ser protegidas, pois contêm a chave de criptografia.
O Digst auth existe para permitir a autenticação em canais não criptografados. Se estiver usando SSL ou alguma outra criptografia de canal completo, não será necessário usar mecanismos de autenticação Digest, o que significa que as senhas podem ser armazenadas em hash (pois as senhas podem ser enviadas em texto sem fio pela conexão com segurança (para um determinado valor de segurança).
fonte
Apenas 8 palavras-passe longas parecem simplesmente erradas. Se deveria haver um limite, pelo menos 20 caracteres é melhor idéia.
fonte
Eu acho que o único limite que deve ser aplicado é como um limite de 2000 letras, ou qualquer outra coisa insinentemente alta, mas apenas para limitar o tamanho do banco de dados se isso for um problema
fonte