Hash e Segurança

Gerador de Unix Crypt

Gere um hash de senha com salt para o /etc/shadow no Linux.

Avalie esta ferramenta

Como usar Gerador de Unix Crypt

  1. Digite a senha que deseja hashear.
  2. Deixe o esquema em SHA-512 crypt ($6$), a menos que o sistema de destino precise de um mais antigo.
  3. Clique em Gerar e cole o hash no seu /etc/shadow, na sua variável do Ansible ou no seu arquivo cloud-init.

Sobre Gerador de Unix Crypt

Estes são os hashes que ficam no /etc/shadow no Linux. O formato é $id$salt$hash, e o id indica qual esquema o produziu: $1$ é MD5-crypt, $5$ é SHA-256 crypt, e $6$ é SHA-512 crypt. O SHA-512 crypt ($6$) é o padrão na maioria das distribuições Linux modernas, por isso é o padrão aqui também — se você está gravando um hash em um sistema moderno, esse é quase certamente o que você quer.

O MD5-crypt merece uma nota, porque seu nome engana as pessoas constantemente. Foi projetado por Poul-Henning Kamp para o FreeBSD, e apesar do nome não é um MD5 puro da sua senha — ele aplica o MD5 muitas vezes com um salt misturado, precisamente para desacelerar atacantes. Um hash $1$ e um hash MD5 puro são coisas totalmente diferentes e não são intercambiáveis. Ainda é o mais fraco dos três aqui, e só vale a pena escolher quando um sistema antigo não deixa outra opção.

Os três esquemas usam salt, então a saída é diferente a cada execução — isso está correto, não é um bug. O salt fica no meio da string para que o sistema possa lê-lo de volta ao verificar um login. Esses hashes são muito melhores do que um hash puro sem salt, mas para uma nova aplicação ainda são a escolha mais fraca, porque não exigem muita memória: custam tempo de CPU, mas pouquíssima RAM, então ataques por GPU escalam bem contra eles. Prefira bcrypt ou Argon2 nesse caso. Onde os hashes crypt realmente brilham é em trabalhos de sistema — scripts de criação de usuários, tarefas user do Ansible, campos passwd do cloud-init e imagens Docker, onde o sistema operacional espera exatamente esse formato e nada mais serve.

Perguntas frequentes

O que significam $1$, $5$ e $6$?

São identificadores de esquema no início do hash: $1$ é MD5-crypt, $5$ é SHA-256 crypt e $6$ é SHA-512 crypt. O salt vem em seguida, depois o próprio hash, separados por cifrões.

Por que o hash muda toda vez que clico em Gerar?

Porque um novo salt aleatório é gerado a cada execução e misturado. Ambos os hashes são válidos para a mesma senha — o salt fica armazenado dentro da string para que o sistema possa verificar um login mais tarde.

O $1$ é o mesmo que um hash MD5?

Não, e isso confunde as pessoas. O MD5-crypt foi projetado por Poul-Henning Kamp para o FreeBSD e aplica o MD5 muitas vezes com um salt. Não é um MD5 puro da sua senha, e os dois não são intercambiáveis.

Qual devo escolher?

SHA-512 crypt ($6$) — é o padrão na maioria das distribuições Linux modernas. Recorra ao $5$ ou ao $1$ apenas se estiver visando um sistema mais antigo que exija isso.

Devo usar hashes crypt na minha aplicação web?

Não. Eles usam salt e são muito melhores do que um hash puro, mas não exigem muita memória, então GPUs os atacam com eficiência. Use bcrypt ou Argon2 para senhas de aplicações e reserve o crypt para o /etc/shadow e o provisionamento de sistemas.

Minha senha é armazenada?

Não. Ela é enviada ao nosso servidor para ser hasheada, porque os navegadores não conseguem calcular crypt, depois é hasheada e descartada imediatamente — nunca registrada, nunca armazenada. Para uma senha real de conta em produção, executar o mkpasswd na sua própria máquina ainda é o hábito mais seguro.