Scalable collective authority prototype
Go Shell Other
Latest commit 874f4c1 Dec 19, 2016 @ineiti ineiti committed with nikkolasg Better `check` command output with -detail flag (#740)
* adding all known servers

* better check

* updated ismails server

* check roster up to sqrt len

* respect debug-flag

* flag details
Permalink
Failed to load latest commit information.
bftcosi renaming left to onet (#738) Dec 15, 2016
byzcoin renaming left to onet (#738) Dec 15, 2016
cisc Cothority import changed to onet (#736) Dec 15, 2016
cosi Better `check` command output with -detail flag (#740) Dec 19, 2016
cosimul renaming left to onet (#738) Dec 15, 2016
docker Cothority import changed to onet (#736) Dec 15, 2016
example renaming left to onet (#738) Dec 15, 2016
guard Cothority import changed to onet (#736) Dec 15, 2016
identity renaming left to onet (#738) Dec 15, 2016
jvss renaming left to onet (#738) Dec 15, 2016
manage renaming left to onet (#738) Dec 15, 2016
ntree renaming left to onet (#738) Dec 15, 2016
randhound renaming left to onet (#738) Dec 15, 2016
skipchain renaming left to onet (#738) Dec 15, 2016
status Cothority import changed to onet (#736) Dec 15, 2016
.gitignore Stress test and (network) refactoring/let OS pick a port if given `0` Aug 11, 2016
.travis.yml Merge cosi into cothority (#665) Nov 9, 2016
AUTHORS AGPL-license (#628) Nov 21, 2016
CHANGELOG Cothority import changed to onet (#736) Dec 15, 2016
CLAC AGPL-license (#628) Nov 21, 2016
CLAI AGPL-license (#628) Nov 21, 2016
CONTRIBUTION AGPL-license (#628) Nov 21, 2016
LICENSE AGPL-license (#628) Nov 21, 2016
LICENSE.AGPL AGPL-license (#628) Nov 21, 2016
Makefile Cothority import changed to onet (#736) Dec 15, 2016
README.md renaming left to onet (#738) Dec 15, 2016
README_Cothority.md Cothority import changed to onet (#736) Dec 15, 2016
README_protocols.md Cothority import changed to onet (#736) Dec 15, 2016
cothority.go Better `check` command output with -detail flag (#740) Dec 19, 2016
cothority_test.go Cothority import changed to onet (#736) Dec 15, 2016
coveralls.sh Fix some network issues (#673) Nov 16, 2016
dedis-servers.toml Better `check` command output with -detail flag (#740) Dec 19, 2016
errcheck.sh reverted `RegisterChannels` and use `RegisterChannel` again Apr 8, 2016
gofmt.sh use go fmt instead Dec 10, 2015
lint.sh changed lint to ignore yet-to-be-documented packages Apr 1, 2016
network.proto Cothority import changed to onet (#736) Dec 15, 2016
run_cothority.sh Cothority import changed to onet (#736) Dec 15, 2016
test.sh Cothority import changed to onet (#736) Dec 15, 2016

README.md

Build Status Coverage Status

Cothority

This repository implements the collective authority (cothority) framework. It offers a framework for simulating and deploying decentralized and distributed cryptographic protocols.

It works closely together with the cryptographic-library found in dedis/crypto and allows for setting up of protocols, services, and "apps". A protocol will send back and forth messages, mostly in a tree-based structure of nodes, but it can also broadcast or bypass the tree. A service interacts with clients and will spawn and wait for the result of different protocols. An app is an example of a user-space program that can communicate to one or more services of a cothority. You can find a list of protocols and services supported later.

Warning

**The software provided in this repository is highly experimental and under heavy development. Do not use it yet for anything security-critical. or if you use it, do so in a way that supplements (rather than replacing) existing, stable signing mechanisms.

All usage is at your own risk!**

Requirements

In order to build (and run) the simulations you need to install a recent Golang version (1.5.2+). See Golang's documentation on how-to install and configure Go, including setting the GOPATH environment variable. You can run CoSi either as a standalone application or in testbed simulations, as described below.

Versions

For the moment we have two version: v0 and master.

V0

This is a stable version that depends on the v0-versions of the other dedis-packages. It will only receive bugfixes, but no changes that will make the code incompatible. You can find this version at:

https://github.com/dedis/cothority/tree/v0

If you write code that uses our library in the v0-version, be sure to reference it as

import "gopkg.in/dedis/cothority.v0"

Master

The master-branch is used for day-to-day development and will break your code about once a week. If you are using this branch, be sure to do

go get -u -t ./...

from time to time, as all dedis-dependencies change quite often.

Installation

There are three apps available:

  • cothorityd - which is the server-part that you can run to add a node
  • CoSi - the CoSi-app
  • status - reads out the status of a cothority

You will find a README.md in each of its directory. To build the apps, you can run the following commands:

go get github.com/dedis/cothority/app/cothorityd
go get github.com/dedis/cothority/app/status

Apps

  • cothorityd - the basic
  • cosi - collective signatures
  • status - returns the status of the given group
  • cisc - handle your ssh-keys on a blockchain
  • hotpets - hotpets16-branch

Protocols

CoSi - Collective Signing

CoSi is a protocol for scalable collective signing, which enables an authority or leader to request that statements be publicly validated and (co-signed) by a decentralized group of witnesses. Each run of the protocol yields a single digital signature with size and verification cost comparable to an individual signature, but compactly attests that both the leader and perhaps many witnesses observed and agreed to sign the statement.

RandHound - Verifiable Randomness Scavenging Protocol

RandHound is a novel protocol for generating strong, bias-resistant, public random numbers in a distributed way and produces in parallel a proof to convince third parties that the randomness is correct and unbiased, provided a threshold of servers are non-malicious.

JVSS - Joint Verifiable Secret Sharing

The JVSS protocol implements Schnorr signing using joint verifiable secret sharing.

Naive and NTree

Similar to JVSS these two protocols are included to compare their scalability with CoSi's. In the naive approach a leader simply collects standard individual signatures of all participants. NTree is the same protocol but using a tree (n-ary) topology for aggregating the individual signatures.

Simulation

Starting a simulation of one the provided protocols (or your own) either on localhost or, if you have access, on DeterLab is straight forward and described in the following sub-sections.

Localhost

To run a simple signing check on localhost, execute the following commands:

# download project and its dependencies
go get -d github.com/dedis/cothority 
# build the simulation binary
cd $GOPATH/src/github.com/dedis/cothority/simul
go build
# run the simulation
./simul runfiles/test_cosi.toml

DeterLab

For more realistic, large scale simulations you can use DeterLab. Find more information on how to use DeterLab here.

onet framework

Core of this repository is a framework for implementing secure, distributed systems. It does so by offering an API for implementing and running different kind of protocols which may rely on other, pre-defined protocols.

Using the onet framework, you can:

  • simulate up to 32000 nodes using Deterlab (which is based on PlanetLab)
  • run local simulations for up to as many nodes as your local machines allows

The framework is round-based using message-passing between different hosts which form a tree. Every protocol defines the steps needed to accomplish the calculations, and the framework makes sure that all messages are passed between the hosts.

Directory-structure

  • crypto/, log/, monitor/, network/: additional libraries for the framework
  • simul/: simulation-related code
  • app/: all apps in user-space
  • protocols/: the protocol-definitions for cothority
  • services/: services using the protocols