Prove I know a value $v$ in a Pedersen Commitment without revealing it Given a Pedersen Commitment:

$P = aG + vH$

Where $G$ and $H$ are points in some group. $a$ is a blinding value/mask and $v$ is the value I wish to commit to.

Is there a way to prove I know $v$ without revealing it?
This extension of the Schnorr protocol would appear to work:

$P := aG + vH$

$\operatorname{GenProof}(a, v)$:


$x, y \leftarrow Z_q$
$P' := xG + yH$
$t  := RandomOracle(P')$  (alternatively, the verifier picks $t$ after learning $P'$)
$x' := x + ta, y' := y + tv$
return $(P', x', y')$


$\operatorname{Verify}(P, P', x', y')$:


$t := RandomOracle(P')$
accept if $x'G + y'H = P' + tP$