A hash é um processo fundamental no âmbito das moedas criptográficas que transforma dados de qualquer tamanho em resultados de comprimento fixo. Este processo é realizado através de fórmulas matemáticas conhecidas como funções hash, implementadas como algoritmos.
Embora nem todas as funções hash envolvam criptografia, as chamadas funções hash criptográficas são essenciais no ecossistema das moedas. Graças a elas, as blockchains e outros sistemas descentralizados alcançam níveis significativos de integridade e segurança de dados.
As funções hash, tanto as convencionais como as criptográficas, são deterministas. Isto significa que, enquanto os dados de entrada não mudarem, o algoritmo hash produzirá sempre o mesmo resultado, também conhecido como digest ou hash.
Os algoritmos de hash utilizados em criptomoedas costumam ser projetados como funções unidirecionais, o que implica que não podem ser revertidos sem uma quantidade considerável de tempo e recursos computacionais. Em outras palavras, é relativamente simples gerar uma saída a partir de uma entrada, mas extremamente difícil fazer o contrário. Geralmente, quanto mais complicado é encontrar a entrada, mais seguro se considera o algoritmo hash.
Funcionamento de uma função hash
Diferentes funções hash produzem resultados de diferentes comprimentos, mas os possíveis tamanhos de saída de cada algoritmo hash são sempre constantes. Por exemplo, o algoritmo SHA-256 só pode gerar resultados de 256 bits, enquanto o SHA-1 sempre produzirá um digest de 160 bits.
Para ilustrar isso, vamos passar as palavras "Gate" e "Gate" através do algoritmo hash SHA-256 ( utilizado no Bitcoin ).
Note que uma pequena alteração ( a letra maiúscula inicial ) resultou em um valor hash completamente diferente. No entanto, como usamos SHA-256, as saídas sempre terão um tamanho fixo de 256 bits ( ou 64 caracteres ) independentemente do tamanho da entrada. Além disso, não importa quantas vezes executemos as duas palavras através do algoritmo, as duas saídas permanecerão constantes.
Se passarmos as mesmas entradas através do algoritmo hash SHA-1, obtemos os seguintes resultados:
SHA-1
Entrada
Saída (160 bits)
Gate
96a296d224f285c67bee93c30f8a309157f0daa7
Gate
5f42c325eef7e85610308428b407748b77d8c98e
É interessante notar que SHA significa Secure Hash Algorithms (Algoritmos de Hash Seguros). É um conjunto de funções hash criptográficas que inclui os algoritmos SHA-0 e SHA-1, assim como as famílias SHA-2 e SHA-3. SHA-256 faz parte da família SHA-2, junto com SHA-512 e outras variantes. Atualmente, apenas as famílias SHA-2 e SHA-3 são consideradas seguras.
Importância desta tecnologia
As funções hash convencionais têm uma ampla gama de aplicações, incluindo pesquisas em bases de dados, análise de arquivos grandes e gestão de informação. Por outro lado, as funções hash criptográficas são utilizadas extensivamente em aplicações de segurança da informação, como autenticação de mensagens e geração de impressões digitais. No contexto do Bitcoin, as funções hash criptográficas são uma parte integral do processo de mineração e também desempenham um papel crucial na geração de novos endereços e chaves.
O verdadeiro potencial do hashing revela-se ao trabalhar com grandes volumes de informação. Por exemplo, é possível executar um arquivo extenso ou um conjunto de dados através de uma função hash e depois utilizar os seus resultados para verificar rapidamente a precisão e integridade dos dados. Isto é viável devido à natureza determinista das funções hash: a entrada produz sempre uma saída comprimida e simplificada (o hash). Este método elimina a necessidade de armazenar e "memorizar" grandes quantidades de dados.
O hashing é particularmente útil no contexto da tecnologia blockchain. A cadeia de blocos do Bitcoin envolve múltiplas operações relacionadas com o hashing, a maioria das quais é realizada durante o processo de mineração. De facto, quase todos os protocolos de criptomoedas dependem do hashing para ligar e agrupar transações em blocos e para criar ligações criptográficas entre cada bloco, formando assim uma cadeia de blocos.
Funções hash criptográficas
Uma função hash que emprega técnicas criptográficas pode ser definida como uma função hash criptográfica. Em geral, decifrar uma função hash criptográfica requer inúmeras tentativas de força bruta. Para "reverter" uma função hash criptográfica, é necessário selecionar entradas através de tentativa e erro até obter uma saída adequada. No entanto, também existe a possibilidade de que diferentes entradas produzam o mesmo resultado, nesse caso ocorre uma "colisão".
Tecnicamente, uma função hash criptográfica deve cumprir três propriedades para ser considerada segura. Podemos descrevê-las como: resistência a colisões, resistência à pré-imagem e resistência à segunda pré-imagem.
Antes de descrever cada propriedade, resumamos a sua lógica em três frases breves:
Resistência a colisões: impossibilidade de encontrar duas entradas diferentes que produzam o mesmo hash.
Resistência à pré-imagem: incapacidade de "reverter" a função hash ( encontrar a entrada a partir de uma saída dada ).
Resistência à segunda pré-imagem: impossibilidade de encontrar uma segunda entrada que tenha o mesmo hash que a primeira.
Resistência a colisões
Como mencionado anteriormente, uma colisão ocorre quando diferentes entradas produzem o mesmo hash. A função hash é considerada resistente a colisões até que alguém descubra tal colisão. É importante notar que sempre existirão colisões para qualquer função hash devido ao número infinito de entradas e ao número finito de saídas.
Portanto, uma função hash é resistente a colisões quando a probabilidade de detectar uma colisão é tão baixa que exigiria milhões de anos de cálculo. Por essa razão, embora não existam funções hash livres de colisões, algumas são tão robustas que podem ser consideradas estáveis (por exemplo, SHA-256).
Entre os diferentes algoritmos SHA, as famílias SHA-0 e SHA-1 já não são consideradas seguras porque foram detectadas colisões. Atualmente, apenas as famílias SHA-2 e SHA-3 são consideradas resistentes a colisões.
Resistência à pré-imagem
Esta propriedade está estreitamente relacionada com o conceito de funções unidireccionais. Uma função hash é considerada resistente à pré-imagem sempre que exista uma probabilidade muito baixa de que alguém consiga encontrar a entrada utilizando a saída gerada.
Note que esta propriedade é diferente da anterior porque o atacante precisa adivinhar a entrada com base em uma saída específica. A colisão, por outro lado, ocorre quando alguém encontra duas entradas diferentes que produzem a mesma saída, independentemente de qual entrada em particular foi utilizada.
A propriedade de resistência à pré-imagem é valiosa para a segurança dos dados, uma vez que um simples hash de uma mensagem pode demonstrar a sua autenticidade sem a necessidade de revelar informações adicionais. Na prática, muitos fornecedores de serviços e aplicações web armazenam e utilizam hashes gerados a partir de senhas em vez de as utilizarem em formato de texto plano.
Resistência à segunda pré-imagem
Este tipo de resistência encontra-se entre as duas propriedades anteriores. O ataque de segunda pré-imagem consiste em encontrar uma entrada específica com a qual seja possível gerar uma saída que já foi produzida utilizando outra entrada conhecida previamente.
Em outras palavras, um ataque de segunda pré-imagem implica a detecção de colisões, mas em vez de encontrar duas entradas aleatórias que gerem o mesmo hash, o ataque tem como objetivo encontrar uma entrada que possa reproduzir um hash que já foi gerado por outra entrada.
Portanto, qualquer função hash que seja resistente a colisões também o é ao ataque de segunda pré-imagem, já que este último sempre requer uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem em uma função resistente a colisões, uma vez que isso implica buscar uma entrada para uma saída dada.
Mineração
Existem numerosos passos na mineração de Bitcoin que são realizados através de funções hash. Estes incluem a verificação de saldos, a ligação de entradas e saídas de transações, e a combinação de todas as transações em um bloco para formar uma árvore de Merkle. Mas uma das principais razões pelas quais a blockchain de Bitcoin é segura é que os mineiros devem realizar o máximo possível de operações de hash para finalmente encontrar a solução correta para o próximo bloco.
Um minerador deve utilizar diversas entradas ao gerar um hash para o seu bloco candidato. O bloco só poderá ser verificado se a saída gerada corretamente na forma de hash começar com um certo número de zeros. A quantidade de zeros determina a dificuldade da mineração e varia de acordo com o hashrate da rede.
Neste contexto, o hashrate é uma medida da potência computacional que é investida na mineração de Bitcoin. Se o hashrate começar a aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para que o tempo médio necessário para minerar um bloco seja de aproximadamente 10 minutos. Se vários mineradores decidirem parar de minerar, resultando em uma queda significativa do hashrate, a dificuldade de mineração será ajustada para facilitar temporariamente o cálculo ( até que o tempo médio de formação de blocos volte a 10 minutos ).
É importante destacar que os mineiros não precisam procurar colisões porque há vários hashes que podem gerar como saída válida ( começando com uma certa quantidade de zeros ). Portanto, existem múltiplas soluções possíveis para um bloco determinado, e os mineiros devem encontrar apenas uma delas, de acordo com um limiar determinado pela dificuldade da mineração.
Dado que a mineração de Bitcoin é uma tarefa dispendiosa, os mineradores não têm incentivos para enganar o sistema, uma vez que isso resultaria em perdas financeiras significativas. Consequentemente, quanto mais mineradores se juntarem à blockchain, mais grande e robusta ela se tornará.
Conclusão
É indubitável que as funções hash são uma das ferramentas fundamentais na informática, especialmente ao trabalhar com grandes volumes de dados. Quando combinadas com a criptografia, os algoritmos hash revelam-se extremamente úteis, pois fornecem segurança e autenticação de diversas formas. Portanto, as funções hash criptográficas são vitais para quase todas as redes de criptomoedas, e compreender suas propriedades e mecanismos de funcionamento é certamente valioso para qualquer pessoa interessada na tecnologia blockchain.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
O poder do hash no mundo das moedas digitais
A hash é um processo fundamental no âmbito das moedas criptográficas que transforma dados de qualquer tamanho em resultados de comprimento fixo. Este processo é realizado através de fórmulas matemáticas conhecidas como funções hash, implementadas como algoritmos.
Embora nem todas as funções hash envolvam criptografia, as chamadas funções hash criptográficas são essenciais no ecossistema das moedas. Graças a elas, as blockchains e outros sistemas descentralizados alcançam níveis significativos de integridade e segurança de dados.
As funções hash, tanto as convencionais como as criptográficas, são deterministas. Isto significa que, enquanto os dados de entrada não mudarem, o algoritmo hash produzirá sempre o mesmo resultado, também conhecido como digest ou hash.
Os algoritmos de hash utilizados em criptomoedas costumam ser projetados como funções unidirecionais, o que implica que não podem ser revertidos sem uma quantidade considerável de tempo e recursos computacionais. Em outras palavras, é relativamente simples gerar uma saída a partir de uma entrada, mas extremamente difícil fazer o contrário. Geralmente, quanto mais complicado é encontrar a entrada, mais seguro se considera o algoritmo hash.
Funcionamento de uma função hash
Diferentes funções hash produzem resultados de diferentes comprimentos, mas os possíveis tamanhos de saída de cada algoritmo hash são sempre constantes. Por exemplo, o algoritmo SHA-256 só pode gerar resultados de 256 bits, enquanto o SHA-1 sempre produzirá um digest de 160 bits.
Para ilustrar isso, vamos passar as palavras "Gate" e "Gate" através do algoritmo hash SHA-256 ( utilizado no Bitcoin ).
SHA-256
Entrada
Saída (256 bits)
Gate
7f98b5c76e1f90c0e51e5947eae545f3b6f4b4736c774c504d7e6741f5070861
Gate
e77b9a9ae9e30b0dbdb6f510a264ef9de781501d7b6b92ae89eb059c5ab743a0
Note que uma pequena alteração ( a letra maiúscula inicial ) resultou em um valor hash completamente diferente. No entanto, como usamos SHA-256, as saídas sempre terão um tamanho fixo de 256 bits ( ou 64 caracteres ) independentemente do tamanho da entrada. Além disso, não importa quantas vezes executemos as duas palavras através do algoritmo, as duas saídas permanecerão constantes.
Se passarmos as mesmas entradas através do algoritmo hash SHA-1, obtemos os seguintes resultados:
SHA-1
Entrada
Saída (160 bits)
Gate
96a296d224f285c67bee93c30f8a309157f0daa7
Gate
5f42c325eef7e85610308428b407748b77d8c98e
É interessante notar que SHA significa Secure Hash Algorithms (Algoritmos de Hash Seguros). É um conjunto de funções hash criptográficas que inclui os algoritmos SHA-0 e SHA-1, assim como as famílias SHA-2 e SHA-3. SHA-256 faz parte da família SHA-2, junto com SHA-512 e outras variantes. Atualmente, apenas as famílias SHA-2 e SHA-3 são consideradas seguras.
Importância desta tecnologia
As funções hash convencionais têm uma ampla gama de aplicações, incluindo pesquisas em bases de dados, análise de arquivos grandes e gestão de informação. Por outro lado, as funções hash criptográficas são utilizadas extensivamente em aplicações de segurança da informação, como autenticação de mensagens e geração de impressões digitais. No contexto do Bitcoin, as funções hash criptográficas são uma parte integral do processo de mineração e também desempenham um papel crucial na geração de novos endereços e chaves.
O verdadeiro potencial do hashing revela-se ao trabalhar com grandes volumes de informação. Por exemplo, é possível executar um arquivo extenso ou um conjunto de dados através de uma função hash e depois utilizar os seus resultados para verificar rapidamente a precisão e integridade dos dados. Isto é viável devido à natureza determinista das funções hash: a entrada produz sempre uma saída comprimida e simplificada (o hash). Este método elimina a necessidade de armazenar e "memorizar" grandes quantidades de dados.
O hashing é particularmente útil no contexto da tecnologia blockchain. A cadeia de blocos do Bitcoin envolve múltiplas operações relacionadas com o hashing, a maioria das quais é realizada durante o processo de mineração. De facto, quase todos os protocolos de criptomoedas dependem do hashing para ligar e agrupar transações em blocos e para criar ligações criptográficas entre cada bloco, formando assim uma cadeia de blocos.
Funções hash criptográficas
Uma função hash que emprega técnicas criptográficas pode ser definida como uma função hash criptográfica. Em geral, decifrar uma função hash criptográfica requer inúmeras tentativas de força bruta. Para "reverter" uma função hash criptográfica, é necessário selecionar entradas através de tentativa e erro até obter uma saída adequada. No entanto, também existe a possibilidade de que diferentes entradas produzam o mesmo resultado, nesse caso ocorre uma "colisão".
Tecnicamente, uma função hash criptográfica deve cumprir três propriedades para ser considerada segura. Podemos descrevê-las como: resistência a colisões, resistência à pré-imagem e resistência à segunda pré-imagem.
Antes de descrever cada propriedade, resumamos a sua lógica em três frases breves:
Resistência a colisões: impossibilidade de encontrar duas entradas diferentes que produzam o mesmo hash.
Resistência à pré-imagem: incapacidade de "reverter" a função hash ( encontrar a entrada a partir de uma saída dada ).
Resistência à segunda pré-imagem: impossibilidade de encontrar uma segunda entrada que tenha o mesmo hash que a primeira.
Resistência a colisões
Como mencionado anteriormente, uma colisão ocorre quando diferentes entradas produzem o mesmo hash. A função hash é considerada resistente a colisões até que alguém descubra tal colisão. É importante notar que sempre existirão colisões para qualquer função hash devido ao número infinito de entradas e ao número finito de saídas.
Portanto, uma função hash é resistente a colisões quando a probabilidade de detectar uma colisão é tão baixa que exigiria milhões de anos de cálculo. Por essa razão, embora não existam funções hash livres de colisões, algumas são tão robustas que podem ser consideradas estáveis (por exemplo, SHA-256).
Entre os diferentes algoritmos SHA, as famílias SHA-0 e SHA-1 já não são consideradas seguras porque foram detectadas colisões. Atualmente, apenas as famílias SHA-2 e SHA-3 são consideradas resistentes a colisões.
Resistência à pré-imagem
Esta propriedade está estreitamente relacionada com o conceito de funções unidireccionais. Uma função hash é considerada resistente à pré-imagem sempre que exista uma probabilidade muito baixa de que alguém consiga encontrar a entrada utilizando a saída gerada.
Note que esta propriedade é diferente da anterior porque o atacante precisa adivinhar a entrada com base em uma saída específica. A colisão, por outro lado, ocorre quando alguém encontra duas entradas diferentes que produzem a mesma saída, independentemente de qual entrada em particular foi utilizada.
A propriedade de resistência à pré-imagem é valiosa para a segurança dos dados, uma vez que um simples hash de uma mensagem pode demonstrar a sua autenticidade sem a necessidade de revelar informações adicionais. Na prática, muitos fornecedores de serviços e aplicações web armazenam e utilizam hashes gerados a partir de senhas em vez de as utilizarem em formato de texto plano.
Resistência à segunda pré-imagem
Este tipo de resistência encontra-se entre as duas propriedades anteriores. O ataque de segunda pré-imagem consiste em encontrar uma entrada específica com a qual seja possível gerar uma saída que já foi produzida utilizando outra entrada conhecida previamente.
Em outras palavras, um ataque de segunda pré-imagem implica a detecção de colisões, mas em vez de encontrar duas entradas aleatórias que gerem o mesmo hash, o ataque tem como objetivo encontrar uma entrada que possa reproduzir um hash que já foi gerado por outra entrada.
Portanto, qualquer função hash que seja resistente a colisões também o é ao ataque de segunda pré-imagem, já que este último sempre requer uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem em uma função resistente a colisões, uma vez que isso implica buscar uma entrada para uma saída dada.
Mineração
Existem numerosos passos na mineração de Bitcoin que são realizados através de funções hash. Estes incluem a verificação de saldos, a ligação de entradas e saídas de transações, e a combinação de todas as transações em um bloco para formar uma árvore de Merkle. Mas uma das principais razões pelas quais a blockchain de Bitcoin é segura é que os mineiros devem realizar o máximo possível de operações de hash para finalmente encontrar a solução correta para o próximo bloco.
Um minerador deve utilizar diversas entradas ao gerar um hash para o seu bloco candidato. O bloco só poderá ser verificado se a saída gerada corretamente na forma de hash começar com um certo número de zeros. A quantidade de zeros determina a dificuldade da mineração e varia de acordo com o hashrate da rede.
Neste contexto, o hashrate é uma medida da potência computacional que é investida na mineração de Bitcoin. Se o hashrate começar a aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para que o tempo médio necessário para minerar um bloco seja de aproximadamente 10 minutos. Se vários mineradores decidirem parar de minerar, resultando em uma queda significativa do hashrate, a dificuldade de mineração será ajustada para facilitar temporariamente o cálculo ( até que o tempo médio de formação de blocos volte a 10 minutos ).
É importante destacar que os mineiros não precisam procurar colisões porque há vários hashes que podem gerar como saída válida ( começando com uma certa quantidade de zeros ). Portanto, existem múltiplas soluções possíveis para um bloco determinado, e os mineiros devem encontrar apenas uma delas, de acordo com um limiar determinado pela dificuldade da mineração.
Dado que a mineração de Bitcoin é uma tarefa dispendiosa, os mineradores não têm incentivos para enganar o sistema, uma vez que isso resultaria em perdas financeiras significativas. Consequentemente, quanto mais mineradores se juntarem à blockchain, mais grande e robusta ela se tornará.
Conclusão
É indubitável que as funções hash são uma das ferramentas fundamentais na informática, especialmente ao trabalhar com grandes volumes de dados. Quando combinadas com a criptografia, os algoritmos hash revelam-se extremamente úteis, pois fornecem segurança e autenticação de diversas formas. Portanto, as funções hash criptográficas são vitais para quase todas as redes de criptomoedas, e compreender suas propriedades e mecanismos de funcionamento é certamente valioso para qualquer pessoa interessada na tecnologia blockchain.