搭建zkLogin的证明服务端

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

搭建zkLogin的证明服务端

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镜像 ,标记为 proverprover-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

通过运行 b2sum zkLogin.zkey.

4.运行 proverPORT1 在基于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-fePORT2:

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.
  • /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。