Exemplo Web3 - Assinaturas digitais utilizando Python e rede Ethereum

Assinaturas digitais utilizando Python e rede Ethereum

Exemplo Web3 - Assinaturas digitais utilizando Python e rede Ethereum
Implementação e Verificação de Assinaturas Digitais Utilizando Python em rede Ethereum


Resumo

Este artigo apresenta uma implementação prática para a criação e verificação de assinaturas digitais usando a blockchain Ethereum com a ajuda da biblioteca Python web3.py. A assinatura digital é um método fundamental para garantir a autenticidade e integridade dos dados, e sua aplicação em sistemas baseados em blockchain adiciona uma camada adicional de segurança. Este estudo detalha um código Python que demonstra como converter UUIDs em formatos compatíveis com Ethereum, calcular o hash de arquivos, assinar esses hashes e verificar as assinaturas para garantir a integridade dos dados. Além disso, abordamos a instalação do Geth, o cliente oficial da Ethereum.

Exemplo de assinatura de arquivo de texto utilizando a rede Ethereum

1. Introdução

A assinatura digital é uma tecnologia criptográfica que permite a autenticação e a integridade das mensagens. No contexto de blockchain, como a Ethereum, as assinaturas digitais são usadas para verificar a autenticidade das transações e das mensagens. Este artigo descreve um código Python que utiliza a biblioteca web3.py para interagir com a rede Ethereum, demonstrando a assinatura e verificação de mensagens.

2. Metodologia

O código apresentado realiza as seguintes operações:

  1. Conversão de UUIDs para Hexadecimal: UUIDs (Identificadores Únicos Universais) são convertidos em formato hexadecimal para serem usados como endereços e chaves privadas na blockchain Ethereum.
  2. Formatação para Ethereum: O código ajusta o comprimento das strings hexadecimais para os padrões exigidos pela Ethereum (40 caracteres para endereços e 64 para chaves privadas).
  3. Cálculo do Hash de Arquivos: Utiliza o algoritmo SHA-256 para gerar um hash do conteúdo de um arquivo, que será assinado digitalmente.
  4. Assinatura de Mensagens: A função de assinatura utiliza a chave privada para criar uma assinatura digital do hash do arquivo.
  5. Verificação da Assinatura: Verifica se a assinatura digital é válida comparando o endereço recuperado da assinatura com o endereço fornecido.

3. Código fonte

Você pode baixar o código fonte deste meu exemplo diretamente no meu repositório no Github.
https://github.com/jaccon/web3-ethereum

4. Instalação do Geth (Go Ethereum)

Para interagir com a rede Ethereum, é necessário ter um nó Ethereum local em execução. O Geth (Go Ethereum) é um cliente popular que pode ser utilizado para esse propósito. Abaixo estão os passos para instalar e configurar o Geth:

Instalação via Pacote (Linux):

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install geth

Instalação via Homebrew (macOS):

brew tap ethereum/ethereum
brew install ethereum

Instalação via Download (Windows): Baixe o instalador do Geth a partir do site oficial do Geth e siga as instruções de instalação.

Inicialização do Geth:
Após a instalação, inicie o Geth com o seguinte comando:

geth --http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3"

Isso iniciará um nó Ethereum em modo de desenvolvimento, ouvindo na URL http://127.0.0.1:8545, conforme especificado no código Python.

Inicializando a conexão com a rede Ethereum

5. Análise

  1. Conversão de UUIDs: UUIDs são convertidos para hexadecimal para serem compatíveis com os padrões de endereços e chaves privadas da Ethereum. A função uuid_to_hex realiza essa conversão, enquanto format_for_ethereum ajusta o comprimento dos valores.
  2. Cálculo do Hash: A função calculate_file_hash usa SHA-256 para calcular o hash de um arquivo, garantindo que o hash seja único para o conteúdo do arquivo.
  3. Assinatura e Verificação: As funções sign_message e verify_signature são responsáveis pela assinatura e verificação, respectivamente. sign_message cria uma assinatura digital usando a chave privada e verify_signature verifica a assinatura comparando o endereço recuperado com o endereço fornecido.

6. Conclusão

O código apresentado fornece uma solução prática para a criação e verificação de assinaturas digitais na blockchain Ethereum. Ele demonstra como converter UUIDs, calcular hashes de arquivos e assinar/verificar essas assinaturas usando a biblioteca web3.py. A instalação do Geth é fundamental para a execução local da rede Ethereum, permitindo a interação e teste dos métodos descritos.

7. Referências

Este artigo serve como uma base para a implementação de sistemas de assinatura digital em Ethereum, promovendo práticas seguras e eficientes para a verificação de dados.