SHA-2
SHA-2 é um conjunto de funções hash criptográficas projetadas pela NSA . SHA significa secure hash algorithm . Funções hash criptográficas são operações matemáticas executadas em dados digitais; comparando o hash computado 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.
Imagem: kockmeyer · BY-SA · Openverse
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.
Imagem: Doovele · BY-SA · Openverse
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.
Imagem: JavDomGom · BY-SA · Openverse
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).
Imagem: חציל מלך היפו · BY-SA · Openverse
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).
Imagem: Saigen Jiro · CC0 · Openverse
Até mesmo uma pequena mudança na mensagem irá (com probabilidade massiva) resultar em um hash bastante diferente, devido ao efeito avalanche. Por exemplo, adicionando um ponto final ao final da frase:
Imagem: Saigen Jiro · CC0 · Openverse
Segue o pseudocódigo para o algoritmo SHA-256. Note o grande acréscimo na mistura entre bits das w[16..63] palavras em comparação com SHA-1. A computação dos valores ch e maj pode ser otimizada da mesma maneira como é descrita para SHA-1. SHA-224 é idêntica à SHA-256, exceto que: SHA-512 é idêntica em relação à estrutura a SHA-256, mas, SHA-384 é idêntica a SHA-512, exceto que: SHA-512/t é idêntica à SHA-512 exceto que: A função de geração SHA-512/t IV avalia um SHA-512 modificado na palavra em ASCII "SHA-512/t", substituído com a representação decimal de t. A SHA-512 modificada é a mesma que SHA-512, exceto que seus valores iniciais de h0 até h7 foram XORados com a constante hexadecimal 0xa5a5a5a5a5a5a5a5. Na tabela abaixo, estado interno significa a "soma do hash interno" após cada compressão de bloco de dados. Na coluna operações bit a bit, "rot" significa girar sem transporte, e "shr" significa deslocamento lógico para a direita. Todos estes algoritmos utilizam adição modular de alguma forma, exceto para SHA-3.


