Uma assinatura no papel é sempre a mesma. Você treinou a sua justamente para sair igual todas as vezes, e é dessa repetição que ela tira a autoridade. A assinatura digital é o contrário: se ela sair igual duas vezes, alguma coisa está gravemente errada — e no fim desta aula você vai ver quanto dinheiro já se perdeu exatamente assim.
Assinar, no Bitcoin, é produzir dois números a partir de três coisas: a sua chave privada, a transação que você está autorizando e um número sorteado na hora. Os dois números que saem se chamam r e s, e são eles que viajam junto com a transação. A conta que os produz é o assunto da trilha avançada; o que ela garante cabe aqui.
Quem recebe a transação tem em mãos a transação, a chave pública e o par r, s. Com essas três coisas, e nada além delas, qualquer pessoa refaz uma conta curta e descobre se aqueles dois números só poderiam ter saído de quem tem a chave privada correspondente. A verificação leva microssegundos, não custa nada e não pede permissão: é por isso que dezenas de milhares de nós conferem a mesma transação sem falar entre si.

Repare no que o verificador não recebe. Ele não recebe a chave privada, não recebe nenhum pedaço dela e não fica em condições de assinar coisa alguma no seu lugar. A assinatura não contém a chave: ela é uma consequência da chave, do mesmo jeito que uma pegada é consequência do pé e não permite fabricar o pé.
O segundo ponto é o que exatamente está sendo assinado, e é onde mora o mal-entendido mais comum. Uma assinatura de bitcoin não diz "autorizo esta pessoa". Ela é calculada sobre o conteúdo da transação inteira: as moedas que estão entrando, os valores, os endereços de destino. Trocar um satoshi de lugar depois de assinada produz uma transação diferente, para a qual aquela assinatura simplesmente não serve. Ninguém pode pegar a sua assinatura de ontem e usá-la para mandar o seu dinheiro para outro lugar hoje.

Daí vem uma consequência prática que as carteiras usam o tempo todo. Como assinar não move nada por si só, dá para assinar uma mensagem qualquer com a chave de um endereço e mostrar o resultado a alguém. Quem verifica fica sabendo que você controla aquele endereço, sem que uma única moeda saia do lugar. É a forma honesta de provar posse — e vale desconfiar de quem prova mandando você transferir alguma coisa.
Falta o número sorteado, e ele é a parte frágil de todo o arranjo. Esse número, chamado nonce, precisa ser diferente e imprevisível a cada assinatura. Se a mesma chave assinar dois documentos diferentes usando o mesmo nonce, as duas assinaturas se tornam um sistema de duas equações, e a chave privada sai dele com álgebra de colégio.
Isso não é hipótese. Em dezembro de 2010, no congresso do Chaos Computer Club em Berlim, o grupo fail0verflow mostrou que a Sony usava um nonce constante para assinar os programas do PlayStation 3: a chave que autorizava todo o software do console foi deduzida em público. Em agosto de 2013, uma falha no gerador de números aleatórios do Android fez carteiras de bitcoin repetirem nonces sem que ninguém percebesse; os endereços afetados foram varridos por quem estava vasculhando a blockchain à procura exatamente disso.

A matemática nunca falhou. Falharam implementações, e a diferença entre as duas coisas é o que a trilha avançada vai perseguir em detalhe. Desde 2021 o Bitcoin também aceita um segundo tipo de assinatura, a de Schnorr, mais curta e com uma propriedade que a antiga não tem — várias assinaturas podem virar uma só. É assunto de outro módulo.
Você já sabe que uma chave privada é um número, que a pública vem dela, que o endereço vem da pública e que a assinatura prova a posse sem mostrar nada. Falta a pergunta que sustenta tudo isso de pé: por que ninguém simplesmente tenta todos os números até achar o seu? Na próxima aula, o tamanho de 2^256.