qual é o tamanho máximo da senha no sistema unix / linux?

27

qual é o comprimento máximo permitido da senha no sistema unix / linux?

hari
fonte
20
Se a resposta não for 42, deveria ser.
tvanfosson
uma pergunta melhor poderia ser: o que posso razoavelmente esperar que alguém digite? Se o limite for 40 e você exceder esse valor, estará fazendo algo errado.
msw

Respostas:

39

Se o seu sistema usa um hash criptográfico para armazenar senhas, como MD5, SHA1, etc, não há limite para o tamanho da senha, pois esses hashes podem ser criados com qualquer quantidade de dados. Um hash MD5 ou SHA1 pode ser criado para um disco rígido inteiro e isso geralmente é feito para fins forenses, porque se apenas um bit for alterado levemente, você terá um hash muito diferente e, portanto, poderá verificar se os dados foram alterados. Isso significa que você pode usar exatamente esses mesmos algoritmos para testar se os dados foram adulterados. O Linux (atual Linux pelo menos) usa essas mesmas funções de hash. Ele solicitará uma senha e criará um hash criptográfico da senha que você forneceu e verificará se esse hash corresponde à senha armazenada.

Existe uma pequena desvantagem no uso desses hashes, que é o fato de um hash ter um tamanho finito, por exemplo, um hash MD5 de 128 bits. Isso significa que um hash MD5 possui apenas 2^128ou 340,282,366,920,938,463,463,374,607,431,768,211,456combinações possíveis. Agora, embora esse seja um número grande, o que isso significa é que você pode ter o que eles chamam de colisão de hash, onde você tem dois itens ou chaves diferentes que produzem o mesmo hash. Em teoria, quanto maior o tamanho da chave, menor a probabilidade de uma colisão e mais tempo para forçar uma senha com força bruta, mas isso está avaliando estritamente a entropia e quanto tempo ela podemas também existe a chance de que a primeira entrada que tentarem seja a que corresponder, mesmo que seja uma colisão de hash. De um modo geral, você é realmente mais seguro usando um hash que possui um tamanho de chave maior porque, suponha que seja MD5, as chances da primeira senha corresponder a 340,282,366,920,938,463,463,374,607,431,768,211,456possíveis correspondências são extremamente improváveis. Também escolher uma senha boa, porque um monte de biscoitos vai tentar e listas de usar o Word, listas de nomes, e mutações destes lista (ou seja, se a palavra é "peixe", em seguida, eles vão tentar fish1234, fish!@#$etc) antes que eles dependem de força bruta de uma senha.

A maneira como você pode saber se o seu sistema usa hashes criptográficos para armazenar senhas é dar uma olhada no /etc/shadowarquivo (supondo que você tenha acesso root). Cada linha é formatada como user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved. O campo da senha pode começar com $num$(ou seja, um hash md5 no campo da senha se parece com $1$01234567$b5lh2mHyD2PdJjFfALlEz1onde começa $1$). Se começar com isso, significa que seu sistema está usando um hash criptográfico. O formato do campo de senha em todos os sistemas modernos é $id$salt$hash. O ID especifica que tipo de hash criptográfico você está usando. O salt é uma string gerada aleatoriamente concatenada com a chave (senha em texto sem formatação) para proteger contra tabelas pré-computadas de hashes conhecidos. O hash é o hash criptográfico criado a partir do salt e da chave / senha. Se o seu campo de senha começar com$num$ então você está usando hashes criptográficos.

Então, você sabe, os números significam o seguinte:

  • $1$ significa que você está usando MD5
  • $2$ou $2a$significa que você está usando blowfish
  • $5$ significa que você está usando SHA-256
  • $6$ significa que você está usando SHA-512

O SHA-512 é o melhor hash disponível para uso que a glibc oferece. Não sei o quão forte é o blowfish, mas ele não faz parte da glibc e, portanto, só está disponível em algumas distribuições que o adicionaram. O SHA-512 produz chaves de 512 bits ou 2 ^ 512 combinações possíveis antes que uma colisão possa ser esperada e com uma senha suficientemente complexa, levaria um cluster de computadores por um tempo muito longo para encontrar a senha real ou uma colisão no hash .

Além disso, se você tiver um hash que não inicia $num$, estará usando o DES e isso será limitado a 8 caracteres. Acredito que sistemas mais antigos que usam DES, ou pelo menos alguns deles, terão uma senha de qualquer tamanho, mas usarão apenas os 8 primeiros caracteres. Isso significa que, se você definir sua senha mybigbigapplee alguém a usar mybigbigcity, será permitida a entrada porque o DES usará apenas mybigbige depois disso tudo será descartado.

Então você sabe, o Ubuntu a partir da 8.04, lançado em abril de 2008, usava hashes MD5. O Ubuntu da 8.10, lançado em outubro de 2008, e todas as versões desde então usam hashes SHA-512. Não sei até que ponto antes de abril de 2008, mas acredito que por vários anos, se não mais, a maioria de todas as distribuições usava hashes.

Os atuais 12.04 e 14.04 LTS (versões de suporte de longo prazo) do Ubuntu parecem usar o SHA-512 por padrão, como pode ser visto com o $6$anexo ao hash no arquivo / etc / shadow:

catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]

