Pesquisa · Mapa mental

SHA-1

Em criptografia, SHA-1 é uma função de dispersão criptográfica projetada pela Agência de Segurança Nacional dos Estados Unidos e é um Padrão Federal de Processamento de Informação dos Estados Unidos publicado pelo Instituto Nacional de Padrões e Tecnologia (NIST). Em dezembro de 2022 o NIST passou a recomendar a substituição da função SHA-1 por algoritmos mais novos e seguros, como SHA-2 e SHA-3, e que SHA-1 deixe de ser usado até 31 de dezembro de 2030.

Fonte: Wikipédia (pt)Atualizado em 11/07/2026
01

A função de dispersão SHA-1

Imagem: · BY-SA · Openverse

SHA-1 produz um resumo da mensagem baseado em princípios similares aos utilizados por Ronald L. Rivest, do MIT, no projeto dos algoritmos de resumo de mensagens MD4 e MD5, mas com um design mais conservador. A especificação original do algoritmo foi publicada em 1993 sob o título Padrão de Dispersão Seguro (Secure Hash Standard em inglês), FIPS PUB 180, pela agência do governo norte-americano NIST. Hoje, essa versão é geralmente chamada de SHA-0. Ela foi recolhida pela NSA logo após sua publicação e foi substituída por sua versão revisada, publicada em 1995 na FIPS PUB 180-1, e normalmente designada SHA-1. SHA-1 difere da SHA-0 apenas por uma única rotação bit a bit na sua função de compressão; isso foi feito, de acordo com a NSA, para corrigir uma falha no algoritmo original que reduzia sua segurança criptográfica. No entanto, a NSA não forneceu nenhuma explicação mais aprofundada nem identificou exatamente qual era a falha que foi corrigida. Fraquezas foram posteriormente relatadas em ambas SHA-0 e SHA-1. SHA-1 parece fornecer uma resistência maior contra ataques, corroborando com a declaração da NSA de que a mudança aumentou a segurança. [carece de fontes?]

02

Aplicações

Imagem: Evelyn-rose · CC0 · Openverse

Criptografia

SHA-1 faz parte de várias aplicações e protocolos de segurança amplamente utilizados, incluindo TLS e SSL, PGP, S/MIME e IPsec. Tais aplicações podem também usar MD5; Ambos MD5 e SHA-1 descendem de MD4. O hashing de SHA-1 também é utilizado em sistemas de controle de revisão distribuídos como Git, Mercurial e Monotone para identificar revisões, assim como detectar corrupção ou adulteração de dados. O algoritmo também foi utilizado no console de vídeo game Nintendo Wii para verificação de assinatura durante a inicialização do sistema, entretanto uma falha significativa nas primeiras implementações do firmware permitiam que um atacante ignorasse o esquema de segurança do sistema.

Integridade de dados

Sistemas de controle de revisão, tais como Git e Mercurial, utilizam SHA-1 não para segurança mas para garantir que os dados não foram alterados devido à corrupção acidental. Linus Torvalds disse sobre o Git: "Se você tiver corrupção de disco, se você tiver corrupção de DRAM, se você tiver quaisquer tipo de problemas, Git os perceberá. Não é uma questão de "se", é uma garantia. Você pode ter duas pessoas que estão tentando ser maliciosas. Elas não serão bem sucedidas. [...] Ninguém conseguiu quebrar SHA-1, mas a questão é que a SHA-1, até onde o que concerne ao Git, não é nem uma característica de segurança, é puramente uma checagem de consistência. As partes de segurança estão em outro lugar, daí um monte de pessoas assumem que já que Git utiliza SHA-1 e SHA-1 é usado para coisas criptograficamente seguras, elas acham que, OK, é uma grande e importante característica de sua segurança. Não tem nada a ver com segurança, é apenas o melhor hash que você pode conseguir. [...] Eu garanto a você, se você colocar seus dados no Git, você pode acreditar que após cinco anos, após eles serem convertidos de seu disco rígido para DVD para qualquer nova tecnologia e você o copiou junto, cinco anos depois você pode verificar que os dados que você consegue de volta são exatamente os mesmos que você colocou. [...] Uma das razões pela qual me importo é pelo kernel, tivemos uma quebra em um dos sites do BitKeeper em que pessoas tentavam corromper os repositórios do código fonte do kernel". No entanto, sem a resistência de segunda preimagem do SHA-1, envios assinados e tags não poderiam mais garantir a segurança do estado do repositório já que eles só assinam a raiz da Árvore de Merkle.

03

Criptoanálise e validação

Imagem: longzijun · BY-NC · Openverse

Para uma função de dispersão na qual L é o número de bits no resumo da mensagem, encontrar a mensagem que corresponde a um dado resumo de mensagem pode sempre ser feito utilizando-se de busca por força-bruta, que leva aproximadamente 2L avaliações. Isso é chamado de ataque da preimagem e pode ser ou não prático, dependendo de L e do ambiente de computação particular. O segundo critério, encontrar duas mensagens diferentes que produzam o mesmo resumo, o que chamamos de colisão, requer uma média de apenas 1,2* 2L/2 avaliações utilizando o ataque do aniversário. Para o último motivo, a força da função de dispersão é normalmente comparada com uma cifra simétrica com o tamanho igual à metade do resumo da mensagem. Com isso, SHA-1 foi originalmente projetada para ter uma força de 80 bits. Criptógrafos produziram pares de colisão para SHA-0 e encontraram algoritmos que devem produzir colisões em SHA-1 em muito menos avaliações que as esperadas 280.

