OP_DUP OP_HASH160 <Public KeyHash> OP_EQUAL OP_CHECKSIG
Key-path spending
Script-path spending
Parties can cooperate to produce a multi-signature,
i.e., a single Schnorr signature valid under \(g^{x_1+x_2}\)
Schnorr Signature Verification
Multisignatures
Threshold Sigs
Blind Signatures
...
Consensus
Contracts
...that look like ordinary Schnorr signatures.
\( \textsf{Sign}(\textit{sk} = x, \textit{pk} = g^x, m) \)
\( r \leftarrow \$ ; R = g^r \)
\( c = H(\textit{pk}, R, m) \)
\( s = x\cdot c + r \)
\( \text{return}\ (R, s) \)
\( \textsf{Verify}(\textit{pk} = X, (R, s), m) \)
\(\phantom{r \leftarrow \$; R = g^r }\)
\( c = H(\textit{pk}, R, m) \)
\(\text{return}\ g^s == X^c \cdot R \)
\(\textit{sk}=x\)
\(\textit{pk}=g^x\)
\( \textsf{Sign}(\textit{sk} = x, \textit{pk} = g^x, m) \)
\( r = H_{non}(x, \textit{pk}, m, \text{rand}) ; R = g^r \)
\( c = H(\textit{pk}, R, m) \)
\( s = x\cdot c + r \)
\( \text{return}\ (R, s) \)
\(s = c \cdot x + r\)
\(s' = c' \cdot x + r\)
\(s-s'= x(c-c')\)
\(x= (s-s')/(c-c')\)
\(X_1=g^{x_1}\)
\(R_1 = g^{r_1}\)
\(X_2=g^{x_2}\)
\(R_2 = g^{r_2}\)
\(X_3=g^{x_3}\)
\(R_3 = g^{r_3}\)
\( \textsf{BrokenMultiSign}(\textit{sk}_i = x_i, \textit{pk} = g^x, m) \)
\( r_i \leftarrow \$; R_i = g^{r_i} \)
\( \text{broadcast} R_i ; R = \prod R_i\)
\( c = H(\textit{pk}, R, m) \)
\( \text{broadcast} s_i = x_i\cdot c + r_i; s = \sum s_i\)
\( \text{return}\ (R, s) \)
\( \textsf{Sign}(\textit{sk} = x, \textit{pk} = g^x, m) \)
\( r \leftarrow \$; R = g^r \)
\( c = H(\textit{pk}, R, m) \)
\( s = x\cdot c + r \)
\( \text{return}\ (R, s) \)
MSDL-pop
[Boneh, Drijvers, Neven (2018)]:
proofs of possesion ("pop")
MuSig
[Maxwell, Poelstra, Seurin, Wuille (2018)]
key-aggregation with tweak
where
Can we run multiple signing sessions in parallel?
Find \(m_0,m_1\):
\(H(m_0) = H(m_1)\)
Find \(m_0,m_1,\dotsc,m_{100}\):
\(H(m_0) = H(m_1) + \dotsc + H(m_{100}) \)
Hard
Easy
Let every signer \(i\) send a commitment \(H(R_i)\) upfront.
Resulting protocol needs 3 rounds.
\( \textsf{MuSigSign}(\textit{sk}_i = x_i, \textit{pk}=\prod \textit{pk}_i^{a_i}, m) \)
\( r_i \leftarrow \$; R_i = g^{r_i};\)
\( \text{broadcast} h_i = H(R_i)\)
\( \text{broadcast} R_i; R = \prod R_i\)
\(\text{fail if } H(R_i) \ne h_i \text{ for some } i \)
\( c = H(\textit{pk}, R, m) \)
\( \text{broadcast} s_i = x_i a_i c + r_i; s = \sum s_i\)
\( \text{return}\ (R, s) \)
\( \textsf{Sign}(\textit{sk} = x, \textit{pk} = g^x, m) \)
\( r \leftarrow \$; R = g^r \)
\( c = H(\textit{pk}, R, m) \)
\( s = x\cdot c + r \)
\( \text{return}\ (R, s) \)
The following is work in progress.
Drijvers, Edalatnejad, Ford, Kiltz, Loss, Neven, Stepanovs (2019): The proof is broken, here is an attack