.NET

9 dez, 2013

SHA-3 – O novo padrão de hash criptográfico

Publicidade

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);
        }

Legal né? Bom por hoje é só.

Até a próxima!