summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Folkson <michaelfolkson@gmail.com>2020-06-14 19:12:25 +0100
committerMichael Folkson <michaelfolkson@gmail.com>2020-06-14 19:12:25 +0100
commit9a7406659af38a82b7f77746f4ef6100a33f79df (patch)
tree8d8cc04c2edbd8ee1326933419364e1a8c4acb0a
parentbce4d278b402a87adaaf0b39a91b475c6d563fab (diff)
downloaddiyhpluswiki-9a7406659af38a82b7f77746f4ef6100a33f79df.tar.gz
diyhpluswiki-9a7406659af38a82b7f77746f4ef6100a33f79df.zip
Edits for Tim Ruffing transcript
-rw-r--r--transcripts/cryptoeconomic-systems/2019/threshold-schnorr-signatures.mdwn133
1 files changed, 90 insertions, 43 deletions
diff --git a/transcripts/cryptoeconomic-systems/2019/threshold-schnorr-signatures.mdwn b/transcripts/cryptoeconomic-systems/2019/threshold-schnorr-signatures.mdwn
index 06aa37c..3f3190b 100644
--- a/transcripts/cryptoeconomic-systems/2019/threshold-schnorr-signatures.mdwn
+++ b/transcripts/cryptoeconomic-systems/2019/threshold-schnorr-signatures.mdwn
@@ -1,6 +1,17 @@
-The quest for practical threshold Schnorr signatures
+Name: Tim Ruffing
-Tim Ruffing (@real\_or\_random)
+Topic: The Quest for Practical Threshold Schnorr Signatures
+
+Location: Cryptoeconomic Systems Summit 2019
+
+Date: October 6th 2019
+
+Video: https://www.youtube.com/watch?v=Wy5jpgmmqAg
+
+Slides: https://slides.com/real-or-random/schnorr-threshold-sigs-ces-summit-2019
+
+Transcript completed by: Bryan Bishop
+Edited by: Michael Folkson
# Introduction
@@ -8,98 +19,134 @@ It's great to be here. My name is Tim Ruffing and I work for the research team a
# Disclaimer
-First of all, this is work in progress. It's pretty early work in progress, mostly based on discussions with people at Blockstream. I describe the problem we want to solve, and we have some initial ideas, but they are very initial and I have tried to put one or two sentences about those ideas into the slides but nothing is really done yet. If you think what I say doesn't make sense, or the problem is already solved and you have looked in the literature already then please interrupt and tell me.
+First of all, this is work in progress. It's pretty early work in progress, mostly based on discussions with people at Blockstream. I describe the problem we want to solve, and we have some initial ideas, but they are very initial and I have tried to put one or two sentences about those ideas into the slides but nothing is really done yet. If you think what I say doesn't make sense, or the problem is already solved and you have looked into the literature already then please interrupt and tell me.
# Threshold signatures
-What are threshold signatures? Say you have a group of n peers, and the idea is that if you have any subset of size k in that set, then they should be able to produce a valid signature and if you have fewer peers then you shouldn't be able to make a signature. So there's a few properties here, like unforgeability where a smaller set cannot produce a valid signature, whereas you also have robustness where k honest peers should be able to produce a valid signatures even if the other peers are trying to stop them. n-of-n is basically just multisignature, and that's a special case.
+What are threshold signatures? You have a group of n peers. The idea is that if you have any subset of size t of those n peers they should be able to produce a signature. If you have fewer peers you shouldn't be able to produce a signature. More formally you get an unforgeability property. That means t-1 malicious peers cannot produce a valid signature even if they collude and are malicious. On the other hand you have robustness. This means that t honest peers should be able to produce a valid signature even if the other peers are malicious and try to prevent them from getting a signature. There is the special case where t=n. We call this multisignatures.
-# Why threshold or multi signatures?
+# Why Threshold or Multi-signatures?
-When you think about smart contracts, there's always a case where some funds are controlled by a set of peers. Payment channels are typically made between two parties. The funds are locked up and you need agreement from both parties to spend them, so this is a 2-of-2 scenario. Another scenario might be two-factor authentication which is 2-of-2. Bitfinex's cold wallet is 3-of-6 threshold multisig for their cold wallet to enhance security. If you look at our own products at Blockstream, we have an 11-of-15 Liquid watchmen functionaries. To send bitcoin into the Liquid sidechain, you pay a 11-of-15 multisig federation.
+Why do you need threshold or multisignatures in a Bitcoin or cryptocurrency setting? Mostly for smart contracts. If you think about smart contracts there is always some aspect where some funds are controlled by a set of peers. For example in a payment channel, typically payment channels between two parties, the funds are locked up and you need agreement from both parties to spend them. This is a 2-of-2 scenario. Another scenario could be two factor authentication which would also be 2-of-2. Bitfinex is a large Bitcoin exchange. Apparently they use 3-of-6 threshold signatures for their cold wallet to enhance security. If you look at our own products at Blockstream. One of our products is Liquid. Liquid is a sidechain which means that you can send Bitcoin into this sidechain and transfer it on the sidechain more efficiently and more privately. From the point of view of the Bitcoin system these Bitcoin are held by a federation and are stored on a 11-of-15 threshold signature. There are many more scenarios.
# Goals
-The goal in this talk is to obtain threshold signatures that look like ordinary signatures. There are some reasons for this. First, they are much more efficient than the current multisig we have in bitcoin. Second, they also offer privacy advantages.
+Our goal in this talk is to obtain threshold signatures that look like ordinary signatures. The reason for that is first of all they are much more efficient than what we currently have on Bitcoin. They also offer privacy advantages.
# Taproot
-<https://diyhpl.us/wiki/transcripts/bitcoinops/schnorr-taproot-workshop-2019/notes/>
+`pk = g^(x + H(g^x, script))`
-Hopefully taproot will get deployed in bitcoin at some point. The basic idea is that your UTXO on the bitcoin blockchain reduces to a single public key and this public key has a secret key in it, but it also has a commitment to a script. This enables you to spend it in two ways. Either you can use key-path spending where you just sign by producing a signature, and nobody will ever notice that there was an extra script in there. It's great for privacy and it looks like an ordinary signature. If you really want to use the script and you don't want to use key-path spending, then you can do script-path spending by revealing g^x and then the script and then you can fulfill the script and whatever it requires you to do.
+Hopefully Taproot will get deployed in bitcoin at some point, it is currently proposed. The idea is that your UTXO on the Bitcoin blockchain reduces to a single public key. This public key has a secret key in it (x), but it also has a commitment to a script. This enables you to spend it in two ways. Either you can use key-path spending where you just produce a valid signature and a pk. You can do that because the combined secret key is x plus this hash. No one will ever notice in that case that there was a script in there. It's great for privacy and it looks like a normal signature. If you really want to use the script and you don't want to use key-path spending, then you can do script-path spending by revealing g^x and the script and then you can fulfill the script and do whatever the script requires you to do.
-The typical case in most smart contracts is that all parties agree. There are lots of rules but they are mostly for cases where parties go malicious or want to disrupt, but usually you just get agreement from all parties so you might as well use key-path spending using a threshold signature. Nobody will ever notice that there was a script involved or smart contract.
+The cool thing is that in the key-path spending the script is not revealed at all, this looks like an ordinary spend. In smart contracts the typical case is that all parties agree. You have a lot of rules that keep you secure for cases when parties go malicious or want to disrupt but usually you just get agreement from all parties. You can produce a threshold signature, use key path spending and the only thing that remains on the chain is the public key and the signature. No one will ever notice that there was a script involved or a smart contract.
# Schnorr signatures
-The signature scheme for ordinary signatures that we want here is Schnorr signatures. Maybe you have seen this before maybe not. The secret key is a simple scalar, an elliptic curve group scalar. The public key is g^x. So this looks like ECDSA so far, so you don't have to change key generation. For signing, you take a random nonce r and you compute a public nonce g^r and then you compute a challenge by hashing the public key and the nonce and the message, and then you compute this s value which is the second part of the signature where you multiply the challenge with your secret key and add the nonces. This is constructed from Fiat-Shamir protocol... so the signature is the public nonce and the s value. Verification is very simple; you re-compute this hash and you check the main equation and the exponent which you can do.
+`sk = x`
+
+`pk = g^x`
-<https://diyhpl.us/wiki/transcripts/sf-bitcoin-meetup/2018-07-09-taproot-schnorr-signatures-and-sighash-noinput-oh-my/>
+The signature scheme for ordinary signatures that we want here is Schnorr signatures. Maybe you have seen this before maybe not. The secret key is a simple scalar, an elliptic curve group scalar. The public key is g^x. So this looks like ECDSA so far, we don't have to switch the key generation. For signing, you take a random nonce r and you compute a public nonce g^r. You compute the challenge by hashing the public key, the public nonce and the message you want to sign. Then you compute this s value which is the second part of the signature by multiplying the challenge with your secret key and adding the nonce as blinding. This is constructed from Fiat-Shamir protocol. The signature is the public nonce and the s value. Verification is very simple, you re-compute this hash and you check the main equation and the exponent which you can do. If your public key is X then you can write the equation like that and check it.
-There's a draft called bip-schnorr, and then there's bip-taproot and bip-tapscript. Have a look, it's on github. They are written by Pieter Wuille and myself and many others. We have a full specification, we have reference code, design rationale, and so on. Everything you would expect to see.
+# Draft for Bitcoin Improvement Proposal (BIP)
-If you're interested, we need more eyeballs to look at this. Maybe go to this short url <https://bit.do/schnorr> - please have a look.
+There's a [draft](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki) for integrating Schnorr signatures into Bitcoin. It comes with the proposal for Taproot and other things. If you are interested please take a look. It is on GitHub. It is written by Pieter Wuille, myself and many others. We have a full technical specification, design rationale, reference code. Everything you expect from a specification. Introducing a new signature scheme is quite a big step. If you are interested we need more eyeballs. Go to this short [URL](https://bit.do/schnorr) or scan this QR code or talk to me. If you do applied crypto and you are interested please have a look.
-# Naive multisignatures
+# Naive Multisignatures
-You could add up all the x values, and then add up all the r values. You could multiply the group points and get the sum of the exponents since everything is homomorphic here. Anyway, this is naive and it's not secure. There's multiple problems with it, and all the problems are solvable. The MuSig scheme fixes a lot of this, it was published in 2018 and concurrently there's the MSDL-pop scheme by Boneh, Drijvers, Neven in 2018 which solve the same problems.
+`x = x_1 + x_2 + x_3 +…. + x_n`
-# From multisignatures to threshold signatures
+`r = r_1 + r_2 + r_3 +…. + r_n`
-The simple way to depict this idea is to use secret sharing. They might want to use Shamir secret sharing. I won't explain how it works, because it's not important. But it gives you something like 2-of-3 multisig. So the party with a secret can make a 2-of-3 threshold secret sharing scheme. They create the shares, then send it to some parties, or maybe even himself to simplify the diagram. Since this is 2-of-3, even if one of those parties on the left or right hand side becomes unresponsive, two of the parties can reconstruct this secret value. It's not only that they can reconstruct it, they can actually do computations with it. This is how we basically use it within Schnorr signatures. This is only one of the steps to get it.
+`X_1 = g^(x_1)`
+
+`R_1 = g^(r_1)`
+
+These are Schnorr signatures. How can we get to multisignatures or threshold signatures? Let’s start with multisignatures. The idea is that we split the secret key x into n parts for n parties. For the nonce we want to do the same. Instead of having a single r we have a sum of a lot of r’s. Each of those components belongs to one of our peers.
+
+The public versions of those scalars, because everything homomorphic if you multiply you get the sum and the exponent here. We do this for all the parties. This is a high level view. This is naive because it is not secure. There are multiple problems with that but all of them are solvable. There are full solutions available. For example the MuSig [scheme](https://eprint.iacr.org/2018/068.pdf) invented by people from Blockstream and others in 2018. Concurrently the MSDL-pop [scheme](https://eprint.iacr.org/2018/483.pdf) by Boneh, Drijvers and Neven that solves the same problem in a slightly different way. Both are very good schemes I think.
+
+# From Multi to Threshold
+
+How would we go from multisignatures to threshold signatures? A simple way to depict the idea is like this. The idea is using secret sharing. Under the hood we probably want to use Shamir secret sharing. I won’t explain how it works because it is not important. What it actually gives you is something like this. You have a party on the left hand side. It has a secret a. Let’s say we have a 2-of-3 threshold secret sharing scheme. The party on the left can create three shares and send it to the parties. Maybe send it even to himself to simplify the diagram. Since this is 2-of-3 even if one of those parties on the right hand side goes offline and is not available, doesn’t want to respond, two of the parties can reconstruct this secret a. It is not only that they can reconstruct it, they can actually do computation with it. This is how we use it within in Schnorr. This is only one of the steps.
# Distributed key generation
-.... So far I have described this for the secret key, and you can get a working scheme from that. We haven't done a security proof for this yet but it looks reasonable. If you do this only for the secret key for distributed key generation, then you probably get a protocol that doesn't have a constant number of rounds. So you get O(f) rounds where f is the number of disruptive parties. With 3-of-3, you don't need threshold signature scheme, you can just use a multisignature, so we're doing 2-of-3 threshold multisig here. You have to commit to the set of signers upfront, and maybe later you choose a signer that wants to go offline and then you have to restart. That's a detail that I don't have time to explain now.
+The second required step is going to fully distributed key generation. We have x. We split it into x_1 + x_2 + x_3 that belongs to different parties. The blue peer here secret shares its own secret x_1 with all the participants including himself. We have this secret x which is split into three parts, each of these parts is individually secret shared amongst all the parties. I depicted it only for the blue peer but the green peer and the yellow peer do the same.
-The solution to that is to do distributed key generation also for the nonce. So we do the same protocol for the distributed key generation, and we have to do this whenever we have a signing session. This means that signing is an interactive process. If we do that, we can do constant O(1) rounds.
+# DKG for Key and Nonce
-# History of DKG for discrete log
+What I have described so far is doing this for the secret key. You can do this only for the secret key and you get a working for a scheme. We haven’t done a security proof for this yet but it looks reasonable. If you do this only for the secret key, this distributed key generation, then you probably get a protocol that doesn’t have a constant number of rounds. You get O(f) where f is the number of disruptive parties that try to prevent you from getting a signature. This is 2-of-3. If you have 3-of-3 we don’t need the threshold secret sharing at all. We can just use a multisignature scheme as I have shown before. Here we get O(f) rounds. The basic reason is that we have to commit to the set of signers upfront and then maybe you choose a signer that later wants to go offline and then you have to restart. That’s a detail that I don’t have time to explain.
-This was originally proposed by Pedersen 1991 where he used a DKG scheme for dlog, based on Feldman's verifiable secret sharing. Then Gennaro, Jarecki, Krawcyz, Rabin in 1999 said the attacker can bias the key. They proposed a better DKG scheme using Pedersen's VSS. Pedersen's scheme uses Feldman's VSS, and then they fixed it by using Pedersen's VSS. Whatever. It's confusing. Even better, three years later, they figured out the 1991 scheme is actually good enough for Schnorr threshold signatures. The attacker can bias the public key or the other one, then for Schnorr threshold signatures that doesn't matter for them. That was found in GJKR 2002.
+The solution to that is to do distributed key generation also for the nonce. So we do the same as for the key setup but now we have to run a distributed key generation protocol whenever we have a signing session because the nonce is generated during the signing algorithm. If we do that we can go down to a constant number of rounds. Even though we have to add a few rounds to run the DKG protocol.
-# Trust assumption
+# History of DKG for DLog
-If you work on threshold crypto, you might ask what's the point and what are you trying to do. I want to show you why those two schemes fail in practice if you really want to apply them. There are two main issues. The first issue is that there's a trust assumption. All the schemes assume that k-1 is less than half of all the peers. This is an honest majority assumption, basically. So k-1 must be < n/2. Let me explain to you why they need this assumption. I'll explain this by counterexample. Say we have a scheme without an honest majority, say 6-of-9. For unforgeability, this means that 5 malicious peers shouldn't be able to produce a signature. But robustness would say that 6 honest peers can produce a valid signature. So you can't achieve both unforgeability and robustness at the same time. But I think that's not true, it's the worst case assumption. The worst case is that there's only four good peers. But if there's only three bad participants, .... if I choose k=5 or something, it doesn't mean that 5 parties are malicious, it just means that's the maximum it can tolerate. Even if 5 people are malicious in the first scenario, then maybe I can't achieve a valid signature and this might be acceptable but what shouldn't happen is that those 5 parties can forge. I think this setting still makes sense. If you saw the talk yesterday, she talked about flexible BFT and the alive-but-corrupt nodes. I think that's exactly the setting we have here.
+To put this into context these ideas are pretty old. Pedersen in 1991 proposed a distributed key generation algorithm for DLog that uses Feldman’s verifiable secret sharing. It turned out to be wrong. Gennaro, Jarecki, Krawcyz and Rabin in 1999 figured out the Pedersen scheme is broken because the attacker can bias the keypair. They proposed a better DKG scheme that uses Pedersen’s VSS. Note that this is very confusing if you read the paper. Pedersen scheme uses Feldman’s VSS and then Gennaro et al fixed by it using Pedersen’s VSS. Whatever. Even better three years later they figured out the scheme by Pedersen from 1991 is actually good enough for Schnorr threshold signatures. The attacker can bias the public key or can bias the secret key but with Schnorr threshold signatures it doesn’t matter for security. That means that we have two simple schemes available. Either the one by Pedersen in 1991 or the one by Gennaro et al in 1999.
-Can we drop the assumption where we have the honest majority assumption? Unfortunately, no. The security proof relies on the fact that the majority of peers is honest. If you're a cryptographer, the idea is that the security reduction runs all the honest peers internally and it because it has a honest majority gets the shares from-- and it can use those shares to extract all the secrets from the attacker. This is how the induction works, and you can't make it work without changing the scheme in this strong setting.
+# Why do these schemes fail in practice?
-We have one idea for how to fix this, and this would be to use other commitments in Pedersen's verifiable secret sharing scheme which could enable some ability to extract some things even without having an honest majority. But it's a very early idea and we haven't deeply looked into it. Maybe it's a secure scheme, maybe not. We need to see.
+You may ask what’s the point? What are you trying to tell me now? I want to show you why those schemes in practice if you want to apply them.
-# Broadcast assumption
+# Issue 1: Trust Assumption
-Another issue is that the schemes assume a broadcast channel. They assume that every peer has a reliable and secure way of broadcasting messages to other peers. Reasonable assumption for robustness, but it's unreasonable assumption for unforgeability. If the network is broken, hten it shouldn't be the case that suddenly people can forge signatures. Actually, if you look at those schemes, you can see what happens. The attacker can split the view of his peers by splitting it into two worlds, where in each world he makes different claims about what peers are online or offline. What these protocols do is they reconstruct the secret nonces of the other parties.
+There are two main issues. The first issue is that there is a trust assumption. All those schemes assume that t-1 is less than half of all the peers. If you remember t-1 was the maximum number of malicious parties. What this translates is an honest majority assumption. If you look at the examples that I showed in the beginning some of them are doable, some not. 2-of-3 is ok, we can do it. 11-of-15 wouldn’t work with this assumption. 3-of-6 wouldn’t work with this assumption. This is not possible in this model. Let me explain why they need this assumption. Let’s use a counterexample. We have a scheme where we don’t have a honest majority, 6-of-9. For unforgeability 5 malicious peers shouldn’t be able to produce a signature. But robustness would say that 6 honest peers can produce a signature. If 5 peers are malicious then there are only 4 honest left. You can never achieve unforgeability and robustness at the same time. That’s actually not true. This is the worst case assumption.
-There is also an attack on unforgeability. Say the malicious broadcast channel elarns the nonce r, and the signature (R, s). The combined secret key is x = (something - something)/c.
+# Assumption Ignores Good Cases
-Malicious and offline are just two different things. If a peer is offline, you can't assume htey are malicious. This is like theory vs practice basically. Just because a peer appears offline, doesn't mean you should reconstruct his secrets in public. The simple idea to fix this is that instead of reconstructing the nonce, you could just reconstruct the partial signature that this peer is supposed to give. This looks like an easy fix and maybe it works, but maybe it doesn't work- we haven't tried to make a security proof yet but it looks okay.
+If you look at this assumption, the maximum number of malicious peers should be 5. What if only 3 peers are malicious? Then I can indeed produce a signature. When I set up a scheme I have to choose a t but if I choose t=5 it doesn’t mean that immediately 5 parties are malicious. It just means it is the maximum it can tolerate. Even if 5 people are malicious in the first scenario I can’t obtain a valid signature. This might be acceptable. What shouldn’t happen that those 5 parties can forge. This setting still makes sense. If you saw the [talk](https://www.youtube.com/watch?v=HCwRpOjgP3Q) yesterday by Dahlia Malkhi she talked about flexible BFT in a live but corrupt nodes. This is exactly the setting we have here. If those two peers in the middle, the yellow ones, are live but corrupt which means that they are trying to attack safety, which in our case is unforgeability but they won’t attack liveness this is exactly the model we need.
-# Wish list
+# Drop the Assumption?
-This is my wish list for threshold signatures:
+Can we fix these schemes? Maybe there was a weird reason why the papers make this honest majority assumption. Can we drop the assumption and have a scheme where it is indeed the case that if I have 5 malicious peers they can’t break unforgeability, they can only stop the system? Unfortunately no. The security proof relies on the fact that the majority of peers is honest. If you’re a cryptographer the idea is that the security reduction runs all the honest peers internally because it has an honest majority. It gets enough shares from the malicious peers and uses those shares to extract all the secrets of the attacker. This is how the reduction works. We can’t make that reduction work without changing the scheme in this stronger setting. We have one idea how to fix this and this would be to use other commitments in Pedersen’s verifiable secret sharing scheme that enables a reduction to extract some things even without having an honest majority. This is a very early idea, we haven’t looked deeply into it. Maybe it is an insecure scheme, we need to see.
-* Should be a scheme that produces ordinary Schnorr signatures
+# Issue 2: Broadcast assumption
-* No restrictions on the parameter k in k-of-n
+The second issue is that those schemes assume a broadcast channel. This means that every peer has a reliable and secure way of broadcasting messages to every other peer. This is a reasonable assumption for robustness because if we want liveness we need to assume that this network works in some sense. I think it is an unreasonable assumption for unforgeability. You should fail gracefully. If the network is broken it shouldn’t happen that suddenly people can forge signatures. If you look at those schemes this is what happens.
-* It should be unforgeable even if the broadcast mechanism is malicious
+# Attack on Unforgeability
-* It hsould be robust in a constant number of rounds, O(1)
+This is a simple attack in both of those schemes. Let’s say the attacker is the guy in the middle, the broadcast channel. There are 4 peers. What the attacker can do is split the view of 4 peers into two worlds. In the left world he claims that peer 1 and peer 2 are offline. In the second world he claims that peer 3 and peer 4 are offline. What these protocols do now is they reconstruct the secret nonces of the other parties. On the left hand side you would reconstruct r_1 and r_2. On the right hand side you would reconstruct r_3 and r_4. Now the attacker can run one of those worlds to the end. Then he obtains a combined nonce r and by completing one of those protocols the attacker can also obtain a signature. Now given the full private nonce and the signature he can compute the secret key. This means that if you use those protocols naively, if the network is insecure you lose unforgeability. There wasn’t even a malicious peer involved, just the network was malicious.
-* We want reasonable message complexity
+# Malicious vs Offline
-* It should be secure in parallel sessions, which is actually a problem in the contetx of multisig even though I didn't mention it.
+The underlying problem is that malicious and offline are just two different things. If a peer is offline you can’t assume he is malicious. There is no reason to assume this. A nice subtitle for this slide would be Theory vs Practice. Just because a peer is offline doesn’t mean that you should reconstruct his secret in public. The simple idea to fix this is instead of reconstructing the nonce you could just reconstruct the partial signature that the peer is supposed to give. This looks like an easy fix and maybe it works but maybe it doesn’t work. We haven’t tried to prove it is secure but it looks ok.
+
+# Wish list
+
+This is my wish list for threshold signatures. It should be a scheme that produces ordinary Schnorr signatures. There should be no restrictions on the parameter t. It should be unforgeable even if the broadcast mechanism is malicious. We should have robustness and O(1) rounds. It should terminate in a constant number of rounds. We want reasonable message complexity and it should be secure in parallel sessions. I didn’t mention it but it is also a problem in the context of multisignatures.
# Bonus list
-It would also be nice to have asynchrony, deterministic nonces, look at the setup algoirthm, adaptive security, and accountability for threshold signatures.
+If we have that maybe there are some things we can do on top where we don’t really have an idea. Asynchrony would be nice but it seems very hard unless you want to blow up the protocol exponentially. Deterministic nonces is interesting. Usually when you do Schnorr signatures or ECDSA you choose your nonce by applying a hash function to your secret key and your message to make sure you can’t screw up your randomness. But if you do this with multisignatures it is the other way round. If you do it deterministically you immediately leak your private key. We are working on another project where we try to solve this using a zero knowledge proof. I’m not sure it is a practical solution but at least it is a step towards a solution. Another thing we are interested in is looking at the setup algorithm. I have talked mostly about designing but what properties do we expect from setup? Do we want asynchrony or is it ok that the setup is more complex because we need to run it only once. Maybe we can have a real meeting. We need to look into these properties. Also adaptive security which means that corrupted nodes are not fixed at the beginning. I’m not sure how important that is. Then the other interesting property is accountability. Accountability means that if you look at the signature you can tell which of the peers have signed and which haven’t. This really depends on your setting whether you want that. An easy argument is if your signatures should look like ordinary Schnorr signatures then you probably can’t have this property. It looks like an ordinary Schnorr signature signed by a single party so how can you tell who signed? There are other schemes that have this property and it would be interesting to look at those.
+
+# Q&A
+
+Q - Can you expand on why a malicious broadcast channel is fine?
+
+A - You have to assume something about the network. Let’s say the network doesn’t work at all, you can’t have robustness.
+
+Q - If the broadcast channel is malicious you could say that you could easily know that. Or removing the whole assumption on a broadcast channel
+
+A - If you can get for example a scheme that works asynchronously it doesn’t rely on broadcast itself, this would be nice. One simple thing you can do is if you have a scheme that at least is unforgeable even if the broadcast channel is insecure then you can say “I have at most f malicious nodes”. I take f+1 leaders and run the broadcast through these f+1 leaders and I run f+1 instances of the protocol. This is safe because the protocol is unforgeable even if f of those leaders are malicious. Then I get robustness but it increases communication a lot. You can also run a reliable broadcast protocol but this increases communication even more. Maybe this is a simple and practical way to go once you have a scheme that stays unforgeable if the broadcast is malicious.
+
+Q - I thought I remembered that it was possible to construct a composite public key if it was any monotone boolean function of the constituent public keys for a Schnorr signature.
+
+A - I think this is true. I have not looked into those schemes but I think it is possible.
+
+Q - I am a little disappointed you are using Shamir secret sharing, it is fine, it works but it is a completely different mechanism for the threshold. If I can construct a monotone boolean function I can say “Key 1 plus Key 2 OR Key 2 plus Key 3 OR Key 1 plus Key 3”. I was expecting you to go in that direction. Is that not possible? Is there something completely broken about that direction?
+
+Q - The way I am aware of is to use Shamir secret sharing. You can write any monotone function. You have all these groups of n-of-n keys and you have a disjunction. You can have the members of the first group do distributed key generation to all the members of the other group. Now there is a total key that was generated by the first group of participants. Every group is able to reconstruct that key independently using Shamir. That is the only way I am aware of.
-Deterministic nonces are interesting. In ECDSA, you choose your nonce by applying your hash function to the secret key and message to make sure you cna't screw up the randomness. If you do it deterministically, you leak your private key. On another project, we're trying to solve this with a zero-knowledge proof and I'm not sure it's a practical solution but it might work.
+A - This is related. The reason why I focused on threshold was it is a simpler setting to start with. What you are saying is one of the most natural extensions. I should have listed it.
-We're also interested in looking at the setup algorithm. We've been looking mostly at signing, but for setup do we want asychrony? Maybe it can be more complex since it is run only once. We need to look at these properties.
+Q - The statement I am unclear on is whether it is generally possible to construct a composite public key that is an arbitrary monotone boolean function of the constituent public keys. You give me a signature algorithm which would say “I am going to subtract out all the missing parties that are not signing.” That becomes a pubkey tweak. Then you sign with the ones that are present.
-Adaptive security means that corruptive nodes aren't fixed at the beginning.
+Q - You want the constituent keys to be known upfront?
-Another interesting property is accountability. If you look at the threshold signature, then you should be able to tell which peers have signed and hwich haven't. But this depends on your setting as to whether you want this. An easy argument is that if you want your signatures to look like an ordinary Schnorr signature then you can't use this property.
+A - In general you can do monotone functions.
+Q - If we assume there is a dishonest majority in a 11-of-15 we cannot guarantee liveness unless assuming that you are going for this f round that you mentioned. There is no escape from that? In this round you don’t say anything. In the next round somebody else will not say anything.
+A - Unless we go to this f+1 setting and I don’t think this f+1 setting is unrealistic. Doing the broadcast on f+1 leaders. This is what I have shown here. If you do DKG for the key and for the nonce we can recover the rest of the nonce so we can finish the session. We don’t have to restart the session. One thing we need to be careful about is even if we assume that a lot of people are malicious it is not like we want to solve consensus here. It could be for example in this simple protocol where you run f+1 protocol instances on f+1 leaders they could all obtain different signatures. Having a threshold signature doesn’t mean that we solve consensus. We need to be careful.