検証者は r から、x 座標が r である候補点 R を再構成し(y の値が 2 通りあり、まれに x 座標が r + n の場合もあります)、Q = r⁻¹·(s·R − z·G) を計算します。どの候補を使うかはリカバリ ID で選び、通常は R の y 座標の偶奇を表す 0 または 1 です。Ethereum はこれを v に入れます。personal_sign と旧来のメッセージでは 27 または 28、EIP-155 のトランザクションでは chainId × 2 + 35 または + 36、型付きトランザクションでは 0 または 1 です。Bitcoin の署名付きメッセージ形式では、ヘッダーバイトに入れます(アドレスの種類に応じて 27〜42。BIP-137)。
アドレス 0x01 にあるプリコンパイル済みコントラクト ecrecover は、復元した鍵の 20 バイトのアドレスを返します。コントラクトはこの仕組みで、公開鍵を保存せずに personal_sign、EIP-712、permit の署名を確認します。形式が正しい署名からは必ず何らかの鍵が復元されるため、結果を想定するアドレスと比較するまでは何も証明されません。また、ecrecover は失敗時にゼロアドレスを返すので、コントラクトはこれを拒否しなければなりません。
公開鍵の復元は、P-256 を含むあらゆる曲線上の ECDSA で行えます。Schnorr 署名(BIP-340)と EdDSA では、チャレンジのハッシュ値に公開鍵が組み込まれているため、復元はできません。