https://github.com/zoom/elektra
Prototype implementation of the Key Transparency system ELEKTRA, presented at ACM CCS 2023
https://github.com/zoom/elektra
Last synced: 7 months ago
JSON representation
Prototype implementation of the Key Transparency system ELEKTRA, presented at ACM CCS 2023
- Host: GitHub
- URL: https://github.com/zoom/elektra
- Owner: zoom
- License: other
- Created: 2023-11-21T20:36:32.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-01-24T21:55:46.000Z (about 2 years ago)
- Last Synced: 2025-03-15T22:29:06.243Z (12 months ago)
- Language: Go
- Size: 5.85 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# MVKD Implementation
This is a sample implementation of the MVKD construction ELEKTRA. Both server and client are written in Go.
This is an academic prototype not intended for production use.
## Outline
* package **merkle** implements an AZKS (append-only zero knowledge set) based on a Merkle tree agnostic to storage medium, along with a left-balanced binary tree
* package **storage** contains a persistent implementation of the storage layer using PostgreSQL and LevelDB
* package **sigchain** leverages the AZKS to build an MVKD (both client and server) and also includes experiments.
* package **vrf** is an implementation of a rotatable verifiable random function based on P-256 (see Rotatable Zero-Knowledge Sets)
* package **bin/experiments** allows running experiments against a specified or ad-hoc server
* package **bin/server** runs the MVKD server
Note: example commands in this README must be executed from the folder containing this file.
## Server setup
On the server, you need to install and start postgresql, creating a user "foo" which can connect with no password to a database "merkle". For example, on ubuntu:
```
sudo apt-get install postgresql
sudo service postgresql start
sudo -u postgres createuser foo
sudo vim /etc/postgresql/12/main/pg_hba.conf # edit and set local connections to "trust" to disable passwords. Remember that this is insecure!
sudo service postgresql restart
sudo -u postgres createdb merkle
```
Then, initialize the database with
```
go run ./bin/db_reset/
```
## Running experiments
On the server, run
```
go run ./bin/server/ --treeId=TREEID --port=PORT
```
TREEID is an arbitrary bytestring, and PORT is the port number the RPC server will listen on.
On the client, first initialize the tree with data
```
go run ./bin/experiments --init=NLEAVES --remote=TREEID,SERVERIP:PORT
```
NLEAVES is the number of leaves to be added to the tree.
then run
```
go run ./bin/experiments --exp=EXPERIMENT --remote=TREEID,SERVERIP:PORT
```
EXPERIMENT can be one of `query`, `build`, `throughput`, `rotate`. Each execution will output LaTeX code to render the results in a graph.
For convenience,
* `adhoc` can be used for SERVERIP in order to run an ephemeral server on the client itself.
** --init and --exp can be combined; the initialization happens before the experiment
* Multiple remotes can be passed in each experiment in order to run the experiment against multiple tree sizes