Trapdoor团队发明PoREP电路V25版本存在严重裂痕。操作该零常识证明的裂痕,SDR算法(Precommit1)的计较可以直接省略。所有Sector的Replica的数据也只要存储一份。Trapdoor团队在第一时间和官方相同后,官方已经快速提交补丁:
抽查节点的选择逻辑实此刻storage-proofs/porep/src/stacked/vanilla/challenges.rs的LayerChallenges布局的derive_internal函数: 因为Labeling的计较,只和replica_id有关,在回收伪造的replica_id的环境下,整个SDR的计较只需要提前计较好即可。也就是说,在这个裂痕的进攻下,SDR算法毋需计较。
3.1 随机抽查节点的选择
整个PoREP的证明电路的果真输入除了comm_d和comm_r外,尚有各个Merkle树的路径信息。也就是,,整个电路限定了抽查的节点的位置,原始数据的comm_d和最终Replica数据的comm_r。也只是限制了这些信息。
.chain(seed)
generate_replica_id::<Tree::Hasher, _>(&prover_id, sector_id.into(), &ticket, comm_d);
2. SDR算法计较
.result();
4. 裂痕在那边?
.chain(&j.to_le_bytes())
总结:
let hash = Sha256::new()
也就是说,抽查的节点是replica_id,随机数以及抽查编号的hash计较功效。简朴的说,节点的抽查和replica_id相关。
SDR算法的计较进程,也就是Labeling的进程。SDR的每个节点的计较都需要replica_id,详细的计较进程如下:
每个节点,都需要正确地颠末Labeling,Column Hash以及Encoding计较。而且能计较出对应的Merkle树树根。
1. replica_id先容
let replica_id =
PoREP电路也从V25版本,进级到V26。本文仔细讲讲该严重裂痕的进攻道理。
Trapdoor团队发明V25的PoREP电路存在严重裂痕。操作该裂痕,SDR(Precommit1)的计较可以省略。PoREP电路的果真输入中,并没有包罗replica_id。固然抽查节点的位置和replica_id有间接的干系,在replica_id没有作为果真输入的环境下,SDR的计较可以回收伪造的replica_id。
3. PoREP电路
3.2 PoREP电路的果真输入
仔细阐明PoREP电路的果真输入发明,PoREP电路的果真输入中,并没有包罗replica_id。固然抽查节点的位置和replica_id有间接的干系,在replica_id没有作为果真输入的环境下,SDR的计较可以回收伪造的replica_id。简朴的说,在计较进程中,可以回收任意的replica_id举办Labeling计较。由此,进攻要领就清晰了: .chain(replica_id.into_bytes())
let j: u32 = ((challenges_count * k as usize) + i) as u32;
Trapdoor团队,威武!向专注在零常识证明的技能团队致敬!
replica_id是每个Replica数据的标示。计较要领如下:
众所周知,Sector数据会颠末Labeling, Column Hash以及Encoding计较生成最后的Replica数据(Precommit1和Precommit2阶段)。整个计较通过零常识证明生成证明,并提交到链上。将Sector中的所有节点数据的处理惩罚都举办证明不太现实,对应的电路会很是的大。Lotus今朝的实现是随机抽查144个节点数据,将这144个节点数据的处理惩罚做成电路。纵然是这样,电路局限也已经很是大,高出1亿。
也就是说,replica_id是prover_id, sector_id, comm_d以及链上随机数ticket的hash功效。个中,prover_id是矿工的id,sector_id是Sector的编号,依次增长,comm_d是Sector原始数据的merkle树根。很容易发明,每个Sector对应的replica_id是纷歧样的。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。