A hash é o processo de gerar uma saída de tamanho fixo a partir de uma entrada de tamanho variável. Isso é realizado através do uso de fórmulas matemáticas conhecidas como funções hash ( implementadas como algoritmos de hash ).
Embora nem todas as funções hash envolvam criptografia, as funções hash criptográficas são centrais para as criptomoedas. Graças a elas, as blockchains e outros sistemas distribuídos podem alcançar níveis significativos de integridade e segurança dos dados.
Tanto as funções de hash convencionais quanto as criptográficas são determinísticas. Ser determinístico significa que, enquanto a entrada permanecer inalterada, o algoritmo de hash sempre produzirá a mesma saída ( também conhecida como digest ou hash ).
Normalmente, os algoritmos de hash de criptomoeda são projetados como funções unidirecionais, o que significa que não podem ser facilmente revertidos sem vastas quantidades de tempo e recursos de computação. Em outras palavras, é bastante fácil criar a saída a partir da entrada, mas relativamente difícil ir na direção oposta ( gerar a entrada apenas a partir da saída ). Geralmente, quanto mais difícil for encontrar a entrada, mais segura é considerada a função de hash.
Como Funciona uma Função de Hash?
Diferentes funções de hash produzirão saídas de tamanhos variados, mas os tamanhos de saída possíveis para cada algoritmo de hash são sempre constantes. Por exemplo, o algoritmo SHA-256 pode produzir apenas saídas de 256 bits, enquanto o SHA-1 gerará sempre um digest de 160 bits.
Para ilustrar, vamos passar as palavras "Gate" e "Gate" pelo algoritmo de hash SHA-256 (o utilizado no Bitcoin).
Note que uma pequena alteração (no caso da primeira letra) resultou em um valor de hash completamente diferente. Mas como estamos usando SHA-256, as saídas terão sempre 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 no algoritmo, as duas saídas permanecerão constantes.
Por outro lado, se passarmos as mesmas entradas pelo algoritmo de hash SHA-1, obteremos os seguintes resultados:
SHA-1
Entrada
Output (160 bits)
Gate
b3f40a0b9ca8d0ea445fc6a9aa659879283ca5bf
Gate
a3ac20fb7ca4d1b49ce3db98e7cbc9ccbe038bc1
Notavelmente, SHA significa Algoritmos de Hash Seguros. Refere-se a um conjunto de funções de hash criptográficas que incluem os algoritmos SHA-0 e SHA-1, juntamente com os grupos SHA-2 e SHA-3. SHA-256 é parte do grupo SHA-2, juntamente com SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.
Por Que Eles São Importantes?
As funções hash convencionais têm uma ampla variedade de casos de uso, incluindo pesquisas em bases de dados, análise de arquivos grandes e gestão de dados. Por outro lado, as funções hash criptográficas são amplamente utilizadas em aplicações de segurança da informação, como autenticação de mensagens e impressão digital. No que diz respeito ao Bitcoin, as funções hash criptográficas são uma parte essencial do processo de mineração e também desempenham um papel na geração de novos endereços e chaves.
O verdadeiro poder do hashing emerge ao lidar com enormes quantidades de informação. Por exemplo, pode-se passar um grande arquivo ou conjunto de dados por uma função de hash e depois usar sua saída para verificar rapidamente a precisão e a integridade dos dados. Isto é possível devido à natureza determinística das funções de hash: a entrada sempre resultará em uma saída simplificada e condensada (hash). Tal técnica elimina a necessidade de armazenar e "lembrar" grandes quantidades de dados.
A hash é particularmente útil no contexto da tecnologia blockchain. A blockchain do Bitcoin tem várias operações que envolvem hash, a maioria delas dentro do processo de mineração. Na verdade, quase todos os protocolos de criptomoeda dependem de hash para vincular e condensar grupos de transações em blocos, e também para produzir ligações criptográficas entre cada bloco, criando efetivamente uma blockchain.
Funções de Hash Criptográficas
Novamente, uma função hash que implementa técnicas criptográficas pode ser definida como uma função hash criptográfica. Geralmente, quebrar uma função hash criptográfica requer um número infinito de tentativas de força bruta. Para que alguém "inverta" uma função hash criptográfica, precisaria adivinhar qual era a entrada por tentativa e erro até que a saída correspondente fosse produzida. No entanto, também existe a possibilidade de entradas diferentes produzirem exatamente a mesma saída, caso em que ocorre uma "colisão".
Tecnicamente, uma função de hash criptográfica precisa seguir três propriedades para ser considerada efetivamente segura. Podemos descrevê-las como resistência a colisões, resistência a pré-imagens e resistência a segunda pré-imagem.
Antes de discutir cada propriedade, vamos resumir sua lógica em três frases curtas.
Resistência a colisões: inviável encontrar duas entradas distintas que produzam o mesmo hash como saída.
Resistência à pré-imagem: inviável "reverter" a função hash ( para encontrar a entrada de uma saída dada ).
Resistência a segunda pré-imagem: inviável encontrar qualquer segunda entrada que colida com uma entrada especificada.
Resistência à Colisão
Como mencionado, uma colisão ocorre quando entradas diferentes produzem exatamente o mesmo hash. Assim, uma função hash é considerada resistente a colisões até que alguém encontre uma colisão. Note que sempre haverá colisões para qualquer função hash porque as entradas possíveis são infinitas, enquanto as saídas possíveis são finitas.
Em outras palavras, uma função hash é resistente a colisões quando a possibilidade de encontrar uma colisão é tão baixa que exigiria milhões de anos de cálculos. Portanto, embora não existam funções hash livres de colisões, algumas delas são suficientemente fortes para serem consideradas resistentes (por exemplo, SHA-256).
Entre os vários algoritmos SHA, os grupos SHA-0 e SHA-1 já não são seguros porque foram encontradas colisões. Atualmente, os grupos SHA-2 e SHA-3 são considerados resistentes a colisões.
Resistência a Preimagem
A propriedade de resistência à pré-imagem está relacionada ao conceito de funções unidirecionais. Uma função hash é considerada resistente à pré-imagem quando há uma probabilidade muito baixa de alguém encontrar a entrada que gerou uma saída específica.
Note que esta propriedade é diferente da anterior porque um atacante tentaria adivinhar qual era a entrada ao observar uma determinada saída. Uma colisão, por outro lado, ocorre quando alguém encontra duas entradas diferentes que geram a mesma saída, mas não importa quais entradas foram utilizadas.
A propriedade de resistência à pré-imagem é valiosa para a proteção de dados, pois um hash simples de uma mensagem pode provar sua autenticidade, sem a necessidade de divulgar a informação. Na prática, muitos provedores de serviços e aplicações web armazenam e usam hashes gerados a partir de senhas em vez de senhas em texto simples.
Resistência à Segunda Imagem
Para simplificar, podemos dizer que a resistência a segundas pré-imagens está em algum lugar 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 que já conhece.
Em outras palavras, um ataque de segunda pré-imagem envolve encontrar uma colisão, mas em vez de procurar por duas entradas aleatórias que geram o mesmo hash, eles procuram por uma entrada que gera o mesmo hash que foi gerado por outra entrada específica.
Portanto, qualquer função hash resistente a colisões também é resistente a ataques de segunda pré-imagem, uma vez que estes sempre implicarão uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem em uma função resistente a colisões, pois isso envolve encontrar uma única entrada a partir de uma única saída.
Mineração
Existem muitos passos na mineração de Bitcoin que envolvem funções de hash, como verificar saldos, ligar entradas e saídas de transações, e fazer hash de transações dentro de um bloco para formar uma árvore de Merkle. Mas uma das principais razões pelas quais a blockchain do Bitcoin é segura é o fato de que os mineradores precisam realizar uma infinidade de operações de hashing para eventualmente encontrar uma solução válida para o próximo bloco.
Especificamente, um minerador precisa tentar várias entradas diferentes ao criar um valor de hash para o seu bloco candidato. Em essência, eles só poderão validar o seu bloco se gerarem um hash de saída que comece com um certo número de zeros. O número de zeros é o que determina a dificuldade de mineração e varia de acordo com a taxa de hash dedicada à rede.
Neste caso, a hash rate representa quanta potência computacional está sendo investida na mineração de Bitcoin. Se a hash rate da rede aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para que o tempo médio necessário para minerar um bloco permaneça próximo de 10 minutos. Por outro lado, se vários mineradores decidirem parar de minerar, fazendo com que a hash rate caia significativamente, a dificuldade de mineração será ajustada, facilitando a mineração (até que o tempo médio do bloco retorne a 10 minutos).
Note que os mineradores não precisam encontrar colisões porque existem vários hashes que podem gerar como saída válida ( começando com um certo número de zeros ). Portanto, existem múltiplas soluções possíveis para um determinado bloco, e os mineradores só precisam encontrar uma delas – de acordo com o limite determinado pela dificuldade de mineração.
Como a mineração de Bitcoin é uma tarefa cara, os mineradores não têm razões para enganar o sistema, pois isso levaria a perdas financeiras significativas. Quanto mais mineradores aderem a uma blockchain, maior e mais forte ela se torna.
Pensamentos Finais
Não há dúvida de que as funções hash são ferramentas essenciais em ciência da computação, especialmente quando se trata de grandes quantidades de dados. Quando combinados com a criptografia, os algoritmos hash podem ser bastante versáteis, oferecendo segurança e autenticação de várias maneiras diferentes. Assim, as funções hash criptográficas são vitais para quase todas as redes de criptomoeda, portanto, entender suas propriedades e mecanismos de operação é certamente útil para qualquer pessoa interessada em 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 que é Hashing?
A hash é o processo de gerar uma saída de tamanho fixo a partir de uma entrada de tamanho variável. Isso é realizado através do uso de fórmulas matemáticas conhecidas como funções hash ( implementadas como algoritmos de hash ).
Embora nem todas as funções hash envolvam criptografia, as funções hash criptográficas são centrais para as criptomoedas. Graças a elas, as blockchains e outros sistemas distribuídos podem alcançar níveis significativos de integridade e segurança dos dados.
Tanto as funções de hash convencionais quanto as criptográficas são determinísticas. Ser determinístico significa que, enquanto a entrada permanecer inalterada, o algoritmo de hash sempre produzirá a mesma saída ( também conhecida como digest ou hash ).
Normalmente, os algoritmos de hash de criptomoeda são projetados como funções unidirecionais, o que significa que não podem ser facilmente revertidos sem vastas quantidades de tempo e recursos de computação. Em outras palavras, é bastante fácil criar a saída a partir da entrada, mas relativamente difícil ir na direção oposta ( gerar a entrada apenas a partir da saída ). Geralmente, quanto mais difícil for encontrar a entrada, mais segura é considerada a função de hash.
Como Funciona uma Função de Hash?
Diferentes funções de hash produzirão saídas de tamanhos variados, mas os tamanhos de saída possíveis para cada algoritmo de hash são sempre constantes. Por exemplo, o algoritmo SHA-256 pode produzir apenas saídas de 256 bits, enquanto o SHA-1 gerará sempre um digest de 160 bits.
Para ilustrar, vamos passar as palavras "Gate" e "Gate" pelo algoritmo de hash SHA-256 (o utilizado no Bitcoin).
SHA-256
Entrada
Output (256 bits)
Gate
df5aac67efed6b70d4f56eab7d003e73a36910fd5b5eb0e493536afdebea7a42
Gate
c19edf1e2b201d93c6ba5f2a565c22b0a3b8f5604ca4c59eecb2bc2c3c1ec247
Note que uma pequena alteração (no caso da primeira letra) resultou em um valor de hash completamente diferente. Mas como estamos usando SHA-256, as saídas terão sempre 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 no algoritmo, as duas saídas permanecerão constantes.
Por outro lado, se passarmos as mesmas entradas pelo algoritmo de hash SHA-1, obteremos os seguintes resultados:
SHA-1
Entrada
Output (160 bits)
Gate
b3f40a0b9ca8d0ea445fc6a9aa659879283ca5bf
Gate
a3ac20fb7ca4d1b49ce3db98e7cbc9ccbe038bc1
Notavelmente, SHA significa Algoritmos de Hash Seguros. Refere-se a um conjunto de funções de hash criptográficas que incluem os algoritmos SHA-0 e SHA-1, juntamente com os grupos SHA-2 e SHA-3. SHA-256 é parte do grupo SHA-2, juntamente com SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.
Por Que Eles São Importantes?
As funções hash convencionais têm uma ampla variedade de casos de uso, incluindo pesquisas em bases de dados, análise de arquivos grandes e gestão de dados. Por outro lado, as funções hash criptográficas são amplamente utilizadas em aplicações de segurança da informação, como autenticação de mensagens e impressão digital. No que diz respeito ao Bitcoin, as funções hash criptográficas são uma parte essencial do processo de mineração e também desempenham um papel na geração de novos endereços e chaves.
O verdadeiro poder do hashing emerge ao lidar com enormes quantidades de informação. Por exemplo, pode-se passar um grande arquivo ou conjunto de dados por uma função de hash e depois usar sua saída para verificar rapidamente a precisão e a integridade dos dados. Isto é possível devido à natureza determinística das funções de hash: a entrada sempre resultará em uma saída simplificada e condensada (hash). Tal técnica elimina a necessidade de armazenar e "lembrar" grandes quantidades de dados.
A hash é particularmente útil no contexto da tecnologia blockchain. A blockchain do Bitcoin tem várias operações que envolvem hash, a maioria delas dentro do processo de mineração. Na verdade, quase todos os protocolos de criptomoeda dependem de hash para vincular e condensar grupos de transações em blocos, e também para produzir ligações criptográficas entre cada bloco, criando efetivamente uma blockchain.
Funções de Hash Criptográficas
Novamente, uma função hash que implementa técnicas criptográficas pode ser definida como uma função hash criptográfica. Geralmente, quebrar uma função hash criptográfica requer um número infinito de tentativas de força bruta. Para que alguém "inverta" uma função hash criptográfica, precisaria adivinhar qual era a entrada por tentativa e erro até que a saída correspondente fosse produzida. No entanto, também existe a possibilidade de entradas diferentes produzirem exatamente a mesma saída, caso em que ocorre uma "colisão".
Tecnicamente, uma função de hash criptográfica precisa seguir três propriedades para ser considerada efetivamente segura. Podemos descrevê-las como resistência a colisões, resistência a pré-imagens e resistência a segunda pré-imagem.
Antes de discutir cada propriedade, vamos resumir sua lógica em três frases curtas.
Resistência a colisões: inviável encontrar duas entradas distintas que produzam o mesmo hash como saída.
Resistência à pré-imagem: inviável "reverter" a função hash ( para encontrar a entrada de uma saída dada ).
Resistência a segunda pré-imagem: inviável encontrar qualquer segunda entrada que colida com uma entrada especificada.
Resistência à Colisão
Como mencionado, uma colisão ocorre quando entradas diferentes produzem exatamente o mesmo hash. Assim, uma função hash é considerada resistente a colisões até que alguém encontre uma colisão. Note que sempre haverá colisões para qualquer função hash porque as entradas possíveis são infinitas, enquanto as saídas possíveis são finitas.
Em outras palavras, uma função hash é resistente a colisões quando a possibilidade de encontrar uma colisão é tão baixa que exigiria milhões de anos de cálculos. Portanto, embora não existam funções hash livres de colisões, algumas delas são suficientemente fortes para serem consideradas resistentes (por exemplo, SHA-256).
Entre os vários algoritmos SHA, os grupos SHA-0 e SHA-1 já não são seguros porque foram encontradas colisões. Atualmente, os grupos SHA-2 e SHA-3 são considerados resistentes a colisões.
Resistência a Preimagem
A propriedade de resistência à pré-imagem está relacionada ao conceito de funções unidirecionais. Uma função hash é considerada resistente à pré-imagem quando há uma probabilidade muito baixa de alguém encontrar a entrada que gerou uma saída específica.
Note que esta propriedade é diferente da anterior porque um atacante tentaria adivinhar qual era a entrada ao observar uma determinada saída. Uma colisão, por outro lado, ocorre quando alguém encontra duas entradas diferentes que geram a mesma saída, mas não importa quais entradas foram utilizadas.
A propriedade de resistência à pré-imagem é valiosa para a proteção de dados, pois um hash simples de uma mensagem pode provar sua autenticidade, sem a necessidade de divulgar a informação. Na prática, muitos provedores de serviços e aplicações web armazenam e usam hashes gerados a partir de senhas em vez de senhas em texto simples.
Resistência à Segunda Imagem
Para simplificar, podemos dizer que a resistência a segundas pré-imagens está em algum lugar 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 que já conhece.
Em outras palavras, um ataque de segunda pré-imagem envolve encontrar uma colisão, mas em vez de procurar por duas entradas aleatórias que geram o mesmo hash, eles procuram por uma entrada que gera o mesmo hash que foi gerado por outra entrada específica.
Portanto, qualquer função hash resistente a colisões também é resistente a ataques de segunda pré-imagem, uma vez que estes sempre implicarão uma colisão. No entanto, ainda é possível realizar um ataque de pré-imagem em uma função resistente a colisões, pois isso envolve encontrar uma única entrada a partir de uma única saída.
Mineração
Existem muitos passos na mineração de Bitcoin que envolvem funções de hash, como verificar saldos, ligar entradas e saídas de transações, e fazer hash de transações dentro de um bloco para formar uma árvore de Merkle. Mas uma das principais razões pelas quais a blockchain do Bitcoin é segura é o fato de que os mineradores precisam realizar uma infinidade de operações de hashing para eventualmente encontrar uma solução válida para o próximo bloco.
Especificamente, um minerador precisa tentar várias entradas diferentes ao criar um valor de hash para o seu bloco candidato. Em essência, eles só poderão validar o seu bloco se gerarem um hash de saída que comece com um certo número de zeros. O número de zeros é o que determina a dificuldade de mineração e varia de acordo com a taxa de hash dedicada à rede.
Neste caso, a hash rate representa quanta potência computacional está sendo investida na mineração de Bitcoin. Se a hash rate da rede aumentar, o protocolo Bitcoin ajustará automaticamente a dificuldade de mineração para que o tempo médio necessário para minerar um bloco permaneça próximo de 10 minutos. Por outro lado, se vários mineradores decidirem parar de minerar, fazendo com que a hash rate caia significativamente, a dificuldade de mineração será ajustada, facilitando a mineração (até que o tempo médio do bloco retorne a 10 minutos).
Note que os mineradores não precisam encontrar colisões porque existem vários hashes que podem gerar como saída válida ( começando com um certo número de zeros ). Portanto, existem múltiplas soluções possíveis para um determinado bloco, e os mineradores só precisam encontrar uma delas – de acordo com o limite determinado pela dificuldade de mineração.
Como a mineração de Bitcoin é uma tarefa cara, os mineradores não têm razões para enganar o sistema, pois isso levaria a perdas financeiras significativas. Quanto mais mineradores aderem a uma blockchain, maior e mais forte ela se torna.
Pensamentos Finais
Não há dúvida de que as funções hash são ferramentas essenciais em ciência da computação, especialmente quando se trata de grandes quantidades de dados. Quando combinados com a criptografia, os algoritmos hash podem ser bastante versáteis, oferecendo segurança e autenticação de várias maneiras diferentes. Assim, as funções hash criptográficas são vitais para quase todas as redes de criptomoeda, portanto, entender suas propriedades e mecanismos de operação é certamente útil para qualquer pessoa interessada em tecnologia blockchain.