icardb
Proteger senhas, contas e projetos: hashing, gerenciadores e rotação de segredos
Voltar para artigosSEGURANÇA DIGITAL

Proteger senhas, contas e projetos: hashing, gerenciadores e rotação de segredos

Por Equipe Editorial Icardb 7 min de leitura

Proteger senhas envolve duas frentes distintas: as suas, como profissional, e as dos usuários da aplicação que você desenvolve. As duas falham por motivos diferentes e exigem soluções diferentes. Este guia cobre gerenciamento pessoal, armazenamento correto no servidor, políticas de senha segundo recomendações atuais e gestão de segredos em projetos.

Parte 1 — Suas contas

O maior risco individual é reutilização de senha. Quando um serviço qualquer sofre vazamento, atacantes testam automaticamente a mesma combinação em dezenas de outros serviços, técnica conhecida como credential stuffing. Um gerenciador de senhas elimina a raiz do problema ao permitir uma senha diferente em cada lugar sem esforço de memória.

PráticaPor quêPrioridade
Senha única por serviçoIsola o dano de qualquer vazamentoAlta
Senha mestre longa (frase)Comprimento vale mais que símbolosAlta
Passkey onde disponívelResistente a phishing por vínculo com o domínioAlta
2FA por app ou chave físicaSMS é vulnerável a troca de chipAlta
Códigos de recuperação offlineEvita perder acesso ao trocar de celularMédia
Revisão de sessões e apps conectadosRemove acessos antigos esquecidosMédia

Uma frase de quatro a cinco palavras aleatórias supera em entropia a maioria das senhas curtas com símbolos, e é muito mais fácil de digitar corretamente. Evite frases de músicas ou citações conhecidas, que aparecem em listas de ataque.

Parte 2 — Senhas dos seus usuários

Senha nunca é armazenada em texto puro nem criptografada de forma reversível. Ela passa por uma função de hash lenta, projetada para tornar a tentativa em massa cara. As opções recomendadas hoje são Argon2id, scrypt e bcrypt, nessa ordem de preferência.

AlgoritmoStatusObservação
Argon2idRecomendadoResistente a GPU e ASIC por uso de memória
scryptAceitávelTambém custoso em memória
bcryptAceitávelMaduro; limite de 72 bytes na entrada
PBKDF2Só por exigência de conformidadePouca resistência a hardware dedicado
SHA-256 puro / MD5InaceitávelRápido demais; quebra em massa é trivial
ts
import { hash, verify } from "@node-rs/argon2";

const PARAMETROS = {
  memoryCost: 19456, // ~19 MiB, mínimo sugerido pela OWASP
  timeCost: 2,
  parallelism: 1,
};

export async function criarHashDeSenha(senha: string): Promise<string> {
  // O salt é gerado automaticamente e embutido no hash resultante
  return hash(senha, PARAMETROS);
}

export async function conferirSenha(hashArmazenado: string, senha: string) {
  try {
    return await verify(hashArmazenado, senha);
  } catch {
    return false; // hash corrompido ou formato inválido
  }
}

Nunca implemente sua própria função de hash nem invente esquemas como "SHA-256 aplicado três vezes com sal secreto". Use bibliotecas mantidas e parâmetros recomendados; criptografia caseira falha de formas difíceis de detectar.

Políticas de senha que ajudam (e as que atrapalham)

As diretrizes atuais do NIST inverteram várias práticas antigas. Regras de composição rígidas e troca periódica obrigatória produzem senhas previsíveis, com incremento de número no final. O que funciona é comprimento mínimo, verificação contra listas de senhas vazadas e troca apenas quando há suspeita de comprometimento.

Regra antigaRecomendação atualMotivo
Trocar a cada 90 diasTrocar só em suspeita de vazamentoRotação forçada gera padrões fracos
Exigir símbolo e maiúsculaExigir comprimento mínimo de 8 a 12Composição rígida reduz variedade real
Bloquear colar no campoPermitir colarHabilita uso de gerenciador
Limitar a 16 caracteresAceitar pelo menos 64Frases longas são mais seguras
Perguntas secretasCódigos de recuperação ou e-mail verificadoRespostas são pesquisáveis publicamente
ts
// Verificação contra vazamentos usando k-anonimato: apenas 5 caracteres
// do hash SHA-1 saem do servidor; a senha nunca é transmitida.
export async function senhaJaVazou(senha: string): Promise<boolean> {
  const dados = new TextEncoder().encode(senha);
  const digest = await crypto.subtle.digest("SHA-1", dados);
  const sha1 = [...new Uint8Array(digest)]
    .map((b) => b.toString(16).padStart(2, "0"))
    .join("")
    .toUpperCase();

  const prefixo = sha1.slice(0, 5);
  const sufixo = sha1.slice(5);

  const resposta = await fetch(`https://api.pwnedpasswords.com/range/${prefixo}`);
  const texto = await resposta.text();

  return texto.split("\n").some((linha) => linha.split(":")[0] === sufixo);
}

