# Post-quantum blind signatures implementation (in progress) This is a small university project with the goal of implementing Markus Rückert's lattice-based blind signature scheme from 2008[1]. Please consider it a toy program — it's being developed with shortcuts (e.g. using a big scientific library (FLINT[2]) for efficient polynomial multiplication). Also, there are possibly better BS algorithms by now. ## How it works Well, the actual program is not there yet. There's just some code to facilitate polynomial multiplication in a ring modulo X^m+1 over a modulo field with non-canonical range — [-(n-1)/2, (n-1)/2] rather than [0, n-1]. ``` $ make run_poly_mul guix shell qemu -- qemu-x86_64 -cpu max poly_mul Prime used for modulo operations: 127 55 + 31 mod [-63,63] = -41 Give first polynomial for the experiment: 12 3 4 5 Read polynomial: 5*x^3+4*x^2+3*x+12 Give second polynomial for the experiment: 11 1 2 3 Read polynomial: 3*x^3+2*x^2+x+11 Normal product of polynomials: 15*x^6+22*x^5+22*x^4+101*x^3+71*x^2+45*x+132 Normal sum of polynomials: 8*x^3+6*x^2+4*x+23 Give the degree m of X^m+1 polynomial to be used as divisor in the ring: 7 Product of polynomials in the ring: 15*x^6+22*x^5+22*x^4-26*x^3-56*x^2+45*x+5 Sum of polynomials in the ring: 8*x^3+6*x^2+4*x+23 ``` Interestingly, only modulo operations in the latter range seem to be directly supported in FLINT as of today. ## Building You can install the dependencies with GNU Guix using `dev-shell` script that you can find in project's root. For the rest, please consult the included Makefile :) - [1] https://eprint.iacr.org/2008/322 - [2] https://flintlib.org/