Glossário / Protocolo e atualizações
Verificação por lotes
- O que é a verificação por lotes?
- A verificação por lotes checa muitas assinaturas Schnorr em uma única equação de curva elíptica, em vez de uma a uma, e devolve um único resultado de aprovação ou falha para todo o conjunto.
Especificação no BIP-340.
Um verificador agrupa u assinaturas, pondera todas menos a primeira por um escalar aleatório e resolve o conjunto em uma única equação em vez de u. O BIP-340 foi feito para isso, fixando as assinaturas em 64 bytes, enquanto o ECDSA padronizado não pode ser processado em lote de forma alguma, a menos que dados de testemunha extras sejam adicionados. O processamento em lote é uma escolha de cada verificador, então ele muda a rapidez com que um nó verifica o histórico e nada em relação aos seus bitcoins.
Como funciona
A verificação por lotes é especificada no BIP-340 como BatchVerify, que recebe u chaves públicas de 32 bytes, u mensagens e u assinaturas de 64 bytes e dá uma única resposta para todas elas.
Os pesos vêm primeiro. O verificador gera u-1 inteiros no intervalo de 1 a n-1, em que n é a ordem da curva, de forma determinística a partir de um gerador semeado por um hash de todas as entradas do lote: chaves, mensagens e assinaturas igualmente. O BIP-340 chama o SHA256 de hash de semente seguro e o ChaCha20 de uma forma segura de esticá-lo em inteiros de 256 bits, descartando os que ficam fora do intervalo.
O lote então se reduz a um único teste: a soma ponderada dos valores s, multiplicada pelo ponto gerador, tem que ser igual à mesma ponderação aplicada aos pontos R e ao desafio de cada assinatura vezes a sua própria chave pública. Essas u verificações separadas viram uma única comparação, à qual o BIP-340 atribui ganhos de velocidade significativos.
Um custo por assinatura paga essa economia. O BatchVerify traz cada valor r de volta para a curva, algo que a verificação individual nunca faz: o Verify recalcula R a partir de s e do desafio, e então confere apenas que a sua coordenada x é igual a r.
A garantia é deliberadamente assimétrica. Se todas as assinaturas do lote são válidas, o BatchVerify sempre dá certo; se mesmo uma for inválida, ele dá certo com probabilidade no máximo desprezível. O que ele não faz é apontar a culpada, então um verificador que precise saber qual assinatura falhou as verifica uma a uma.
Onde você vê isso
A verificação por lotes fica inteiramente do lado do verificador na rede, e é por isso que ela nunca aparece na interface de uma carteira nem em uma estimativa de taxa.
Onde ela compensa é em um nó processando de uma vez anos de gastos Taproot, não em uma carteira enviando um pagamento. O BIP-340 não obriga o processamento em lote em nenhum ponto: a verificação de assinatura única é a definição, e um lote é algo que um verificador pode escolher. O BIP exige um algoritmo especificado no nível do byte, a exatidão que faltava à análise sintática do DER até o BIP-66, para que ninguém consiga construir uma assinatura válida para alguns verificadores e não para outros. Como o verificador escolhe os seus próprios lotes, essa propriedade é o que faz a verificação por lotes e a individual diferirem apenas com probabilidade desprezível, mesmo diante de um atacante que tente fazê-las discordar.
O processamento em lote também explica decisões dentro do BIP-340 que, sozinhas, parecem arbitrárias. As assinaturas poderiam ter assumido uma forma mais curta, em que um hash de 16 bytes basta para a meta de segurança de 128 bits, e o BIP a rejeitou: hashes curtos são frágeis quando signatários que desconfiam entre si trabalham juntos, e a forma mais longa, que carrega R, é a que aceita o processamento em lote. As chaves públicas têm 32 bytes em vez dos 33 bytes da codificação comprimida usual do bitcoin, escolha feita pela compacidade, e a coordenada y que fica de fora é fixada no valor par, em vez de deixada ambígua, porque tanto a verificação eficiente quanto o processamento em lote precisam que ela não seja ambígua.
O ECDSA não ganha nada disso. O BIP-340 dá isso como um dos motivos para mudar o esquema de assinatura: a formulação padronizada não pode ser verificada em lote de forma mais eficiente do que individualmente, a menos que dados de testemunha adicionais sejam adicionados.
Verificação por lotes vs MuSig2
A verificação por lotes e o MuSig2 tornam um monte de assinaturas mais barato, mas só o MuSig2 muda o que é transmitido.
O MuSig2 agrega vários signatários em uma única chave e uma assinatura comum de 64 bytes antes de a transação chegar à rede, então a sua economia está em privacidade e espaço de bloco, e é n-de-n: todo signatário tem que participar. A verificação por lotes deixa cada assinatura onde estava e reorganiza apenas a aritmética que um validador executa, sem a cooperação de ninguém e sem que ninguém sequer saiba: um nó pode agrupar em lote assinaturas feitas por desconhecidos com anos de diferença, em transações sem relação entre si.