zkCTF 开放注册火热进行中!参赛指南已送达,即刻参与夺旗竞赛!
ScaleBit
2024-01-23 21:14
订阅此专栏
收藏此文章







所有 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 Documentationhttps://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 Documentationhttps://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



ScaleBitBitsLab 旗下子品牌,是一个为 Web3 Mass Adoption 提供安全解决方案的区块链安全团队。凭借在区块链跨链和零知识证明等扩展技术方面的专业能力,我们主要为 ZKP、Layer 2 和跨链应用提供细致和尖端的安全审计。


ScaleBit 团队由在学术界和企业界都有丰富经验的安全专家组成,致力于为可扩展的区块链生态系统的大规模应用提供安全保障。


https://www.scalebit.xyz/

https://twitter.com/scalebit_


END


击卡片,关注 ScaleBit ~

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

ScaleBit
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开