Proteções no fluxo de autenticação

  • Limite de tentativas por conta e por endereço de origem, com atraso progressivo em vez de bloqueio permanente.
  • Mensagem de erro genérica no login: revelar que o e-mail existe facilita enumeração de usuários.
  • Comparação em tempo constante ao verificar tokens; a própria biblioteca de hash já cuida disso para senhas.
  • Token de redefinição de senha aleatório, com validade curta e uso único, armazenado como hash.
  • Invalidação de todas as sessões após troca de senha.
  • Notificação por e-mail em login de novo dispositivo e em alteração de credenciais.

Parte 3 — Segredos em projetos

Chave de API em repositório é um dos vazamentos mais comuns e mais fáceis de evitar. Segredos ficam em variáveis de ambiente ou em um cofre gerenciado, com escopo mínimo e prazo de validade sempre que a plataforma permitir.

bash
# Estrutura recomendada
.env                 # local, NUNCA versionado
.env.example         # versionado, apenas nomes das variáveis, sem valores

# .env.example
DATABASE_URL=
STRIPE_SECRET_KEY=
SMTP_PASSWORD=

# Verificar histórico antes de tornar um repositório público
git log --all -p -- .env | head -20

# Se uma chave vazou: revogue primeiro, limpe o histórico depois
# 1) revogar no painel do provedor
# 2) gerar nova chave e atualizar o ambiente
# 3) reescrever o histórico e forçar atualização em todos os clones
Tipo de segredoRotação sugeridaEscopo
Chave de API de terceirosA cada 6–12 meses ou ao sair alguém do timeSomente as permissões usadas
Token de acesso pessoal90 dias com expiração automáticaRepositórios específicos
Senha de banco de dadosAnual e imediatamente em incidenteUsuário por aplicação
Chave de assinatura de sessãoAnual, com suporte a duas chaves na transiçãoAplicação
Credencial de serviço em nuvemPreferir identidade temporáriaMenor privilégio possível

Ative varredura de segredos no seu provedor de repositórios e adicione um verificador no pipeline. Descobrir a chave exposta em minutos, e não em semanas, é o que separa um susto de um incidente com dados de clientes.

Conclusão

Nas suas contas, o essencial é senha única por serviço, gerenciador confiável e segundo fator resistente a phishing. Na aplicação, é Argon2id com parâmetros adequados, política baseada em comprimento e verificação de vazamento, além de proteções no fluxo de login. Nos projetos, é segredo fora do repositório, escopo mínimo e rotação planejada. São poucas decisões, mas cada uma delas remove uma classe inteira de incidentes.

Perguntas frequentes

+Posso guardar senhas no navegador?

É melhor do que reutilizar senhas, e os navegadores modernos criptografam o cofre. Gerenciadores dedicados oferecem vantagens em compartilhamento, auditoria e uso entre sistemas diferentes.

+Passkeys substituem senhas de vez?

Estão caminhando para isso nos serviços que as adotam, porque eliminam phishing e reuso. Enquanto a adoção não é universal, a recomendação é usar passkey onde existir e manter senha forte com 2FA no restante.

+Qual o custo de processamento do Argon2 no servidor?

Com os parâmetros sugeridos pela OWASP, cada verificação leva algumas dezenas de milissegundos e consome memória proporcional à configuração. Ajuste os parâmetros ao seu hardware medindo o tempo real de verificação.

+É seguro usar autenticação de terceiros em vez de senha própria?

Sim, e frequentemente é mais seguro, porque delega o armazenamento de credenciais a provedores especializados. Cuide da vinculação de contas por e-mail e do que fazer quando o usuário perde acesso ao provedor.

Fontes consultadas

Revisão editorial: publicado em . Última revisão em . Conteúdo educativo, sem patrocínio das ferramentas citadas.

Crédito da imagem: Foto: Equipe Editorial Icardb / Gerado por IA (Licença Editorial)

Leia também