所有 ZK 开发者和爱好者,Welcome Aboard zkCTF!
作为一场开创性的夺旗竞赛,zkCTF 自开放注册以来,已经激起了 Web3 众多关注 ZK 技术和应用的项目方、社区和开发人员的浓厚兴趣。通过即将开幕的 zkCTF,我们期待,能够吸引更多目光聚焦在 ZK 领域,并协力推动 ZK 技术创新、技能发展,以及更深层次的思考。
zkCTF 由 BitsLab 旗下子品牌 — ScaleBit 主办,携手 Scroll、EthStorage、SECBIT、Term Structure、Zomma Protocol 等合作伙伴和技术社区共同发起。本次竞赛将持续 48 小时,奖金池总额高达 3500 USDT,积分最高的前 3 名参赛个人 / 团队将分别获得 2000、1000 和 500 USDT 的奖励;完成一系列与 ZK 技术和应用相关的安全挑战,即可获得相应积分。
当前,zkCTF 开放注册火热进行中!随着竞赛时间(世界标准时间 UTC,2024/2/3 - 2/5,1 时 AM)日渐临近,ScaleBit 团队特地为所有参赛个人 / 团队准备了一份参赛指南,分步骤地详细提供 zkCTF 的全流程演练。若您需要更多支持,请通过 zkCTF 官方社群(Telegram)随时与我们联系。
Step 1:注册账号并登录
访问 zkCTF 官方网站(https://zkctf.scalebit.xyz/),点击右上角「注册」按钮。
根据下图需求完成注册,请确保使用您的真实邮箱进行注册。
注册账号成功之后会自动登录。
Step 2:创建(加入)团队
本次比赛允许组队,参赛者可以选择加入别人的团队或者自己创建团队,如下图所示。
如果不想注册后第一时间加入团队,也可以后续在网站右上角点击「团队」按钮继续操作。
(1)选择「加入团队」,需要您输入正确的团队名称以及团队密码,每个队伍最多 2 名参赛者。
(2)选择「创建团队」,设置团队名称以及团队密码,并分享给您的队友,以便他们加入您的团队。
加入或者创建团队之后,可以看到团队成员以及得分。
下图的 4 个按钮分别可以「编辑团队信息」、「选择队长」、「获得团队分享链接」以及「删除队伍」。
Step 3:环境配置
以下操作步骤,您也可以通过访问 Installation - Circom 2 Documentation 文档查看:
https://docs.circom.io/getting-started/installation/
3.1 依赖安装
(1)Rust 环境
Circom 工具使用 Rust 编写一个编辑器。为了使 Rust 在您的系统中可用,您可以安装 rustup;如果您使用的是 Linux 或 macOS,请打开终端并输入以下命令:
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
如果您使用的是 Windows,请访问以下网址根据指示安装:
https://www.rust-lang.org/zh-CN/tools/install
(2)安装 netcat(nc)
Linux 系统,请通过以下指令安装:
yum install -y nc
Windows 系统,请按照以下教程安装:
https://blog.csdn.net/muriyue6/article/details/107127217
(3)其他
Node.js 版本尽量在 10 及以上,还需要安装包管理工具如 npm 或者 yarn。
3.2 安装 Circom
(1)首先,克隆 Circom 仓库到本地
git clone https://github.com/iden3/circom.git
(2)进入 Circom 目录,使用 cargo build 编译
cargo build --release
这个指令会花费 3 分钟左右完成。
下载成功后,它会生成 Circom 二进制文件到目录 target/release 下面。
(3)安装二进制文件
注意:确保您执行此命令时仍然在 Circom 目录下。
cargo install --path circom
上述指令会安装 Circom 二进制文件到目录 $HOME/.cargo/bin 下。
(4)验证
现在,您应该能够使用 --help 标志查看可执行文件的所有选项。
3.3 安装 snarkjs
snarkjs 是一个 npm 包,其中包含用于从 Circom 生成的工件生成和验证 ZK 证明的代码,您可以通过以下指令来安装 snarkjs:
npm install -g snarkjs
3.4 MetaMask 配置
MetaMask 可以在 Chrome 或者 Edge 的扩展程序中下载。
(1)进入 MetaMask 页面,点击左上角的网络选项。
(2)点击添加网络。
(3)选择底部的手动添加网络。
(4)按照下图填入正确参数,然后点击保存即可。
(5)可以在主页面切换到此网络。
Step 4:点击「挑战」按钮
进入题目页面
参赛指南将给出「checkin」的解题实例。
Step 5:「checkin」解题
关于使用 ZK 验证电路的参考,您可以通过访问 Proving circuits with ZK - Circom 2 Documentation 文档查看:
https://docs.circom.io/getting-started/proving-circuits/
checkin 是用 Circom 编写的电路,点击「checkin」。
出现 checkin 题目的详细信息,如下图所示:
本次竞赛使用自定义 rpc 链:http://47.76.89.7:8545/
测试币水龙头网址:http://47.76.89.7:8080/
您可以通过访问以下网站,查看题目的详细信息:
https://github.com/scalebit/zkCTF-sample1.git
以下为详细解题步骤:
(1)开始
首先执行 nc 命令:
nc 47.76.89.7 20000
(2)获得账户
选择 1 选项,获得一个外部账户,以部署合约。
返回账户地址以及 token。
(3)部署合约
访问测试币水龙头网址给生成的账户领取一点测试币,然后再次执行 nc 命令,选择 2 选项,填入之前生成的 token 部署合约。
(4)查看源代码
再次执行 nc 命令,选择 4 选项,查看合约源代码。
(5)解题
前往 GitHub 仓库查看题目给定信息。
提供了 3 个文件:Circom 电路、Solidity 验证合约和 zkey,本题需要您调用 checkin.sol 合约中的 verify 函数,传入 2 个正确的参数成功验证。
查看 Proving circuits with ZK - Circom 2 Documentation(https://docs.circom.io/getting-started/proving-circuits/)文档可知,可以通过 snarkjs generatecall 指令生成 Solidity 验证合约所需的参数,但这需要生成 public.json 和 proof.json,而生成 public.json 和 proof.json 需要 zkey 和 wtns 文件;zkey 文件已给出,则需要生成 wtns 文件。
查看 Computing the witness - Circom 2 Documentation(https://docs.circom.io/getting-started/computing-the-witness/)文档可知,首先需要编译 Circom 文件,然后进入 js 文件夹,自己编辑一个输入参数 json 文件,然后调用指令:
node generate_witness.js checkin.wasm input.json witness.wtns
生成 wtns 文件,由于 checkin 题目没有做任何限制,所以用任意 2 个数据都可以。需要注意使用的是字符串而不是数字。具体步骤如下:
☑第一步:编译
☑第二步:计算见证
node generate_witness.js checkin.wasm input.json witness.wtns
☑第三步:生成 proof.json 和 public.json
因为合约验证只需要 _proof 和 _pubSignals,所以这里使用 plonk 而不是 grouth16。
snarkjs plonk prove checkin.zkey witness.wtns proof.json public.json
☑第四步:生成 proof.json 和 public.json
☑第五步:通过 Remix 和 MetaMask 与合约交互,调用函数
环境选择 Injected Provider 会自动弹出 MetaMask 窗口,确认链接即可连上钱包。
在红框处填入生成的合约地址,点击「At Address」,在 Deployed Contracts 处即可看到合约交互界面。
将生成的 2 个参数填入,点击黄色按钮「verify」,弹出 MetaMask 弹窗,确认交易即可(请确保调用时自己账户有测试币)。
等待交易完成,点击「isSolved」查看 flag 状态;如果是 true 说明调用成功,可以获取 flag 了。
(6)解题成功后,再执行 nc 命令,选择 3 选项,填入第一步生成的 token,获取 flag
(7)最后在 zkCTF 官方网站提交 flag,获取积分
Step 6:继续解决下一道题目
后续题目的解题步骤,与样题 checkin 类似。
RULES
以下为本次竞赛共识:
1.参赛者可使用电子邮件在 zkCTF 官网完成注册。
2.如果愿意,欢迎邀请其他人加入您的团队,每个团队限定 2 名参赛者。
3.参赛者可登录查看竞赛题目并解决挑战。竞赛包含一系列安全挑战,一些挑战将在 Day 1 解锁,其余将在 Day 2 解锁。
4.每个挑战结束时都会有一个 flag,例如 flag{SomeTextHere},复制并提交到挑战页面以获得积分;记分牌将跟踪您的进度,每个挑战都会根据其难度级别来分配积分。
5.竞赛过程中不得作弊,不得攻击平台,不得毁约他人,不得抄袭他人答案。若发生以上情况,将被取消资格。
在 zkCTF 中展示您的技能和创新吧!希望这份参赛指南能够助您一举夺旗,也欢迎更多的个人 / 团队,即刻注册,参与这场关于 ZK 技术和应用的夺旗竞赛!
Good luck,see you all at zkCTF!
关于 ScaleBit
ScaleBit,BitsLab 旗下子品牌,是一个为 Web3 Mass Adoption 提供安全解决方案的区块链安全团队。凭借在区块链跨链和零知识证明等扩展技术方面的专业能力,我们主要为 ZKP、Layer 2 和跨链应用提供细致和尖端的安全审计。
ScaleBit 团队由在学术界和企业界都有丰富经验的安全专家组成,致力于为可扩展的区块链生态系统的大规模应用提供安全保障。
https://www.scalebit.xyz/
https://twitter.com/scalebit_
END
点击卡片,关注 ScaleBit ~
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。