biscotti

command module
v0.0.0-...-dfba71b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2020 License: BSD-2-Clause Imports: 3 Imported by: 0

README

Biscotti: machine learning on the blockchain

Biscotti is a fully decentralized peer-to-peer system for multi-party machine learning (ML). Peers participate in the learning process by contributing (possibly private) datasets and coordinating in training a global model of the union of their datasets. Biscotti uses blockchain primitives for coordination between peers and relies on differential privacy and cryptography techniques to provide privacy and security guarantees to peers.

For more details about Biscotti's design, see our Arxiv paper.

@article{Shayan2018,
  author    = {Muhammad Shayan and Clement Fung and Chris J. M. Yoon and Ivan Beschastnikh},
  title     = {{Biscotti: {A} Ledger for Private and Secure Peer-to-Peer Machine Learning}},
  journal   = {CoRR},
  volume    = {abs/1811.09904},
  year      = {2018},
  url       = {http://arxiv.org/abs/1811.09904},
  archivePrefix = {arXiv},
  eprint    = {1811.09904},
}

Dependencies

We use the the go-python library for interfacing between the distributed system code in Go and the ML logic in Python. Unfortunately, Go-python doesn't support Python versions > 2.7.12. Please ensure that your default OS Python version is 2.7.12.

Setting up the environment

Inside azure/azure-setup, there is an install script called azure-install.sh. Run this script to install Go and all the related dependencies. The script also clones this repo for you.

Running Biscotti

Local deployment

Go to the DistSys folder. Run the script localTest.sh with:

bash localTest.sh <numNodes> <dataset>

For example

bash localTest.sh 10 creditcard

Non-local deployment

  1. You must create a file in azure/azure-conf containing the list of all IPs of the peer nodes.

  2. To deploy Biscotti on different machines, you need to have set up ssh-access to all other machines from your local machine using your public key.

  3. On each machine, install all the dependencies using the azure-install.sh script above.

  4. Deploy Biscotti on your machines by running the runBiscotti script in azure/azure-run.

bash runBiscotti.sh <nodesInEachVM> <totalNodes> <hostFileName> <dataset>

For example, if you want to deploy 100 nodes across 20 machines using the mnist dataset, then run the script as follows:


bash runBiscotti.sh 5 100 hostFile mnist

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
lib
dedis/kyber
Package kyber provides a toolbox of advanced cryptographic primitives, for applications that need more than straightforward signing and encryption.
Package kyber provides a toolbox of advanced cryptographic primitives, for applications that need more than straightforward signing and encryption.
dedis/kyber/encrypt/ecies
Package ecies implements the Elliptic Curve Integrated Encryption Scheme (ECIES).
Package ecies implements the Elliptic Curve Integrated Encryption Scheme (ECIES).
dedis/kyber/examples
Package examples provides a suite of tests showing how to use the different abstraction and protocols provided by the kyber library.
Package examples provides a suite of tests showing how to use the different abstraction and protocols provided by the kyber library.
dedis/kyber/group/edwards25519
Package edwards25519 provides an optimized Go implementation of a Twisted Edwards curve that is isomorphic to Curve25519.
Package edwards25519 provides an optimized Go implementation of a Twisted Edwards curve that is isomorphic to Curve25519.
dedis/kyber/group/internal/marshalling
Package marshalling provides a common implementation of (un)marshalling method using Writer and Reader.
Package marshalling provides a common implementation of (un)marshalling method using Writer and Reader.
dedis/kyber/group/mod
Package mod contains a generic implementation of finite field arithmetic on integer fields with a constant modulus.
Package mod contains a generic implementation of finite field arithmetic on integer fields with a constant modulus.
dedis/kyber/group/nist
Package nist implements cryptographic groups and ciphersuites based on the NIST standards, using Go's built-in crypto library.
Package nist implements cryptographic groups and ciphersuites based on the NIST standards, using Go's built-in crypto library.
dedis/kyber/proof
Package proof implements generic support for Sigma-protocols and discrete logarithm proofs in the Camenisch/Stadler framework.
Package proof implements generic support for Sigma-protocols and discrete logarithm proofs in the Camenisch/Stadler framework.
dedis/kyber/proof/dleq
Package dleq provides functionality to create and verify non-interactive zero-knowledge (NIZK) proofs for the equality (EQ) of discrete logarithms (DL).
Package dleq provides functionality to create and verify non-interactive zero-knowledge (NIZK) proofs for the equality (EQ) of discrete logarithms (DL).
dedis/kyber/share
Package share implements Shamir secret sharing and polynomial commitments.
Package share implements Shamir secret sharing and polynomial commitments.
dedis/kyber/share/dkg/pedersen
Package dkg implements the protocol described in "A threshold cryptosystem without a trusted party" by Torben Pryds Pedersen.
Package dkg implements the protocol described in "A threshold cryptosystem without a trusted party" by Torben Pryds Pedersen.
dedis/kyber/share/dkg/rabin
Package dkg implements the protocol described in "Secure Distributed Key Generation for Discrete-Log Based Cryptosystems" by R. Gennaro, S. Jarecki, H. Krawczyk, and T. Rabin.
Package dkg implements the protocol described in "Secure Distributed Key Generation for Discrete-Log Based Cryptosystems" by R. Gennaro, S. Jarecki, H. Krawczyk, and T. Rabin.
dedis/kyber/share/pvss
Package pvss implements public verifiable secret sharing as introduced in "A Simple Publicly Verifiable Secret Sharing Scheme and its Application to Electronic Voting" by Berry Schoenmakers.
Package pvss implements public verifiable secret sharing as introduced in "A Simple Publicly Verifiable Secret Sharing Scheme and its Application to Electronic Voting" by Berry Schoenmakers.
dedis/kyber/share/vss/pedersen
Package vss implements the verifiable secret sharing scheme from "Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing" by Torben Pryds Pedersen.
Package vss implements the verifiable secret sharing scheme from "Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing" by Torben Pryds Pedersen.
dedis/kyber/share/vss/rabin
Package vss implements the verifiable secret sharing scheme from the paper "Provably Secure Distributed Schnorr Signatures and a (t, n) Threshold Scheme for Implicit Certificates".
Package vss implements the verifiable secret sharing scheme from the paper "Provably Secure Distributed Schnorr Signatures and a (t, n) Threshold Scheme for Implicit Certificates".
dedis/kyber/shuffle
Package shuffle implements Andrew Neff's verifiable shuffle proof scheme.
Package shuffle implements Andrew Neff's verifiable shuffle proof scheme.
dedis/kyber/sign/anon
Package anon implements cryptographic primitives for anonymous communication.
Package anon implements cryptographic primitives for anonymous communication.
dedis/kyber/sign/bls
Package bls implements the Boneh-Lynn-Shacham (BLS) signature scheme which was introduced in the paper "Short Signatures from the Weil Pairing".
Package bls implements the Boneh-Lynn-Shacham (BLS) signature scheme which was introduced in the paper "Short Signatures from the Weil Pairing".
dedis/kyber/sign/cosi
Package cosi implements the collective signing (CoSi) algorithm as presented in the paper "Keeping Authorities 'Honest or Bust' with Decentralized Witness Cosigning" by Ewa Syta et al.
Package cosi implements the collective signing (CoSi) algorithm as presented in the paper "Keeping Authorities 'Honest or Bust' with Decentralized Witness Cosigning" by Ewa Syta et al.
dedis/kyber/sign/dss
Package dss implements the Distributed Schnorr Signature protocol from the paper "Provably Secure Distributed Schnorr Signatures and a (t, n) Threshold Scheme for Implicit Certificates".
Package dss implements the Distributed Schnorr Signature protocol from the paper "Provably Secure Distributed Schnorr Signatures and a (t, n) Threshold Scheme for Implicit Certificates".
dedis/kyber/sign/eddsa
Package eddsa implements the EdDSA signature algorithm according to RFC8032.
Package eddsa implements the EdDSA signature algorithm according to RFC8032.
dedis/kyber/sign/schnorr
Package schnorr implements the vanilla Schnorr signature scheme.
Package schnorr implements the vanilla Schnorr signature scheme.
dedis/kyber/sign/tbls
Package tbls implements the (t,n)-threshold Boneh-Lynn-Shacham signature scheme.
Package tbls implements the (t,n)-threshold Boneh-Lynn-Shacham signature scheme.
dedis/kyber/suites
Package suites allows callers to look up Kyber suites by name.
Package suites allows callers to look up Kyber suites by name.
dedis/kyber/util/encoding
Package encoding package provides helper functions to encode/decode a Point/Scalar in hexadecimal.
Package encoding package provides helper functions to encode/decode a Point/Scalar in hexadecimal.
dedis/kyber/util/key
Package key creates asymmetric key pairs.
Package key creates asymmetric key pairs.
dedis/kyber/util/random
Package random provides facilities for generating random or pseudorandom cryptographic objects.
Package random provides facilities for generating random or pseudorandom cryptographic objects.
dedis/kyber/util/test
Package test contains generic testing and benchmarking infrastructure for cryptographic groups and ciphersuites.
Package test contains generic testing and benchmarking infrastructure for cryptographic groups and ciphersuites.
dedis/kyber/xof
Package xof holds implementations and testing code for the various extendable output functions.
Package xof holds implementations and testing code for the various extendable output functions.
dedis/kyber/xof/blake2xb
Package blake2xb provides an implementation of kyber.XOF based on the Blake2xb construction.
Package blake2xb provides an implementation of kyber.XOF based on the Blake2xb construction.
dedis/kyber/xof/keccak
Package keccak provides an implementation of kyber.XOF based on the Shake256 hash.
Package keccak provides an implementation of kyber.XOF based on the Shake256 hash.
dedis/protobuf
Package protobuf implements Protocol Buffers reflectively using Go types to define message formats.
Package protobuf implements Protocol Buffers reflectively using Go types to define message formats.
gonum/blas
Package blas provides interfaces for the BLAS linear algebra standard.
Package blas provides interfaces for the BLAS linear algebra standard.
gonum/blas/blas32
Package blas32 provides a simple interface to the float32 BLAS API.
Package blas32 provides a simple interface to the float32 BLAS API.
gonum/blas/blas64
Package blas64 provides a simple interface to the float64 BLAS API.
Package blas64 provides a simple interface to the float64 BLAS API.
gonum/blas/cblas128
Package cblas128 provides a simple interface to the complex128 BLAS API.
Package cblas128 provides a simple interface to the complex128 BLAS API.
gonum/blas/cblas64
Package cblas64 provides a simple interface to the complex64 BLAS API.
Package cblas64 provides a simple interface to the complex64 BLAS API.
gonum/blas/cgo
Package cgo provides bindings to a C BLAS library.
Package cgo provides bindings to a C BLAS library.
gonum/blas/native
Package native is a Go implementation of the BLAS API.
Package native is a Go implementation of the BLAS API.
gonum/blas/native/internal/math32
Package math32 provides float32 versions of standard library math package routines used by gonum/blas/native.
Package math32 provides float32 versions of standard library math package routines used by gonum/blas/native.
gonum/blas/testblas
Package testblas provides tests for blas implementations.
Package testblas provides tests for blas implementations.
gonum/blas/testblas/benchautogen
Script for automatic code generation of the benchmark routines
Script for automatic code generation of the benchmark routines
gonum/floats
Package floats provides a set of helper routines for dealing with slices of float64.
Package floats provides a set of helper routines for dealing with slices of float64.
gonum/internal/asm/c128
Package c128 provides complex128 vector primitives.
Package c128 provides complex128 vector primitives.
gonum/internal/asm/c64
Package c64 provides complex64 vector primitives.
Package c64 provides complex64 vector primitives.
gonum/internal/asm/f32
Package f32 provides float32 vector primitives.
Package f32 provides float32 vector primitives.
gonum/internal/asm/f64
Package f64 provides float64 vector primitives.
Package f64 provides float64 vector primitives.
gonum/internal/binding
Package binding provides helpers for building autogenerated cgo bindings.
Package binding provides helpers for building autogenerated cgo bindings.
gonum/lapack/cgo
Package cgo provides an interface to bindings for a C LAPACK library.
Package cgo provides an interface to bindings for a C LAPACK library.
gonum/lapack/cgo/lapacke
Package lapacke provides bindings to the LAPACKE C Interface to LAPACK.
Package lapacke provides bindings to the LAPACKE C Interface to LAPACK.
gonum/lapack/lapack64
Package lapack64 provides a set of convenient wrapper functions for LAPACK calls, as specified in the netlib standard (www.netlib.org).
Package lapack64 provides a set of convenient wrapper functions for LAPACK calls, as specified in the netlib standard (www.netlib.org).
gonum/lapack/native
Package native is a pure-go implementation of the LAPACK API.
Package native is a pure-go implementation of the LAPACK API.
gonum/matrix
Package matrix provides common error handling mechanisms for matrix operations in mat64 and cmat128.
Package matrix provides common error handling mechanisms for matrix operations in mat64 and cmat128.
gonum/matrix/cmat128
Package cmat128 provides implementations of complex128 matrix structures and linear algebra operations on them.
Package cmat128 provides implementations of complex128 matrix structures and linear algebra operations on them.
gonum/matrix/conv
Package conv provides matrix type interconversion utilities.
Package conv provides matrix type interconversion utilities.
gonum/matrix/mat64
Package mat64 provides implementations of float64 matrix structures and linear algebra operations on them.
Package mat64 provides implementations of float64 matrix structures and linear algebra operations on them.
gonum/stat
Package stat provides generalized statistical functions.
Package stat provides generalized statistical functions.
gonum/stat/combin
Package combin implements routines involving combinatorics (permutations, combinations, etc.).
Package combin implements routines involving combinatorics (permutations, combinations, etc.).
gonum/stat/distmat
Package distmat provides probability distributions over matrices.
Package distmat provides probability distributions over matrices.
gonum/stat/distmv
Package distmv provides multivariate random distribution types.
Package distmv provides multivariate random distribution types.
gonum/stat/distuv
Package distuv provides univariate random distribution types.
Package distuv provides univariate random distribution types.
gonum/stat/samplemv
Package samplemv implements advanced sampling routines from explicit and implicit probability distributions.
Package samplemv implements advanced sampling routines from explicit and implicit probability distributions.
gonum/stat/sampleuv
Package sampleuv implements advanced sampling routines from explicit and implicit probability distributions.
Package sampleuv implements advanced sampling routines from explicit and implicit probability distributions.
vrf-reference
crypto/commitments
Package commitments implements a cryptographic commitment.
Package commitments implements a cryptographic commitment.
crypto/vrf
Package vrf defines the interface to a verifiable random function.
Package vrf defines the interface to a verifiable random function.
crypto/vrf/p256
Package p256 implements a verifiable random function using curve p256.
Package p256 implements a verifiable random function using curve p256.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL