1. 引言
前序博客:
- CUDA入门
- WebGPU+ZKP:客户端证明
- WebGPU入门
正如Personae Labs团队2022年11月博客 Efficient ECDSA & the case for client-side proving 中所指出:
仅适用于高端笔记本电脑的5分钟证明生成时长,远不是可行的用户体验。为了完全隐私,不能将“生成证明的过程”直接转移到云上,这些证明必须在用户的设备上计算。否则,需要将用户的公钥明文发送到服务器来生成用户的证明,这样给了服务器巨大的能量——只要服务器愿意,就可以破坏用户的匿名性。
对于某些隐私应用来说,在客户端生成证明是必须的,但当前的现状为:
- Client-side ZK is slow.
如以Groth16 browser benchmarks为例:
- https://github.com/personaelabs/efficient-zk-ecdsa#run-benchmarks(JavaScript)中指出:ECDSA_verify电路对应163,239 个约束,在M1 Pro Macbook Pro电脑上运行,生成ECDSA_verify证明用时需39秒左右。
- https://github.com/tornadocash/tornado-core#specs(JavaScript+Solidity)中指出:对于具有28271个约束的电路,其生成证明用时需10秒左右。
2. WebGPU: client-side GPU API
WebGPU为针对web的相对新的API:
- 为WebGL(2011)的接班人
- 由苹果在2017年通过W3C发起,目前Google和Mozilla也已参与。
- 自2023年初,可用于Google Chrome、Safari和Firefox。
- 采用名为WGSL的shader语言。Cuda和C++等为更底层的编程语言。
- 当前使用时必须启用开发者模式,如:
- chrome://flags/#enable-webgpu-developer-features
- Firefox config flags:dom.webgpu.enabled, gfx.webgpu。
WebGPU:
- 不仅支持图形:见https://threejs.org/examples/#webgpu_compute。
- 还支持计算
GPU的加速性能,对Crypto/ZK的意义毋庸置疑:
- Ingonyama指出:GPU提供了难以置信的性能,其在Crypto/ZK领域的存在将不可抹除。
- ZPrize指出:通过将证明生成过程中的大多数耗时操作(MSM和FFT)移到GPU中执行,获奖团队的[PLONK-DIZK]证明时长提升了40%。
- Henzinger等指出:借助硬件加速,改进了[Private Information Retrieval]的单服务器和多服务器的性能。通过硬件加速这种互补方式,可进一步提升新的PIR协议性能。
不过,以上都是对服务端GPU加速的探索,而客户端的GPU加速仍处于探索不足的阶段。
2.1 WebGPU API
WebGPU API文档可参看:
- Mozilla开发者文档 WebGPU API
WebGPU基本架构为:
其主要包括:
- GPUAdapter:为对WebGPU实现的抽象。
- GPUDevice:为对底层视频卡的抽象。
- GPUBuffer:包含了与GPU来回拷贝的数据。用于存储输入和输出数据。
- Shader:为发送给GPU的代码。比C++和Cuda简单。
- Compute pipeline:将shader和GPUBuffer(s) flow 封装给GPU,并等待结果。
WGSL shader代码示例:
相应的CPU和GPU性能对比为:
3. WebGPU for Crypto/ZK现状
现有的一些WebGPU Crypto相关基础算法库有:
- https://github.com/geometryresearch/wgsl-poseidon(Rust+TypeScript+WGSL):基于BN254 Scalar域以WGSL实现了Poseidon哈希函数,可在浏览器内和命令行运行。
- https://github.com/sampritipanda/msm-webgpu(WGSL+HTML+Python):实现了Vesta域的基于Pippenger算法MSM,以及其他一些关键椭圆曲线运算函数。【注意wgsl不支持u64运算,实现的是基于u32数组的modular运算。基于u32数组的modular运算也可参看https://github.com/filecoin-project/ec-gpu/中的
FIELD_LIMB_BITS == 32
场景。】 - https://github.com/voidash/webgpu-examples(Rust+WGSL):实现了BLS12-381有限域运算。
4. 客户端WebGPU待研发空白
将WebGPU用于客户端Crypto/ZK,目前存在如下待研发空白:
- 算法层:
- 实现Multi-scalar multiplication (MSM) 和 Number-theoretic transform (NTT)以及iNTT。
Luke Pearson和Cysic团队指出:
考虑到GPU的灵活性、易于部署以及卓越的性能,坚信GPU解决方案将比ASIC方案提前数月实现。
Georgios Konstantopoulos指出:
MSM需要大量的内存,即使高度并行化之后也仍然很慢。
FFT需要对内存随机访问,使得其对硬件并不友好。
为此,市场赢家有可能是那些专注于FPGA而不是ASIC或GPU的公司。
4.1 Circom vs. WebGPU
Circom当前的开发工具有:
- zkREPL
- hardhat-circom
Circom可用于extremely large circuits:
- Circom-ecda
Circom目前有:
- Dark Forest生态。
- 开发者教育。
- 大量的项目和毕业生参与circom创业。
对标Circom,WebGPU需关注:
- 开发者工具:
- 调试工具不成熟。目前没有?
- 大多数WGSL开发者专注于图形,而不是计算
- 领域编程语言:
- WGSL不错,但有些怪异。是否可将更高层的语言编译为WGSL?
- 对消费者GPU更好的抽象:
- 不是所有GPU都一样的(如 手机GPU vs. 电脑GPU)。WGSL能否运行在某种GPU仿真层。
- 安全性研究:
- 恶意输入能否DOS客户端,或者提取出私有数据?
- 是否会存在timing攻击或者side-channel攻击?
4.2 WebGPU应用展望
WebGPU应用展望:
- 在移动设备上实现高效ZK Prover。
- 在浏览器中加速witness generation。
- 分布式证明网络,使得任何笔记本电脑用户也可参与。
- 分布式Private Information Retrieval网络。
参考资料
[1] Geometry团队Koh Wei Jie 在2023年7月zkParis上的视频分享 ZK Paris: Koh Wei Jie - Deep Dive into WebGPU