LatticeX-Foundation / opentss

An ECDSA threshold signature algorithm implemented in Rust.
GNU General Public License v3.0
137 stars 30 forks source link

How to recover one valid {t,n} threshold (PublicKey, PrivateKey) pair ? #1

Open daevontkhplanesw opened 2 years ago

daevontkhplanesw commented 2 years ago

Amazing library. We really love it. For work, we can't use the Signing function, instead we need to generate a valid {t,n} threshold ecdsa (PublicKey, PrivateKey) pair. We can even ask the t out of n clients to send their local private keys to the final computer that will generate the final valid pair. Also this process will be used only once as we no longer use the same party again.

Let's rewrite here our scenario

  1. n computers generate their local secrets.
  2. Using signing function on a dummy message, {t,n} can recover the PublicKey of the final pair from the signed dummy message.
  3. At a certain point in time, t of these n computers will share their keys to a special node.
  4. This special node should be able to recover (create) a valid {t,n} threshold ECDSA (Public,Private) key pair.
  5. We discard the party as we no longer need it.

Think it as a 3rd party authentication service that is able to recreate the final (PublicKey,PrivateKey) pair. Or think it as an escrow multi sig. We know from the beginning the multi sig address, and after some time t out of n will allow one node to create the (PublicKey, PrivateKey) to claim control over the multi-sig address.

Any idea of how to do it ? We really appreciate if you can help us, otherwise we can not use this amazing library in our work.

JunHash commented 2 years ago

Hi daevontkhplanesw. I am the project lead of open tss. It is great to feedback your landing scenario. Are you free to schedule a meeting to sync up the details so that we can priority the roadmap internal. My personal email: kyle.song@latticex.foundation

ThantZin-develope commented 1 year ago

Here, I am also the beginner of TSS. But there is something i know which is the main features of TSS are the keygen and signing process are computed distributedly. There is also the SSSS scheme, in which private key is reconstructed before signing. So your requirement is more likely compatible with SSSS scheme instead TSS scheme. Here is one of the libaray that may give your requirement [ https://github.com/fernandolobato/ecc_verifiable_threshold_cryptosystem ].