Paper 2025/695
Efficient Foreign-Field Arithmetic in PLONK
Abstract
PLONK is a prominent universal and updatable zk-SNARK for general circuit satisfiability, which allows a prover to produce a short certificate of the validity of a certain statement/computation. Its expressive model of computation and its highly efficient verifier complexity make PLONK a powerful tool for a wide range of blockchain applications. Supporting standard cryptographic primitives (such us ECDSA over SECP256k1) or advanced recursive predicates (e.g. incrementally verifiable computation) on a SNARK presents a significant challenge. It requires so-called foreign-field arithmetic (enforcing constraints over algebraic fields that differ from the SNARK native field) which was previously believed to incur an overhead of two or three orders of magnitude. We build on the techniques by Lubarov and Baylina and observe that, by considering tight bounds on their encoding of foreign-field multiplication, the number of PLONK constraints can be significantly reduced. We show that these techniques also extend to elliptic curve emulation, with an overhead of just one order of magnitude (with respect to its native counterpart). We validate soundness and completeness of our main results in EasyCrypt. Finally, we implement an open-source library with support for foreign-field arithmetic. Our experimental results showcase the generality of our techniques and confirm their suitability for real-world applications.
Metadata
- Available format(s)
-
PDF
- Category
- Implementation
- Publication info
- Preprint.
- Keywords
- SNARKszero-knowledgeforeign-field arithmetic
- Contact author(s)
-
miguel ambrona @ iohk io
denis firsov @ iohk io
querejeta azurmendi @ iohk io - History
- 2025-04-17: approved
- 2025-04-16: received
- See all versions
- Short URL
- https://ia.cr/2025/695
- License
-
CC BY
BibTeX
@misc{cryptoeprint:2025/695, author = {Miguel Ambrona and Denis Firsov and Inigo Querejeta-Azurmendi}, title = {Efficient Foreign-Field Arithmetic in {PLONK}}, howpublished = {Cryptology {ePrint} Archive, Paper 2025/695}, year = {2025}, url = {https://eprint.iacr.org/2025/695} }