Pular para o conteúdo
ecdsa.com

Maleabilidade da assinatura

A propriedade de um esquema de assinatura ou da sua codificação que permite a qualquer pessoa transformar uma assinatura válida em outra assinatura válida, diferente, para a mesma mensagem e a mesma chave, sem conhecer a chave privada.
Também escrito comotransaction malleabilitysignature malleation

O ECDSA é maleável por construção, já que (r, s) e (r, n − s) passam na verificação, e sua codificação DER acrescenta mais variantes quando os parsers aceitam comprimentos não mínimos ou inteiros com padding (o que a regra de DER estrito da BIP 66 do Bitcoin eliminou em 2015). O EdDSA é maleável se um verificador pula a verificação de que S é menor que a ordem do grupo. Maleabilidade não é falsificação: ninguém consegue assinar uma mensagem nova.

A maleabilidade importa quando a assinatura, ou um hash que a cobre, serve de identificador. Antes do SegWit, os IDs de transação do Bitcoin incluíam as assinaturas no hash, então terceiros podiam mudar o ID de uma transação pendente (a Mt. Gox citou isso quando suspendeu os saques em fevereiro de 2014). Contratos inteligentes que guardam as assinaturas usadas em vez dos nonces usados, e APIs que eliminam requisições duplicadas pela assinatura, falham da mesma forma.

Defesas: codificações canônicas (DER estrito, low-S, S menor que L), identificadores calculados a partir do conteúdo assinado e não da assinatura, nonces explícitos nos payloads assinados e esquemas fortemente infalsificáveis quando verificados de forma estrita, como Ed25519 e BIP-340.

Padrões e referências

Todos os termos