Simple Schnorr Signature with Pedersen Commitment as Key

Abstract

In a transaction-output-based blockchain system, where each transaction spends UTXOs (the previously unspent transaction outputs), a user must provide a signature, or more precisely a scriptSig\textit{scriptSig} for Bitcoin, to spend an UTXO, which proves the ownership of the spending output. When Pedersen commitment gxhag^xh^a or ElGamal commitment (gxha,hx)(g^xh^a,h^x) introduced into blockchain as transaction output, for supporting confidential transaction feature, where the input and output amounts in a transaction are hidden, the prior signature schemes such as Schnorr signature scheme and its variants does not directly work here if using the commitment as the public key, since nobody including the committer knows the private key of a gxhag^xh^a when aa is not zero, meaning no one knows the cc such that (gc=gxha)(g^c=g^xh^a). This is a signature scheme which is able to use the C=gxhaC=g^xh^a as the signature public key for any value of aa. The signer, proceeding from a random Pedersen commitment R=gk1hk2R=g^{k_1}h^{k_2}, generates a random bit sequence ee, by multiplication of a stored private key xx with the bit sequence ee and by addition of the random number k1k_1 to get the uu, by multiplication of the committed value aa with the bit sequence ee and by addition of the random number k2k_2 to get the vv, finally constructs Οƒ=(R,u,v)\sigma=(R,u,v) as the signature, with the corresponding public key CC. In turn, the verifier calculates a Pedersen commitment S=guhvS=g^uh^v, and accepts the signature if S=RCeS=RC^e. For an electronic signature, a hash value ee is calculated from a random Pedersen commitment RR, the Pedersen commitment CC, and from the message mm to be signed. This signature scheme will be very helpful in the design of a non-interactive transaction in Mimblewimble

    Similar works