Distributed RSA Modulus Generation
- If you are on Mac OS X or on Windows please install Docker
- If you are on Ubuntu 18.04 install dependencies and setup environment:
sudo apt-get install build-essential pkg-config libgmp-dev wget git libmpfr-dev libsodium-dev gcc-8 g++-8 libzmq3-dev
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8
wget --max-redirect 3 https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz
sudo mkdir -p /usr/include/boost && tar zxf boost_1_69_0.tar.gz
sudo bash -c 'cd boost_1_69_0 && ./bootstrap.sh --prefix=/usr/local && ./b2 --with=all install && echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf && ldconfig'
sudo bash -c 'wget https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/xUbuntu_18.04/Release.key -qO- | apt-key add'
sudo bash -c 'echo "deb https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/xUbuntu_18.04 ./" >> /etc/apt/sources.list'
sudo bash -c 'wget -qO- https://github.com/zeromq/cppzmq/archive/v4.3.0.tar.gz | tar xvzf - -C /usr/local/include'
wget --max-redirect 3 https://github.com/Kitware/CMake/releases/download/v3.14.3/cmake-3.14.3-Linux-x86_64.tar.gz
tar -xzf cmake-3.14.3-Linux-x86_64.tar.gz
export PATH="/cmake-3.14.3-Linux-x86_64/bin:${PATH}"
- Coordinator Node Settings
- The Protocol currently uses port 5555 (passive/active protocol) and 5556 (proof verification), both ports must be open for TCP traffic on the coordinator's instance.
- For a 1024-party RSA Ceremony, setting stack size to 100 MB (ulimit -s 100000) and number of open files to 10K (ulimit -n 10000) has proven sufficient in testing.
- Minimum hardware for 1024-party node: Memory 600 GB, HDD 500 GB.
$ git submodule update --init --recursive
For Ubuntu 18.04 users:
$ cd aws_scripts && ./native_build.sh
For Mac OS X, Windows, or Linux users with Docker:
$ ./scripts/build-binary-docker.sh
Lets run an active computation for 10 parties: First start the coordinator.
$ ./build/src/coordinator_full_protocol --parties 10
Now we can start to connect parties and verifiers to this coordinator. We will need to provide the coordinator's IP address or by default our party will connect to 127.0.0.1:5555
$ ./build/src/party_full_protocol --ip 127.0.0.1
$ ./build/src/distributed_verifier --ip 127.0.0.1
For the 10-party passive protocol in Docker, run the coordinator and parties as follow:
$ ./scripts/run-coordinator-in-docker.sh --parties 10
$ ./scripts/run-party-in-docker.sh
Once all ten parties connected or timeout for registration passed the protocol will start.
Instructions here are for native Ubuntu runs.
The coordinator exports a record of its public interactions with the parties in the script.data file generated the directory where coordinator_full_protocol is run. To verify the integrity of these interactions, run ./validator in the same directory as script.data.
To record and replay an RSA ceremony with 10 parties using the same randomness:
- Run a ceremony adding command line option --mode record and --passive:
$ ./coordinator_full_protocol --parties 10 --passive --mode record
- Replay it using option --mode replay:
$./coordinator_full_protocol --parties 10 --passive --mode replay
Comments:
- All party binaries must be run in both cases.
- Intermediary data is stored in file record.data, and binaries must be run from the same directory when replaying.
Copyright 2020 Ligero, Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
This code was developed under a project supported by the VDF Alliance, and particularly the Ethereum Foundation and Protocol Labs, Inc.