{"id":13612722,"url":"https://github.com/CHURPTeam/CHURP","last_synced_at":"2025-04-13T12:32:29.015Z","repository":{"id":130461279,"uuid":"173337576","full_name":"CHURPTeam/CHURP","owner":"CHURPTeam","description":"Decentralize your secrets!","archived":false,"fork":false,"pushed_at":"2019-09-01T20:15:16.000Z","size":188,"stargazers_count":117,"open_issues_count":3,"forks_count":11,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-11-07T20:43:30.251Z","etag":null,"topics":["cryptography","decentralized","secret-management","secret-sharing-protocols"],"latest_commit_sha":null,"homepage":"http://www.churp.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CHURPTeam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-03-01T16:53:36.000Z","updated_at":"2024-07-24T07:09:15.000Z","dependencies_parsed_at":"2023-04-06T10:32:08.546Z","dependency_job_id":null,"html_url":"https://github.com/CHURPTeam/CHURP","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CHURPTeam%2FCHURP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CHURPTeam%2FCHURP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CHURPTeam%2FCHURP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CHURPTeam%2FCHURP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CHURPTeam","download_url":"https://codeload.github.com/CHURPTeam/CHURP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248714689,"owners_count":21149940,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cryptography","decentralized","secret-management","secret-sharing-protocols"],"created_at":"2024-08-01T20:00:33.544Z","updated_at":"2025-04-13T12:32:28.574Z","avatar_url":"https://github.com/CHURPTeam.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"----------------------------------------------------------------\n\n**The CHURP code is an academic research prototype, and meant to elucidate protocol details and for proofs-of-concept, and benchmarking. It has not been developed in a production environment and is not meant for deployment.**\n\n----------------------------------------------------------------\n\n![logo](logo.png)\n\n# CHURP: Dynamic-Committee Proactive Secret Sharing\n\n[![CircleCI](https://circleci.com/gh/bl4ck5un/ChuRP.svg?style=svg\u0026circle-token=34c3da94eba4225de1da5c4eaabd37466cd50a8a)](https://circleci.com/gh/bl4ck5un/ChuRP)\n\n\nAchieving decentralization requires decentralized cryptography. CHURP (CHUrn-Robust Proactive secret sharing) is a cryptographic protocol for secret sharing in decentralized settings, where committee nodes may come and go. In such a setting, traditional secret sharing (e.g., Shamir's) is no longer secure. Featuring several fundamental innovations, CHURP accomplishes the mission while being 2300x more efficient than previous schemes!\n\n## Getting Started\n\nThis the repo for CHURP code (in Golang). Below you can find build and usage instructions.\n\nIf you want to run a demo or play with pre-complied CHURP, the easiest way to get started is to use docker. Please refer to the [docker document](https://docs.docker.com/install/#supported-platforms) for installation instructions.\n\nIf you want to build CHURP from source, we've prepared a special `builder` docker image for that, with dependecies installed. (If you really want to build/run the code natively, please refer to the [dockerfiles](dockerfiles/).)\n\n\n### Run CHURP\n\nWe release compiled executables in the docker image `churp/churp`. For example, to run a demo of 5 nodes, you can use the script `simple.sh` which is part of the docker image:\n\n~~~\ndocker run -ti churp/churp bash\n# ./simple.sh 5 2\n~~~\n\n`simple.sh` starts a demo with n=5 nodes using a polynomial of degree t=2. **Note that we require n \u003e= 2t+1**. \n\n### Build\n\nWe prepared a special `builder` docker image for building CHURP from source code. Make sure you're in the root of the repo (i.e., the directory that has `src`), then run the following to launch the builder:\n\n~~~\ndocker run -ti -v $(pwd)/src:/src --workdir /src churp/builder bash\n# make  # build using the provided Makefile\n~~~\n\n## API\n\nAt a high level, CHURP provides the following API:\n\n* `initialize(t, [nodeList], ...)`: Set the required parameters for CHURP: `t` stands for the threshold and `nodeList` represents the set of nodes that form a committee. Some other parameters that need to be set are the epoch duration and commitment scheme parameters.\n\n* (Optional) `storeSecret(SK)`: Distribute the secret `SK` using [(t, n)-sharing](https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing) `(n=|nodeList|)` such that each node in `nodeList` stores a share of the secret. (Note that this function is optional. For some applications, the secret might be generated randomly using [Distributed Key Generation](https://en.wikipedia.org/wiki/Distributed_key_generation) protocols.)\n\n* `changeCommittee([newNodeList])`: Execute CHURP to handoff the secret `SK` from the old committee, `nodeList`, to the new committee, `newNodeList`.\n\n* (Optional) `retrieveSecret() -\u003e SK`: Reconstruct the secret from shares retrieved from nodes in the `nodeList`. (Note that this function is optional, i.e., CHURP works without any need to explicitly reconstruct the secret.)\n\n## Acknowledges\n\nCurrently CHURP is built on [Pairing Based Cryptography library](https://crypto.stanford.edu/pbc/) (LGPL) and its [Go wrapper](https://github.com/Nik-U/pbc), [GNU Multi Precision library](https://gmplib.org/) and its [Go wrapper](https://github.com/ncw/gmp) (BSD), and [Google Protobuffer](https://github.com/golang/protobuf).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCHURPTeam%2FCHURP","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCHURPTeam%2FCHURP","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCHURPTeam%2FCHURP/lists"}