#crypto #libpari

sys _

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

4 个版本

0.6.1 2023年2月13日
0.6.0 2021年11月9日
0.4.17 2020年6月7日
0.4.16 2020年6月7日

#crypto 中排名第 374


用于 multi-party-ecdsa

GPL-3.0 许可证

7.5MB
227K SLoC

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

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

背景

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

群元素表示

群元素可以用三元组 (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. Verifiable Delay Function (VDF):可验证延迟函数。基于Wesolowski协议[4,5]。以下接口已实现。相同的设置可用于多个证明。time(Eval) >> time(Verify)

    • Setup:生成公钥
    • Eval:使用公钥生成一个vdf声明 (y,pi)
    • Verify:使用公钥验证声明
  4. 加密方案:线性同态加密方案和零知识证明。接口包括: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

依赖项

~17MB
~279K SLoC