2个版本
0.4.1 | 2021年11月26日 |
---|---|
0.4.0 | 2021年11月25日 |
#1859 in 密码学
在 2 crates 中使用
510KB
8K SLoC
cosmian_bls12_381
此crate提供了一个BLS12-381配对友好椭圆曲线构建的实现。
由Cosmian分叉
2021年7月
- 为了序列化和反序列化Gt元素,多亏了Aurore Guillevic,Cosmian添加了此实现。此外,Michael Scott的2019-077 eprint证实了Gt反序列化的验证。
- 此外,bls12_381 github上的2个问题仍然悬而未决
2021年11月
-
因此,没有计划添加Gt序列化,该crate以0.4.0版本发布为cosmian_bls12_381。
- 很快将在bls12_381原始crate上提交一个Github-PR。
-
但是还有一个问题
Cosmian没有更新bls12_381的最新版本(版本0.5),因为它包含一个依赖性问题。确实,bls12_381-0.5使用ff-0.10,它使用bitvec-0.22。问题来自依赖项funty-1.2.0,它进行了破坏性更改(暴露了另一个名为BITS的结构体,与bitvec crate中的同名结构体混淆)。在funty crate上有一个关于此的评论,发布于2021年7月(随后有多个相同的帖子):https://github.com/myrrlyn/funty/issues/3#issuecomment-877833781
- 此实现尚未经过审查或审计。使用风险自负。
- 此实现针对Rust
1.47
或更高版本。 - 此实现不需要Rust标准库。
- 所有操作均为常数时间,除非特别说明。
特性
groups
(默认开启):启用使用G1、G2和GT进行群算术的API。pairings
(默认开启):启用一些执行配对的API。alloc
(默认开启):启用需要分配器的API;这些包括配对优化。nightly
:启用subtle/nightly
,该功能尝试防止可能危及常数时间操作的编译器优化。需要nightly Rust编译器。endo
(默认开启):启用利用曲线自同构的优化。已弃用,将在未来版本中删除。
文档
曲线描述
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许可证定义的任何有意提交的工作,都应按照上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~1MB
~25K SLoC