Please describe your proposed solution.
<u>The defined problem: </u>
- Each Cardano transaction requires a private key to sign and securing this private key is a daunting task.
- While Cardano transaction supports multisig through multi witnesses, it has a few problems:
- It requires multiple signatures per transaction and hence increases transaction cost and take more spaces from 16kb limit
- It’s not fault tolerant. If one of the signers is offline, the transaction fails to sign.
This proposal proposes a better way to approach multi party signers by leveraging Threshold Signature Scheme. Its main benefits are:
- Break a private key into N party, each is held by a participating party. No single party can know the secret of the private key of the group (No Single point failure)
- It always produces one signature, no matter how many parties participate. (Single signature, no transaction overhead).
- It requires only (t + 1) out of N to sign a transaction (t is usually about ⅔ of N). This means if some nodes are offline but there are still at least t+1 online nodes, the group is still capable of signing a transaction (disaster tolerant).
We aim to make this as an open source SDK so that any Cardano team can deploy it as an independent service on their server. Their main app will communicate with this key signing service through JSON RPC without knowing how it works underneath.
We will leverage the recent research in multi party signing to allow distributed key signing on Cardano. Cardano uses the EDDSA signature scheme for its transactions. This scheme has a number of advantages compared ECDSA when it comes to distributed signing.
----------
<u>The proposed solution:</u>
The high level idea of Threshold Signature Scheme sTSS is to break a single private key (unknown to everyone) into multiple parts, each is kept by a single validator. When a transaction needs to be signed, all validators participate into the signing process and produce a unique signature for a transaction.
Each signing requires any (t + 1) out of N nodes to sign with this number t configurable by the group (usually it’s set to ⅔ of N). This allows some nodes to go offline while not blocking the group from signing.
There are 2 phases in the signing process:
- Setup (once): Each node in a group generates a secret and exchanges some cryptographic proof with each other.
- Signing (multiple times): the signing of a message goes through several steps:
- A leader of the group is selected based on the hash of the message.
- The leader picks up (t+1) out of N nodes through a deterministic algorithm
- The nodes exchange cryptographic messages with each other, and each will create a “fraction” of the final signature.
- At the end, all signature “fractions” are created and combined to create a final signature
——––
<u>Project end-users aim:</u>
The final signature looks exactly the same as if it is produced from a single private key. This allows nodes or wallet’s owner to make a seamless transition from single private key signing to multi-party signing without major change in their system.
This signing node will be built into a micro-service and any application can request a signature through JSON RPC interface.
How does your proposed solution address the challenge and what benefits will this bring to the Cardano ecosystem?
We will address the challenge OSDE: Open Source Dev Ecosystem in the following ways:
- Leverage Threshold Signature Scheme to allow distributed key signings while producing only a single signature per transaction.
- The final signature looks like it is produced from a single private key. This allows dev teams to make a smooth transition from single private key to multi sign.
- This could run as an independent service and allows any app to hook to use without any major change in their system.
- The SDK is easy to use, open source with MIT license. Anyone can use it and adapt for their needs.
How do you intend to measure the success of your project?
<u>Quantitative metrics:</u>
- Github: The number of stars and forks on github.
- Developer Adoption: the number of Cardano teams that use our repos or binary.
- Open source contribution: the number of Cardano developers (outside our team) who contribute or file issues on the repos.
<u>Qualitative metrics:</u>
- Evaluation through peer reviews
Please describe your plans to share the outputs and results of your project?
The project will be 100% open source on Github and anyone can see and track the progress of the team.
The results and progresses will be shared through following channels:
- Cardano forums: we will announce any major milestones of the project to Cardano forum
- Cardano meetings and conference: we will be present at local Cardano meetings and share with community members any updates from our work. This promotes the use of open source to anyone who are interested in knowing about tools and Cardano as a general.