Blockchain/Nível II · Mecânica/2.1 Criptografia/Lição 4
Assinaturas digitais: ECDSA e Schnorr
O aperto de mão matemático que autoriza gastos sem expor a chave
MateriaisUm explorador de blocos que mostra dados do witnessUm gasto nativo de SegWit e um gasto pelo caminho de chave Taproot para comparar
Curiosidade
- Como uma assinatura prova o controle de um número secreto sem revelá-lo?
- Por que o PlayStation 3 da Sony e várias carteiras de Bitcoin para Android perderam suas chaves por causa de nonces reutilizados ou previsíveis?
- O que torna as assinaturas Schnorr menores, mais rápidas e capazes de agregação em comparação com a ECDSA?
Explorar
- A assinatura digital comprova a propriedade de uma chave privada sem revelá-la. No Bitcoin, para gastar um valor de transação, é necessário assinar o hash da transação com a chave privada correspondente à chave pública presente no script de bloqueio desse valor. A assinatura é verificada por qualquer pessoa que utilize a chave pública e o hash da mensagem. Esse mecanismo garante que apenas quem possui a chave possa autorizar transferências, mantendo assim a privacidade.
- O ECDSA, padronizado na ANSI X9.62 (1999), tem sido o principal esquema de assinatura do Bitcoin desde 2009. Ele gera um par de valores (r, s) a partir do hash da mensagem e de um nonce secreto k. O valor r é a coordenada x do ponto k·G; o valor s é k⁻¹(hash + x·r) mod n, onde x é a chave privada. Como cada assinatura requer um k aleatório novo, reutilizar ou vazar o k permite que um atacante calcule diretamente a chave privada.
- A chave de assinatura do PlayStation 3 da Sony foi comprometida em 2010, quando o fail0verflow demonstrou que a Sony reutilizava o mesmo nonce para todas as assinaturas. O Bitcoin sofreu roubos semelhantes em agosto de 2013 devido a uma falha no SecureRandom do Android, que gerava nonces previsíveis. A RFC 6979 (2013) resolveu isso ao derivar k de forma determinística a partir da chave privada e do hash da mensagem, eliminando a dependência de fontes externas de aleatoriedade.
- As assinaturas ECDSA são maleáveis: para um determinado r, existem dois valores válidos de s (s e n−s). Terceiros poderiam substituir pela assinatura equivalente, alterando o ID da transação sem invalidá-la. A política do Bitcoin exige normalização “low-S”, restringindo s à metade inferior da ordem da curva. Essa restrição garante que cada mensagem tenha apenas uma assinatura canônica por nonce.
- As assinaturas Schnorr, patenteadas por Claus-Peter Schnorr (patente dos EUA concedida em 1991 e expirada em 2008) e padronizadas para o Bitcoin no BIP340, geram assinaturas de tamanho fixo de 64 bytes, sem a sobrecarga da codificação DER. Elas são lineares: com um protocolo adequado, várias chaves públicas podem ser combinadas em uma única chave agregada e suas assinaturas em uma única assinatura. Isso possibilita esquemas multisig como o MuSig2, que aparecem como saídas de assinante único na cadeia, reduzindo o tamanho das transações e aumentando a privacidade.
- O Taproot foi ativado em novembro de 2021 (bloco 709.632), introduzindo suporte nativo à assinatura Schnorr para saídas P2TR. Um gasto por meio de um caminho de chave requer apenas uma assinatura de 64 bytes em seu “witness”, em comparação com uma assinatura ECDSA de 71–72 bytes mais uma chave pública de 33 bytes no caso de gastos P2WPKH. O tamanho fixo simplifica a análise dos dados, e o Schnorr permite a verificação em lote, permitindo verificar várias assinaturas de chaves diferentes ao mesmo tempo, de forma mais rápida do que uma por uma – uma funcionalidade que o Bitcoin Core ainda não utiliza.
Fatos-chave
- A ECDSA (ANSI X9.62, 1999) gera assinaturas codificadas em DER com tamanho de ~71–72 bytes; a Schnorr (BIP340) gera assinaturas de tamanho fixo de 64 bytes.
- Reutilizar ou vazar o nonce k do ECDSA revela a chave privada: Sony PS3 (2010) e roubos de carteiras Android (agosto de 2013).
- O RFC 6979 deriva k de forma determinística a partir da chave privada e do hash da mensagem, eliminando a dependência de geradores de números aleatórios.
- As assinaturas ECDSA são maleáveis; a política do Bitcoin impõe “low-S” para garantir a codificação canônica.
- As assinaturas Schnorr são lineares: chaves e assinaturas podem ser agregadas (MuSig2) e verificadas em lote para maior eficiência.
- O Taproot foi ativado em novembro de 2021 (bloco 709.632), introduzindo suporte nativo a assinaturas Schnorr para saídas P2TR.
Exercício nove, seis, três, um
9ReunirListe 9 esquemas de assinatura digital ou tipos de chaves. Indique o órgão responsável pela padronização, o ano, o tamanho do resultado e se eles suportam agregação.
6AgruparAgrupe os 9 em 6 de acordo com a complexidade de verificação: linear de tamanho fixo, maleável de tamanho variável, canônico de tamanho variável, verificável em lote, apenas para uma parte, ou híbrido.
3DestilarReduza os 6 para 3 principais trade-offs entre tamanho da assinatura, privacidade e eficiência computacional.
1CristalizarEscreva 1 frase sobre o que uma assinatura digital garante a respeito do controle da chave e o que ela não revela.
Verificação de fatos
Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.
- BIP340: Schnorr Signatures for secp256k1 (P. Wuille, J. Nick & T. Ruffing, 2020)
- RFC 6979: Deterministic Usage of DSA and ECDSA (T. Pornin, 2013)
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023)
- fail0verflow, 'Console Hacking 2010: PS3 Epic Fail', 27C3 (December 2010)