#elliptic-curve #bls12-381 #zk-snarks #ecc

no-std dusk-bls12_381

基于BLS12-381配对友好椭圆曲线构建实现的分支,包含Dusk团队需要的额外工具

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

Download history 706/week @ 2024-03-13 870/week @ 2024-03-20 1387/week @ 2024-03-27 6296/week @ 2024-04-03 1353/week @ 2024-04-10 684/week @ 2024-04-17 979/week @ 2024-04-24 617/week @ 2024-05-01 635/week @ 2024-05-08 480/week @ 2024-05-15 748/week @ 2024-05-22 616/week @ 2024-05-29 457/week @ 2024-06-05 361/week @ 2024-06-12 453/week @ 2024-06-19 370/week @ 2024-06-26

1,748 每月下载量
用于 29 个crate(20个直接使用)

MIT/Apache-2.0/MPL-2.0

555KB
13K SLoC

Build Status Repository Documentation

本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的确切版本。当前实验性功能列表
  • 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-2.0许可证中定义的,均应按照上述方式双许可,而无需任何额外的条款或条件。

依赖项

~1.6-3MB
~64K SLoC