Skip to content
Philipp Jovanovic edited this page Jan 12, 2017 · 45 revisions

Cothority

A collective authority (cothority) is a set of servers, called conodes, that collectively execute decentralized protocols, e.g., for collective signing, threshold signing, Byzantine agreement, or generation of public-randomness. The software in this repository allows you to access the services of a cothority through different client applications and/or run your own cothority server.

If you have questions or remarks on the cothority project, feel free to reach out to us through our mailing list or by email.

Conode

The conode is a server application from which collective authorities are built that in turn run decentralized protocols and provide services to clients.

Applications

The following client applications are available:

  • CoSi - Request and verify collective signatures
  • Cisc - Manage Cisc identity skipchains, permissioned blockchain-based key/value storages for organizing idenities (e.g., SSH-keys)
  • PoP - Create proof-of-personhood tokens
  • Guard - Store passwords using threshold cryptography
  • Status - Query conode status

Services

Most of the apps rely on a service. You can find more information in the api.go of those services:

  • Service_CoSi - Collective Signing, where you can submit a hash of a document and get a collective signature on it
  • Service_Guard - framework to allow distributed encryption and decryption of passwords without a useless central database, if hacked
  • Service_Identity - Cisc Identity Skipchain, a distributed key/value storage handled by a permissioned, personal blockchain with an SSH-plugin
  • Service_SkipChain - a permissioned blockchain for storing arbitrary data if a consensus of a group of nodes is found
  • Service_Status - returns the status of a conode

Protocols

This is a list of available protocols in the conode-repo:

  • Protocol_CoSi - Collective Signing. Creates an aggregate Schnorr signature in a tree over 1'000s of nodes
  • Protocol_Example - example-protocols demonstrating the use of handlers and channels when writing protocols
  • Protocol_ByzCoin - inspired by Bitcoin-NG. Uses BFTCoSi to add microblocks
  • Protocol_RandHound - generate verifiable random numbers
  • BFTCoSi - Byzantine Fault Tolerant Collective Signing - implements PBFT by having first a commit-round, followed by a signing-round
  • JVSS - Joint Verifiable Secret Sharing - distribute a secret between different nodes, then sign and verify signatures in a distributed way
  • Messaging - used by other services or protocols when messages need to be sent to other nodes
  • Ntree - naive tree signing schemes to compare with CoSi

Simulations

In some of the directories you can find simulations that are used to verify the correctness of the protocols when run across 100s or 1000s of nodes. To run the simulations, see Simulation.

Documentation

Be sure also to check out the following documentation of the other parts of the project:

License

All repositories in https://github.com/cothority are double-licensed under a GNU/AGPL 3.0 and a commercial license. If you want to have more information, contact us at bryan.ford@epfl.ch or linus.gassser@epfl.ch.

Contributing

If you want to contribute to Cothority-ONet, please have a look at CONTRIBUTION for licensing details. Once you are OK with those, you can have a look at our coding-guidelines in Coding. In short, we use the github-issues to communicate and pull-requests to do code-review. Travis makes sure that everything goes smoothly. And we'd like to have good code-coverage.

Contact

You can contact us at https://groups.google.com/forum/#!forum/cothority

Clone this wiki locally