Halo2学习笔记——背景资料之Elliptic curves(5)
1. 引言
基于有限域构建的椭圆曲线,是另一重要的密码学工具。
采用椭圆曲线,是因为其可提供a cryptographic group,即在group内,DLP(discrete logarithm problem)是困难的。
有多种方式来定义曲线方程E(Fp)E(\mathbb{F}_p)E(Fp),但是Halo2中,定义的Fp\mathbb{F}_pFp为255-bit field,满足方程式y2=x3+by^2=x^3+by2=x3+b成立的所有解集(Fp\mathbb{F}_pFp-rational points)(x,y)(x,y)(x,y),称为“affine coordinates”。
这些Fp\mathbb{F}_pFp-rational points 和 “point at infinity” O\mathcal{O}O(作为group identity) 一起,都是group内的元素。传统地,都将elliptic curve groups写成加法态的。
由上图可知:“Three points on a line sum to zero, which is the point at infinity”。
相应的group addition law很简单:若求P+QP+QP+Q,则将PPP和QQQ连线,其与曲线上交叉第第三个点为RRR,将RRR的yyy坐标求反,即为P+Q=(Rx,−Ry)P+Q=(R_x,-R_y)P+Q=(Rx,−Ry)。
对于P=QP=QP=Q的情况,称为point doubling,需特殊处理:即找到该点的切线,然后将该切线与曲线的交叉点yyy坐标求反即为结果。
有(Rx,−Ry)+(Rx,Ry)=O(R_x,-R_y)+(R_x,R_y)=\mathcal{O}(Rx,−Ry)+(Rx,Ry)=O。
The ability to add and double points naturally gives us a way to scale them by integers, called scalars。
曲线上点的个数称为group order。group order为prime qqq,则可将scalars认为是elements of a scalar field Fq\mathbb{F}_qFq。
椭圆曲线,如果设计得当的话,具有重要的安全属性:
已知2个random elements G,H∈E(Fp)G,H\in E(\mathbb{F}_p)G,H∈E(Fp),找到aaa使得[a]G=H[a]G=H[a]G=H 被认为是computationally infeasible with classical computers。这也称为是elliptic curve discrete log assumption。
若椭圆曲线group G\mathbb{G}G 具有prime order qqq(Halo2中使用的曲线满足该要求)则其为finite cyclic group,其为isomorphic to Z/qZ\mathbb{Z}/q\mathbb{Z}Z/qZ,或者等价为,isomorphic to the scalar field Fq\mathbb{F}_qFq。
每个可能的generator GGG都满足isomorphism,即在scalar 端存在某值,其为precisely the discrete log of the corresponding group element with respect to GGG。对于密码学安全的曲线,the isomorphism is hard to compute in the G→Fq\mathbb{G}\rightarrow \mathbb{F}_qG→Fq direction,因为elliptic curve discrete log problem is hard。
有时,相比于group elements,借助scalars的isomorphism思想更有助于理解group-based cryptographic protocols and algorithms。
2. Curve arithmetic
2.1 Point addition and point doubling
详细可参看《Elliptic Curves Number Theory and Cryptography(second edition)》第2.2节可知,有:
对于y2=x3+by^2=x^3+by2=x3+b curve,对应有:
- Point addition:
求(x0,y0)+(x1,y1)=(x2,y2)(x_0,y_0)+(x_1,y_1)=(x_2,y_2)(x0,y0)+(x1,y1)=(x2,y2),其中x0≠x1x_0\neq x_1x0=x1,有:
λ=y1−y0x1−x0\lambda=\frac{y_1-y_0}{x_1-x_0}λ=x1−x0y1−y0
y2=λ(x0−x2)−y0y_2=\lambda(x_0-x_2)-y_0y2=λ(x0−x2)−y0
x2=λ2−x0−x1x_2=\lambda^2-x_0-x_1x2=λ2−x0−x1 - Point doubling:
求(x1,y1)=(x0,y0)+(x0,y0)(x_1,y_1)=(x_0,y_0)+(x_0,y_0)(x1,y1)=(x0,y0)+(x0,y0),有:
λ=dydx=3x22y\lambda=\frac{dy}{dx}=\frac{3x^2}{2y}λ=dxdy=2y3x2
y1=λ(x0−x1)−y0y_1=\lambda(x_0-x_1)-y_0y1=λ(x0−x1)−y0
x1=λ2−2x0x_1=\lambda^2-2x_0x1=λ2−2x0
根据Renes等人2015年论文《Complete addition formulas for prime order elliptic curves》中,存在有效的公式,可将point addition和point doubling同时处理。
2.2 Projective coordinates
2.1节中的point doubling中,存在昂贵的inversion of 2y2y2y。为了避免倒数运算,而且实际并不立即需要单个curve operation的resulting point的actual affine (x′,y′)(x',y')(x′,y′)坐标。
对于y2=x3+by^2=x^3+by2=x3+b curve,引入第三个坐标系ZZZ,扩展为:
Z3y2=Z3x3+Z3bZ^3y^2=Z^3x^3+Z^3bZ3y2=Z3x3+Z3b
当Z=1Z=1Z=1时,对应的就是y2=x3+by^2=x^3+by2=x3+b curve。
令X=xZ,Y=yZX=xZ,Y=yZX=xZ,Y=yZ 且 Z≠0Z\neq 0Z=0,则有相应的homogenous projective curve为:
Y2Z=X3+Z3bY^2Z=X^3+Z^3bY2Z=X3+Z3b
当Z≠0Z\neq 0Z=0时,根据(X,Y,Z)(X,Y,Z)(X,Y,Z) 计算 (X/Z,Y/Z)(X/Z,Y/Z)(X/Z,Y/Z)即为相应的affine coordinate。
当Z=0Z=0Z=0时,表示为the point at infinity O=(0:1:0)O=(0:1:0)O=(0:1:0)。
通常来说,Projective coordinates通常(而不总是)比 affine coordinates 效率要高。例外的情况是:
- 可使用Montgomery’s trick时
- 当乘法运算和倒数运算的开销相当时
在projective coordinates下对point (X,Y,Z)=(xZ,yZ,Z)(X,Y,Z)=(xZ,yZ,Z)(X,Y,Z)=(xZ,yZ,Z)进行double运算,有:
λ=3x22y=3(X/Z)22(Y/Z)=3X22YZ\lambda=\frac{3x^2}{2y}=\frac{3(X/Z)^2}{2(Y/Z)}=\frac{3X^2}{2YZ}λ=2y3x2=2(Y/Z)3(X/Z)2=2YZ3X2
double运算结果(x,y)+(x,y)=(x′,y′)(x,y)+(x,y)=(x',y')(x,y)+(x,y)=(x′,y′)可表示为:
x′=λ2−2x=λ2−XZ=18X4YZ−16XY3Z28Y3Z3x'=\lambda^2-2x=\lambda^2-\frac{X}{Z}=\frac{18X^4YZ-16XY^3Z^2}{8Y^3Z^3}x′=λ2−2x=λ2−ZX=8Y3Z318X4YZ−16XY3Z2
y′=λ(x−x′)−y=12X3Y2Z−8Y4Z2−27X6+24X3Y2Z8Y3Z3y'=\lambda(x-x')-y=\frac{12X^3Y^2Z-8Y^4Z^2-27X^6+24X^3Y^2Z}{8Y^3Z^3}y′=λ(x−x′)−y=8Y3Z312X3Y2Z−8Y4Z2−27X6+24X3Y2Z
为此,可令Z=8Y3Z3,X=18X4YZ−16XY3Z2,Y=12X3Y2Z−8Y4Z2−27X6+24X3Y2ZZ=8Y^3Z^3,X=18X^4YZ-16XY^3Z^2,Y=12X^3Y^2Z-8Y^4Z^2-27X^6+24X^3Y^2ZZ=8Y3Z3,X=18X4YZ−16XY3Z2,Y=12X3Y2Z−8Y4Z2−27X6+24X3Y2Z,从而有X/Z=x′,Y/Z=y′X/Z=x',Y/Z=y'X/Z=x′,Y/Z=y′。
这样就可完全避免倒数运算。
注意:
- 除projective coordinate和affine coordinate之外,还有Jacobian coordiante,令(x,y)=(xZ2,yZ3,Z)(x,y)=(xZ^2,yZ^3,Z)(x,y)=(xZ2,yZ3,Z),即将curve rescaled by Z6Z^6Z6 而不是 Z3Z^3Z3。
- 在homogenous projective coordinate下,比较2个curve point (X1,Y1,Z1)(X_1,Y_1,Z_1)(X1,Y1,Z1) 和 (X2,Y2,Z2)(X_2,Y_2,Z_2)(X2,Y2,Z2)是否相同,即验证X1Z2=X2Z1X_1Z_2=X_2Z_1X1Z2=X2Z1和Y1Z2=Y2Z1Y_1Z_2=Y_2Z_1Y1Z2=Y2Z1是否成立。
3. Curve endomorphisms
假设Fp\mathbb{F}_pFp 有 a primitive cube root of unity,或换句话说,有3∣p−13|p-13∣p−1,使得an element ζp\zeta_pζp可生成a 3-order multiplicative subgroup。
则椭圆曲线y2=x3+by^2=x^3+by2=x3+b上的point (x,y)(x,y)(x,y) 存在2个cousin points:【因为ζp3=1\zeta_p^3=1ζp3=1】
(ζpx,y)(\zeta_px,y)(ζpx,y)和(ζp2x,y)(\zeta_p^2x,y)(ζp2x,y)。
使用map (x,y)↦(ζpx,y)(x,y)\mapsto (\zeta_px,y)(x,y)↦(ζpx,y)即为 应用an endomorphism over the curve。
详细的机制很复杂,但是当curve有prime qqq个points(即具有prime order),实现endomorphism的方式为:
- multiply the point by a scalar in Fq\mathbb{F}_qFq,该scalar值为a primitive cube root ζq\zeta_qζq in the scalar field。
4. Curve point compression
对于curve上的point P=(x,y)P=(x,y)P=(x,y),其negation为−P=(x,−y)-P=(x,-y)−P=(x,−y) 也在curve上。为了唯一确定某point,需将其xxx坐标 和 yyy坐标的正负标记符 一起encode。
根据Fields 章节中描述,可将field element的最低有效位(LSB,Least Significant Bit)作为其正负标记符,因为其additive inverse will always have the opposite LSB。
将yyy坐标的LSB标记为sign
。
Pallas curve和Vesta curve分别基于Fp\mathbb{F}_pFp和Fq\mathbb{F}_qFq域,每个element都可以255 bits表示,若用32-byte来表示,正好有一个bit是未使用的。可将yyy坐标的sign
bit存入表示xxx坐标的32-byte的最高位:
<----------------------------------- x --------------------------------->
Enc(P) = [_ _ _ _ _ _ _ _] [_ _ _ _ _ _ _ _] ... [_ _ _ _ _ _ _ _] [_ _ _ _ _ _ _ sign]^ <-------------------------------------> ^LSB 30 bytes MSB
“point at infinity” O\mathcal{O}O 为group identity,不存在相应的affine (x,y)(x,y)(x,y)表示。
但是,对于Pallas和Vesta curve来说,不存在x=0x=0x=0或y=0y=0y=0的point。
因此,使用"fake" affine coordinates (0,0)(0,0)(0,0)来encode O\mathcal{O}O,从而对应为all-zeroes 32-byte array。
4.1 Deserialization
当需要对压缩的curve point进行反序列化时,首先需读取最高有效位作为ysign
,为yyy坐标的正负标记符。然后将该位置为0,来恢复原始的xxx坐标。
若x=0,y=0x=0,y=0x=0,y=0,则返回“point at infinity” O\mathcal{O}O。
否则,计算y=x3+by=\sqrt{x^3+b}y=x3+b,读取yyy的最低有效位sign
,若sign=ysignsign=ysignsign=ysign,则返回point (x,y)(x,y)(x,y),否则返回(x,−y)(x,-y)(x,−y)。
5. Cycles of curves
令EpE_pEp为elliptic curve over finite field Fp\mathbb{F}_pFp,其中ppp为prime,将其表示为Ep/FpE_p/\mathbb{F}_pEp/Fp。
group of points of EpE_pEp over Fp\mathbb{F}_pFp,具有order q=#E(Fp)q=\#E(\mathbb{F}_p)q=#E(Fp),将Fp\mathbb{F}_pFp称为base field,Fq\mathbb{F}_qFq称为scalar field。
Halo2将instantiate proof system over the elliptic curve Ep/FpE_p/\mathbb{F}_pEp/Fp,需prove statements about Fq\mathbb{F}_qFq-arithmetic circuit satisfiability。
QA:
curve为EpE_pEp over Fp\mathbb{F}_pFp,为何其arithmetic circuit为基于Fq\mathbb{F}_qFq而不是Fp\mathbb{F}_pFp的呢?
因为proof system通常是基于encodings of the scalars in the circuit(或更准确的说,commitments to polynomials whose coefficients are scalars)。这些scalars是基于Fq\mathbb{F}_qFq的,而其encodings或commitments则是elliptic curve point in Ep/FpE_p/\mathbb{F}_pEp/Fp。
但是,大多数Verifier的arithmetic computations是基于base field Fp\mathbb{F}_pFp的,因此可高效表示为an Fp\mathbb{F}_pFp-arithmetic circuit。
QA:
为何说Verifier的计算主要是基于Fp\mathbb{F}_pFp的呢?
因为Halo2中Verifier实际需使用circuit的output information来运行group operations。类似point doubling和point addition的group operations,都是arithmetic in Fp\mathbb{F}_pFp,因为这些point的坐标值都是in Fp\mathbb{F}_pFp的。
构建另一条scalar field为Fp\mathbb{F}_pFp曲线的主要目的是:
- 具有an Fp\mathbb{F}_pFp-arithmetic circuit,可高效verify proofs from the first curve。
此外,若第二条曲线的base field为Eq/FqE_q/\mathbb{F}_qEq/Fq,则将generate proofs that could be efficiently verified in the first curve’s Fq\mathbb{F}_qFq-arithmetic circuit。换句话说,可instantiate a second proof system over EqFqE_q\mathbb{F}_qEqFq,从而形成a 2-cycle with the first:
5.1 Halo2中使用的Pallas-Vesta curves
Halo2中使用的Pallas-Vesta curves 详细参见:
https://github.com/zcash/pasta
6. Hashing to curves
有时,需能根据某输入,生成elliptic curve Ep/FpE_p/\mathbb{F}_pEp/Fp上的一个随机point,而没人知道具体的discrete logarithm关系。
详细见:
Internet draft on Hashing to Elliptic Curves
根据效率和安全性要求,在Internet draft中使用的框架函数主要有:
hash_to_field
:输入为a byte sequence,将该输入map为a element in the base field Fp\mathbb{F}_pFp。map_to_curve
:输入为Fp\mathbb{F}_pFp element,输出为EpE_pEp point。
6.1 Simplied SWU
详细可参见Wahby和Boneh 2019年论文《Fast and simple constant-time hashing to the BLS12-381 elliptic curve》。
参考资料
[1] Halo2 背景资料之Elliptic curves
Halo2学习笔记——背景资料之Elliptic curves(5)相关推荐
- 分享CFA学习笔记和资料!
21年最新学习笔记和资料 复制这段内容后打开百度网盘App,操作更方便哦. 链接:https://pan.baidu.com/s/1GPukBzxG6fw8Hz5vyy_Aiw 提取码:rv5r–来自 ...
- 卧槽!华为大佬整理的Linux学习笔记和资料不小心流落到了外网.……
资料汇总截图 一大牛整理了一套初学到进阶的Linux 学习资料,分享给大家 如何学习 如果是刚开始学习C语言的同学,我建议可以深入看下C语言里面的资料.当然了,如果你对自己的C语言比较自信,可以直接看 ...
- Adroid学习笔记-入门资料以及V2.3系统开发环境搭建
今年工作签得比较顺利,签了国内著名的通讯IT企业,同时拿到国内著名即时通讯软件公司,国内著名的通讯IT兼国企母公司和其移动开发子公司等另外三家公司的offer.之后时间便充裕,同时步入通讯行业,对手机 ...
- css --- [学习笔记]背景图片小结 css三大特性
源代码 参考 1. 行高(line-height) 目标 理解 - 能说出行高和高度三种关系 - 能简单理解为什么行高等于单行文字会垂直居 应用 使用行高实现单行文字垂直居中 能会测量行高 2. CS ...
- Halo2 学习笔记——设计之Proving system之Vanishing argument(4)
1. 引言 在完成对circuit assignment进行commit之后,Prover需要证明满足如下多种circuit关系: custom gates:以多项式gatei(X)\text{gat ...
- 前端基础学习笔记 背景 渐变 倒影 遮罩
背景 首先分享一个css利用渐变实现的图案源代码网站:https://leaverou.github.io/css3patterns/ background-size: X Y;改变背景图片的大小 具 ...
- ROS机器人开发实践 [胡春旭] 学习笔记与资料
资料链接: https://pan.baidu.com/s/1MRYL3asMJhOzWiAsBZKfzg 提取码: 9t3e 复制这段内容后打开百度网盘手机App,操作更方便哦 ROS常用的概念(一 ...
- 功能测试学习笔记【资料来源:B站黑马测试】
链接:软件测试第一篇_测试理论_Linux数据库_超详细教程_哔哩哔哩_bilibili 一.测试的基本知识 软件测试:通过手工或自动化的方式运行被测的软件是否正常(看预期结果和实际结果是否一致). ...
- Unity3D的学习笔记与资料
1.一本入门的书籍,其中的源码是精髓 <<Unity 3D 游戏开发>> 宣雨松编著,人民邮电出版社,图灵原创,书的源码下载地址:图灵网站(www.ituring.co ...
最新文章
- zookeeper 客户端_zookeeper进阶-客户端源码详解
- 流量时代已亡,如何在 ROI 的魔咒下生存?
- 2017年第八届蓝桥杯C/C++ C组国赛 —— 第三题:表达式计算
- SpringSecurity集中式整合之使用数据库数据实现认证
- Code Issues 2,637 Pull requests 0 Projects 1 Wiki Security Insights Settings 使用filter node快速找到XML f
- 一文读懂 - 云上用户如何灵活应用定制化网络服务
- 建立自动备份的维护计划
- Java面向对象的构造方法例子
- 中文核心期刊有哪些?
- 复杂网络-无标度网络matlab代码实现
- AI语音合成软件免费的有哪些?常用的语音合成软件
- 计算机图标被选定无法取消,我电脑桌面上图标全被选中的状态,去不掉怎么处理?...
- A股全市场股票历史行情Level2快照高频数据
- 腾讯云服务器入门使用流程 新手必看教程
- android ibeacon距离,iBeacon使用蓝牙连接范围精确到1-3米
- 脉动计算机没有指令计数器,脉冲计数器电路图设计(三) - 脉冲计数器电路图大全(六款脉冲计数器电路设计原理图详解)...
- Origin 导入数据画图使用经验总结
- 并发和并行以及线程安全
- 读书杂抄之《挪威的森林》
- 内核与驱动文件的version magic匹配问题
热门文章
- http://www.blogjava.net/beansoft/archive/2007/03/09/102812.html
- linux火狐中设置中文,Ubuntu中firefox设置成中文
- 【时间序列分析】03. 谱密度
- 心跳之旅—iOS用手机摄像头检测心率(PPG)
- JS中的函数参数传递到底是按值传递还是按引用传递
- Vue3悬浮返回主页按钮设计与实现
- python写界面文字游戏_Python:pygame游戏编程之旅五(游戏界面文字处理详解)
- CSP-J1 CSP-S1 信奥 第1轮 初赛 数据分析 成绩及分数线汇总
- salesforce的前世今生
- 充满希望的新的一年!