Skip to content

Comparison

SHA-1 vs SHA-256: SHA-1 está morto, mas o Git ainda o usa

SHA-1: não use. SHA-256: sim, para tudo.

By Published

Resumo. SHA-1 está criptograficamente quebrado — uma colisão prática foi demonstrada pelo Google em 2017 e ataques de prefixo escolhido tornaram-se acessíveis em 2020 — portanto, use SHA-256 para toda nova aplicação de segurança. O Git ainda usa SHA-1 para hashes de objetos, mas está migrando; impressões digitais sem segurança (caches, deduplicação) não são afetadas.

SHA-1 (saída de 160 bits, 1995) e a família SHA-2 (saídas de 256/384/512 bits, 2001) são ambas funções de hash criptográfico publicadas pelo NIST. SHA-1 foi o hash de integridade dominante na década de 2000. Está agora descontinuado em todos os lugares onde a segurança importa — mas ainda não em todos os lugares.

O resumo

PropriedadeSHA-1SHA-256
Tamanho da saída160 bits (40 chars hex)256 bits (64 chars hex)
Publicado1995 (NIST FIPS 180-1)2001 (NIST FIPS 180-2)
Colisão teórica2005 (Wang et al., 2⁶⁹)Nenhuma demonstrada
Colisão prática2017 (Google SHAttered, ~US$110 mil em cloud)Nenhuma até 2026
Status em certificados TLSDescontinuado em 2017Padrão atual
Status no GitAinda padrão, migração em andamentoOpt-in via repositórios SHA-256
Velocidade (x86-64)~700 MB/s~400 MB/s (mais lento)

Como o SHA-1 foi quebrado

Uma função de hash criptográfico deve tornar computacionalmente inviável encontrar duas entradas que produzem o mesmo hash. A saída de 160 bits do SHA-1 dava resistência à colisão de 2⁸⁰ no papel — muito além dos orçamentos de força bruta no momento do design em 1995.

Três marcos corroeram isso:

  1. 2005: Wang, Yin e Yu publicaram um ataque teórico reduzindo a busca de colisão para ~2⁶⁹ operações — ainda inviável na época, mas um claro sinal de alerta.
  2. 2017: O projeto SHAttered do Google demonstrou a primeira colisão prática de SHA-1: dois PDFs com o mesmo hash SHA-1. Custo: ~US$110 mil em computação GPU e 9 quintilhões de avaliações SHA-1.
  3. 2020: Leurent e Peyrin publicaram um ataque de colisão de prefixo escolhido — dados dois cabeçalhos de arquivo arbitrários, anexe bytes cuidadosamente elaborados e produza arquivos colidentes. Custo: ~US$45 mil em computação cloud. Este é o tipo de ataque que permite certificados forjados e assinaturas falsificadas.

Após 2020, SHA-1 é inadequado para qualquer finalidade de segurança onde a falsificação importa.

Onde SHA-1 ainda é aceitável

Impressões digitais não adversariais — onde não há incentivo de atacante para forjar colisões — ainda estão bem com SHA-1:

  • Hashes de objetos commit e tree do Git. Um atacante que forja uma colisão precisaria injetar commits elaborados e tê-los aceitos em mirrors mainstream. O Git também executa detecção SHA-1 de padrões de ataque conhecidos (a detecção SHAttered) em cada operação, tornando a injeção de ataques visível.
  • Armazenamento endereçável por conteúdo onde você controla todas as entradas (caches de build, deduplicação de CDN).

Mesmo nesses casos, SHA-256 é o padrão correto para novos sistemas. A diferença de desempenho (SHA-256 é ~40% mais lento que SHA-1 na maioria das CPUs modernas) é irrelevante para quase toda carga de trabalho.

Onde SHA-256 é obrigatório

  • Assinaturas de certificados TLS. Navegadores pararam de aceitar SHA-1 em 2017.
  • Assinaturas JWT (HS256, RS256, ES256). O 256 é SHA-256.
  • Assinatura de código. Microsoft e Apple pararam de aceitar assinaturas SHA-1 por volta de 2016-2017.
  • Qualquer lugar onde ataques de colisão permitiriam falsificação. Assinaturas de documentos, criptomoedas, provas de identidade.

A migração do Git

O Git tem migrado para SHA-256 desde 2018. A migração é tecnicamente direta, mas leva tempo porque cada servidor Git, cada sistema CI/CD, cada gerenciador de dependências precisa suportar ambos. Status em 2026:

  • Repositórios SHA-256 funcionam de ponta a ponta no Git moderno.
  • O GitHub suporta repos SHA-256, mas usa SHA-1 como padrão para novos repos.
  • GitLab e Bitbucket: suporte parcial, varia por versão.
  • A maioria das integrações CI funciona com ambos.

