搭建zkLogin的证明服务端
详解使用Sui提供的Docker镜像和Groth16提供密钥的证明过程。
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)。
证明服务的设置步骤
- 下载 Docker镜像 ,标记为
prover
和prover-fe
. - 下载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
通过运行 b2sum zkLogin.zkey
.
4.运行 prover
于 PORT1
在基于Linux的机器 (amd64) 上使用下载的zkey。
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
以测试服务是否正常运行- 在您的Move项目的根目录运行
curl http://localhost:PORT2/ping
应返回pong
.
- 在您的Move项目的根目录运行
/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。