SHA-2 é um conjunto de funções hash criptográficas projetadas pela NSA (Agência de Segurança Nacional dos EUA). SHA significa secure hash algorithm (algoritmo de hash seguro). Funções hash criptográficas são operações matemáticas executadas em dados digitais; comparando o hash computado (a saída de execução do algoritmo) a um valor de hash conhecido e esperado, uma pessoa pode determinar a integridade dos dados. Por exemplo, calcular o hash de um arquivo baixado e comparar o resultado com um resultado hash publicado anteriormente pode mostrar se o download foi modificado ou adulterado. Um aspecto importante das funções hash criptográficas é a sua resistência à colisão: ninguém deve ser capaz de encontrar dois valores de entrada diferentes que resultam na mesma saída de hash.

SHA-2 inclui mudanças significativas de seu antecessor, SHA-1. A família SHA-2 é composta por seis funções hash com resumos (valores de hash) que são de 224, 256, 384 ou 512 bits: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256.

SHA-256 e SHA-512 são funções hash inovadoras computadas com palavras de 32 e 64 bytes, respectivamente. Eles usam quantidades de deslocamento e constantes aditivas diferentes, mas as suas estruturas são praticamente idênticas, diferindo apenas no número de rodadas. SHA-224 e SHA-384 são simplesmente versões truncadas das duas primeiras, calculadas com valores iniciais diferentes. SHA-512/224 e SHA-512/256 também são versões truncadas de SHA-512, mas os valores iniciais são gerados usando o método descrito no FIPS PUB 180-4. SHA-2 foi publicada em 2001 pelo NIST como um padrão federal dos Estados Unidos (FIPS). A família SHA-2 de algoritmos está patenteada em US 6829355. Os Estados Unidos lançou a patente sob uma licença livre de royalties.

Em 2005, surgiu um algoritmo para encontrar colisões SHA-1 em cerca de 2000 vezes menos etapas do que se pensava possível. Em 23 de fevereiro de 2017, o grupo CWI Amsterdam e a Google anunciaram um ataque prático de colisão contra o SHA-1.. A margem de segurança deixada por SHA-1 é mais fraca do que a pretendida, e seu uso é, portanto, não recomendado para aplicações que dependem de resistência à colisão, tais como assinaturas digitais. Embora SHA-2 tenha algumas semelhanças com o algoritmo SHA-1, esses ataques não foram estendidos com sucesso para SHA-2. 

Atualmente, os melhores ataques públicos quebram a resistência à preimagem em 52 rodadas de SHA-256 ou 57 rodadas de SHA-512, e resistência de colisão para 46 rodadas de SHA-256, como mostrado na seção Criptoanálise e validação abaixo.

Padrão hash thumb|400px|Uma iteração em uma função de compressão da família SHA-2. Os componentes azuis fazem as seguintes operações:

A rotação bit a bit usa constantes diferentes para a SHA-512. Os números a seguir são para SHA-256. O vermelho é adição módulo 232.

Com a publicação do FIPS PUB 180-2, NIST acrescentou três funções hash adicionais na família SHA. Os algoritmos são conhecidos coletivamente como SHA-2, em homenagem a seus comprimentos de resumo (em bits): SHA-256, SHA-384 e SHA-512.

Os algoritmos foram publicadas pela primeira vez em 2001 no projeto da FIPS PUB 180-2, no tempo em que opinião e observações públicas eram aceitas. Em agosto de 2002, FIPS PUB 180-2 se tornou o novo Padrão de Hash Seguro, substituindo FIPS PUB 180-1, que foi lançado em abril de 1995. A norma atualizada incluía o algoritmo SHA-1 original, com a notação técnica atualizada consistente com a descrição do funcionamento interno da família SHA-2.

Em fevereiro de 2004, uma notificação de mudança foi publicada por FIPS PUB 180-2, especificando uma variante adicional, SHA-224, definida para coincidir com o comprimento da chave da 3DES de chave dupla. Em outubro de 2008, o padrão foi atualizado no FIPS PUB 180-3, incluindo SHA-224 a partir da notificação de mudança, mas sem fazer mudanças fundamentais no padrão. A principal motivação para a atualização do padrão foi a transferência de informações de segurança sobre os algoritmos de hash e recomendações para a sua utilização para Publicações Especiais 800-107 e 800-57. Os dados de testes detalhados e exemplos de resumos de mensagem também foram removidos do padrão, e fornecidos como documentos separados.

