#group #primitive #order #class #quadratic #security #cl

sys class_group_0_5_2

仅编译 v0.5.2,无需任何修改

1 个不稳定版本

0.5.2 2022年12月23日

#7 in #quadratic

MITAGPL-3.0-or-later

7.5MB
226K SLoC

C 222K SLoC // 0.1% comments Rust 2.5K SLoC // 0.1% comments Shell 1K SLoC // 0.1% comments Happy 211 SLoC Perl 98 SLoC // 0.1% comments

类别

Rust 库,用于构建 IQC:基于虚二次序类群(Cl)的密码学。

背景

Cls 容易生成。它们最有趣和有用的性质是寻找群阶被认为是困难的。近年来,我们看到越来越多的基于 Cls 的密码学原语。我们建议阅读 [6,7,8] 以了解更多关于 Cls 的实际应用。

群元素表示

群元素可以表示为 (a,b,c) 或 (a,b,Δ) 三元组(分别对应 BinaryQF 和 ABDeltaTriple 结构)。我们还支持从 论文 中压缩(请参阅 BinaryQFCompressed 结构)。

原语

欢迎为实现新原语或改进现有原语做出贡献。请首先查看开放问题。现有原语可以在 primitives 文件夹中找到。

  1. PoE:指数证明:证明者可以有效地让验证者相信进行了正确的较大指数运算。声明是 (x,u,w),如果 w = u^x,则验证者接受。

  2. 多项式承诺:实现了以下算法([1] 第4.2节和4.3节)

    • Setup:生成公共参数
    • Commit:将多项式提交
    • Open:打开和验证提交
    • Encode:将多项式编码为整数的独立代码
    • Decode:将整数转换为唯一的多项式
    • Eval_prover:对于提交的多项式 f(),证明 y = f(z) 的 NI 证明
    • Eval_verify:eval_proof 的 NI 验证者
  3. VDF:可验证延迟函数。基于 Wesolowski 协议 [4,5]。实现了以下接口。相同的设置可以用于多个证明。 time(Eval) >> time(Verify)

    • Setup:生成公钥
    • Eval:使用公钥生成一个vdf语句 (y,pi)
    • Verify:使用公钥验证语句
  4. 加密方案:线性同态加密方案和ZK证明。接口包括:KeygenEncryptDecryptProveVerify。加密方案取自[2]定理2。零知识证明是非交互式证明,取自[3]图8。证明语句包括一个公共椭圆曲线点 Q = xG 并证明给定的密文加密了 x。ZK证明还有一个实验性变体。这个构造在2P-ECDSA中使用。为了使证明更高效,我们使用了LCM技巧。参见 dl_cl_lcm.rs

构建

使用 Cargo build

PARI构建

库使用对PARI C库的绑定。第一次运行 Cargo build 将从 depend 文件夹中获取PARI并安装在机器上。它已在MacOS和Linux上进行了测试。如果您在安装PARI时遇到问题,请提交问题并尝试手动安装。绑定将自动生成,这可能会使构建过程慢几秒。

测试

如果可能,Rust中的测试是多线程的。然而,PARI配置支持单线程。因此,为了确保所有测试都以定义良好的行为运行,请使用 cargo test -- --test-threads=1

使用方法

我们使用测试来演示每个原语的正确性:每个原语的 .rs 文件末尾都有一个测试,用于显示原语的正确用法。通常有一个或多个测试来显示实现的正确性,即不知道证据将导致PoK失败。对于所有测试,我们假设128位安全性(保守地转换为1600位判别式)。

安全性

原语之间的安全性假设可能不同,并在相关论文中讨论。在使用任何原语之前应充分理解。代码未经审计,我们没有尝试将其改为恒等时间。不要在生产系统中使用此库。

联系

请随时联系或加入ZenGo X Telegram 讨论代码和研究。

名人堂

我们感谢Fabien Laguillaumie、Guilhem Castagnos、Ida Tucker、Claudio Orlandi和Ben Fisch的支持和持续帮助。我们感谢CoBloX研究实验室Lloyd Fournier的贡献代码,使这个库更安全、更快速。

参考文献

[1] https://eprint.iacr.org/2019/1229.pdf

[2] https://eprint.iacr.org/2018/791.pdf

[3] https://eprint.iacr.org/2019/503.pdf

[4] https://eprint.iacr.org/2018/623.pdf

[5] https://eprint.iacr.org/2018/712.pdf

[6] 书籍:二元二次型:一种算法方法

[7] https://www.michaelstraka.com/posts/classgroups

[8] https://github.com/Chia-Network/vdf-competition/blob/master/classgroups.pdf

依赖关系

~19MB
~286K SLoC