Esta semana vamos continuar com a nossa série de artigos para compreender melhor as tecnologias que estão na base das criptomoedas, falando sobre o “hashing”.
O hashing refere-se ao processo de geração de uma saída (output) de tamanho fixo a partir de uma entrada (input) de tamanho variável. Isto é feito através do uso de fórmulas matemáticas conhecidas como “funções hash” e é um processo importante para compreender melhor como funcionam as criptomoedas.
Embora nem todas as funções hash envolvam o uso de criptografia, as chamadas funções hash criptográficas são componentes fundamentais das criptomoedas. Graças a elas, blockchains e outros sistemas distribuídos são capazes de alcançar níveis significativos de integridade de dados e segurança.
Tanto as funções hash convencionais como as criptográficas são determinísticas. Ser determinístico significa que enquanto o input não mudar, o algoritmo de hashing produzirá sempre o mesmo output (também conhecido como “digest” ou simplesmente “hash”).
Normalmente, os algoritmos de hashing das criptomoedas são projetados como funções de sentido único, o que significa que não podem ser facilmente revertidas sem empregar grandes quantidades de tempo e de recursos computacionais. Por outras palavras, é muito fácil criar o output a partir do input, mas relativamente difícil ir na direção oposta (gerar o input apenas a partir do output). De um modo geral, quanto mais difícil for encontrar o input, mais seguro será o algoritmo de hashing.
Como funciona uma função hash?
Diferentes funções hash produzirão outputs de tamanhos diferentes, mas os possíveis tamanhos de output para cada algoritmo de hashing são sempre constantes. Por exemplo, o algoritmo SHA-256 só pode produzir outputs de 256 bits, enquanto o SHA-1 irá sempre gerar um digest de 160 bits.
Para ilustrar, vejamos o que acontece às palavras “Binance” e “binance” quando processadas através do algoritmo de hash SHA-256 (o qual é usado na Bitcoin).
SHA-256 | |
Input | Output (256 bits) |
Binance | f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 |
binance | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 |
Note-se que apenas uma pequena alteração (na primeira letra maiúscula) resultou num valor de hash totalmente diferente. Mas, como estamos a usar o SHA-256, os outputs sempre terão um tamanho fixo de 256 bits (ou 64 caracteres) – independentemente do tamanho do input.
Além disso, não importa quantas vezes executamos as duas palavras através do algoritmo, os dois outputs permanecerão constantes. Se executarmos os mesmos inputs através do algoritmo de hash SHA-1, teríamos os seguintes resultados:
SHA-1 | |
Input | Output (160 bits) |
Binance | 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 |
binance | e58605c14a76ff98679322cca0eae7b3c4e08936 |
O acrónimo SHA significa Secure Hash Algorithms (Algoritmos de Hash Seguros). Refere-se a um conjunto de funções hash criptográficas que incluem os algoritmos SHA-0 e SHA-1 em conjunto com os grupos SHA-2 e SHA-3. O SHA-256 faz parte do grupo SHA-2, juntamente com o SHA-512 e outras variantes. Atualmente, apenas os grupos SHA-2 e SHA-3 são considerados seguros.
Por que são importantes?
As funções hash convencionais têm uma ampla variedade de cenários de utilização, incluindo pesquisas de bases de dados, análises de ficheiros grandes e gestão de dados. Por outro lado, as funções hash criptográficas são amplamente usadas em aplicações de segurança da informação, como autenticação de mensagens e “digital fingerprinting”. Quando se trata da Bitcoin, as funções hash criptográficas são 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 está na capacidade de lidar com enormes quantidades de informação. Por exemplo, é possível executar um ficheiro grande ou conjunto de dados através de uma função hash e, em seguida, usar seu output para rapidamente verificar a precisão e integridade dos dados. Isso é possível devido à natureza determinística das funções hash: o input resultará sempre num output simplificado e condensado (hash). Esta técnica descarta a necessidade de “lembrar” e armazenar grandes quantidades de dados.
O hashing é particularmente útil no contexto da tecnologia blockchain. A blockchain da Bitcoin tem várias operações que envolvem hashing, a maioria delas no processo de mineração. Na verdade, quase todos os protocolos de criptomoedas dependem de hashing para vincular e condensar grupos de transações em blocos e também para produzir vínculos criptográficos entre cada bloco, criando efetivamente uma blockchain.
Funções hash criptográficas
Conforme explicado anteriormente, uma função hash que emprega técnicas criptográficas pode ser definida como uma função hash criptográfica. Em geral, romper uma função hash criptográfica requer milhares de tentativas forçadas (“brute-force attempts”). Para alguém conseguir “reverter” uma função hash criptográfica, seria necessário adivinhar qual foi o input através de tentativa e erro até conseguir finalmente gerar o output correspondente. No entanto, também existe a possibilidade de diferentes inputs produzirem exatamente o mesmo output. Nesse caso ocorre o que se denomina como uma “colisão”.
Tecnicamente, uma função hash criptográfica precisa apresentar três propriedades para ser considerada efetivamente segura. Essas propriedades podem ser denominadas como “resistência à colisão”, “resistência à pré-imagem” e “resistência à segunda pré-imagem”:
- Resistência à colisão: significa que é inviável encontrar dois inputs distintos que produzam um mesmo hash como output.
- Resistência à pré-imagem: significa que é inviável “reverter” a função hash (encontrar o input a partir de um determinado output).
- Resistência à segunda pré-imagem: significa que é inviável encontrar qualquer segundo input que colida com um input específico.
Mineração
Há muitos passos na mineração da Bitcoin que envolvem funções hash, como é o caso da verificação de saldos, vínculos de inputs e outputs de transações e hashing de transações dentro de um bloco para formar a chamada “Árvore de Merkle”. Mas um dos principais fatores que faz com que a blockchain da Bitcoin seja segura é o facto de os mineradores precisarem de realizar milhares de operações de hashing para finalmente encontrar uma solução válida para o próximo bloco.
Mais especificamente, um minerador teria que tentar vários inputs diferentes ao criar um valor de hash para o seu bloco candidato. E, na verdade, eles só serão capazes de validar o seu bloco se gerarem um hash de saída (output) que começa 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 taxa de hash representa a quantidade de potência computacional que está a ser investida na mineração de Bitcoin. Se a taxa de hash 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 dos 10 minutos. Em contrapartida, se vários mineradores decidirem parar com a mineração, fazendo com que a taxa de hash caia significativamente, a dificuldade de mineração será ajustada, tornando o processo de minerar mais fácil (até que o tempo médio por bloco volte para os 10 minutos).
Note-se que mineradores não precisam de encontrar colisões porque existem múltiplas hashes que podem gerar como output válido (a partir de um certo número de zeros). Portanto, existem várias 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 de alto custo, os mineradores não têm motivos para enganar o sistema, já que isso conduziria a perdas financeiras significativas. Quanto mais mineradores entrarem numa blockchain, maior e mais forte ela fica.
Considerações finais sobre o hashing
Não há dúvidas de que as funções hash são ferramentas essenciais na ciência da computação, especialmente quando se trata de enormes quantidades de dados. Quando combinados com criptografia, os algoritmos de hashing podem ser muito versáteis, oferecendo segurança e autenticação de muitas maneiras diferentes.
Sendo assim, as funções hash criptográficas são vitais para quase todas as redes de criptomoedas, pelo que entender as suas propriedades e mecanismos de funcionamento é certamente útil para qualquer pessoa interessada na tecnologia blockchain.
Fonte: Binance Academy
Siga toda a atualidade tecnológica no TecheNet através do Facebook, Google News e Twitter. Agora, temos também um canal dedicado no Telegram, onde poderá receber todas as novidades em primeira mão.
Afinal, quem é Satoshi Nakamoto?
No segundo de uma série de artigos adaptados a partir de originais criados pela Binance Academy (a Binance é a maior plataforma mundial de negociação de criptomoeda), vamos abordar um dos “mistérios” da Bitcoin: a identidade de Satashi Nakamoto, o pseudónimo do seu misterioso criador.
Satoshi Nakamoto é o pseudónimo do responsável pelo desenvolvimento do Bitcoin e pela autoria do whitepaper original que lhe deu origem. Há muita especulação em torno da pergunta “quem é Satoshi Nakamoto?” e da sua verdadeira identidade. Existem até pessoas que alegam, falsamente, ser o próprio Satoshi Nakamoto
Outros artigos interessantes: