Pular para o conteúdo
ecdsa.com

Recuperação da chave pública ECDSA

O cálculo da chave pública do signatário a partir de uma assinatura ECDSA e do hash da mensagem (SEC 1 §4.1.6), que a assinatura de mensagens no Ethereum e no Bitcoin usa em vez de transmitir a chave.
Também escrito comokey recoveryrecovery idrecid

A partir de r, o verificador reconstrói os pontos candidatos R com coordenada x igual a r (dois valores de y e, raramente, r + n) e calcula Q = r⁻¹·(s·R − z·G). Um ID de recuperação seleciona o candidato, geralmente 0 ou 1 conforme a paridade da coordenada y de R. O Ethereum o coloca em v: 27 ou 28 para personal_sign e mensagens legadas, chainId × 2 + 35 ou + 36 para transações EIP-155 e 0 ou 1 em transações tipadas. O formato de mensagem assinada do Bitcoin o coloca em um byte de cabeçalho (27–42 conforme o tipo de endereço, BIP-137).

O contrato pré-compilado ecrecover no endereço 0x01 retorna o endereço de 20 bytes da chave recuperada; é assim que os contratos verificam assinaturas personal_sign, EIP-712 e permit sem armazenar chaves públicas. Para uma assinatura bem formada, a recuperação sempre produz alguma chave, então ela não prova nada até que o resultado seja comparado com o endereço esperado; além disso, em caso de falha o ecrecover retorna o endereço zero, que os contratos devem rejeitar.

A recuperação funciona para o ECDSA em qualquer curva, inclusive a P-256. As assinaturas Schnorr (BIP-340) e o EdDSA não a permitem, porque o hash de desafio desses esquemas inclui a chave pública.

Padrões e referências

Todos os termos