18个版本
0.7.1 | 2023年8月14日 |
---|---|
0.7.0 | 2023年4月14日 |
0.6.2 | 2023年9月5日 |
0.6.1 | 2022年9月12日 |
0.2.0 | 2020年11月30日 |
#30 in 密码学
75,859每月下载量
用于108个crate (31直接)
305KB
9K SLoC
blstrs
BLS12-381对友好椭圆曲线构造的实现,使用blst库作为后端。
发音
最重要的部分,这个名字发音为blasters
。
支持的平台
由于在blst
中的实现基于汇编,目前只支持以下架构
x86_64
,aarch64
.
BLST可移植性
要启用构建blst依赖项时的可移植功能,请使用'portable'功能:--features portable
。
基准测试
$ cargo bench --features __private_bench
BLS12参数化
BLS12曲线通过一个值x进行参数化,使得基域模数q和子群r可以通过以下公式计算
- q = (x - 1)2 ((x4 - x2 + 1) / 3) + x
- r = (x4 - x2 + 1)
给定上述参数化的素数q和r,我们可以轻松构造一个在素域Fq上的椭圆曲线,它包含一个阶为r的子群,使得r | (q12 - 1),给它一个嵌入度为12。在扩展域Fq2上实例化其六次扭变,产生一个在两个曲线的阶为r的子群的元素之间的高效双线性配对函数,到一个阶为r的乘法子群Fq12。
在zk-SNARK方案中,我们要求Fr具有大2n单位根,以便执行高效快速傅里叶变换。因此,保证大2n | (r - 1),或者说x有一个大2n因子,产生了适合zk-SNARK的BLS12曲线。
由于最近的研究,许多人估计q应该约为384位以实现128位安全性。方便的是,当q约为384位时,r约为256位,这使得BLS12曲线非常适合128位安全性。这也使它们非常适合许多zk-SNARK应用,因为标量场可以用于嵌入式曲线构造等密钥材料。
许多曲线符合我们的描述,但为了效率,我们还需要一些额外的属性。
- q应该小于2383,而r应该小于2255,这样在64位或32位肢体中使用时,最高位未被设置。这允许进行低成本缩减。
- Fq12通常使用扩展域塔来构建。作为对嵌入度为24的BLS曲线研究的结果,我们可以确定BLS12曲线的子族(对我们而言,x mod 72 = {16, 64}),这些子族可以产生高效的扩展域塔和扭曲同构。
- 我们希望x的汉明重量较小,以提高配对函数的性能。
BLS12-381实例化
BLS12-381的构建通过以下代码实例化:x = -0xd201000000010000
,这产生满足上述要求的最大q
和最小汉明重量的x
。这产生
- q =
0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab
(381位) - r =
0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
(255位)
我们的扩展域塔构建如下
- Fq2构建为Fq(u) / (u2 - β),其中β = -1。
- Fq6构建为Fq2(v) / (v3 - ξ),其中ξ = u + 1
- Fq12构建为Fq6(w) / (w2 - γ),其中γ = v
现在,我们实例化椭圆曲线E(Fq) : y2 = x3 + 4,和椭圆曲线E'(Fq2) : y2 = x3 + 4(u + 1)。
群G1是E的r阶子群,其系数为(x - 1)2 / 3。群G2是E'的r阶子群,其系数为(x8 - 4x7 + 5x6 - 4x4 + 6x3 - 4x2 - 4x + 13) / 9。
生成器
G1和G2的生成器通过找到字典序最小的有效x
坐标,以及其字典序最小的y
坐标,并乘以系数,以确保结果不是无穷远点来计算。
G1
x = 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507
y = 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569
G2
x = 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758*u + 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160
y = 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582*u + 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905
许可证
根据您的选择,在Apache License, Version 2.0或MIT许可证下授权。Apache License, Version 2.0或MIT license。除非您明确声明,否则您提交给本软件包的任何贡献,根据Apache-2.0许可证定义,将根据上述许可证双重许可,不附加任何额外条款或条件。
依赖关系
~4MB
~147K SLoC