An implementation of the GKS23 scheme presented in https://eprint.iacr.org/2023/1318.
As part of a thesis at Lunds Tekniska Högskola, spring 2024, our work was to implement the GKS23 scheme completely and to analyze it. We did this with the department of electrical and information technology. Our full implementation can be seen here.
As this scheme is based on security of R-LWE, we have our own polynomial class that is a wrapper utilizing CyPari2.
Our implementation includes BDLOP18 as a commitment scheme and for NIZKPs, available from https://eprint.iacr.org/2016/997, code for this is found here.
Additionally, we are using a distributed version of the BGV11 algorithm for encryption/decryption, presented in the GKS23 paper. The original BGV11 algorithm can be seen at https://eprint.iacr.org/2011/277.pdf. Click for our implementation.
Python >= 3.12 for type statements.
CyPari >= 2.1.4 for handling of polynomials.
pytest >= 8.0.2 for running the tests.
Our implementation includes some rudamentary tests that can be run with pytest.
To run the GKS23 scheme, initialize the GKS23 class with values, where default values for 1 signature per key generation and for 365 values can be found here. Then, after having run KGen()
messages can be signed in R_p.
A signature can be verified by a participant. The GKS23 controller supports calling sign()
and vrfy()
method, but requires sending in one or many participants as it does not keep the states necessary to perform these calculations.