Agora, o tamanho que a chave ou a senha permitida para qualquer algoritmo de hash não é a única coisa a determinar qual tamanho de senha você tem. O outro item de interesse é como o programa é escrito e qual o tamanho do programa em si. Todos os programas modernos de senhas e provavelmente a maioria das crypt(3)funções no Linux. cripta por muito tempo (desde que pelo menos o MD5 foi usado e provavelmente antes disso) permitiu ponteiros de caracteres para a chave real. Isso significa que o único limite para o tempo de aceitação de uma chave é baseado na quantidade de RAM que esse programa tem disponível, mas é provável que seja muito mais do que qualquer senha que alguém possa lembrar. (milhões de caracteres?).

Isso deve responder à sua pergunta sobre quanto tempo uma senha pode ser. Espero ter ajudado.

Referências:

jetole
fonte
7
"Qual é o tamanho máximo de uma resposta SU?" lol Ótima resposta!
James Mertz
1
Note-se que o algoritmo crypt () está obsoleto por mais de uma década. Não importa quanto tempo seja uma senha crypt (), ela será truncada para 8 caracteres. Combinado com o espaço de chaves muito pequeno de um sal de 12 bits, o crypt () se tornou totalmente inseguro. Como referência, aqui está um artigo sobre como 1 milhão de senhas de Gawker foram expostas devido ao uso de crypt () em 2010: https://www.lightbluetouchpaper.org/2010/12/15/the-gawker-hack- como-um-milhão-passwords-se-perdida /
crème fraîche
8

Depende de qual módulo de autenticação é usado. Nos sistemas Linux modernos, não há limite máximo no tamanho da senha. Alguns sistemas obsoletos podem ter limites impostos pelo sistema de armazenamento de senhas - os máximos populares parecem 8, 40 e 255.

John Millikin
fonte
3

Dependendo de como a senha é armazenada, MD5, SHA1, BlowFish etc. Acho que não há limite de senha definido pelo próprio método de armazenamento.

Implementações mais antigas podem ter um limite que provavelmente é de 8 ou 255 caracteres.

Parece uma pergunta mais adequada para www.serverfault.com :)

Kelsey
fonte
5
Isso é relacionado ao computador em geral, mas não necessariamente específico para servidores!
Darth Android
0

O comando passwd está envolvendo o comando mcrypt para criptografia. De acordo com o código fonte do mcrypt, o tamanho máximo do stdin é restrito a 512 caracteres (cifras) - mas isso foi há dois anos ... - (atualizarei esta resposta nas próximas horas) ... Sim ... No código fonte 2.6.8 do mcrypt no diretório src, existe o arquivo getpass.c - lá, no início, você vê o valor 512 definido como valor estático do char. (Gostaria de aumentar para 1,4 GB ...):

dschinn1001
fonte