WebGPU助力客户端Crypto/ZK

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/115486.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode: 1. 两数之和 【题解超详细】

前言 有人夜里挑灯看花,有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。 希望下面的题解可以帮助你们开始 你们的 leetcode 刷题 的 天降之路 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中…

【ES6】Promise的入门介绍

Promise 是 JavaScript 中的一个对象,用于处理异步操作。Promise 对象代表一个最终可能完成(并得到结果)或失败(并被拒绝)的操作,以及其结果的值。 一个 Promise 有三种状态: Pending&#xf…

基于costas环的载波同步系统matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................ I_Dataroun…

Spring-5.0.x源码下载及本地环境搭建

一、Spring源码下载 从github上下载Spring的源代码 下载地址:https://github.com/spring-projects/spring-framework 访问地址之后,打开Spring的代码页面找到你想下载的版本,如5.0.x,如下图所示: 下载方式一&#x…

java+jsp+servlet+mysql蛋糕商城

项目介绍: 本系统为基于jspservletmysql的蛋糕商城,包含管理员和用户角色,用户功能如下: 用户:注册、登录系统;查看商品分类;查看热销、新品商品;查看商品详情;搜索商品…

电磁式电压互感器直流电阻测试

试验目的 测量电磁式电压互感器直流电阻的目 的是检查其一次、 二次绕组的质量及回路的完整性, 以发现各种原因所造成的导线断裂、 接头开焊、 接触不良、 匝间短路等缺陷。 试验设备 变压器直流电阻测试仪 厂家: 湖北众拓高试 试验方法 一次绕组直流…

C++信息学奥赛1177:奇数单增序列

#include<bits/stdc.h> using namespace std; int main(){int n;cin>>n; // 输入整数 n&#xff0c;表示数组的大小int arr[n]; // 创建大小为 n 的整型数组for(int i0;i<n;i) cin>>arr[i]; // 输入数组元素for(int i0;i<n;i){ // 对数组进行冒泡排序f…

【JavaSE】String类

两种创建String对象的区别 String s1 "hello"; String s2 new String("hello");s1是先查看常量池是否有 “hello” 数据空间&#xff0c;如果有就直接指向它&#xff0c;如果没有就创建然后指向它。s1最终指向的是常量池的空间地址。 s2是先在堆中创建空…

c++ boost::json

Boost社区12月11日发布了1.75版本&#xff0c;在之前&#xff0c;​​Boost使用Boost.PropertyTree解析​​JSON​​​&#xff0c;​​XML​​​&#xff0c;​​INI​​​和​​INFO​​​格式的文件。但是由于成文较早及需要兼容其他的数据格式&#xff0c;相比较于其他的​…

buildAdmin的使用笔记

安装buildAdmin 下载完整包&#xff0c;解压进入 buildadmin 的文件夹&#xff0c; 输入命令 composer install 启动的时候使用&#xff0c; php think run 就可以了 为什么启动只需要&#xff0c; php think run 这种启动方式&#xff0c; 我是头一回看见 &#xff0c;后来才…

angular抛出 ExpressionChangedAfterItHasBeenCheckedError错误分析

当变更检测完成后又更改了表达式值时&#xff0c;Angular 就会抛出 ExpressionChangedAfterItHasBeenCheckedError 错误。Angular 只会在开发模式下抛出此错误。 在开发模式下&#xff0c;Angular 在每次变更检测运行后都会执行一次附加检查&#xff0c;以确保绑定没有更改。这…

Mediasoup在node.js下多线程实现

mediasoup基于socket.io的交互消息来完成join-room的请求过程。Join的过程&#xff0c;实际就是获取stream的过程&#xff0c;也就是视频加载时间(video-load-speed)。在RTMP系统&#xff0c;视频加载时间是秒开。Mediasoup给出的第一个frame是I-frame&#xff0c;但由于交互的…

C++编辑修改PDF

PDFWriter是一个易于使用的C创建、修改PDF文档的库 1.创建一个PDF文件 #include #include “PDFWriter.h” int main() { std::cout << “Hello World!\n”; PDFWriter pdfWriter; int retpdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13); if (ret eS…

认识ESP32(什么是RSP32)

一、认识ESP32 ESP32 是一款由乐鑫信息科技&#xff08;Espressif Systems&#xff09;开发的微控制器&#xff08;Microcontroller&#xff09;&#xff0c;它广泛用于物联网&#xff08;IoT&#xff09;和嵌入式系统应用。以下是一些 ESP32 的主要特点&#xff1a; 双核处理…

26 Linux高级篇-Linux面试题

26 Linux高级篇-Linux面试题 文章目录 26 Linux高级篇-Linux面试题1.分析日志t.txt(访问量)&#xff0c;将各个ip地址截取&#xff0c;并统计出现次数&#xff0c;并按从大到小排序(腾讯)2.统计连接到服务器的各个ip情况&#xff0c;并按连接数从大到小排序(腾讯)3.如忘记了mys…

Linux枚举文件目录、获取文件属性

目录 1.枚举指定路径下的文件目录2.获取文件属性stat其他方式&#xff1a;Linux获取文件属性stat()、fstat()、lstat()函数实现stat属性代码 1.枚举指定路径下的文件目录 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.…

C++11——右值引用和移动语义

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C11——右值引用 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;右值引用&#xff0c;是C11更新的一个非常有价值的语法&am…

[ES]mac安装es、kibana、ik分词器

一、安装es和kibana 1、创建一个网络&#xff0c;网络内的框架(eskibana)互联 docker network create es-net 2、下载es和kibana docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1 3、运行docker命令部署单点eskibana&#xff08;用来操作es&#xff09; doc…

七、高并发内存池--Page Cache

七、高并发内存池–Page Cache 7.1 PageCache的工作原理 PageCache是以span的大小(以页为单位)和下标一一对应为映射关系的哈希桶&#xff0c;下标是几就说明这个哈希桶下挂的span的大小就是几页的&#xff0c;是绝对映射的关系。因为PageCache也是全局只有唯一一个的&#x…

Unity MonoBehaviour事件函数的生命周期

Unity运行时候的默认的几个函数的执行顺序&#xff1a; 首先是Awake&#xff0c;OnEnable&#xff0c;Start等&#xff0c;后面是FixUpdate Update 最后是OnDisable、OnDestroy