Ataques

Logo no início de 2005, Rijmen e Oswald publicaram um ataque sobre uma versão reduzida do SHA-1 - 53 de 80 rodadas - que achou colisões com um esforço computacional menor que 280 operações. Em fevereiro de 2005, um ataque feito por Xiaoyum Wang, Yiqun Lisa Yin e Hongbo Yu foi anunciado. Os ataques podem achar colisões na versão completa de SHA-1, precisando de menos que 269 operações (Uma busca por força bruta precisaria de 280 operações). Os autores escreveram: "Em particular, nossa análise é construída sobre o ataque diferencial original sobre o SHA-0, as técnicas de colisão multi-travas, assim como as técnicas de modificação de mensagem utilizadas no ataque de busca de colisão sobre o MD5. Quebrar o SHA-1 não seria possível sem essas poderosas técnicas analíticas". Os autores apresentaram uma colisão para SHA-1 de 58 rodadas, encontrada com 233 operações. O documento com o ataque completamente descrito foi publicado em Agosto de 2005 durante a conferência CRYPTO.

SHA-0

Na CRYPTO 98, dois pesquisadores franceses, Florent Chanbaud e Antonie Joux, apresentaram um ataque sobre SHA-0 (Chabaud and Joux, 1998): colisões podem ser encontradas com complexidade de 261 para uma função de dispersão ideal do mesmo tamanho. Em 2004, Biham e Chen encontraram colisões aproximadas para SHA-0 - suas mensagens que resultam num valor de dispersão com quase o mesmo valor; nesse caso, 142 dos 160 bits são iguais. Eles também encontraram colisões completas de SHA-0 reduzida para 62 rodadas (de 80). Subsequentemente, em 12 de Agosto de 2004, uma colisão para o SHA-0 completo foi anunciada por Joux, Carribault, Lemuet e Jalby. Isso foi feito utilizando-se uma generalização do ataque de Chabaud e Joux. Encontrar uma colisão tinha complexidade de 251 e levava aproximadamente 80.000 horas de CPU em um supercomputador com 256 processadores Itanium 2 (equivalente a 13 dias de uso completo do computador).

Validação oficial

Implementações de todas as funções aprovadas pelo FIPS podem ser validadas oficialmente através do programa CMVP, dirigido em conjunto pelo NIST e pelo Estabelecimento de Segurança e Comunicações (CSE, Communications Security Establishment em inglês). Para verificação informal, um pacote para se gerar uma grande número de vetores de teste é disponibilizado no site do NIST; a verificação resultante no entanto não substitui, em forma alguma, a validação formal CMVP, que é exigida por lei em certas aplicações. A partir de Dezembro de 2013, há mais de 2000 implementações validadas de SHA-1, com 14 delas capazes de manusear mensagens com tamanho em bits não múltiplo de oito (lista de validação SHS).

04

Exemplos e pseudocódigos

Imagem: Beryllium Transistor · BY-SA · Openverse

Hashes exemplo

Estes são exemplos de resumos de mensagens SHA-1 em hexadecimal e em binário Base64 para a codificação de texto ASCII. Até mesmo uma pequena mudança na mensagem irá, com probabilidade esmagadora, resultar em um hash completamente diferente, devido ao efeito avalanche. Por exemplo, mudar dog to cog produz um hash com valores diferentes para 81 dos 160 bits.

Pseudocódigo SHA-1

Segue o pseudocódigo para o algoritmo SHA-1: O número hh é o resumo da mensagem, que pode ser escrito em hexadecimal (base 16), mas é normalmente escrito utilizando-se binário Base64 para codificação de texto em ASCII. Os valores constantes utilizados são escolhidos para parecerem aleatórios: as quatro constantes da rodada k são 230 as raízes quadradas de 2,3, 5 e 10. Os primeiros números iniciais de h0 até h3 são os mesmos do algoritmo MD5, e o quinto (para h4) é similar. Em vez da formulação do FIPS PUB 180-1 original mostrada, as seguintes expressões equivalentes podem ser utilizadas para computar f no laço principal acima: Max Locktyukhin também mostrou que para as rodadas 32–79 a computação de:

05

Comparação de funções SHA

Imagem: Camphora · BY-SA · Openverse

Na tabela abaixo, estado interno significa a "soma do hash interno" após cada compressão de bloco de dados. Perceba que a performance irá variar não apenas entre algoritmos, mas também com a implementação e equipamento utilizados. A ferramenta OpenSSL vem com um comando embutido chamado "velocidade" que referencia os vários algoritmos no sistema do usuário.

Vídeos recomendados

Fontes consultadas

Continue pesquisando