Em 2 de novembro de 2007, o NIST – National Institute of Standards and Technology anunciou um concurso público para o desenvolvimento de um novo algoritmo de hash criptográfico, chamado SHA-3. Em 31 de outubro de 2008 recebeu 64 candidatos de todo o mundo.
A competição foi divida em três etapas para a escolha do melhor algoritmo, chegando a cinco algoritmos finalistas: BLAKE, Grøstl, JH, Keccak e Skein.
Em 2 de outubro de 2012, após ouvir diversos feedbacks do público e a revisão interna dos candidatos, chegaram ao vencedor. Keccak (pronuncia-se “catch-ack”), colocando um ponto final em uma competição que durou cinco anos!
O algoritmo Keccak foi criado por Guido Bertoni, Joan Daemen, Gilles Van Assche da STMicroelectronics e Michaël Peeters da NXP Semiconductors. A equipe venceu 63 outros algoritmos que o NIST recebeu após a abertura para novos algoritmos candidatos em 2007, quando se pensava que SHA-2, o algoritmo de hash padrão, poderia ser quebrado. Keccak agora será SHA-3 algoritmo de hash do NIST.
O algoritmo Keccak foi muito elogiado devido as suas qualidades únicas, incluindo o seu design elegante e sua capacidade de funcionar bem em muitos dispositivos de computação diferentes, tendo maior desempenho em hardware do que SHA-2 ou qualquer um dos outros finalistas.
Direto na prática
Agora chega de papo e vamos colocar a mão na massa e testar SHA-3. Para começar, você precisa do NuGet Package Manager instalado no seu Visual Studio. Se você já o instalou, crie um novo projeto Windows Forms (caso contrário instale o NuGet Package Manager antes de criar o projeto). Eu nomeie o meu projeto como SHA-3.
Agora vá até o Package Manager Console e execute o seguinte comando:
PM> Install-Package SHA3
O comando vai instalar a versão oficial dos criadores. A referência será criada automaticamente como mostrado aqui:
Crie um formulário como esse:
Para processar a mensagem e retornar o Hash SHA-3 usamos os seguinte método:
string ComputeHashSHA3(string message, int size) { try { /* * Iniciamos a classe SHA-3 e passamos o tamanho do hash. * Os valores aceitos são 224, 256, 384 e 512 bits. */ SHA3Managed hash = new SHA3Managed(size); System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); //Guarda os bytes da mensagem byte[] MessageBytes = encoding.GetBytes(message); //Computamos o hash da mensagem byte[] ComputeHashBytes = hash.ComputeHash(MessageBytes); //Fazemos a conversão para Hexadecimal e retornamos. StringBuilder x = new StringBuilder(); foreach (var item in ComputeHashBytes) { x.Append(item.ToString("x2")); } return x.ToString(); } catch (Exception ex) { throw; } }
Agora basta chamar o método no evento click do botão e pronto!
private void btnSha3_Click(object sender, EventArgs e) { txtSha3.Text = this.ComputeHashSHA3(txtMessage.Text.Trim(), 512); }
- Você pode acessar o site oficial aqui: http://keccak.noekeon.org/.
- Esse site exibe uma lista com vários testes com SHA-1, SHA-2 e SHA-3: http://www.di-mgt.com.au/sha_testvectors.html
- Download do projeto
Legal né? Bom por hoje é só.
Até a próxima!