一种面向zk-SNARK运算的GPU并行加速方法技术

技术编号:36189474 阅读:65 留言:0更新日期:2022-12-31 21:01
本发明专利技术公开了一种面向zk

【技术实现步骤摘要】
一种面向zk

SNARK运算的GPU并行加速方法


[0001]本专利技术属于加密
,具体涉及一种面向zk

SNARK运算的GPU并行加速方法。

技术介绍

[0002]零知识证明(Zero

Knowledge Proofs,ZKP)是密码学中常用的隐私保护手段之一,最早由S.Goldwasser、S.Micali及C.Rackoff提出,其核心是零知识体系的构建。该证明过程中主要涉及两方参与者,分别是证明者(Prover)P和验证者V(Verifier)。设P掌握一些信息X,并希望向V证明P确实掌握了X,如果某个协议能够向V证明P确实掌握了X,同时V不能得知任何关于X本身的信息,则称该协议为零知识证明协议。零知识证明必须满足以下条件:
[0003]1.正确性,如果P没有掌握X,P使V相信P掌握了X的概率很低;
[0004]2.完备性,如果P掌握了X,P能使V以绝对优势的概率相信P掌握了X;
[0005]3.零知识性,V无法获取任何额外的知识,尤其是不能得知X。
[0006]一般而言,零知识证明构建了一套基于概率方法的证明体系。理论上,P伪造X骗取V的信任的成功率依测度收敛至零;而在实践中,则是一个极小概率事件。
[0007]zk

SNARK是zero

knowledge Succinct Non

interactive ARguments of Knowledge的简称,即简洁的非交互式的零知识证明。相较于一般的交互式零知识证明,zk

SNARK具有简洁性、非交互性,即zk

SNARK的验证信息相对简短,且无需问答式多次交互。当前实现zk

SNARK的算法包括:Groth16、GM17和BCTV14等。其中,Groth16算法具有验证速度快、证明字符串短等优点,但是其可信初始化开销较大。Groth16算法的实现可描述为以下过程:(1)建立R1CS至QAP的转换关系;(2)准备阶段Setup;(3)证明阶段Prove;(4)验证阶段Verify。在建立R1CS至QAP转换关系阶段中,R1CS(Rank 1Constraint System,秩一约束系统)的实质是逻辑电路的矩阵和向量运算表示;QAP(Quadratic Arithmetic Program,二次算数程序)的实质是由矩阵和向量构成的多项式函数,而将矩阵转化为多项式函数的过程中使用了拉格朗日插值法。在准备阶段Setup中,随机选取范围内的常数α,β,γ,δ,x,将x代入多项式计算利用椭圆曲线对数据进行同态隐藏,公布[α]1、[β]2、[γ]1、[δ]1、[δ]2、以及同态隐藏后的x各级幂[x]1,[x2]1,

[x
n
]1作为公共字符串。并将向量从l处切片为两段,例如切为在证明阶段Prove中,Prove阶段,证明者根据公共字符串以及自己的私有证据随机选择范围内的常数r,q计算[A]1,[B]2,[C]1作为证明发送给验证者。其中t(x)为选取椭圆曲线有限域时采用的模数多项式,在验证阶段Verify中,验证者根据公共字符串以及命题验证下式
[0008]GPU(Graphics Processing Unit,图形处理器),起源于用户对于高质量画面的要求,通过将CPU从画面渲染中解放出来,既改善了画面质量,又释放了CPU算力。GPU核心相较CPU轻量很多,它将问题约束在大量的类型相同、可并行即相互无依赖的数据计算上,大幅减少了控制电路与缓存对芯片资源的占用,从而允许在相同的芯片资源与功率下提供远超CPU的核心数量,实现远超传统CPU的高性能并行计算能力。
[0009]当前,基于zk

SNARK的零知识证明实现主要有以下实现方式:
[0010]CPU实现:libsnark是一个实现了zk

SNARK算法的开源工具库,由SCIPR Lab完成,支持多种约束系统的构建与转换,多种椭圆曲线,以及多种zk

SNARK算法。ZCash团队利用Rust语言开发的bellman项目也是一个实现了多种zk

SNARK算法的开源库,用于更新ZCash中的零知识证明算法。
[0011]专用电路:现有技术利用ASIC实现zk

SNARK中的NTT运算与Multiexp运算的专用电路,通过CPU

ASIC的异构计算,实现了5.8以上的加速比。开源项目Fpga_snark_prover试图采用CPU

