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

fullcodec-bls12_381

是Dusk团队所需额外工具的BLS12-381配对友好椭圆曲线构建实现的分支

1个不稳定版本

0.2.0 2021年12月22日

#2222 in 加密学

26每月下载量
用于3个crate(2直接)

MIT/Apache

325KB
8K SLoC

Build Status Repository Documentation

本crate是https://github.com/zkcrypto/bls12_381的一个分支,Dusk-Network团队添加了其他在此之上构建的库所需的各种工具。该库的99%仍由@ebfull完成,除非您需要我们已实现且不在原始库中的特定工具,否则您不应使用此库。

添加到原始bls12_381库的额外工具

  • 为crate中导出的每个数据结构添加serde支持。
  • 添加各种多标量乘法算法。
  • std & endo 作为默认功能。
  • 实现标量迭代求和 & 求积。
  • 实现标量的随机数。
  • 实现标量的异或 & 与操作。
  • 添加基4转换函数(不再需要)。
  • 实现标量的Ord & PartialOrd。
  • 实现w_naf_scalar_mul(比原始双加法实现快71%)。
  • 为标量实现reduce函数包装器。
  • 公开一些与标量相关的常量。

此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位的子群阶(以保护 against Pollard's rho algorithm),同时达到接近128位的安全级别。

已知对数域筛选算法进行了优化,可以利用其结构来削弱目标组的DLP安全性,因为它是低度扩展域的乘法子群。然而,这些攻击需要一个(目前尚不存在的)高效算法来扫描大范围的多项式空间。即使攻击是实用的,它也只会将安全性降低到大约117到120位。(这与254位的BN曲线形成对比,在相同情况下通常只有不到100位的安全性。)

替代曲线

应用程序可能希望通过使用BLS24或KSS16曲线(这些曲线保守地针对128位安全性)来交换配对性能和/或G2性能。在需要椭圆曲线周期(例如,任意证明组合)的应用中,已知MNT6/MNT4曲线周期旨在达到128位安全级别。在只需要固定深度证明组合的应用中,这种形式的曲线已被作为Zexe的一部分构建。

致谢

请参阅Cargo.toml以获取此代码库的主要作者列表。

许可

许可方式为以下之一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,均应按上述方式双许可,无需任何额外条款或条件。

依赖项

~3.5–9.5MB
~93K SLoC