Exemplo Web3 - Assinaturas digitais utilizando Python e rede Ethereum
Assinaturas digitais utilizando Python e 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.
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:
- 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.
- 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).
- 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.
- Assinatura de Mensagens: A função de assinatura utiliza a chave privada para criar uma assinatura digital do hash do arquivo.
- 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.
5. Análise
- 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, enquantoformat_for_ethereum
ajusta o comprimento dos valores. - 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. - Assinatura e Verificação: As funções
sign_message
everify_signature
são responsáveis pela assinatura e verificação, respectivamente.sign_message
cria uma assinatura digital usando a chave privada everify_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
- Web3.py Documentation: Web3.py Docs
- Ethereum Solidity Documentation: Solidity Docs
- Python hashlib Library: hashlib Documentation
- UUID Documentation: UUID Library
- Geth Installation Guide: Geth Downloads
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.