Em janeiro de 2011, NIST publicou SP800-131A, que especificou um movimento a partir do mínimo de segurança atual de 80-bits (fornecido pelo SHA-1) permitido para uso do governo federal até o final de 2013, com a segurança de 112 bits (fornecido pelo SHA-2), sendo requisito mínimo de fato a partir daí, e o nível de segurança recomendado a partir da data de publicação.

Em março de 2012, o padrão foi atualizado no FIPS PUB 180-4, incluindo as funções de hash SHA-512/224 e SHA-512/256, e descrevendo um método para gerar valores iniciais para as versões truncadas de SHA-512. Além disso, uma restrição ao preenchimento dos dados de entrada antes do cálculo do hash foi removida, permitindo aos dados de hash a serem calculados simultaneamente com a geração de conteúdo, como um vídeo ou áudio em tempo real. Preencher o bloco de dados final ainda deverá ocorrer antes da saída do hash.

Em julho de 2012, NIST revisou o SP800-57, que fornece orientações para a gestão de chaves criptográficas. A publicação não permite criação de assinaturas digitais com um hash de segurança inferior a 112 bits a partir de 2013. A revisão anterior de 2007 especificava o ponto de corte para ser o final de 2010. Em agosto de 2012, NIST revisou SP800-107 da mesma maneira.

A competição de funções hash do NIST selecionou uma nova função hash, SHA-3, em 2012. O algoritmo SHA-3 não é derivado de SHA-2.

Aplicações A função hash SHA-2 é implementada em algumas aplicações de segurança e protocolos amplamente usados, incluindo TLS e SSL, PGP, SSH, S/MIME, e IPsec.

SHA-256 é usado como parte do processo de autenticação de pacotes de software Debian GNU/Linux e no padrão DKIM de assinatura de mensagens; SHA-512 é parte de um sistema para autenticar vídeos de arquivos do Tribunal Penal Internacional para o genocídio de Ruanda. SHA-256 e SHA-512 foram propostos para utilização no DNSSEC. Fornecedores de Unix e Linux estão se movimentando para usar 256 e 512-bit SHA-2 para o cálculo de dispersão seguro de senhas.

Várias criptomoedas como Bitcoin usam SHA-256 para verificar transações e calculam a prova-de-trabalho ou prova-de-participação (do inglês, proof of stake). A ascensão de chips aceleradores ASIC SHA-2 tem levado ao uso de esquemas de prova-de-trabalho baseados em scrypt.

SHA-1 e SHA-2 são os algoritmos de hash seguros exigidos por lei para o uso em certas aplicações do Governo dos EUA, incluindo o uso dentro de outros algoritmos e protocolos criptográficos, para a proteção da informação não-confidencial sensível. FIPS PUB 180-1 também incentivou adoção e utilização de SHA-1 por organizações privadas e comerciais. SHA-1 está sendo reformada para a maioria dos usos do governo; o Instituto Nacional de Padrões e Tecnologia diz: "As agências federais devem parar de usar SHA-1 para ... aplicações que exigem resistência à colisão, logo que possível, e devem usar a família SHA-2 de funções hash para estas aplicações depois de 2010" (ênfase original). A diretiva do NIST de que as agências do governo dos EUA devem parar com os usos de SHA-1 depois de 2010 e a conclusão do SHA-3 podem acelerar o fim do uso de SHA-1.

As funções SHA-2 não são tão amplamente utilizadas como SHA-1, apesar de sua maior segurança. Razões podem incluir falta de suporte para SHA-2 em sistemas que rodam o Windows XP SP2 ou versões posteriores, ou a falta de urgência percebida desde que colisões em SHA-1 ainda não foram encontradas.

