Glossário / Transações e taxas
Assinatura digital
Outros nomes: Assinatura, Assinatura ECDSA, Digital signature.
- O que é uma assinatura digital?
- Uma assinatura digital é a prova, produzida com uma chave privada, de que quem autorizou uma transação de bitcoin controlava a chave à qual os bitcoins daquela transação estavam vinculados, e de que os detalhes não foram alterados.
O bitcoin não usa mais apenas ECDSA. Os bitcoins em endereços que começam com 1, 3 ou bc1q são desbloqueados com assinaturas ECDSA de 71 ou 72 bytes; os bitcoins em endereços bc1p usam assinaturas Schnorr de 64 bytes, ativas desde novembro de 2021. De qualquer forma, a assinatura prova o controle de uma chave, e nunca prova quem é a pessoa.
Como funciona
Produzir uma assinatura exige três ingredientes: uma chave privada, um número aleatório de uso único chamado nonce e um resumo da transação, recortado conforme o sinalizador escolhido para aquela entrada.
O resultado é um par de números calculados sobre a secp256k1, a curva elíptica que o bitcoin usa desde seu primeiro lançamento. A verificação executa a mesma aritmética ao contrário com a chave pública, e um nó a realiza dentro do opcode de script OP_CHECKSIG. Nada é criptografado em nenhuma etapa, e a assinatura não revela nada sobre a chave privada por trás dela.
Os dois esquemas em uso empacotam esse par de formas diferentes. Uma assinatura ECDSA é envolta em DER, e por isso ocupa 71 ou 72 bytes em vez de um comprimento fixo, e o último byte não faz parte da assinatura em absoluto: é o sinalizador que diz quais partes da transação foram cobertas. Uma assinatura Schnorr segundo o BIP340 tem exatamente 64 bytes, sem envoltório, e o byte do sinalizador é omitido por completo quando se aplica o padrão, de modo que 65 bytes só aparecem quando um signatário quer algo incomum.
O nonce é a parte que dá errado. Use o mesmo duas vezes com a mesma chave e a chave privada sai com álgebra de escola, e isso não é uma preocupação teórica: em 11 de agosto de 2013, o bitcoin.org publicou um aviso sobre uma falha do Android que fazia os aplicativos de carteira nos celulares afetados gerarem valores repetidos, e bitcoins foram roubados em consequência. Hoje as carteiras derivam o nonce de forma determinística a partir da chave e da mensagem, seguindo o RFC 6979 para ECDSA e uma regra equivalente dentro do BIP340.
Onde você vê isso
Todo gasto que você faz contém pelo menos uma. Em um explorador de blocos, é a longa sequência hexadecimal no witness de uma entrada segwit ou no script de desbloqueio de uma entrada legada, e o 01 final nas assinaturas ECDSA é o sinalizador, não parte da matemática.
As assinaturas também funcionam fora das transações. Assinar uma mensagem simples com a chave por trás de um endereço prova que você controla aquele endereço sem mover um satoshi, e é assim que as corretoras verificam um destino de saque, que as atestações de prova de reservas são montadas e que um vendedor em um mercado ponto a ponto mostra que um endereço é realmente dele. O formato original só funcionava para endereços que começam com 1; o BIP322 generaliza a assinatura de mensagens para todos os tipos de endereço em uso hoje.
Essa distinção importa sempre que alguém pede que você assine algo. Uma mensagem assinada não pode mover bitcoins. Uma assinatura sobre uma transação pode mover todos eles, e a única forma confiável de saber qual das duas estão pedindo é ler a tela da sua carteira de hardware, e não a do site.
Assinatura digital vs hash de assinatura
O hash de assinatura é a entrada; a assinatura é a saída. Sua carteira primeiro monta um resumo que cobre um subconjunto específico da transação e depois assina esse resumo, de modo que a assinatura não diz absolutamente nada sobre as partes que o resumo deixou de fora. Isso não é um detalhe técnico. É exatamente a razão pela qual os sinalizadores de sighash existem, e explica como duas assinaturas em uma mesma transação podem estar protegendo coisas completamente diferentes.