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​−x0​y1​−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_1X1​Z2​=X2​Z1​和Y1Z2=Y2Z1Y_1Z_2=Y_2Z_1Y1​Z2​=Y2​Z1​是否成立。

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)(ζp​x,y)和(ζp2x,y)(\zeta_p^2x,y)(ζp2​x,y)。

使用map (x,y)↦(ζpx,y)(x,y)\mapsto (\zeta_px,y)(x,y)↦(ζp​x,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}_qEq​Fq​,从而形成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)相关推荐

  1. 分享CFA学习笔记和资料!

    21年最新学习笔记和资料 复制这段内容后打开百度网盘App,操作更方便哦. 链接:https://pan.baidu.com/s/1GPukBzxG6fw8Hz5vyy_Aiw 提取码:rv5r–来自 ...

  2. 卧槽!华为大佬整理的Linux学习笔记和资料不小心流落到了外网.……

    资料汇总截图 一大牛整理了一套初学到进阶的Linux 学习资料,分享给大家 如何学习 如果是刚开始学习C语言的同学,我建议可以深入看下C语言里面的资料.当然了,如果你对自己的C语言比较自信,可以直接看 ...

  3. Adroid学习笔记-入门资料以及V2.3系统开发环境搭建

    今年工作签得比较顺利,签了国内著名的通讯IT企业,同时拿到国内著名即时通讯软件公司,国内著名的通讯IT兼国企母公司和其移动开发子公司等另外三家公司的offer.之后时间便充裕,同时步入通讯行业,对手机 ...

  4. css --- [学习笔记]背景图片小结 css三大特性

    源代码 参考 1. 行高(line-height) 目标 理解 - 能说出行高和高度三种关系 - 能简单理解为什么行高等于单行文字会垂直居 应用 使用行高实现单行文字垂直居中 能会测量行高 2. CS ...

  5. Halo2 学习笔记——设计之Proving system之Vanishing argument(4)

    1. 引言 在完成对circuit assignment进行commit之后,Prover需要证明满足如下多种circuit关系: custom gates:以多项式gatei(X)\text{gat ...

  6. 前端基础学习笔记 背景 渐变 倒影 遮罩

    背景 首先分享一个css利用渐变实现的图案源代码网站:https://leaverou.github.io/css3patterns/ background-size: X Y;改变背景图片的大小 具 ...

  7. ROS机器人开发实践 [胡春旭] 学习笔记与资料

    资料链接: https://pan.baidu.com/s/1MRYL3asMJhOzWiAsBZKfzg 提取码: 9t3e 复制这段内容后打开百度网盘手机App,操作更方便哦 ROS常用的概念(一 ...

  8. 功能测试学习笔记【资料来源:B站黑马测试】

    链接:软件测试第一篇_测试理论_Linux数据库_超详细教程_哔哩哔哩_bilibili 一.测试的基本知识 软件测试:通过手工或自动化的方式运行被测的软件是否正常(看预期结果和实际结果是否一致). ...

  9. Unity3D的学习笔记与资料

    1.一本入门的书籍,其中的源码是精髓 <<Unity 3D 游戏开发>>     宣雨松编著,人民邮电出版社,图灵原创,书的源码下载地址:图灵网站(www.ituring.co ...

最新文章

  1. zookeeper 客户端_zookeeper进阶-客户端源码详解
  2. 流量时代已亡,如何在 ROI 的魔咒下生存?
  3. 2017年第八届蓝桥杯C/C++ C组国赛 —— 第三题:表达式计算
  4. SpringSecurity集中式整合之使用数据库数据实现认证
  5. Code Issues 2,637 Pull requests 0 Projects 1 Wiki Security Insights Settings 使用filter node快速找到XML f
  6. 一文读懂 - 云上用户如何灵活应用定制化网络服务
  7. 建立自动备份的维护计划
  8. Java面向对象的构造方法例子
  9. 中文核心期刊有哪些?
  10. 复杂网络-无标度网络matlab代码实现
  11. AI语音合成软件免费的有哪些?常用的语音合成软件
  12. 计算机图标被选定无法取消,我电脑桌面上图标全被选中的状态,去不掉怎么处理?...
  13. A股全市场股票历史行情Level2快照高频数据
  14. 腾讯云服务器入门使用流程 新手必看教程
  15. android ibeacon距离,iBeacon使用蓝牙连接范围精确到1-3米
  16. 脉动计算机没有指令计数器,脉冲计数器电路图设计(三) - 脉冲计数器电路图大全(六款脉冲计数器电路设计原理图详解)...
  17. Origin 导入数据画图使用经验总结
  18. 并发和并行以及线程安全
  19. 读书杂抄之《挪威的森林》
  20. 内核与驱动文件的version magic匹配问题

热门文章

  1. http://www.blogjava.net/beansoft/archive/2007/03/09/102812.html
  2. linux火狐中设置中文,Ubuntu中firefox设置成中文
  3. 【时间序列分析】03. 谱密度
  4. 心跳之旅—iOS用手机摄像头检测心率(PPG)
  5. JS中的函数参数传递到底是按值传递还是按引用传递
  6. Vue3悬浮返回主页按钮设计与实现
  7. python写界面文字游戏_Python:pygame游戏编程之旅五(游戏界面文字处理详解)
  8. CSP-J1 CSP-S1 信奥 第1轮 初赛 数据分析 成绩及分数线汇总
  9. salesforce的前世今生
  10. 充满希望的新的一年!