1 of 18

Threshold signatures,

multisignatures

& aggregate signatures

Intuition and definitions

1

Alin Tomescu

@alinush407

Aptos Labs

2 of 18

Normal signature schemes

Rivest, Shamir, Adleman '78

2

σ = Sign(m, sk)

Verify(σ, m, pk)

sk

message m

(e.g., Bitcoin TXN)

3 of 18

API for a normal signature scheme

KeyGen(1k) → (sk, pk)

Generates a key-pair for a signer: a secret key and its corresponding public key

(k denotes a security parameter; e.g., k = 128 bits)

Sign(m, sk) → σ

Produces a signature σ on m

Verify(σ, m, pk) → 0/1

Verifies the signature σ on m under the public key pk of the signer

3

4 of 18

Threshold signature (TS) schemes

Desmedt '87

4

σ1 = Sign(m, sk1)

sk

sk5

sk4

sk3

sk2

sk1

e.g., "3 out of 5" secret sharing

Signature share

σ3= Sign(m, sk3)

5 of 18

Threshold signature (TS) schemes

Desmedt '87

5

σ = Sign(m, sk)

σ1 = Sign(m, sk1)

σ5

sk

e.g., "3 out of 5" secret sharing

σ3

sk5

sk4

sk3

sk2

sk1

Verify(σ, m, pk)

(t out of n) sharing ⇒ tolerate t-1 compromises

Assuming uncorrelated vulnerabilities/failures

σ = Aggr(σ1, σ3, σ5, m)

Verifier need not be aware that the threshold signature came from signers 1, 3 and 5

6 of 18

Threshold signature (TS) schemes

Desmedt '87

6

Verify(σ, m, pk)

σ = Sign(m, sk)

σ1 = Sign(m, sk1)

σ5

sk

σ3

sk5

sk4

sk3

sk2

sk1

σ = Aggr(σ1, σ3, σ5, m)

A naive aggregator cannot aggregate correctly if one of the signers is malicious. But a sophisticated aggregator who verifies each signature share can aggregate correctly!

7 of 18

API for a TS scheme

DistKeyGen(1k, t, n) → ((ski, vki)i∈[1, n], pk)

Generates a key-pairs for all n signers, such that any subset of t out of n signers can collaborate to produce a threshold signature. (k denotes a security parameter; e.g., k = 128 bits)

SignShare(m, ski) → σi

Produces a signature share σi on m under signer i's secret key ski

VerifyShare(σi, m, vki) → 0/1

Verifies the signature share σi on m allegedly signed under signer i's secret key

Aggregate((i, σi)i∈[1, n]) → σ

Aggregates the t signature shares into a succinct threshold signature σ.

Verify(σ, m, pk) → 0/1

Verifies the threshold signature σ on m under the PK pk of the group of n signers

7

Distributed key generation (DKG) protocols are non-trivial and deserve their own special treatment

8 of 18

Multisig signature (MS) schemes

8

Verify(σ, m, {pk1, pk3, pk5})

σ = Aggr(σ1, σ3, σ5, m)

σ1 = Sign(m, sk1)

sk5

sk4

sk3

sk2

sk1

Verifier must be aware that the multisignature came from signers 1, 3 and 5

σ5 = Sign(m, sk5)

σ3 = Sign(m, sk3)

9 of 18

Multisig signature (MS) schemes

9

Verify(σ, m, {pk1, pk3, pk5})

σ = Aggr(σ1, σ3, σ5, m)

σ1 = Sign(m, sk1)

sk5

sk4

sk3

sk2

sk1

σ' = Aggr(σ3, σ5, m)

Verifier must be aware that the multisignature came from signers 1, 3 and 5