Criptoanálise e validação Para uma função hash em que L é o número de bits no resumo de mensagem, encontrar uma mensagem que corresponde a um dado resumo de mensagem sempre pode ser feito usando uma busca de força bruta em 2L avaliações. Isto é chamado um ataque de preimagem e pode ou não ser prático, dependendo de L e do ambiente de computação em particular. O segundo critério, encontrar duas mensagens diferentes que produzem o mesmo resumo de mensagem, conhecido como uma colisão, requer, em média, apenas 2L/2 avaliações usando um ataque do aniversário.

Algumas das aplicações que usam hashes criptográficos, como o armazenamento de senha, só são minimamente afetados por um ataque de colisão. Construindo uma senha que trabalha para uma determinada conta requer um ataque de preimagem, bem como o acesso ao hash da senha original (normalmente num arquivo obscuro), o que pode ou não ser trivial. Inverter a encriptação da senha (por exemplo, para obter uma senha para tentar usá-la contra a conta de um usuário em outro lugar) não é possível com esses ataques (no entanto, mesmo um hash de senha seguro não pode impedir ataques de força bruta em senhas fracas).

No caso de assinatura de documentos, um invasor não pode simplesmente falsificar uma assinatura de um documento - o atacante existente teria que produzir um par de documentos, um inócuo e um prejudicial, e obter o detentor da chave privada para assinar o documento inócuo. Há circunstâncias concretas em que isso é possível; até o final de 2008, foi possível criar certificados SSL falsificados usando uma colisão em MD5.

O aumento do interesse na análise hash criptográfico durante a competição SHA-3 produziu vários novos ataques contra a família SHA-2, os melhores são dados na tabela abaixo. Apenas os ataques de colisão são de complexidade prática; nenhum dos ataques se estendem para a função hash com rodada completa.

No FSE 2012, pesquisadores da Sony fizeram uma apresentação sugerindo que ataques de pseudo-colisão poderiam ser estendidos para 52 rodadas no SHA-256 e 57 rodadas no SHA-512 através da construção sobre o ataque de pseudo-preimagem biclique.

Publicado em Ano Método de ataque AtaqueVarianteRodadasComplexidade New Collision Attacks AgainstUp To 24-step SHA-2 2008 DeterministicoColisão SHA-256 24/64 228.5 SHA-512 24/80 232.5 Preimages for step-reduced SHA-2 2009 Encontro-no-meioPreimagem SHA-256 42/64 2251.7 43/64 2254.9 SHA-512 42/80 2502.3 46/80 2511.5 Advanced meet-in-the-middlepreimage attacks 2010 Encontro-no-meioPreimagem SHA-256 42/64 2248.4 SHA-512 42/80 2494.6 Higher-Order Differential Attackon Reduced SHA-256 2011 DiferencialPseudo-colisão SHA-256 46/64 2178 46/64 246 Bicliques for Preimages: Attacks onSkein-512 and the SHA-2 family 2011 Biclique Preimagem SHA-256 45/64 2255.5 SHA-512 50/80 2511.5Pseudo-preimagem SHA-256 52/64 2255 SHA-512 57/80 2511 Improving Local Collisions: NewAttacks on Reduced SHA-256 2013 DiferencialColisão SHA-256 31/64 265.5Pseudo-colisão SHA-256 38/64 237 Branching Heuristics in Differential CollisionSearch with Applications to SHA-512 2014 Diferencial heurísticoPseudo-colisão SHA-512 38/80 240.5

Validação oficial

Implementações de todas as funções de segurança aprovadas pelo FIPS podem ser oficialmente validadas através do programa de CMVP, executado conjuntamente pelo Instituto Nacional de Padrões e Tecnologia (NIST) e o Communications Security Establishment (CSE). Para verificação informal, um pacote para gerar um elevado número de vetores de teste é disponibilizado para download no site do NIST; a verificação resultante no entanto não substitui a validação formal CMVP, o que é exigido por lei para determinadas aplicações.

Em dezembro de 2013, já existiam mais de 1300 implementações validadas da SHA-256 e mais de 900 da SHA-512, com apenas 5 delas sendo capazes de lidar com as mensagens com um comprimento em bits não-múltiplo de oito, suportando ambas as variantes (ver Lista de validação SHS).

Exemplos de variantes SHA-2 Valores hash para palavra vazia: SHA224("") 0x d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f SHA256("") 0x e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 SHA384("") 0x 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b SHA512("")