Bem-vindo a uma nova série: Zero to Zero Knowledge
Nesta série, aprenderemos os fundamentos de uma ampla gama de tecnologias que fazem parte de nossos protocolos de preservação de privacidade.
Hoje começaremos com Hash Functions - uma peça chave da criptografia usada em blockchains. Mais adiante nesta série, abordaremos alguns tópicos que dependem de suas propriedades, aqui está uma cartilha:
As funções de hash aceitam uma entrada de qualquer tamanho e produzem uma saída de comprimento fixo.
Uma mensagem a ser hash = Entrada
O algoritmo que é usado = Função Hash
Saída resultante = valor de hash
Entrada —> Função Hash —> Valor Hash
Vamos começar a entender usando essa ferramenta!
Insira qualquer texto arbitrário🔤para produzir uma saída de comprimento fixo.
Observe como a saída varia dependendo do algoritmo de hash diferente.
Experimente:
Funções hash criptográficas devem possuir essas 3 propriedades:
Unidirecional: Deve ser inviável reverter uma função hash ➡️
Resistente a colisões: duas entradas não devem ser confundidas com a mesma saída ❌
Determinístico: Para qualquer entrada, uma função hash deve sempre dar o mesmo resultado ↕️
Existem várias classes de Funções Hash. Alguns exemplos:
Algoritmo de hash seguro (SHA-3)
Algoritmo de Digestão de Mensagem 5 (MD5)
BLAKE2b - Usado na derivação de chave Zcash
Uma introdução ao BLAKE2 por Zooko:
As verificações de integridade de dados são um exemplo de 'Integrity Hashing'. Eles são usados para gerar somas de verificação em arquivos de dados e fornecer garantia de correção para um usuário.
Uma árvore de hash ou árvore Merkle é composta de ramos e nós de folha que são rotulados com o hash criptográfico de um bloco de dados.
As árvores Merkle são um exemplo de esquema de compromisso criptográfico. A raiz da árvore é vista como um compromisso e os nós de folha provados como parte do compromisso original.
Nas pools blindados Zcash🌿Sapling &🌳Orchard, a árvore de compromisso de notas é usada para verificar se as transações são válidas em relação ao consenso, ocultando perfeitamente o remetente, o destinatário e os valores consumidos.
SHA256 é um exemplo de 'hash de assinatura' usado para impor a imutabilidade de cada bloco na cadeia Bitcoin. Os mineradores usam o hash do bloco anterior + Um hash de todas as transações no bloco atual (hashMerkleRoot) + Timestamp + valor aleatório/dificuldade de rede para novos blocos.
Equihash é o algoritmo de hash usado na mineração Zcash. Também é usado por redes como Komodo & Horizen. Aqui está o Blog Zcash original no Equihash
Para entender melhor os diferentes tipos de funções de hash e seus usos associados, este é um excelente recurso: