Non-Interactive Zero Knowledge (NIZK) proofs, such as zkSNARKS, let one prove knowledge of private data without revealing it or interacting with a verifier. While existing tooling focuses on specifying the predicate to be proven, real-world applications optimize predicate definitions to minimize proof generation overhead, but must correspondingly transform predicate inputs. Implementing these two steps separately duplicates logic that must precisely match to avoid catastrophic security flaws. We address this shortcoming with zkStruDul, a language that unifies input transformations and predicate definitions into a single combined abstraction from which a compiler can project both procedures, eliminating duplicate code and problematic mismatches. zkStruDul provides a high-level abstraction to layer on top of existing NIZK technology and supports important features like recursive proofs. We provide a source-level semantics and prove its behavior is identical to the projected semantics, allowing straightforward standard reasoning.
翻译:非交互式零知识证明(如zkSNARKs)允许证明者在无需揭示私有数据或与验证者交互的情况下,证明其拥有该数据。现有工具主要关注待证明谓词的规范定义,而实际应用为降低证明生成开销需优化谓词定义,但必须相应地对谓词输入进行变换。分别实现这两个步骤会导致逻辑重复,且必须精确匹配以避免灾难性安全漏洞。本文提出zkStruDul语言来解决这一缺陷,该语言将输入变换与谓词定义统一为单一组合抽象,编译器可从中投影生成两个过程,从而消除重复代码和潜在的不匹配问题。zkStruDul在现有NIZK技术栈之上提供高层抽象,并支持递归证明等重要特性。我们建立了源码级语义模型,并证明其行为与投影语义完全一致,为标准化推理提供了直接依据。