29 个版本
0.8.17 | 2024 年 7 月 11 日 |
---|---|
0.8.15 | 2024 年 2 月 26 日 |
0.8.11 | 2023 年 12 月 29 日 |
0.8.9 | 2023 年 10 月 18 日 |
0.5.1 | 2021 年 7 月 1 日 |
#107 in 密码学
7,000 每月下载量
用于 42 个crate (直接使用 26)
550KB
12K SLoC
bls12_381_plus
这个crate提供了BLS12-381配对友好椭圆曲线构造的实现,包括哈希到曲线和多指数运算方法,如Straus和Pippenger。
- 此实现尚未经过审查或审计。使用风险自负。
- 此实现针对 Rust
1.56
或更高版本。 - 此实现不需要Rust标准库。
- 除非明确说明,所有操作都是恒定时间的。
功能
bits
(默认开启):启用获取标量位迭代器的API。groups
(默认开启):启用用于执行 G1、G2 和 GT 组算术的API。pairings
(默认开启):启用执行配对的一些API。hashing
(默认开启):启用由IETF定义的哈希到曲线方法。alloc
(默认开启):启用需要分配器的API;这些包括配对优化。nightly
:启用subtle/nightly
,它试图防止可能危及恒定时间操作的编译器优化。需要nightly Rust编译器。experimental
:启用实验性功能。这些功能没有向后兼容性保证,并且可能随时更改;依赖于特定行为的用户应锁定此crate的确切版本。当前实验性功能的列表- 哈希到曲线 (互联网草案v12)
文档
测试
非wasm32目标测试
cargo test
wasm32目标测试
cargo test --target wasm32-unknown-unknown
曲线描述
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被选中,因为GF(q)
有大的232本原单位根,用于执行基-2快速傅里叶变换,以实现高效的点评价和插值,同时z
有小的汉明重量(以改善配对性能)。此外,它被选在BLS12曲线的一个特别有效且刚性的子系列中。
曲线安全性
配对友好椭圆曲线构造(必然)比传统椭圆曲线更不安全,因为它们的“嵌入度”较小。给定一个足够小的嵌入度,如果它映射到一个弱目标群,那么配对函数本身就会允许DLP硬度被破解,因为目标群的弱点会立即转化为源群的弱点。
为了在不使用不合理的配对函数的情况下达到合理的安全性,必须仔细选择嵌入度、基场特征和素数子群阶。BLS12-381使用12的嵌入度以确保快速的配对性能,但选择了381位的基场特征以产生255位的子群阶(以防止Pollard's rho算法),同时接近128位的安全性水平。
已知对数域筛法进行了优化,这些优化可以利用其结构来削弱目标组的DLP安全性,因为它是一个低度扩展域的乘法子群。然而,这些攻击需要一个(目前尚不知道)的效率较高的算法来扫描一个大的多项式空间。即使攻击是实际的,它也只会将安全性降低到大约117到120位。(这与相同情况下254位的BN曲线相比,BN曲线通常只有不到100位的安全性。)
替代曲线
应用程序可能希望通过使用BLS24或KSS16曲线来交换配对性能和/或G2性能,这些曲线保守地针对128位安全性。在需要椭圆曲线周期的应用程序中,例如任意证明组合,已知MNT6/MNT4曲线周期针对128位安全性。在仅需要固定深度证明组合的应用程序中,此类曲线已被作为Zexe的一部分构建。
致谢
请参阅Cargo.toml
以获取此代码库的主要作者列表。
许可
许可协议如下
- Apache License, Version 2.0, (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交的任何有意包含在作品中的贡献,如Apache-2.0许可中定义,应以上述双重许可,不附加任何额外条款或条件。
依赖
~1.7–3.5MB
~72K SLoC