Por: Caique Nobre
Este artigo tem por intuito abordar conceitos básicos sobre criptografia, em virtude de sua crescente utilização em nosso cotidiano e também para facilitar a compreensão da estrutura que alicerça o Bitcoin.
Desde os períodos antigos a criptografia já era usada para proteger mensagens e textos de curiosos e espiões. Sua origem etimológica é derivada das palavras gregas Krypto (Secreto) + Graphie (escrita, registro). Quando combinadas, significam “escrita secreta”.
Naqueles tempos, esse processo era feito manualmente, através da escrita. Hoje, o mesmo processo é feito utilizando algoritmos computacionais. Praticamente todos os sistemas que utilizamos em nosso dia a dia utilizam algum tipo de criptografia para proteger nossos dados, principalmente em aplicativos de conversas online.
Diferenças entre criptografar e descriptografar
Criptografar: Transformar um texto plano em um texto cifrado e incompreensível;
Descriptografar: Consiste no processo inverso, isto é, transformar um texto cifrado em um texto plano e compreensível.
Chaves pública e privada
Em nosso cotidiano existem informações que podemos compartilhar com outras pessoas, caso desejemos manter contato e/ou receber algo. Essas informações públicas podem ser nossos endereços residenciais, número de contato telefônico ou mesmo agência e conta bancária (ou chave PIX). Esses são exemplos de chaves públicas.
No entanto, certas informações são privadas e não podemos simplesmente compartilhar com todas as pessoas, sob o risco de sofrermos algum tipo de ataque. Temos como exemplo as nossas senhas diversas (telefone, notebook, conta bancária etc) e também as chaves físicas, utilizadas para entrar em nossas residências, escritório ou mesmo veículos. Esses exemplos configuram chaves privadas.
Na criptografia, essas chaves são conjunto de dados computacionais.
Funções da Criptografia
As funções da criptografia podem ser melhor memorizadas a partir do mneumônico “PAINT”:
- Privacidade e confidencialidade → Garantir que somente determinada pessoa consiga acessar a informação;
- Autenticação → Provar a identidade de quem está produzindo a informação/ realizou alguma assinatura, bem como autorizar determinada ação;
- Integridade → Assegurar que a informação não foi alterada durante o processo;
- Não repúdio → Impedir a negação de autoria por parte dos autores da informação;
- Transferência de chaves → Permitir que chaves criptográficas (pública e privada) sejam compartilhadas entre remetente e destinatário.
Criptografia Simétrica X Assimétrica
A criptografia simétrica utiliza apenas uma chave para criptografar e descriptografar uma informação, enquanto a assimétrica utiliza duas chaves distintas no processo, cada uma para determinada etapa. O problema da criptografia simétrica é que as duas partes precisam conhecer a chave, aumentando os riscos de exposição caso alguma das partes informe a chave para terceiros, o que comprometeria toda a segurança do processo.
Em 1978 Ralph Merkle desenvolveu um tipo de criptografia que envolvia chaves públicas e privadas. A chave pública serve apenas para criptografar determinada informação, enquanto somente a chave privada pode descriptografar essa informação. É possível que a chave pública seja derivada da chave privada, mas não o contrário.
Se Bob deseja conversar com Alice utilizando esse mecanismo, ele cria a informação e utiliza a chave pública de Alice para criptografá-la. No momento que Alice recebê-la, ela irá utilizar sua chave privada para descriptografá-la.
Funções Hash
Hash → sequência única de letras e números, geradas a partir de um algoritmo de função hash. As funções Hash são uma forma de criptografia unidirecional e sem chave, isto é, a informação criptografada não pode sofrer o caminho inverso e ser descriptografada com o mesmo algoritmo.
O comprimento de um hash nunca varia, sendo composto de letras do alfabeto, números, símbolos matemáticos e sinais de pontuação. É possível comparar dois conjuntos de dados para certificar-se de que eles são os mesmos. Como analogia, podemos dizer que o hash confere uma impressão digital a um documento.
Em resumo, essa impressão digital garante a integridade da informação, pois qualquer mudança nos dados de entrada (input) resultará em mudanças no output (dados de saída), isto é, no hash. Caso não tenha sido feita nenhuma alteração nos dados de entrada (input), o hash (output) sempre irá se repetir. Como analogia, basta imaginar o hash como um leitor biométrico para verificar se a pessoa é realmente quem ela afirma ser.
Qualquer informação pode servir como input para um hash: uma mensagem, um livro ou até mesmo um bloco de transações realizadas na blockchain. Na rede Bitcoin são utilizados os seguintes algoritmos de para geração de hash:
- SHA-256 → “Secure Hash Algorithm” – possui papel fundamental no processo de mineração através do Proof-of-Work.
- RIPEMD-160 → “Race Integrity Primitive Evaluation Message Digest” → Seu papel principal consiste em transformar chaves públicas em endereços de Bitcoin.
Exemplo de hash de um bloco da rede Bitcoin: 0000000000000000000286ecf6feecd54a9584b359599bf954ad2c3778d1c45c
Assinaturas Digitais
Apesar de a principal papel da Hash Function ser garantir a integridade da informação, essa função também é utilizada na rede Bitcoin para realizar assinaturas digitais, garantindo também a autenticidade da informação.
Apenas a chave privada pode realizar a assinatura de uma mensagem. Por sua vez, a assinatura pode ser verificada através da chave pública do usuário, através da Elliptic Curve Digital Signature Algorithm (ECDSA).
Resumidamente, o algoritmo ECDSA permite que os full-nodes, responsáveis pela validação das transações na rede, consigam verificar se o hash das assinaturas corresponde à chave pública de quem enviou a transação e sem a necessidade de conhecer sua chave privada.
Exemplo: suponha que Bob assinou digitalmente uma carta para Alice, criptografando-a com a chave pública de Alice. Caso Evelyn intercepte a mensagem e assine uma nova mensagem, encriptando-a com a mesma chave pública de Alice, esta poderá verificar, através da Elliptic Curve Digital Signature Algorithm (ECDSA), que a assinatura não é a mesma de Bob.
Na rede Bitcoin, se Alice estivesse operando um nó da rede (full-node), ela poderia verificar se determinados bitcoins gastos são de fato de Bob e se sua assinatura combina com sua chave pública e endereço de Bitcoin. Em caso negativo, a transação será rejeitada.
A única forma de alguém negar que alguma mensagem enviada não foi de sua autoria, mesmo que com sua assinatura digital, é afirmar que sua chave privada foi roubada ou que o algoritmo de criptografia foi quebrado.
Por esses motivos devemos tomar muito cuidado com nossas chaves privadas e seus backups, principalmente em virtude de utilizarmos esses dados para acesso a diversas informações sensíveis, como dados e fundos de nossas famílias. Para usuários da rede Bitcoin, o mesmo se aplica ao backup de suas seedphrases.