O processo de hashing consiste em gerar uma saída de tamanho fixo a partir de uma entrada variável. Isso é alcançado através de fórmulas matemáticas denominadas funções hash, implementadas como algoritmos.
No âmbito das criptomoedas, as funções hash criptográficas são fundamentais. Graças a elas, as blockchains e outros sistemas descentralizados alcançam altos níveis de integridade e segurança de dados.
Tanto as funções hash convencionais como as criptográficas são deterministas. Isso significa que, se a entrada não mudar, o algoritmo sempre produzirá a mesma saída ( também chamada de digest ou hash ).
Geralmente, os algoritmos hash em criptomoedas são projetados como funções unidirecionais, o que implica que não podem ser revertidos facilmente sem uma enorme quantidade de tempo e recursos computacionais. Ou seja, é simples obter a saída a partir da entrada, mas muito complexo fazer o contrário. Quanto mais difícil for encontrar a entrada, mais seguro é considerado o algoritmo.
Funcionamento de uma função hash
Cada função hash produz resultados de tamanho específico, que é constante para cada algoritmo. Por exemplo, SHA-256 gera sempre saídas de 256 bits, enquanto que SHA-1 produz digests de 160 bits.
Para ilustrá-lo, apliquemos o algoritmo SHA-256 ( utilizado no Bitcoin ) às palavras "Gate" e "Gate":
Observemos que uma alteração mínima ( a letra maiúscula inicial ) resulta em um hash completamente distinto. No entanto, ao usar SHA-256, as saídas terão sempre 256 bits (64 caracteres ), independentemente do tamanho da entrada. Além disso, não importa quantas vezes processemos estas palavras, os resultados permanecerão constantes.
Em contraste, se aplicarmos o algoritmo SHA-1 às mesmas entradas, obteríamos:
SHA-1
Entrada
Saída (160 bits)
Gate
3e2a7fe40ac63dbe0a46a6931c74c1d4e6b7447d
Gate
c1b7368da4b8ef83dbf7ca3d3c3d17e65d799708
É importante destacar que SHA significa Secure Hash Algorithms, referindo-se a um conjunto de funções hash criptográficas que inclui SHA-0, SHA-1, e os grupos SHA-2 e SHA-3. SHA-256 pertence ao grupo SHA-2, junto com SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.
Importância do hashing
As funções hash convencionais têm diversos usos, como pesquisas em bases de dados, análise de arquivos extensos e gestão de informação. Por outro lado, as funções hash criptográficas são amplamente utilizadas em segurança informática, autenticação de mensagens e geração de impressões digitais. No Bitcoin, são essenciais para o processo de mineração e a criação de novos endereços e chaves.
O verdadeiro potencial do hashing manifesta-se ao lidar com grandes volumes de dados. Por exemplo, é possível processar um arquivo ou conjunto de dados extenso através de uma função hash e utilizar a sua saída para verificar rapidamente a precisão e integridade da informação. Isso é possível graças à natureza determinista das funções hash: a mesma entrada sempre produzirá uma saída condensada idêntica. Esta técnica elimina a necessidade de armazenar e "lembrar" grandes quantidades de informação.
A hash é particularmente útil na tecnologia blockchain. A cadeia de blocos do Bitcoin envolve numerosas operações de hash, principalmente no processo de mineração. De fato, quase todos os protocolos de criptomoedas baseiam-se no hash para vincular e condensar grupos de transações em blocos, bem como para criar ligações criptográficas entre blocos, formando efetivamente uma cadeia.
Funções hash criptográficas
Uma função hash que implementa técnicas criptográficas é denominada função hash criptográfica. Em geral, vulnerar uma destas funções requer inúmeros tentativas de força bruta. Para "reverter" uma função hash criptográfica, seria necessário adivinhar a entrada mediante prova e erro até obter a saída correspondente. No entanto, existe a possibilidade de que diferentes entradas produzam exatamente o mesmo resultado, o que é conhecido como "colisão".
Tecnicamente, uma função hash criptográfica deve cumprir três propriedades para ser considerada efetivamente segura: resistência a colisões, resistência a pré-imagem e resistência a segunda pré-imagem.
Resumamos estas propriedades em três frases concisas:
Resistência a colisões: não é viável encontrar duas entradas distintas que gerem o mesmo hash como saída.
Resistência à pré-imagem: não é viável "inverter" a função hash ( encontrar a entrada de uma saída determinada ).
Resistência à segunda pré-imagem: não é possível encontrar uma segunda entrada que colida com uma entrada específica.
Resistência a colisões
Uma colisão ocorre quando entradas diferentes produzem exatamente o mesmo hash. Uma função hash é considerada resistente a colisões até que alguém encontre uma. É importante notar que sempre existirão colisões para qualquer função hash, uma vez que as entradas possíveis são infinitas, enquanto as saídas são finitas.
Na prática, uma função hash é resistente a colisões quando a probabilidade de encontrar uma é tão baixa que exigiria milhões de anos de cálculos. Assim, embora não existam funções hash livres de colisões, algumas são robustas o suficiente para serem consideradas resistentes (por exemplo, SHA-256).
Entre os algoritmos SHA, os grupos SHA-0 e SHA-1 já não são considerados seguros devido ao fato de que foram encontradas colisões. Atualmente, os grupos SHA-2 e SHA-3 são considerados resistentes a colisões.
Resistência a pré-imagem
A propriedade de resistência a pré-imagem está relacionada com o conceito de funções unidireccionais. Uma função hash é considerada resistente a pré-imagem quando existe uma probabilidade muito baixa de que alguém encontre a entrada que gerou uma saída particular.
Esta propriedade difere da anterior, uma vez que aqui um atacante tentaria adivinhar a entrada observando uma saída específica. Uma colisão, por outro lado, ocorre quando se encontram duas entradas diferentes que geram a mesma saída, independentemente de quais entradas foram utilizadas.
A resistência a pré-imagem é valiosa para proteger dados, já que um simples hash de uma mensagem pode demonstrar sua autenticidade sem revelar a informação original. Na prática, muitos fornecedores de serviços e aplicações web armazenam e utilizam hashes gerados a partir de senhas em vez de senhas em texto plano.
Resistência à segunda pré-imagem
Simplificando, podemos dizer que a resistência a segunda pré-imagem está em um ponto intermediário entre as outras duas propriedades. Um ataque de segunda pré-imagem ocorre quando alguém consegue encontrar uma entrada específica que gera a mesma saída que outra entrada já conhecida.
Em outras palavras, um ataque de segunda pré-imagem implica encontrar uma colisão, mas em vez de procurar duas entradas aleatórias que gerem o mesmo hash, busca-se uma entrada que produza o mesmo hash gerado por outra entrada específica.
Portanto, qualquer função hash resistente a colisões também será resistente a ataques de segunda pré-imagem, uma vez que estes últimos sempre implicam uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem a uma função resistente a colisões, pois implica encontrar uma única entrada a partir de uma única saída.
Mineração
O processo de mineração no Bitcoin envolve numerosos passos que utilizam funções hash, como verificar saldos, vincular entradas e saídas de transações, e condensar transações em um bloco para formar uma árvore de Merkle. No entanto, uma das principais razões pelas quais a blockchain do Bitcoin é segura é que os mineradores devem realizar uma enorme quantidade de operações de hash para encontrar uma solução válida para o próximo bloco.
Especificamente, um minerador deve testar diferentes entradas ao criar um valor hash para o seu bloco candidato. Só poderão validar o seu bloco se gerarem um hash de saída que comece com uma determinada quantidade de zeros. A quantidade de zeros determina a dificuldade da mineração e varia de acordo com o hash rate dedicado à rede.
Neste contexto, a hash rate representa quanta potência de computação é investida na mineração de Bitcoin. Se a hash rate da rede aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para manter o tempo médio necessário para minerar um bloco próximo a 10 minutos. Por outro lado, se vários mineradores pararem de minerar, causando uma queda significativa na hash rate, a dificuldade de mineração será ajustada, facilitando a mineração ( até que o tempo médio do bloco volte a 10 minutos ).
É importante destacar que os mineradores não precisam encontrar colisões, uma vez que existem múltiplos hashes que podem gerar como saída válida ( começando com uma certa quantidade de zeros ). Portanto, há várias soluções possíveis para um bloco determinado, e os mineradores só precisam encontrar uma delas, de acordo com o limite estabelecido pela dificuldade de mineração.
Uma vez que a mineração de Bitcoin é uma tarefa dispendiosa, os mineradores não têm incentivos para enganar o sistema, uma vez que isso provocaria perdas financeiras significativas. Quanto mais mineradores se juntam a uma blockchain, maior e mais robusta ela se torna.
Reflexões finais
Não há dúvida de que as funções hash são ferramentas fundamentais em informática, especialmente quando se trata de grandes volumes de dados. Ao se combinarem com a criptografia, os algoritmos hash tornam-se versáteis e oferecem segurança e autenticação de diversas maneiras. Por isso, as funções hash criptográficas são vitais para quase todas as redes de criptomoedas, e compreender suas propriedades e mecanismos de funcionamento é sem dúvida útil para qualquer pessoa interessada na tecnologia blockchain.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
O hash: elemento chave nas moedas digitais
O processo de hashing consiste em gerar uma saída de tamanho fixo a partir de uma entrada variável. Isso é alcançado através de fórmulas matemáticas denominadas funções hash, implementadas como algoritmos.
No âmbito das criptomoedas, as funções hash criptográficas são fundamentais. Graças a elas, as blockchains e outros sistemas descentralizados alcançam altos níveis de integridade e segurança de dados.
Tanto as funções hash convencionais como as criptográficas são deterministas. Isso significa que, se a entrada não mudar, o algoritmo sempre produzirá a mesma saída ( também chamada de digest ou hash ).
Geralmente, os algoritmos hash em criptomoedas são projetados como funções unidirecionais, o que implica que não podem ser revertidos facilmente sem uma enorme quantidade de tempo e recursos computacionais. Ou seja, é simples obter a saída a partir da entrada, mas muito complexo fazer o contrário. Quanto mais difícil for encontrar a entrada, mais seguro é considerado o algoritmo.
Funcionamento de uma função hash
Cada função hash produz resultados de tamanho específico, que é constante para cada algoritmo. Por exemplo, SHA-256 gera sempre saídas de 256 bits, enquanto que SHA-1 produz digests de 160 bits.
Para ilustrá-lo, apliquemos o algoritmo SHA-256 ( utilizado no Bitcoin ) às palavras "Gate" e "Gate":
SHA-256
Entrada
Saída (256 bits)
Gate
8a83f205f3c314f629e3a0128f5f404cfd44b9a95da6d9f1a7b9f50d1f1b3b34
Gate
7f7e4cf2eb50a0ea9d71edc37d6a1e74cf5e9348f7f9a0321b95e0a8e4097b3e
Observemos que uma alteração mínima ( a letra maiúscula inicial ) resulta em um hash completamente distinto. No entanto, ao usar SHA-256, as saídas terão sempre 256 bits (64 caracteres ), independentemente do tamanho da entrada. Além disso, não importa quantas vezes processemos estas palavras, os resultados permanecerão constantes.
Em contraste, se aplicarmos o algoritmo SHA-1 às mesmas entradas, obteríamos:
SHA-1
Entrada
Saída (160 bits)
Gate
3e2a7fe40ac63dbe0a46a6931c74c1d4e6b7447d
Gate
c1b7368da4b8ef83dbf7ca3d3c3d17e65d799708
É importante destacar que SHA significa Secure Hash Algorithms, referindo-se a um conjunto de funções hash criptográficas que inclui SHA-0, SHA-1, e os grupos SHA-2 e SHA-3. SHA-256 pertence ao grupo SHA-2, junto com SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.
Importância do hashing
As funções hash convencionais têm diversos usos, como pesquisas em bases de dados, análise de arquivos extensos e gestão de informação. Por outro lado, as funções hash criptográficas são amplamente utilizadas em segurança informática, autenticação de mensagens e geração de impressões digitais. No Bitcoin, são essenciais para o processo de mineração e a criação de novos endereços e chaves.
O verdadeiro potencial do hashing manifesta-se ao lidar com grandes volumes de dados. Por exemplo, é possível processar um arquivo ou conjunto de dados extenso através de uma função hash e utilizar a sua saída para verificar rapidamente a precisão e integridade da informação. Isso é possível graças à natureza determinista das funções hash: a mesma entrada sempre produzirá uma saída condensada idêntica. Esta técnica elimina a necessidade de armazenar e "lembrar" grandes quantidades de informação.
A hash é particularmente útil na tecnologia blockchain. A cadeia de blocos do Bitcoin envolve numerosas operações de hash, principalmente no processo de mineração. De fato, quase todos os protocolos de criptomoedas baseiam-se no hash para vincular e condensar grupos de transações em blocos, bem como para criar ligações criptográficas entre blocos, formando efetivamente uma cadeia.
Funções hash criptográficas
Uma função hash que implementa técnicas criptográficas é denominada função hash criptográfica. Em geral, vulnerar uma destas funções requer inúmeros tentativas de força bruta. Para "reverter" uma função hash criptográfica, seria necessário adivinhar a entrada mediante prova e erro até obter a saída correspondente. No entanto, existe a possibilidade de que diferentes entradas produzam exatamente o mesmo resultado, o que é conhecido como "colisão".
Tecnicamente, uma função hash criptográfica deve cumprir três propriedades para ser considerada efetivamente segura: resistência a colisões, resistência a pré-imagem e resistência a segunda pré-imagem.
Resumamos estas propriedades em três frases concisas:
Resistência a colisões: não é viável encontrar duas entradas distintas que gerem o mesmo hash como saída.
Resistência à pré-imagem: não é viável "inverter" a função hash ( encontrar a entrada de uma saída determinada ).
Resistência à segunda pré-imagem: não é possível encontrar uma segunda entrada que colida com uma entrada específica.
Resistência a colisões
Uma colisão ocorre quando entradas diferentes produzem exatamente o mesmo hash. Uma função hash é considerada resistente a colisões até que alguém encontre uma. É importante notar que sempre existirão colisões para qualquer função hash, uma vez que as entradas possíveis são infinitas, enquanto as saídas são finitas.
Na prática, uma função hash é resistente a colisões quando a probabilidade de encontrar uma é tão baixa que exigiria milhões de anos de cálculos. Assim, embora não existam funções hash livres de colisões, algumas são robustas o suficiente para serem consideradas resistentes (por exemplo, SHA-256).
Entre os algoritmos SHA, os grupos SHA-0 e SHA-1 já não são considerados seguros devido ao fato de que foram encontradas colisões. Atualmente, os grupos SHA-2 e SHA-3 são considerados resistentes a colisões.
Resistência a pré-imagem
A propriedade de resistência a pré-imagem está relacionada com o conceito de funções unidireccionais. Uma função hash é considerada resistente a pré-imagem quando existe uma probabilidade muito baixa de que alguém encontre a entrada que gerou uma saída particular.
Esta propriedade difere da anterior, uma vez que aqui um atacante tentaria adivinhar a entrada observando uma saída específica. Uma colisão, por outro lado, ocorre quando se encontram duas entradas diferentes que geram a mesma saída, independentemente de quais entradas foram utilizadas.
A resistência a pré-imagem é valiosa para proteger dados, já que um simples hash de uma mensagem pode demonstrar sua autenticidade sem revelar a informação original. Na prática, muitos fornecedores de serviços e aplicações web armazenam e utilizam hashes gerados a partir de senhas em vez de senhas em texto plano.
Resistência à segunda pré-imagem
Simplificando, podemos dizer que a resistência a segunda pré-imagem está em um ponto intermediário entre as outras duas propriedades. Um ataque de segunda pré-imagem ocorre quando alguém consegue encontrar uma entrada específica que gera a mesma saída que outra entrada já conhecida.
Em outras palavras, um ataque de segunda pré-imagem implica encontrar uma colisão, mas em vez de procurar duas entradas aleatórias que gerem o mesmo hash, busca-se uma entrada que produza o mesmo hash gerado por outra entrada específica.
Portanto, qualquer função hash resistente a colisões também será resistente a ataques de segunda pré-imagem, uma vez que estes últimos sempre implicam uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem a uma função resistente a colisões, pois implica encontrar uma única entrada a partir de uma única saída.
Mineração
O processo de mineração no Bitcoin envolve numerosos passos que utilizam funções hash, como verificar saldos, vincular entradas e saídas de transações, e condensar transações em um bloco para formar uma árvore de Merkle. No entanto, uma das principais razões pelas quais a blockchain do Bitcoin é segura é que os mineradores devem realizar uma enorme quantidade de operações de hash para encontrar uma solução válida para o próximo bloco.
Especificamente, um minerador deve testar diferentes entradas ao criar um valor hash para o seu bloco candidato. Só poderão validar o seu bloco se gerarem um hash de saída que comece com uma determinada quantidade de zeros. A quantidade de zeros determina a dificuldade da mineração e varia de acordo com o hash rate dedicado à rede.
Neste contexto, a hash rate representa quanta potência de computação é investida na mineração de Bitcoin. Se a hash rate da rede aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para manter o tempo médio necessário para minerar um bloco próximo a 10 minutos. Por outro lado, se vários mineradores pararem de minerar, causando uma queda significativa na hash rate, a dificuldade de mineração será ajustada, facilitando a mineração ( até que o tempo médio do bloco volte a 10 minutos ).
É importante destacar que os mineradores não precisam encontrar colisões, uma vez que existem múltiplos hashes que podem gerar como saída válida ( começando com uma certa quantidade de zeros ). Portanto, há várias soluções possíveis para um bloco determinado, e os mineradores só precisam encontrar uma delas, de acordo com o limite estabelecido pela dificuldade de mineração.
Uma vez que a mineração de Bitcoin é uma tarefa dispendiosa, os mineradores não têm incentivos para enganar o sistema, uma vez que isso provocaria perdas financeiras significativas. Quanto mais mineradores se juntam a uma blockchain, maior e mais robusta ela se torna.
Reflexões finais
Não há dúvida de que as funções hash são ferramentas fundamentais em informática, especialmente quando se trata de grandes volumes de dados. Ao se combinarem com a criptografia, os algoritmos hash tornam-se versáteis e oferecem segurança e autenticação de diversas maneiras. Por isso, as funções hash criptográficas são vitais para quase todas as redes de criptomoedas, e compreender suas propriedades e mecanismos de funcionamento é sem dúvida útil para qualquer pessoa interessada na tecnologia blockchain.