新手教程|搭建zkLogin的证明服务端

详解使用Sui提供的Docker镜像和Groth16提供密钥的证明过程

Sui中文小助手
Sui Network CN
Published in
Nov 2, 2023

--

zkLogin是Sui的一种原生功能,它允许人们只使用来自如Google、Meta和Twitch等的现有网络凭证来创建Sui地址并签署交易。为确保隐私,集成zkLogin的apps必须创建ZKP (Zero Knowledge proofs,零知识证明),以使凭证对app保持隐藏,同时使交易历史对网络服务保持隐藏。由于生成ZKP可能需要大量资源,在客户端端口上可能会较慢,建议使用专用于ZKP生成的后端服务端口。运行该服务以及salt服务将允许用户通过zkLogin访问您的应用。关于salt服务的更多信息,请阅读Sui文档中有关salt策略的内容。

在后端运行证明服务的一个选项是使用Sui文档中提供的Docker镜像以及在今年九月举行的仪式中建立的公共参考字符串 (Common Reference String, CRS)。

证明服务的设置步骤

1. 下载Docker镜像,标记为prover和prover-fe。

2. 下载Groth16证明密钥zkey文件,稍后将其用作运行prover的参数。

wget -O - https://raw.githubusercontent.com/sui-foundation/zklogin-ceremony-contributions/main/download-zkey.sh | bash

3. 通过运行b2sum zkLogin.zkey来检查您是否已下载正确的zkey文件。

060beb961802568ac9ac7f14de0fbcd55e373e8f5ec7cc32189e26fb65700aa4e36f5604f868022c765e634d14ea1cd58bd4d79cef8f3cf9693510696bcbcbce

4. 在基于Linux的机器 (amd64) 上使用下载的zkey运行prover,并将其运行在PORT1上。

docker run \
-e ZKEY=/app/binaries/zkLogin.zkey \
-e WITNESS_BINARIES=/app/binaries \
-v <path_to_zkLogin.zkey>:/app/binaries/zkLogin.zkey \
-p PORT1:8080 \
<prover-image>

5. 运行prover-fe,端口为PORT2。

docker run \
-e PROVER_URI='http://localhost:PORT1/input' \
-e NODE_ENV=production \
-e DEBUG=zkLogin:info,jwks \
-p PORT2:8080 \
<prover-fe-image>

6. 适当暴露prover-fe服务,并保持prover服务为内部。

7. 使用以下其中一个端口调用证明服务:

  • /ping以测试服务是否正常运行

运行curl http://localhost:PORT2/ping应返回pong。

  • /v1以创建零知识证明

输入JWT_TOKEN、短暂的公钥、maxEpoch、jwtRandomness、salt和密钥声明名称以获取证明。

curl -X POST 'http://localhost:PORT2/v1' -H 'Content-Type: application/json' \
-d '{"jwt":"$JWT_TOKEN", \
"extendedEphemeralPublicKey":"ucbuFjDvPnERRKZI2wa7sihPcnTPvuU//O5QPMGkkgA=", \
"maxEpoch":"10", \
"jwtRandomness":"S76Qi8c/SZlmmotnFMr13Q==", \
"salt":"urgFnwIxJ++Ooswtf0Nn1w==", \
"keyClaimName":"sub" \
}'


Response:`{"proofPoints":{"a":["17267520948013237176538401967633949796808964318007586959472021003187557716854","14650660244262428784196747165683760208919070184766586754097510948934669736103","1"],"b":[["21139310988334827550539224708307701217878230950292201561482099688321320348443","10547097602625638823059992458926868829066244356588080322181801706465994418281"],["12744153306027049365027606189549081708414309055722206371798414155740784907883","17883388059920040098415197241200663975335711492591606641576557652282627716838"], ["1","0"]],"c":["14769767061575837119226231519343805418804298487906870764117230269550212315249","19108054814174425469923382354535700312637807408963428646825944966509611405530","1"]}, "issBase64Details":{"value":"wiaXNzIjoiaHR0cHM6Ly9pZC50d2l0Y2gudHYvb2F1dGgyIiw", "indexMod4": 2 },"headerBase64":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEifQ"}`

如果出于性能原因,您更愿意从头开始编译prover,请查看Sui的rapidsnark分支资料,您需要编译并以服务器模式启动prover。

关于 Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网英文Twitter中文TwitterDiscord英文电报群中文电报群

--

--