BN128曲线

article/2025/10/6 19:03:56

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] 以太坊黄皮书


http://chatgpt.dhexx.cn/article/qUX93sFr.shtml

相关文章

【YOLO v4 相关理论】Normalization: BN、CBN、CmBN

一、Batch Normalization 论文&#xff1a;https://arxiv.org/pdf/1502.03167.pdf 源码&#xff1a; link. Batch Normalization是google团队在2015年论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出的。 个人认为…

Betaflight BN880 GPS 简单测试

Betaflight BN880 GPS 简单测试 1. 源由2. 窗台对比测试3. 开阔区域测试3.1 GPS安装位置3.1.1 BN880 GPS 机尾打印支架 安装位置3.1.2 BN880 GPS 机头固定 安装位置3.1.3 M8N GPS 机尾打印支架 安装位置 3.2 M8N模块历史记录3.3 BN880模块第一次&#xff08;机尾安装&#xff0…

BN(Batch Normalization):批量归一化

现在的神经网络通常都特别深&#xff0c;在输出层像输入层传播导数的过程中&#xff0c;梯度很容易被激活函数或是权重以指数级的规模缩小或放大&#xff0c;从而产生“梯度消失”或“梯度爆炸”的现象&#xff0c;造成训练速度下降和效果不理想。 随着训练的进行&#xff0c;…

通俗理解BN(Batch Normalization)

1. 深度学习流程简介 1&#xff09;一次性设置&#xff08;One time setup&#xff09; - 激活函数&#xff08;Activation functions&#xff09; ​ - 数据预处理&#xff08;Data Preprocessing&#xff09; ​ - 权重初始化&#xff08;Weight Initialization&#xff0…

为什么BN?batch normalization的原理及特点

1 什么是BN&#xff1f; 数据归一化方法&#xff0c;往往用在深度神经网络中激活层之前。其作用可以加快模型训练时的收敛速度&#xff0c;使得模型训练过程更加稳定&#xff0c;避免梯度爆炸或者梯度消失。并且起到一定的正则化作用&#xff0c;几乎代替了Dropout 2 原理 B…

【深度学习基础知识 - 07】BN的原理和作用

Batch Normalization也是深度学习中的一个高频词汇&#xff0c;这篇文章将会对其做一个简单介绍。 目录 1. BN的原理2. BN的作用3. BN层的可学习参数4. infer时BN的处理5. BN的具体计算步骤以及公式6. BN和L2参数权重正则化的区别 1. BN的原理 BN就是在激活函数接收输入之前对…

什么是BN(Batch Normalization)

什么是BN(Batch Normalization)&#xff1f; 在之前看的深度学习的期刊里&#xff0c;讲到了BN&#xff0c;故对BN做一个详细的了解。在网上查阅了许多资料&#xff0c;终于有一丝明白。 什么是BN&#xff1f; 2015年的论文《Batch Normalization: Accelerating Deep Networ…

深度学习—BN的理解(一)

0、问题 机器学习领域有个很重要的假设&#xff1a;IID独立同分布假设&#xff0c;就是假设训练数据和测试数据是满足相同分布的&#xff0c;这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢&#xff1f;BatchNorm就是在深度神经…

Batch Normalization详解以及pytorch实验

Batch Normalization是google团队在2015年论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出的。通过该方法能够加速网络的收敛并提升准确率。在网上虽然已经有很多相关文章&#xff0c;但基本都是摆上论文中的公式泛…

Java参数校验validation和validator区别

Java参数校验validation和validator区别 1. 参数校验概述2. validation与validator区别3. validation注解说明4. validator注解说明5. 日期格式化说明6. 实现验证6.1 引入依赖6.2 代码实现6.3 实现验证 1. 参数校验概述 常见的业务开发中无可避免的会进行请求参数校验&#xf…

hibernate-validator

validator 简介各种注解好处 validator.validate方法业务逻辑代码中检查传入的参数时为传入的参数类型中各个属性添加注解NotNull、NotBlank、NotEmpty间的区别 简介 validator&#xff0c;翻译过来&#xff0c;就是“验证器”的意思。它是一种注解式参数校验&#xff0c;包名…

validator自定义校验注解及使用

validator自定义校验注解及使用 官方文档&#xff1a;https://docs.jboss.org/hibernate/validator/8.0/reference/en-US/html_single/#validator-customconstraints 用到依赖: <!--validator的依赖如果项目使用的springBoot的依赖可以不用再引入 hibernate-validator 因为…

spring之Validator

初步认识 spring数据验证核心类&#xff1a;①&#xff1a;Validator ②&#xff1a;Errors,两者之间的纽带是Validator中定义的validate方法。 public interface Validator {// 限定Validator的职责&#xff0c;不可能所有的校验全部交给一个Validator来做boolean supports(…

Hibernate-Validator的学习

Hibernate-Validator的学习 此教程基于黑马程序员Java品达通用权限项目&#xff0c;哔哩哔哩链接&#xff1a;https://www.bilibili.com/video/BV1tw411f79E?p49 1.hibernate-validator介绍 早期的网站&#xff0c;用户输入一个邮箱地址&#xff0c;需要将邮箱地址发送到服…

Hibernate Validator源码解析

一、引言 问题&#xff1a;在代码编写的过程中&#xff0c;数据值的校验在JavaEE三层架构&#xff08;展示层、业务层、数据访问层&#xff09;均有涉及&#xff0c;各层的校验需求又是不尽相同的&#xff0c;因此往往会伴随着代码冗余&#xff0c;重复的校验逻辑出现在三层代…

Hibernate Validator简介

亲爱的小伙伴们我来填坑啦&#xff0c;java中优雅的参数校验方法中的校验的实现原理。 1.前言 验证数据是发生在所有应用程序层&#xff08;从表示层到持久层&#xff09;的常见任务。通常在每一层中实现相同的验证逻辑&#xff0c;这既耗时又容易出错。为了避免重复这些验证&…

bootstrapValidator验证最大值最小值范围限制

录入该值的最大值与最小值 bootstrapValidator进行效验&#xff0c;使最小值不可大于最大值&#xff0c;最大值不可小于最小值 刚开始的验证还是没事的&#xff0c;符合正常的验证规则 再把不符合规则的最大值改变&#xff0c;现在最小值已经比最大值小了&#xff0c;但是最大…

class-validator中文教程

官方文档&#xff1a; https://www.npmjs.com/package/class-validator class-validator可以说是一个简化验证的依赖库 &#xff08;采用注释的方式进行校验&#xff09; 但是缺少中文文档和过程&#xff0c;以自己的理解和对官网文档的阅读进行整理输出。 它的好兄弟class-t…

Hibernate Validator 总结大全

背景 代码开发过程中&#xff0c;参数的有效性校验是一项很繁琐的工作&#xff0c; 如果参数简单&#xff0c;就那么几个参数&#xff0c;直接通过ifelse可以搞定&#xff0c;如果参数太多&#xff0c;比如一个大对象有100多个字段作为入参&#xff0c;你如何校验呢&#xff1…

java使用validator进行校验

不管是html页面表单提交的对象数据还是和第三方公司进行接口对接&#xff0c;都需要对接收到的数据进行校验&#xff08;非空、长度、格式等等&#xff09;。如果使用if一个个进行校验&#xff08;字段非常多&#xff09;&#xff0c;这是让人崩溃的过程。幸好jdk或hibernate都…