FPGA的异构计算,对bn

128曲线上的zk

SNARK进行加速,该项目尚未完成一个完整可用的证明系统,但核心算法似乎已经取得了优秀的加速效果。FPGA与ASIC的方案虽然具有非常高的加速比以及CPU

GPU望尘莫及的功耗表现,但专用电路的引入意味着不能简单地在大多数计算机上运行,同时其本身设计的可移植性也较差,面对不同的场景需要投入大量人力物力设计与开发。
[0012]GPU加速方案:采用CPU

GPU的异构计算能够在大多数具有GPU的机器上直接执行,并且CUDA编程的泛用性与扩展性高,开发代价远低于硬件开发,因此CPU

GPU异构计算加速的研究同样十分重要。现有技术使用CPU

GPU异构计算针对证明系统中使用到zk

SNARK算法的PoRep、Winning Post、Window Post约束电路计算过程进行了加速,在AMD Threadripper 3970x+RTX 2080Ti上分别取得了4.2、1.19、1.5的加速比。现有技术使用CPU

GPU异构计算针对Bulletproofs中的约束电路计算过程进行了加速,在Intel Xeon Gold 6230+RTX 2080Ti上取得了3.66的加速比。
[0013]零知识证明和zk

SNARK可应用于不同领域的数据隐私保护。在区块链领域,zk

SNARK在Zerocash中可以帮助用户在隐藏其真实身份和具体交易的情况下,实现交易的认证和执行,防止用户信息在公网上的暴露;而在Filecoin中,zk

SNARK被用于证明存储服务提供方执行存储任务的情况,在不给出用户存储数据的情况下验证数据存储的真实性和有效性。在线上投票领域,zk

SNARK可用于维护投票人的个人隐私,防止投票人的个人数据和投票信息等泄露至公网。zk

SNARK首先将待执行数据(如数据库信息、图片、文件等)经过电路转换生成可供算法执行的高维向量,再对向量采取)建立R1CS至QAP的转换关系的措施。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向zk

SNARK运算的GPU并行加速方法,其特征在于,包括:步骤(1):CPU执行输入输出任务,将待处理数据读入内存,CPU执行Prescan过程,根据给定进制划分指数,并将对应指数的底数分离;其中,输入输出任务指计算椭圆曲线有限域上的多重点加任务并给出结果M,P1…
P
N
为底数,a1…
a
N
分別为各项对应之指数;待处理数据即输入步骤(2):CPU为GPU分配内存空间和桶数组,将底数放入桶中;步骤(3):GPU根据桶数据执行BucketMul计算,为每个桶完成桶内数据乘积计算;步骤(4):GPU使用完成桶内乘积计算的值,执行WindowReduce操作,进行桶间组内,也即指数某一位的全部底数乘积的计算;步骤(5):GPU根据步骤(4)的计算结果,将每一位的值整合起来,执行FinalReduce过程,使对应位的指数完成自乘,并将自乘后的数值相乘得到最终的结果。2.根据权利要求1所述的一种面向zk

SNARK运算的GPU并行加速方法,其特征在于,所述步骤(1)具体过程为:步骤(1.1),CPU执行输入输出任务,将待处理数据读入内存,CPU执行Prescan任务,计算出每个桶T
im
内的元素索引,并为GPU设计分配区域存放;步骤(1.2),采用一次性分配的方式,使用标记数组记录每个桶对应的索引缓存区的起始位置与终止位置,从而划分出每个桶的索引缓存区。3.根据权利要求2所述的一种面向zk

SNARK运算的GPU并行加速方法,其特征在于,所述步骤(1.1)中,根据的计算内容,分析得出,T
im
中i相同,即属于同一R
i
的桶,并起来是全体输入P1,P2,

,P
N
;R
i
的个数即指数的2
C
进制位数因此共需分配个索引的空间,上述运算中,假设P1…
P
N
为底数,Multiexp运算有N项,每个指数为二进制的B位数,每C位划为一组。4.根据权利要求2或3所述的一种面向zk

SNARK运算的GPU并行加速方法,其特征在于,所述步骤(1.2)中,根据指数的数值确定确定每个输入出现于桶的位置,对k=0~N,通过右移并取与,得出输入的指数a
k
在2
C
进制...

【专利技术属性】
技术研发人员:肖利民沈润楠肖希源王良郭为
申请(专利权)人:北京天数微芯半导体科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1