SHA-1 vs SHA-256 vs SHA-512
SHA-1, SHA-256 e SHA-512 são todos membros da família Secure Hash Algorithm, mas diferem significativamente em segurança, tamanho de saída e desempenho. Escolher o correto depende dos seus requisitos de segurança, restrições de desempenho e necessidades de compatibilidade.
Comparação Rápida
| Característica | SHA-1 | SHA-256 | SHA-512 |
|---|---|---|---|
| Tamanho da saída | 160 bits (20 bytes) | 256 bits (32 bytes) | 512 bits (64 bytes) |
| Nível de segurança | 80 bits (quebrado) | 128 bits (seguro) | 256 bits (seguro) |
| Rodadas | 80 | 64 | 80 |
| Tamanho da palavra | 32 bits | 32 bits | 64 bits |
| Tamanho do bloco | 512 bits | 512 bits | 1024 bits |
| Status | Obsoleto | Recomendado | Recomendado |
Análise de Segurança
SHA-1 produz um hash de 160 bits, dando-lhe uma resistência a colisões de 2^80 operações pelo paradoxo do aniversário. Em 2017, a Google demonstrou o ataque SHAttered, produzindo a primeira colisão SHA-1 prática usando aproximadamente 2^63 operações. Isso provou que SHA-1 não oferece mais segurança adequada para qualquer propósito onde a resistência a colisões seja importante.
SHA-256 fornece resistência a colisões de 128 bits. Em 2026, nenhum ataque prático reduz a segurança do SHA-256 abaixo de sua força de projeto. É aprovado pelo NIST para uso em aplicações governamentais dos EUA e é o padrão para certificados SSL/TLS, blockchain e assinaturas digitais.
SHA-512 fornece resistência a colisões de 256 bits. É ainda mais forte que SHA-256, mas oferece mais segurança do que a maioria das aplicações precisa. A força extra vem com um custo de desempenho em sistemas de 32 bits, mas em sistemas de 64 bits, SHA-512 pode ser mais rápido que SHA-256.
Onde SHA-1 Ainda é Encontrado
Apesar de estar obsoleto, SHA-1 ainda aparece em sistemas legados:
- Git usa SHA-1 para hashes de commit (embora o Git tenha adicionado suporte a SHA-256)
- Assinaturas digitais antigas assinadas com certificados SHA-1
- Somas de verificação de arquivos legados distribuídas antes da descontinuação
- Alguns sistemas de controle de versão e ferramentas de backup
Se você encontrar SHA-1 em um sistema novo, migre para SHA-256 imediatamente.
Considerações de Desempenho
Em processadores de 32 bits, SHA-256 é mais rápido que SHA-512 porque SHA-512 opera em palavras de 64 bits, exigindo instruções extras. Em processadores de 64 bits com aceleração de hardware (extensões SHA), SHA-256 e SHA-512 ambos têm bom desempenho, com SHA-256 tipicamente sendo ligeiramente mais rápido.
Para hash de arquivos grandes, a diferença é mensurável, mas raramente significativa para uso típico. Um arquivo que leva 1 segundo para hash com SHA-256 pode levar 0,7 segundos com SHA-1 ou 1,3 segundos com SHA-512. Para a maioria das aplicações, os benefícios de segurança do SHA-256 superam em muito a diferença menor de desempenho.
Exemplos de Código
// PHP
echo hash('sha1', 'hello'); // aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
echo hash('sha256', 'hello'); // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
echo hash('sha512', 'hello'); // 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
import hashlib
print(hashlib.sha1(b'hello').hexdigest())
print(hashlib.sha256(b'hello').hexdigest())
print(hashlib.sha512(b'hello').hexdigest())
// Node.js
const crypto = require('crypto');
console.log(crypto.createHash('sha1').update('hello').digest('hex'));
console.log(crypto.createHash('sha256').update('hello').digest('hex'));
console.log(crypto.createHash('sha512').update('hello').digest('hex'));
Recomendação
| Caso de Uso | Recomendação |
|---|---|
| Certificados SSL/TLS | SHA-256 |
| Verificação de integridade de arquivos | SHA-256 ou SHA-512 |
| Assinaturas digitais | SHA-256 |
| Hash de senhas | bcrypt ou argon2 (não SHA) |
| Blockchain / cripto | SHA-256 |
| Arquivamento de longo prazo | SHA-512 |
| Compatibilidade legada | Migrar para SHA-256 |
Ferramentas Online
Use as ferramentas Gerador SHA-1, Gerador SHA-256 e Gerador SHA-512 para calcular hashes instantaneamente. O Gerador de Hash Múltiplo gera todos os tipos de hash de uma vez para comparação.
Conclusão
SHA-1 está quebrado e não deve ser usado. SHA-256 é o padrão recomendado para a maioria das aplicações. SHA-512 fornece segurança extra para ambientes de alto risco. Use SHA-256 como padrão, a menos que você tenha um motivo específico para escolher outra opção.