A technical deep dive into the basic ideas behind lattice-based signature schemes. In particular, after this blog, one will get a solid grasp of a key technique called Fiat-Shamir with aborts (aka rejection sampling) which is used in Dilithium or, for instance, many lattice-based proving systems (cf. see lattice-based product proofs). Surprisingly, this technique greatly resembles the classical Schnorr signature construction based on discrete logarithm assumption. Along the way we provide a basic toolkit for understanding lattice-based schemes that will hopefully make introduction to this field of Cryptography easier. More specifically, in this blog we will understand the Lyubashevsky's construction from his famous paper "Lattice Signatures Without Trapdoors", which is arguably one of the most influential papers in the whole lattice-based cryptography.
A deep dive into the UltraGroth protocol. We explore how to insignificantly modify the original Groth16 protocol to enable sampling random field elements and conducting lookup checks without sacrificing verification efficiency.
An accessible introduction to Fuzzy Extractors. This blog explains the mathematical mechanics behind reliably deriving strong, uniformly distributed cryptographic keys from noisy, biometric data sources.
A technical overview of the Bionetta framework. We demonstrate how to leverage UltraGroth to achieve sublinear constraint complexity for non-linear operations like ReLU in neural networks, paving the way for efficient client-side ZKML.