Implementing high-performance lattice algorithms for cryptanalysis using i.e.
multithreads, vectorization, GPU instructions
fplll 5.1.0, an implementations of several, fast lattice algorithms was released on 26 March 2017 and now supports interfacing external enumeration libraries.
This paves the way for functions in multithreaded/MPI/GPU
enumeration libraries called during execution.
For example, one can enable an external enumeration library with
set_external_enumerator(&external_enumeration_function) and if the
external enumerator returns -1 fplll automatically falls back to the
internal enumeration routine, indicating it can't run the job externally.
That the code works as expected can be seen when using it i.e. in
combination with an example external library (by Marc Stevens):
https://github.com/cr-marcstevens/fplll-extenum where the extenum
library gives similar yet not identical results.
Implementation of sieving algorithms for lattice-based cryptograph
Sieving algorithms for finding shortest vectors (SV) in
high-dimensional lattices is a theoretically studied field also in
cryptography. While little is known about practical performance, the
heuristics of finding approximate SV with sieving algorithms are
currently giving the asymptotically best algorithms for this task. This
is important for estimating the computational hardness of solving the
shortest vector problem (SVP) in dimensions suitable for lattice-based
cryptography. Overestimating the hardness would prohibit accurately
choosing parameters making schemes inefficient, while underestimation
computational cost (i.e. time/memory needed) can result in insecure
systems that give rise to cryptographic attacks.
Part of this thesis can be a proof-of-concept implementation (in
sage, Python) and a fast C++ version of latest sieving algorithms.