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.