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
7.5MB
227K SLoC
类
Rust 库,用于构建基于类群(Cl)的虚二次序的密码学(IQC)。
背景
类群容易生成。它们最有趣和有用的性质是寻找群阶被认为是困难的。近年来,我们看到越来越多的密码学原语使用类群实现。我们建议阅读 [6,7,8] 来了解更多关于类群的实际应用。
群元素表示
群元素可以用三元组 (a,b,c) 或 (a,b,Δ) 表示(分别对应 BinaryQF 和 ABDeltaTriple 结构)。我们还支持从 论文(参见 BinaryQFCompressed 结构)进行压缩。
原语
欢迎为实现新原语或改进现有原语做出贡献。首先查看开放问题。现有原语可以在 primitives 文件夹中找到。
-
PoE:指数证明:证明者可以有效地让验证者相信进行了正确的大指数运算。陈述为
(x,u,w)
,如果w = u^x
,则验证者接受。 -
多项式承诺:实现了以下算法([1] 第 4.2 和 4.3 节)
Setup
:生成公共参数Commit
:对多项式进行提交Open
:打开和验证提交Encode
:独立代码,将多项式编码为整数Decode
:将整数转换为唯一的多个多项式Eval_prover
:对提交的多项式f()
的y = f(z)
进行 NI 证明Eval_verify
:对 eval_proof 的 NI 验证者
-
Verifiable Delay Function (VDF):可验证延迟函数。基于Wesolowski协议[4,5]。以下接口已实现。相同的设置可用于多个证明。
time(Eval) >> time(Verify)
Setup
:生成公钥Eval
:使用公钥生成一个vdf声明(y,pi)
Verify
:使用公钥验证声明
-
加密方案:线性同态加密方案和零知识证明。接口包括:
Keygen
、Encrypt
、Decrypt
、Prove
、Verify
。加密方案来自[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