27个版本
0.13.0 | 2023年12月13日 |
---|---|
0.12.3 | 2023年11月1日 |
0.12.0 | 2023年6月7日 |
0.11.2 | 2022年10月26日 |
0.1.2 | 2020年7月20日 |
#210 in 加密学
1,748 每月下载量
用于 29 个crate(20个直接使用)
555KB
13K SLoC
本crate是 https://github.com/zkcrypto/bls12_381 的分支,Dusk-Network团队添加了在顶层构建的其他库所需的各种工具。该库99%的工作仍由@ebfull完成,除非您需要我们实现且在原始库中未提供的特定工具,否则您不应使用此库。
添加到原始bls12_381库的额外工具
- 为crate中导出的每个数据结构添加serde支持。
- 添加各种多标量乘算法。
- 将
std & endo
作为默认功能。 - 为标量实现Iter Sum & Product。
- 为标量实现随机。
- 为标量实现XOR & AND。
- 添加base_4转换函数(不再需要)。
- 为标量实现Ord & PartialOrd。
- 实现w_naf_scalar_mul(比原始的双倍加法实现快71%)。
- 为标量实现reduce函数包装器。
- 公开一些与Scalar相关的常量。
此crate提供了BLS12-381配对友好椭圆曲线构建的实现。
- 此实现尚未经过审查或审计。请自行承担风险。
- 此实现针对Rust
1.56
或更高版本。 - 此实现不需要Rust标准库。
- 除非明确指出,所有操作都是恒定时间。
特性
bits
(默认开启):启用获取标量的位迭代器的API。groups
(默认开启):启用使用G1、G2和GT执行群运算的API。pairings
(默认开启):启用执行配对的某些API。alloc
(默认开启):启用需要分配器的API;这包括配对优化。nightly
:启用subtle/nightly
,它试图防止可能危害常数时间操作的编译器优化。需要nightly Rust编译器。experimental
:启用实验性功能。这些功能没有向后兼容性保证,并且可能在任何时候更改;依赖特定行为的用户应锁定此crate的确切版本。当前实验性功能列表- 曲线哈希(互联网草案v12)
parallel
(默认开启):启用rayon
的使用,用于高度并行化操作,如多标量乘法。
文档
曲线描述
BLS12-381是从BLS家族中得到的对配对友好的椭圆曲线构造,嵌入度为12。它在一个381位的素数域GF(p)
上构建,...
- z =
-0xd201000000010000
- p = (z - 1)2(z4 - z2 + 1) / 3 + z
- =
0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab
- =
- q = z4 - z2 + 1
- =
0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
- =
...产生两个源组 G1和G2,每个都是255位素数阶的q
,使得一个可以高效计算的退化的双线性配对函数e
存在到第三个目标组 GT中。具体来说,G1是E(Fp) : y2 = x3 + 4的q阶子群,G2是E'(Fp2) : y2 = x3 + 4(u + 1)的q阶子群,其中扩展域Fp2定义为Fp(u) / (u2 + 1)。
BLS12-381被选择,使得z具有小的汉明重量(以提高配对性能),并且GF(q)有一个大的232本原单位根,用于执行基2快速傅里叶变换,以有效地进行多点评估和插值。它还选择了一个特别高效且刚性的BLS12曲线子家族。
曲线安全性
配对友好的椭圆曲线构造(必然)不如传统椭圆曲线安全,因为它们的“嵌入度”较小。给定足够小的嵌入度,配对函数本身就会允许在将配对映射到弱目标组时打破DLP难题,因为目标组的弱点会立即转化为源组的弱点。
为了在不使用不合理的配对函数的情况下实现合理的安全性,必须仔细选择嵌入度、基域特征和素数子群阶数。BLS12-381使用12的嵌入度以确保快速的配对性能,但选择381位基域特征以产生255位子群阶数(以防止Pollard的rho算法),同时达到接近128位的安全级别。
已知对数域筛算法的优化,可以用来通过利用其结构来削弱目标群体的DLP安全性,因为它是低度扩展域的乘法子群。然而,这些攻击需要一个(目前尚不知道)的用于扫描大范围多项式的有效算法。即使攻击可行,也只会将安全性降低到大约117到120位。这与254位的BN曲线形成对比,在相同情况下通常只有不到100位的安全性。
备选曲线
应用程序可能希望通过使用BLS24或KSS16曲线来交换配对性能和/或G2性能,这些曲线保守地针对128位安全性。对于需要椭圆曲线周期(例如,任意证明组合)的应用,已知MNT6/MNT4曲线周期针对128位安全性水平。对于只需要固定深度证明组合的应用,这类曲线已作为Zexe的一部分构建。
致谢
请参阅Cargo.toml
以获取此代码库的主要作者列表。
许可证
根据您的选择,受以下任一许可证的许可
- Apache License,版本2.0,(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如Apache-2.0许可证中定义的,均应按照上述方式双许可,而无需任何额外的条款或条件。
依赖项
~1.6-3MB
~64K SLoC