Python implementation of the ring confidential transaction signatures used in Monero. More details about RingCT can be found here on chapter 6.
We present a framework to analyze and compare the performance of ringCT using different elliptic curves.
The code is parallelized using joblib
and it tries to run as many signatures in parallel as cpu cores available.
ℹ️ The presented results were obtained using a Ryzen 7 3700X (16 cores) processor on Linux 🐧. Times might change in different environments.
Assuming that you have pip installed:
git clone https://github.com/Fantoni0/RingCTPerformance
cd RingCTPerformance
pip install -r requirements.txt
The library has minimal requirements. All of them are included in requirements.txt. Following the installation process solves the dependencies.
tinyec
for EC math.nummaster
for modular square root.matplotlib
for plotting the results.joblib
for parallelization.
An example of how to use the library:
python main.py -rs 8 16 32 64\
-c brainpoolP160r1 secp192r1 secp224r1 secp256r1\
-m 'I voted for Kodos'\
-o comparative
If you want to experiment with single ring signatures, you can do so in test_RingCT.ipynb
.
Multiple ring signature algorithms exist and they might be confusing at first. Here are some pointers we found useful:
- Zero To Monero 2nd Edition - Great technical review of Monero
- Mastering Monero - A complete guide about Monero and its ecosystem.
- Seminal and relevant papers about ring signatures.
- Group signatures - David Chaum - 1991
- How to leak a secret - Ronald L. Rivest, Adi Shamir and Yael Tauman - 2001
- Cryptonote Section 4 - Nicolas van Saberhagen - 2013
- Ring signature efficiency - Adam Black - 2015
- Ring confidential transactions for Monero [1] [2] - Shen Noether and Adam Mackenzie - 2015
This repository is part of a research article carried out by ALFA research group. If you use it, please cite:
@article{larriba2021distributed,
title={Distributed Trust, a Blockchain Election Scheme},
author={Larriba, Antonio M and Cerd{\`a} i Cuc{\'o}, Aleix and Sempere, Jos{\'e} M and L{\'o}pez, Dami{\'a}n},
journal={Informatica},
volume={32},
number={2},
pages={321--355},
year={2021},
publisher={Vilnius University Institute of Data Science and Digital Technologies}
}