Trapdoor团队发现PoREP电路V25版本存在严重漏洞。利用该漏洞,SDR(Precommit1)的计算可以直接省略。所有Sector的Replica的数据也只要存储一份。Trapdoor团队在第一时间和官方沟通后,官方已经快速提交补丁:
PoREP电路也从V25版本,升级到V26。本文仔细讲讲该严重漏洞的攻击原理。
众所周知,Sector数据会经过Labeling, Column Hash以及Encoding计算生成最后的Replica数据(Precommit1和Precommit2阶段)。整个计算通过零知识证明生成证明,并提交到链上。将Sector中的所有节点数据的处理都进行证明不太现实,对应的电路会非常的大。Lotus目前的实现是随机抽查144个节点数据,将这144个节点数据的处理做成电路。即使是这样,电路规模也已经非常大,超过1亿。
replica_id介绍
replica_id是每个Replica数据的标示。计算方法如下:
let replica_id =
generate_replica_id::<Tree::Hasher, _>(&prover_id, sector_id.into(), &ticket, comm_d);
也就是说,replica_id是prover_id, sector_id, comm_d以及链上随机数ticket的hash结果。其中,prover_id是矿工的id,sector_id是Sector的编号,依次增长,comm_d