5个不稳定版本
0.2.0 | 2021年12月12日 |
---|---|
0.1.1 | 2021年12月8日 |
0.1.0 | 2021年11月28日 |
0.0.2 | 2021年11月28日 |
0.0.1 | 2021年11月28日 |
#1908 in 密码学
在4个crate(2个直接)中使用
325KB
8K SLoC
此crate是对https://github.com/zkcrypto/bls12_381的分支,其中Dusk-Network团队添加了在顶层构建的库所需的多种工具。该库的99%仍由@ebfull完成,除非您需要我们已实现且在原始库中未提供的特定工具,否则不应使用此库。
添加到原始bls12_381库的额外工具
- 为crate中导出的每个数据结构添加serde支持。
- 添加各种多标量乘法算法。
- 将
std & endo
作为默认功能。 - 实现标量迭代求和与乘积。
- 实现标量的随机数。
- 实现标量的异或与与运算。
- 添加基_4转换函数(不再需要)。
- 为标量实现排序和部分排序。
- 实现w_naf_scalar_mul(比原始的加倍加法实现快71%)。
- 为标量实现一个减少函数包装器。
- 将一些与标量相关的常量公开。
此crate提供了BLS12-381配对友好椭圆曲线构建的实现。
- 此实现未经审查或审计。风险自负。
- 此实现针对Rust
1.36
或更高版本。 - 此实现不需要Rust标准库。
- 除非明确指出,所有操作都是恒定时间。
功能
groups
(默认开启):启用使用G1、G2和GT执行群运算的API。pairings
(默认开启):启用执行配对的某些API。alloc
(默认开启):启用需要分配器的API;这些包括配对优化。nightly
:启用subtle/nightly
,它试图防止可能危害恒定时间操作的编译器优化。需要nightly Rust编译器。endo
:启用利用曲线同构优化,可能会违反于2020年9月到期的专利US7110538B2和US7995752B2。parallel
(默认开启):启用rayon
用于高度可并行操作,如多标量乘法。canon
:启用WASM相关序列化中使用canonical
。
文档
曲线描述
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's rho算法)并达到接近128位的安全级别。
存在对已知优化的数域筛算法,可以利用其结构在目标组中削弱DLP安全,因为它是一个低次数扩张域的乘性子群。然而,这些攻击需要一种(目前尚不为人知的)高效算法来扫描大量多项式空间。即使攻击是可行的,它也只会将安全性降低到大约117到120位。这与254位的BN曲线形成对比,后者在同一情况下通常只有不到100位的安全性。)
备选曲线
应用程序可能希望通过使用BLS24或KSS16曲线来交换配对性能和/或G2性能,这些曲线保守地针对128位安全性。在需要椭圆曲线周期进行任意证明组合的应用中,已知MNT6/MNT4曲线周期针对128位安全性。在只需要固定深度证明组合的应用中,这种形式的曲线已被构建为Zexe的一部分。
致谢
请参阅Cargo.toml
以获取此代码库的主要作者列表。
许可证
根据您的选择,许可如下
- Apache License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或https://open-source.org.cn/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给工作的任何有意贡献,根据Apache-2.0许可证定义,应如上双许可,不附加任何其他条款或条件。
依赖项
~2.7–8.5MB
~74K SLoC