Assinaturas e endereços bitcoin

Olá galera
Assistindo aos videos e lendo alguns scripts me bateu uma duvida: Como se verifica a validade de uma assinatura se o endereço bitcoin não é a chave pública? A assinatura não é feita sobre a chave?

Olá Lucas, seja bem-vindo!

Começando de trás pra frente.

A assinatura não é feita sobre a chave?

Imagino que você esteja se referindo a chave privada como fonte geradora da assinatura e está correto. Além disso existe outro complicador que você não citou, a assinatura tem que mudar cada vez que ela é utilizada, ou seja, uma coisa é a chave privada e outra coisa é a assinatura. As assinaturas são geradas a partir da chave privada, daí surge a importância de mantê-las em segurança. Existe uma relação matemática (função hash) entre a chave privada e a assinatura gerada a partir da chave privada. A chave privada é criada de forma totalmente aleatória e as assinaturas novas são sempre diferentes, mas geradas pela mesma chave privada. Já a chave pública e o endereço não são aleatórios, nascem a partir da chave privada, ou seja, tem um vínculo que liga a chave privada a sua respectiva chave pública e ao seu respectivo endereço. Sendo uma questão matemática é possível validar cada nova assinatura, que será diferente da anterior, gerada pela mesma chave privada porque esta chave privada é que dá origem a chave pública que por sua vez dá origem ao endereço. Existe uma ligação entre elas que permite a validação via execução de um script que roda cada vez que uma nova transação entra na rede.

Como se verifica a validade de uma assinatura se o endereço bitcoin não é a chave pública?

Você tem razão quando diz que endereço e chave pública são diferentes. A chave pública nasce a partir da chave privada e o endereço nasce a partir da chave pública, é um processo sequencial que tem apenas uma via ou direção (chave privada => chave pública => endereço) e não pode ser revertido ou sequenciado de trás pra frente para tentar chegar na chave privada. É uma via de mão única. Resumindo, não dá para fazer “engenharia reversa” para descobrir uma chave privada mas como a chave pública e o endereço derivam da chave privada é possível conferir ou validar a autenticidade da assinatura gerada pela chave privada que deu origem a chave pública que por sua vez deu origem ao endereço. Cada uma das cerca de 200 mil transações diárias que passam pela rede Bitcoin passa por este processo de validação que é feito via script.

Quem faz a validação da assinatura?

Quando uma transação (exemplo clássico: Alice envia X satoshis ou bitcoins para Bob) é feita por algum usuário esta transação é enviada para a rede Bitcoin. Geralmente os nós (nodo) mais próximo fazem a validação realizando uma série de verificações (seguem um check-list com vários itens. Exemplo: checa o tamanho da transação, checa a sintaxe e a estrutura de dados, checa se os satoshis ou bitcoins não foram gastos anteriormente etc.). Desta forma se evita que transações incorretas sejam propagadas na rede.

Para entender melhor o assunto:
Chaves, Endereços e Carteiras no Bitcoin: diferença entre Chave Pública e Endereço 🔑 | by Disruptivas | Medium.

2 curtidas

Excelente pergunta.
Realmente a chave pública não está exposta no endereço em si.
Eu achava que ao gerar a assinatura, a chave publica era inserida na mesma, porém não é verdade.
Segundo o theymos, o bitcoin usa uma propriedade específica do ECDSA que permite encontrar a chave pública a partir da mensagem + assinatura:

https://www.secg.org/sec1-v2.pdf
Seção 4.1.6: Public Key Recovery Operation

1 curtida