A assinatura de mensagens é uma maneira de provar a propriedade de um endereço específico e demonstrar que você tem controle dos fundos.
Por que assinar?
Assinar é uma maneira fácil de garantir que algo está sendo feito pela pessoa ou contrato correto. Ao contrário das assinaturas físicas, as assinaturas digitais não podem ser falsificadas, então você sempre pode ter certeza de que uma ação foi concluída pela pessoa correta.
Etherscan
A assinatura de mensagens pode ser feita facilmente com o recurso “Verificar nova assinatura de mensagem” do Etherscan.
1. Vá para o Verificar nova assinatura de mensagem ferramenta.
2. Forneça o endereço Ethereum com o qual você gostaria de assinar.
3. Forneça o hash de assinatura da mensagem e a mensagem original que está sendo assinada.
4. Clique em Verificar e salvar no menu suspenso.
5. Enviar.
Aplicativo Blockchain
No aplicativo de carteira popular, Blockchain, a assinatura de mensagens é bem simples. Para assinar uma mensagem,
1. Vá para Configurações -> Endereços
2. Role para baixo para escolher o endereço desejado.
3. Clique Mais opções -> Assinar mensagem.
Observação: atualmente, isso está disponível apenas para endereços importados, mas será adicionado a todos os endereços no futuro.
Explicação técnica
O método a seguir cria uma assinatura específica do Ethereum com:
sign(keccak256(“\x19Ethereum Mensagem Assinada:\n” + len(mensagem) + mensagem))).
Adicionar um prefixo à mensagem tornará a assinatura reconhecível como uma assinatura específica do Ethereum. Isso evitaria qualquer fraude ou uso indevido em que um DAPP malicioso poderia assinar dados aleatórios (como uma transação) e usar a assinatura para personificar a vítima. Observação: o endereço para assinar deve estar desbloqueado para que isso funcione.
Parâmetros
conta, mensagem
- DADOS20 bytes = endereço
- DADOSN bytes = mensagem para assinar
Devoluções
DATA: Signature
Exemplo
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
// Result
{
"id":1,
"jsonrpc": "2.0",
"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}