Whirlpool (função hash) - Whirlpool (hash function)
Em geral | |
---|---|
Designers | Vincent Rijmen , Paulo SLM Barreto |
Publicado pela primeira vez | 2000, 2001, 2003 |
Derivado de | Square , AES |
Certificação | NESSIE |
Detalhe | |
Tamanhos de resumo | 512 bits |
Reivindicações de segurança | Tamanho de hashsum grande |
Estrutura | Miyaguchi-Preneel |
Rodadas | 10 |
Melhor criptoanálise pública | |
Em 2009, um ataque rebote foi anunciado que apresenta colisões completas contra 4,5 rodadas de Whirlpool em 2 120 operações, colisões de partida semi-livre contra 5,5 rodadas em 2 120 tempo e quase colisões de partida semi-livre contra 7,5 rodadas em 2 128 Tempo. |
Em ciência da computação e criptografia , Whirlpool (às vezes denominado WHIRLPOOL ) é uma função hash criptográfica . Foi desenhado por Vincent Rijmen (co-criador do Advanced Encryption Standard ) e Paulo SLM Barreto , que o descreveu pela primeira vez em 2000.
O hash foi recomendado pelo projeto NESSIE . Também foi adotado pela Organização Internacional de Padronização (ISO) e a Comissão Eletrotécnica Internacional (IEC) como parte do padrão internacional conjunto ISO / IEC 10118-3 .
Características de design
Whirlpool é um hash projetado após a cifra de bloco quadrado e é considerado parte dessa família de funções de cifra de bloco.
Whirlpool é uma construção Miyaguchi-Preneel baseada em um Advanced Encryption Standard (AES) substancialmente modificado .
O Whirlpool recebe uma mensagem de qualquer comprimento inferior a 2 256 bits e retorna um resumo da mensagem de 512 bits .
Os autores declararam que
- "WHIRLPOOL não é (e nunca será) patenteado. Pode ser usado gratuitamente para qualquer finalidade."
Mudanças de versão
O Whirlpool original se chamará Whirlpool-0 , a primeira revisão do Whirlpool se chamará Whirlpool-T e a versão mais recente se chamará Whirlpool nos seguintes vetores de teste.
- Na primeira revisão em 2001, o S-box foi alterado de um gerado aleatoriamente com boas propriedades criptográficas para um que tem melhores propriedades criptográficas e é mais fácil de implementar em hardware.
- Na segunda revisão (2003), foi encontrada uma falha na matriz de difusão que baixou a segurança estimada do algoritmo abaixo de seu potencial. Alterar as constantes da matriz rotativa 8x8 de (1, 1, 3, 1, 5, 8, 9, 5) para (1, 1, 4, 1, 8, 5, 2, 9) resolveu esse problema.
Estrutura interna
A função hash Whirlpool é uma construção Merkle – Damgård baseada em uma cifra de bloco tipo AES W no modo Miyaguchi – Preneel .
A cifra de bloco W consiste em uma matriz de estados de 8 × 8 bytes, para um total de 512 bits.
O processo de criptografia consiste em atualizar o estado com quatro funções de rodada em 10 rodadas. As quatro funções de rodada são SubBytes (SB), ShiftColumns (SC), MixRows (MR) e AddRoundKey (AK). Durante cada rodada, o novo estado é calculado como .
SubBytes
A operação SubBytes aplica uma permutação não linear (a S-box) a cada byte do estado de forma independente. A caixa S de 8 bits é composta por 3 caixas S menores de 4 bits.
ShiftColumns
A operação ShiftColumns muda ciclicamente cada byte em cada coluna do estado. A coluna j tem seus bytes deslocados para baixo nas posições j .
MixRows
A operação MixRows é uma multiplicação à direita de cada linha por uma matriz 8 × 8 . A matriz é escolhida de forma que o número do ramo (uma propriedade importante quando se olha para a resistência à criptanálise diferencial ) seja 9, que é o máximo.
AddRoundKey
A operação AddRoundKey usa xor bit a bit para adicionar uma chave calculada pela programação de chave ao estado atual. A programação da chave é idêntica à própria criptografia, exceto que a função AddRoundKey é substituída por uma função AddRoundConstant que adiciona uma constante predeterminada em cada rodada.
Hashes Whirlpool
O algoritmo Whirlpool passou por duas revisões desde sua especificação original de 2000.
As pessoas que incorporam a Whirlpool provavelmente usarão a revisão mais recente da Whirlpool; embora não haja fraquezas de segurança conhecidas nas versões anteriores do Whirlpool, a revisão mais recente tem melhores características de eficiência de implementação de hardware e também é provável que seja mais segura. Conforme mencionado anteriormente, é também a versão adotada no padrão internacional ISO / IEC 10118-3 .
Os hashes Whirlpool de 512 bits (64 bytes) (também chamados de resumos de mensagens ) são normalmente representados como números hexadecimais de 128 dígitos .
O seguinte demonstra uma entrada ASCII de 43 bytes (sem incluir aspas) e os hashes Whirlpool correspondentes:
Versão | String de entrada | Hash computado |
---|---|---|
Whirlpool-0 | " A rápida raposa marrom salta sobre o cachorro preguiçoso " |
4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C 3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D |
Whirlpool-T | " A rápida raposa marrom salta sobre o cachorro preguiçoso " |
3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183 AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1 |
Hidromassagem | " A rápida raposa marrom salta sobre o cachorro preguiçoso " |
B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35 |
Mesmo uma pequena mudança na mensagem irá (com uma probabilidade extremamente alta de ) resultar em um hash diferente, que geralmente parecerá completamente diferente, exatamente como dois números aleatórios não relacionados. O seguinte demonstra o resultado da alteração da entrada anterior por uma única letra (um único bit, mesmo, em codificações compatíveis com ASCII), substituindo d por e :
Versão | String de entrada | Hash computado |
---|---|---|
Whirlpool-0 | " A rápida raposa marrom salta sobre o preguiçoso eog " |
228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A 9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676 |
Whirlpool-T | " A rápida raposa marrom salta sobre o preguiçoso eog " |
C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9 1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3 |
Hidromassagem | " A rápida raposa marrom salta sobre o preguiçoso eog " |
C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5 0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C |
O hash de uma string de comprimento zero é:
Versão | String de entrada | Hash computado |
---|---|---|
Whirlpool-0 | "" |
B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473 39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8 |
Whirlpool-T | "" |
470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A |
Hidromassagem | "" |
19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7 3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3 |
Implementações
Os autores fornecem implementações de referência do algoritmo Whirlpool, incluindo uma versão escrita em C e uma versão escrita em Java . Essas implementações de referência foram lançadas em domínio público.
Adoção
Dois dos primeiros programas criptográficos convencionais amplamente usados que começaram a usar o Whirlpool foram o FreeOTFE , seguido pelo TrueCrypt em 2005.
VeraCrypt (um fork do TrueCrypt ) incluiu Whirlpool (a versão final) como um de seus algoritmos de hash suportados.
Veja também
Referências
links externos
- A função de hash WHIRLPOOL na máquina Wayback (arquivado em 29-11-2017)
- Jacksum no SourceForge.net , uma implementação Java de todas as três revisões do Whirlpool
- whirlpool no GitHub - Uma implementação Go de código aberto da última revisão do Whirlpool
- Uma implementação Matlab da função de hash do Whirlpool
- RHash , uma ferramenta de linha de comando de código aberto , que pode calcular e verificar o hash Whirlpool.
- Módulo Perl Whirlpool no CPAN
- Módulo Digest implementando o algoritmo de hash Whirlpool em Ruby
- Ironclad um pacote de criptografia Common Lisp contendo uma implementação Whirlpool
- O padrão ISO / IEC 10118-3: 2004
- Vetores de teste para o hash Whirlpool do projeto NESSIE
- Implementação de C # gerenciado
- Módulo Python Whirlpool