BN128曲线

1. 引言

BN系列椭圆曲线 E ( F p ) : y 2 = x 3 + b , 其 中 b ≠ 0 E(\mathbb{F}_p):y^2=x^3+b,其中b\neq 0 E(Fp):y2=x3+bb=0,由Paulo S. L. M. Barreto1 和 Michael Naehrig 在2005年论文 Pairing-Friendly Elliptic Curves of Prime Order中首次提出,在该论文中,提出了构建embedding degree k = 12 k=12 k=12的BN系列椭圆曲线的有效算法:

  • 基域:素数 p = 36 x 4 + 36 x 3 + 24 x 2 + 6 x + 1 p=36x^4+36x^3+24x^2+6x+1 p=36x4+36x3+24x2+6x+1
  • scalar域:order (即椭圆曲线上的点的个数) n = 36 x 4 + 36 x 3 + 18 x 2 + 6 x + 1 n=36x^4+36x^3+18x^2+6x+1 n=36x4+36x3+18x2+6x+1
  • trace: t = 6 x 2 + 1 t=6x^2+1 t=6x2+1(trace of Frobenius)
  • n = p + 1 − t n=p+1-t n=p+1t

以太坊的alt_bn128曲线,取:
x = 4965661367192848881 x=4965661367192848881 x=4965661367192848881

从而有:

  • p = 21888242871839275222246405745257275088696311157297823662689037894645226208583 p=21888242871839275222246405745257275088696311157297823662689037894645226208583 p=21888242871839275222246405745257275088696311157297823662689037894645226208583
  • n = 21888242871839275222246405745257275088548364400416034343698204186575808495617 n=21888242871839275222246405745257275088548364400416034343698204186575808495617 n=21888242871839275222246405745257275088548364400416034343698204186575808495617
  • t = 147946756881789318990833708069417712967 t=147946756881789318990833708069417712967 t=147946756881789318990833708069417712967

根据herumi/ate-pairing可知,相应的extension field为:

  • F p 2 = F p [ u ] / ( u 2 + 1 ) \mathbb{F}_{p^2}=\mathbb{F}_p[u]/(u^2+1) Fp2=Fp[u]/(u2+1),其中 u 2 = 1 u^2=1 u2=1
  • F p 6 = F p 2 [ v ] / ( v 3 − ξ ) \mathbb{F}_{p^6}=\mathbb{F}_{p^2}[v]/(v^3-\xi) Fp6=Fp2[v]/(v3ξ),其中 v 3 = ξ , ξ = u + 9 v^3=\xi,\xi=u+9 v3=ξξ=u+9
  • F p 12 = F p 6 [ w ] / ( w 2 − v ) \mathbb{F}_{p^{12}}=\mathbb{F}_{p^6}[w]/(w^2-v) Fp12=Fp6[w]/(w2v),其中 w 2 = v w^2=v w2=v

相应的sage脚本为:

# GF(p) p的質數體,x為generator
sage: P.<x> = PolynomialRing(GF(p))
# 用GF(p) extension 建構Fp2,u為generator
sage: F2.<u> = GF(p).extension(x^2 + 1)

# Fp2的Polynomial ring P,t為generator
sage: P.<t> = F2[]
# 用Fp2 extension 建構Fp6,v為generator
sage: F6.<v> = F2.extension(t^3 - u-9)

# 若可以則執行下列:
# Fp6的Polynomial Ring P,y為generator
sage: P.<y> = F6[]
# 用Fp6 extension 建構Fp12,w為generator
sage: F12.<w> = F6.extension(y^2 - v)

Pairing-Friendly Elliptic Curves of Prime Order论文中有:
在这里插入图片描述
以太坊黄皮书中与zkSNARK相关的预编译合约使用的是BN128曲线对:

  • 曲线C1(基于 F p \mathbb{F}_p Fp)为:
    在这里插入图片描述
  • 曲线C2(基于 F p 2 \mathbb{F}_{p^2} Fp2)为:
    在这里插入图片描述

相应的sage脚本为:

# G1
sage: F1 = GF(21888242871839275222246405745257275088696311157297823662689037894645226208583)
sage: G1 = EllipticCurve(F1,[0,3])

sage: P1 = G1(1,2)

# G2
sage: F2 = GF(21888242871839275222246405745257275088696311157297823662689037894645226208583^2,"i",modulus=x^2 + 1)
sage: TwistB = 3*F2("9+i")^(-1)
sage: G2 = EllipticCurve(F2,[0,TwistB])