O comportamento padrão do CLI do Git ainda é SHA-1. Para criar um repositório SHA-256: git init --object-format=sha256. Quando a migração for concluída — provavelmente no período 2027-2028 — o padrão mudará.

A regra pragmática

  • Para novos sistemas: SHA-256. Sempre. A diferença de desempenho não importa.
  • Para sistemas SHA-1 legados: migre quando viável, mas não entre em pânico — a ameaça é real, mas específica.
  • Para Git especificamente: SHA-1 está bem por agora. Fique atento ao SHA-256 se tornar o padrão.
  • Para TLS, assinatura de código, JWT, cripto: SHA-256 já era a única escolha aceitável.

Calcule ambos os hashes via nosso gerador de hash.

Dados numéricos

  • Comprimento hex: SHA-1 = 40 chars (160 bits); SHA-256 = 64 chars (256 bits); base64url = 27 chars vs 43 chars sem padding.
  • Resistência à colisão pelo aniversário: SHA-1 ~2⁸⁰ genérico, caiu para ~2⁶¹ após o ataque SHAttered de 2017; SHA-256 permanece ~2¹²⁸.
  • Custo do SHAttered (2017): 9.223.372.036.854.775.808 avaliações SHA-1, ~US$110.000 em tempo de GPU cloud, equivalente a 6.500 anos de CPU.
  • Ataque de prefixo escolhido (Leurent & Peyrin, 2020): ~US$45.000 na AWS — acessível para operações criminosas de médio porte.
  • Throughput no Intel SHA-NI (Ice Lake / Zen 3+): SHA-1 ~2,1 GB/s/core; SHA-256 ~1,9 GB/s/core — a aceleração por hardware reduz a diferença para ~10%, não 40%.
  • Sem aceleração por hardware: SHA-1 ~700 MB/s vs SHA-256 ~400 MB/s — a diferença legada de ~40% que as pessoas citam.
  • Tamanho do bloco: ambos usam blocos de 512 bits; SHA-1 produz um estado de 160 bits, SHA-256 um estado de 256 bits.
  • Navegadores em 2017: Chrome 56, Firefox 51, Edge — todos pararam de aceitar certificados TLS SHA-1 em 24 de janeiro de 2017.

Matriz de decisão

Caso de usoHash
Assinatura de certificado TLSSHA-256 (SHA-1 banido)
JWT HS256/RS256/ES256SHA-256
HMAC para assinatura de requisição de APIHMAC-SHA-256
Assinatura de código (Authenticode, codesign)SHA-256
Bloco Bitcoin / derivação de endereçoSHA-256 (hash duplo)
Hash de objeto Git (repo legado)SHA-1 aceitável, com detecção de colisão
Hash de objeto Git (novo repo)SHA-256 via --object-format=sha256
ETag de CDN / chave de cacheQualquer um; SHA-256 está bem em CPUs modernas
Hash de senhaNenhum — use argon2id / bcrypt / scrypt

Fontes

Frequently asked questions

O SHA-1 está realmente quebrado?
Sim — praticamente desde 2017 (o SHAttered do Google demonstrou uma colisão real de PDF por US$110 mil em computação) e dramaticamente desde 2020 (colisões de prefixo escolhido por US$45 mil). Qualquer caso de uso de segurança em que um atacante se beneficia de um hash forjado é vulnerável.
Por que o Git ainda usa SHA-1?
Inércia e um modelo de ameaça pragmático. Os hashes do Git são endereçáveis por conteúdo, não tokens de segurança, e a lógica de detecção do SHAttered que o Git inclui captura padrões de ataque conhecidos. A migração para SHA-256 está em andamento desde 2018, mas cada servidor e ferramenta Git precisam suportar ambos, o que leva tempo.
O SHA-256 é mais lento que o SHA-1?
Cerca de 40% mais lento na maioria das CPUs modernas — aproximadamente 400 MB/s vs 700 MB/s. Ambos são dominados por I/O em qualquer carga de trabalho realista, então a diferença raramente é significativa. A aceleração por hardware (extensões SHA da Intel, criptografia ARMv8) reduz ainda mais a diferença.
Onde nunca devo usar SHA-1?
Assinaturas de certificados TLS (navegadores pararam de aceitá-los em 2017), assinaturas JWT, assinatura de código, assinaturas de documentos, criptomoedas, provas de identidade — qualquer lugar onde uma colisão forjada beneficiaria um atacante. SHA-256 ou mais forte é o único padrão aceitável para novos sistemas.

Related

Published May 15, 2026