Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TODO: Add a basic Readme #2

Closed
c0gent opened this issue Aug 3, 2018 · 8 comments
Closed

TODO: Add a basic Readme #2

c0gent opened this issue Aug 3, 2018 · 8 comments
Assignees

Comments

@c0gent
Copy link
Contributor

c0gent commented Aug 3, 2018

@vkomenda I've been told you may already be handling this or at least you have an example you want to use already but I'm happy to help if you can show me which example you want to use.

Or I'll just make something up :P

@c0gent c0gent self-assigned this Aug 3, 2018
@andogro
Copy link
Contributor

andogro commented Aug 6, 2018

Basic README outline - will hinge on nature of the example.

Description

Threshold Crypto provides constructors for encrypted message handling within a public key encryption system. We utilize the pairing elliptic curve library to create and enable reconstruction of public and private key shares.

In a network environment, messages are signed and encrypted, and key and signature shares are distributed to network participants. A message can be decrypted and authenticated only with cooperation from any subset of threshold + 1 network participants.

Installation / Usage

  • Parameters, parameter generation
    • threshold, signatures, message?
  • Example Use Case

Testing

License

Contributing

@c0gent
Copy link
Contributor Author

c0gent commented Aug 6, 2018

I was going to make a pretty standard Rust library readme with the usual sections, something I've done many times (https://github.com/cogciprocate/ocl, https://github.com/cogciprocate/voodoo, etc.).

I'll certainly consult you for approval before merging it @andogro :)

@c0gent
Copy link
Contributor Author

c0gent commented Aug 6, 2018

I'll be sure to copy CONTRIBUTING into the repo and add a link, etc.

@andogro
Copy link
Contributor

andogro commented Aug 6, 2018

sure, let me know how I can help as needed.

@c0gent
Copy link
Contributor Author

c0gent commented Aug 6, 2018

Will do, I'll sumbit a PR for it as soon as we figure out what example we want to use.

@c0gent
Copy link
Contributor Author

c0gent commented Aug 6, 2018

I hope I'm not stepping on your toes here by the way. If you have it under control just wave me off. I'm not used to having a dedicated writer available! :)

@afck
Copy link
Collaborator

afck commented Aug 8, 2018

I'd probably put the introductory text like this:

This is a threshold cryptosystem for collaborative decryption and signatures: Choose a threshold value t, create a key set, distribute N secret key shares among the participants and publish the public master key. A third party can now encrypt a message to the public master key, and any set of t + 1 participants—but no fewer!—can collaborate to decrypt it. Also, any t + 1 participants can collaborate to sign a message, producing a signature that can be verified against the public master key.

One application is distributed networks that need to tolerate up to t adversarial nodes: It requires t + 1 nodes to reveal information encrypted to the network (the master key), or to produce information signed by the network, so it can be trusted by a third party.

This cryptosystem has the property that signatures are unique, i.e. independent of which particular participants produced it. If S1 and S2 are signatures for the same message, produced by two different sets of t + 1 secret key share holders each, then they won't just both be valid, but in fact equal. This is useful in some applications, for example it allows using the signature of a message as a pseudorandom number that is unknown to anyone until t + 1 participants agree to reveal it.

In its simplest form, threshold cryptography requires a trusted dealer who produces the secret key shares and distributes them. However, there are ways to produce the keys themselves in a way that guarantees that nobody except the corresponding participant knows their secret in the end, and this crate includes the basic tools to implement such a Distributed Key Generation scheme.

@afck
Copy link
Collaborator

afck commented Aug 9, 2018

For usage examples, maybe some of the tests could be adapted:

  • test_simple_sig, test_threshold_sig for signing.
  • test_simple_enc, test_threshold_enc for encrypting and decrypting.
  • poly::distributed_key_generation for distributed key generation.

@andogro andogro closed this as completed Sep 12, 2018
BaldyAsh added a commit to matter-labs-archive/threshold_crypto that referenced this issue Oct 17, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants