
零知识证明 – zkHack mini挑战赛第一名
Trapdoor Tech获得zkHack mini挑战赛第一名
https://www.zkhack.dev/mini.html
这次的挑战赛由两道题目组成。一道题目一个星期的挑战时间。和第一期的挑战不同,这一期的题目都是基于STARK算法。STARK算法,AIR,FRI低阶测试等等技术会在后续的文章仔细介绍。本文先总结一下这次挑战赛的两个题目的解题思路。
第一题:There's something in the AIR
https://www.zkhack.dev/puzzleM1.html
该题需要找到一种方法来骗过基于ZK-STARK和winterfell构建的投票系统。该题实现的电路逻辑如下图:
这个是典型的隐私保护的实现。通过Nullifier证明拥有私钥。
解题思路
如果用户Alice能对同一个主题(topic)完成2次有效投票,说明系统中存在一个漏洞使得:
-
证明者(prover)能产生 > 1 个的nullifier,并基于此构建证据(witness)
-
验证者(verifier)根据相应的公开输入和证据,无法分辨证明者伪造的nullifier
首先,构造nullifier是在make_signal函数中,并将其作为验证者的输入
//! - A nullifier is computed by hashing a private key together with a hash of the topic - i.e.:
//! hash(priv_key, hash(topic)) using the same Rp64_256 hash function.
let nullifier = priv_key.get_nullifier(topic);
/// Creates a nullifier for the provided topic against this private key.
///
/// A nullifier is computed simply as hash(key, topic).
pub fn get_nullifier(&self, topic: Digest) -> Digest {
let key: Digest = self.0.into();
Rescue::merge(&[key, topic])
}
但是证明者进行证据的计算过程中,使用12列的执行轨迹, 即State[12..23],来构成nullifier, 不只是私钥和主题。
// prover set the initial state
// -- nullifier section of the trace --
state[12] = Felt::new(8);
state[13] = Felt::ZERO;
state[14] = Felt::ZERO;
state[15] = Felt::ZERO;
state[16] = priv_key[0];
state[17] = priv_key[1];
state[18] = priv_key[2];
state[19] = priv_key[3];
state[20] = topic[0];
state[21] = topic[1];
state[22] = topic[2];
state[23] = topic[3];
一个合法的nullifier应包括以下3个部分
[12 13 14 15] [ 16 17 18 19 ] [ 20 21 22 23 ]
nullifier = [8 0, 0, 0, --- 私钥Priv_key----------, -----主题Topic------- ] — 在执行到第 0 步时
然而,检查验证者的程序时,发现在evaluate_transition函数中没有设置对state[12-15]的验证, 类似的验证可以参考默克尔树验证的部分。
result.agg_constraint(1, hash_init_flag, are_equal(E::from(8u8), next[0]));
result.agg_constraint(2, hash_init_flag, is_zero(next[1]));
result.agg_constraint(3, hash_init_flag, is_zero(next[2]));
result.agg_constraint(4, hash_init_flag, is_zero(next[3]));
答案
可以为state[12-15]设置不同的值来伪造nullifier,例如[16, 0, 0, 0]。
pub fn get_fake_nullifier(&self, topic: Digest) -> Digest {
let key: Digest = self.0.into();
let mut state = [Felt::ZERO; 12];
state[4..12].copy_from_slice(Digest::digests_as_elements(&[key, topic]));
state[0] = Felt::new(0 as u64);
// apply the Rescue permutation and return the first four elements of the state
Rescue::apply_permutation(&mut state);
Digest::new(state
[4..8].try_into().unwrap())
}
同时在证明者产生证据时,将state[12-15]设置为伪造的nullifier所对应的值。
Prover.build_trace()
|state| {
......
// -- nullifier section of the trace --
state[12] = Felt::new(0);
第二题:Can you turn up the heat?
https://www.zkhack.dev/puzzleM2.html
本周的题目可以说是 zkHack 有史以来最难的一道题。本题的目标是伪造 STARK 证明,需要解题者对 STARK 证明的整个逻辑步骤有较为清晰的知识。
来回顾一下题目:Alice使用 STARK 电路写了一个斐波那契数列的计算程序,能够同时生成 STARK 证明并验证。某天她收到了一个错误的证明,计算出数列的第32项等于123(实际应为832040)。但这个证明却能通过她的 STARK 验证器。现在我们想要知道该证明是如何被伪造的。
。
比推快讯
更多 >>- Glassnode:BTC 巨鲸地址平均持币量自 2024 年 11 月以来持续下降
- Jump 于 4 小时前从 CEX 提币 5068 万枚 WLFI,价值 1158 万美元
- Kraken 正在调查 Mina 资金网关问题,存取款可能延迟
- 欧洲央行行长:欧盟应弥补稳定币监管的漏洞
- 欧易上线 USDⓈ 交易对 WLFI/USDⓈ 和 PROMPT/USDⓈ
- 某地址向币安转入 7500 枚 ETH,预计盈利 670 万美元
- Paradigm Reth 客户端漏洞致部分以太坊节点中断
- Binance:至少拥有 220 Alpha 积分的用户可领取 1000 枚 MCH 空投
- 欧洲央行行长拉加德警告,加密资产行业风险依然存在
- 欧洲央行行长拉加德谈稳定币风险及 MiCAR 法规
- Binance 官方发布 Sonic (S)代币经济学变更通知
- 美元兑日元触及 149,为 8 月 1 日以来首次
- 数据:8 月加密交易所总交易量达 1.86 万亿美元,创 1 月份以来新高
- Matrixport:对比特币长期前景依然坚定看涨
- 币安将下架部分现货交易对
- Matrixport:部分前瞻性投资者已开始同步配置黄金与比特币
- 前灰度 ETF 主管 David LaValle 出任 CoinDesk 指数负责人
- 当前主流 CEX、DEX 资金费率显示市场仍偏向于看跌 BTC 和 ETH
- 摩根士丹利预计美联储 9 月份降息,但存在不确定性
- 日本 30 年期国债收益率上涨 8.5 个基点至 3.285%,创历史新高
- 25 倍做空 ETH 鲸鱼再开 40 倍比特币空单,总持仓价值近 3000 万美元
- Web3 基础设施 Sign 宣布落地香港,将与香港多家上市公司展开合作
- 币安:Hyperbot (BOT) TGE 参与门槛为 231 Alpha 积分
- OKX 因未在荷兰国家银行注册而被荷兰罚款 260 万美元
- 分析师:金价在未来几个月有望触及 3600-3900 美元的区间
- 分析,机构增持推动下,以太坊质押待处理队列激增至两年来最高水平
- 香港复星将价值 3.28 亿美元的医疗公司股票代币化
- 一鲸鱼在 Hyperliquid 开 25 倍杠杆 ETH 空单,仓位规模 1298 万美元
- Skate 启动创世质押激励计划提案投票,目标质押 1500 万枚代币
- 分析,香港稳定币牌照申请意向远超预期,金管局未来或将增发牌照
- 某鲸鱼/机构再提取 5,172 枚 ETH,约合 2,247 万美元
- 上合组织声明:推动区块链等领域联合研发,交流数字经济领域经验和知识
- Solana 生态实体卡牌交易平台 Collector Crypt 总成交额超 1.45 亿美元,协议毛收入超 965 万美元
- 日本央行行长重申加息立场未变
- 数据:当前加密恐慌贪婪指数为 56,处于贪婪状态
- 欧洲央行官员表示未来利率行动可能降息或加息
- 世界黄金协会计划推出数字黄金
- 昨日排队进入以太坊 PoS 网络的 ETH 突破 86 万枚,创近 2 年来新高
- 数据:比特币现货 ETF 昨日总净流入 3.33 亿美元,富达 FBTC 净流入 1.33 亿美元居首
- WLFI 利用黑名单机制拦截两个遭受黑客攻击的钱包地址窃取资金的操作
- 美国本周部分经济数据公布时间有调整,非农就业数据时间不变
- ETH 铁头多军巨鲸再加仓,高位做多导致其过去一周亏损超 2500 万美元
- 区块链贷款机构 Figure 在美国 IPO 中寻求超 41 亿美元的估值
- 受 Binance 下架消息影响,相关代币暴跌,BAKE 近半小时下跌超 34%
- OKX 已开放 WFLI (World Liberty Financial) 双币赢产品
- 特朗普解雇美联储理事库克案将由华盛顿传奇律师 Abbe Lowell 为库克辩护
- 美 SEC 昨日与 Robinhood 会面,讨论代币化证券交易和其他 RWA 代币化问题
- 某鲸鱼 20 倍杠杆做多 SOL,清算价格 195.19 美元
- Project Hunt:加密 AI 指挥枢纽 Surf 为过去 7 天新增 Top 人物关注者最多的项目
- RootData:B3 将于一周后解锁价值约 2235 万美元的代币
比推专栏
更多 >>观点
比推热门文章
- Glassnode:BTC 巨鲸地址平均持币量自 2024 年 11 月以来持续下降
- Jump 于 4 小时前从 CEX 提币 5068 万枚 WLFI,价值 1158 万美元
- Kraken 正在调查 Mina 资金网关问题,存取款可能延迟
- 欧洲央行行长:欧盟应弥补稳定币监管的漏洞
- 欧易上线 USDⓈ 交易对 WLFI/USDⓈ 和 PROMPT/USDⓈ
- 某地址向币安转入 7500 枚 ETH,预计盈利 670 万美元
- Paradigm Reth 客户端漏洞致部分以太坊节点中断
- Binance:至少拥有 220 Alpha 积分的用户可领取 1000 枚 MCH 空投
- 欧洲央行行长拉加德警告,加密资产行业风险依然存在
- 欧洲央行行长拉加德谈稳定币风险及 MiCAR 法规