#elliptic-curve #bls12-381 #pairing #pairing-friendly #group #construction #hash

无 std bls12_381_plus

BLS12-381 兼容配对的椭圆曲线构造的实现。这是从 zkcrypto/bls12_381 分支出来的,但增加了曲线哈希和多指数运算方法,以及在不要求分配器的情况下启用多配对

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 密码学

Download history 1158/week @ 2024-04-28 1188/week @ 2024-05-05 947/week @ 2024-05-12 827/week @ 2024-05-19 1278/week @ 2024-05-26 3381/week @ 2024-06-02 2095/week @ 2024-06-09 1774/week @ 2024-06-16 1720/week @ 2024-06-23 2568/week @ 2024-06-30 2974/week @ 2024-07-07 1171/week @ 2024-07-14 1461/week @ 2024-07-21 1810/week @ 2024-07-28 1752/week @ 2024-08-04 1941/week @ 2024-08-11

7,000 每月下载量
用于 42 个crate (直接使用 26)

MIT/Apache

550KB
12K SLoC

bls12_381_plus Crates.io

这个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的确切版本。当前实验性功能的列表

文档

测试

非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-2.0许可中定义,应以上述双重许可,不附加任何额外条款或条件。

依赖

~1.7–3.5MB
~72K SLoC