sage: P2x = F2("11559732032986387107991004021392285783925812861821192530917403151452391805634*i + 10857046999023057135944570762232829481370756359578518086990519993285655852781")
sage: P2y = F2("4082367875863433681332203403145435568316851327593401208105741076214120093531*i + 8495653923123431417604973247489272438418190587263600148770280649306958101930")
sage: P2 = G2(P2x,P2y)

基于以上BN128曲线对 构建的pairing计算结果对应 F p 12 \mathbb{F}_{p^{12}} Fp12,即有:
在这里插入图片描述
以太坊EIP-197:Precompiled contracts for optimal ate pairing check on the elliptic curve alt_bn128,以太坊的预编译合约采用以上(公式253)来替代(公式254),从而验证pairing运算结果是否一致。

参考资料

[1] BN128曲线
[2] Paulo S. L. M. Barreto1 和 Michael Naehrig 2005年论文 Pairing-Friendly Elliptic Curves of Prime Order
[3] 以太坊黄皮书

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 欧几里得距离度量是一种常用的序列相似度度量方法,它通过计算两个序列间每一维度的差值的平方和来衡量两个序列的相似程度。其公式为:$\sqrt{\sum_{i=1}^{n}(x_i-y_i)^2}$。这种方法对于序列长度相同的情况下效果较好,但对于长度不同的序列可能不太适用。 ### 回答2: 欧几里得距离是一种常用的曲线相似度度量方法。它基于欧几里得空间中两点之间的直线距离。对于曲线A和曲线B,我们可以将其表示为两个点集,分别记为A = {(x1, y1), (x2, y2), ..., (xn, yn)}和B = {(x'1, y'1), (x'2, y'2), ..., (x'm, y'm)}。其中,(xi, yi)是曲线A上的第i个点,(x'i, y'i)是曲线B上的第i个点。 欧几里得距离的计算公式为:d = √((xi - x'i)² + (yi - y'i)²) 首先,我们需要对曲线A和曲线B进行等间隔采样,得到相同数量的点集。然后,根据计算公式,分别计算曲线A上每个点与曲线B上对应点之间的欧几里得距离。最后,将所有距离值求和并取平均,得到欧几里得距离曲线相似度度量值。 该方法的优点是简单易懂,计算速度快。然而,欧几里得距离对于曲线的平移、旋转和尺度变化较为敏感,会导致曲线相似度度量的误差。因此,在使用欧几里得距离进行曲线相似度度量时,需要考虑对曲线进行预处理,如对曲线进行规范化或使用其他更加鲁棒的相似度度量方法。 总的来说,欧几里得距离是一种简单有效的曲线相似度度量方法,但在某些情况下可能存在一定的误差,需要结合实际需求和曲线特征选择合适的相似度度量方法。 ### 回答3: 欧几里得距离是一种广泛应用于相似度度量的方法,尤其在图像处理、模式识别和数据挖掘领域被广泛使用。 欧几里得距离曲线相似度度量是基于欧几里得距离的计算方法,用于衡量两个曲线之间的相似程度。具体而言,对于两条曲线,我们可以将它们看作是在二维平面上的运动路径。欧几里得距离度量就是计算这两条曲线上各个点之间的距离并求和,从而得到两条曲线之间的距离。 假设有两条曲线A和B,它们的坐标点分别为A(xi, yi)和B(xi, yi),其中i表示曲线上的第i个点。则欧几里得距离计算公式为: d = √((A1-B1)² + (A2-B2)² + ... + (An-Bn)²) 其中d表示曲线A与曲线B之间的距离,n表示曲线上的点的个数。通过计算两条曲线上每个对应点之间的距离,并将其求和,可以得到它们之间的距离。 欧几里得距离曲线相似度度量的应用非常广泛。例如,在图像处理中,可以将一幅图像转化为曲线表示,然后通过计算曲线之间的距离,来判断图像的相似性或者进行图像检索。在模式识别中,可以通过计算两个模式曲线之间的距离,来判断它们是否属于同一类别。在数据挖掘中,可以利用欧几里得距离曲线相似度度量方法,对时间序列数据或者轨迹数据进行相似性分析和聚类。 总之,欧几里得距离曲线相似度度量是一种简单而有效的相似度计算方法,被广泛应用于多个领域,具有重要的实际应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值