(s_1, ..., s_n) := sig
for i in 1..n:
if Verify(m_i, pk_i, s_i) == 0:
return 0
return 1
DahLIAS is the first aggregate signature scheme
Today: every transaction input typically contains a signature of a message (the "sighash")
With DahLIAS: every transaction could have only a single aggregate signature
aggregate signature
Signer 1
Signer 2
(This is pretty much the same communication as in MuSig2)
(First two half round trips can be preprocessed)
Signature is not constant-size but half the size of the individual Schnorr signatures (32 + n*32 bytes).
def VerifyAgg(((m_1, pk_1), ..., (m_n, pk_n)), s):
return VerifyMulti(m_1 || ... || m_n,
(pk_1, ..., pk_n),
s)
The translation multisig->aggsig is not secure if the signer is doing key tweaking!
If we had done that it would have been broken!
In other words:
(I believe this validates our slow-and-steady approach to cryptography)
DahLIAS is the first aggregate signature scheme