Verify(σ', m, {pk3, pk5})

…or that the multisignature came from signers 3 and 5

σ5 = Sign(m, sk5)

σ3 = Sign(m, sk3)

10 of 18

Multisig signature (MS) schemes

10

Verify(σ, m, { pk1, pk3, pk5})

σ = Aggr(σ1, σ3, σ5, m)

σ1 = Sign(m, sk1)

σ5

sk5

sk4

sk3

sk2

sk1

As in a TS, if one signer is malicious, naive aggregation will not produce a valid multisignature.

σ3 = Sign(m, sk3)

11 of 18

API for an MS scheme

KeyGen(1k) → (sk, pk)

Generates a key-pair for a signer. (k denotes a security parameter; e.g., k = 128 bits)

SignShare(m, ski) → σi

Produces a signature share σi on m under signer i's secret key ski

VerifyShare(σi, m, pki) → 0/1

Verifies the signature share σi on m was produced by the signer with public key pki

Aggregate(m, (σi, pki)i∈[1, n]) → σ

Aggregates n signature shares, each on the same message m, into a succinct multisignature σ.

Verify(σ, m, (pki)i∈[1, n]) → 0/1

Verifies the multisignature σ on m was produced by the n signers with the specified public keys

11

12 of 18

Aggregate signature (AS) schemes

12

Verify(σ, (mi, pki)i∈{1,3,5})

σ = Aggr((σi, mi, pki)i∈{1,3,5})

σ1 = Sign(m1, sk1)

σ5 = Sign(m5, sk5)

sk5

sk4

sk3

sk2

sk1

Verifier must be aware that the aggr. signature came from signers 1, 3 and 5 and that the signed messages are m1, m3 and m5.

σ3 = Sign(m3, sk3)

13 of 18

Aggregate signature (AS) schemes

13

Verify(σ, (mi, pki)i∈{1,3,5})

σ = Aggr((σi, mi, pki)i∈{1,3,5})

σ1 = Sign(m1, sk1)

σ5 = Sign(m5, sk5)

sk5

sk4

sk3

sk2

sk1

σ' = Aggr((σi, mi, pki)i∈{3,5})

Verifier must be aware that the aggr. signature came from signers 1, 3 and 5 and that the signed messages are m1, m3 and m5.

Verify(σ', (mi, pki)i∈{3,5})

…or that the aggr. signature came from signers 3 and 5 on messages m3 and m5.

σ3 = Sign(m3, sk3)

14 of 18

API for an AS scheme

KeyGen(1k) → (sk, pk)

Generates a key-pair for a signer. (k denotes a security parameter; e.g., k = 128 bits)

SignShare(m, ski) → σi

Produces a signature share σi on m under signer i's secret key ski

VerifyShare(σi, m, pki) → 0/1

Verifies the signature share σi on m was produced by the signer with public key pki

Aggregate((σi, mi, pki)i∈[1, n]) → σ

Aggregates n signature shares, each on a different message mi, into a succinct aggregate signature σ.

Verify(σ, (mi, pki)i∈[1, n]) → 0/1

Verifies the aggregate signature σ on messages m1, m2,…, mn ensuring that each signer i with public key pki signed message mi

14

15 of 18

When to use a TS, MS or an AS scheme?

TS:

MS:

AS:

  • Much slower aggregation than MS
  • Rigid t-out-of-n threshold
    • Possible to update it to t'-out-of-n' but complex cryptography & interaction involved
  • Final threshold signature always verifies against unique public key pk, independent of the signers who produced it:
    • i.e., threshold signatures are constant-sized
  • Much faster aggregation than TS
  • Flexible t-out-of-n threshold
    • Easy to add a new signer (or to remove a signer)
    • Verifier enforces any verification threshold t by plugging in the expected public keys in the Verify() API
  • Final multisignature only verifies against the individual public keys of the signers who produced it:
    • i.e., multisignatures must include the signer IDs and are not constant-sized
  • Just like MS, except signers can sign different messages
  • Slightly slower verification of final aggr. signature than MS

15

16 of 18

Appendix

16

17 of 18

Threshold signatures... but why?

A key decentralized crypto primitive!

  • Cryptocurrency wallets
  • Consensus protocols
  • Random beacons
  • Voting
    • Needs large t and n!

...and more are likely to come!

17

18 of 18

References

[Bold03] Threshold Signatures, Multisignatures and Blind Signatures Based on the Gap-Diffie-Hellman-Group Signature Scheme; by Boldyreva, Alexandra; in PKC 2003

18