摘要: 技术解码丨复制证明(PoRep)发展现状你想要安全,因为这是一个不受掌控的世界,你不知道攻击来自哪里,你依赖的是你心中多数人的诚实和利己主义;你需要层层装甲,但你又不想付出太大的代价,高昂的保护意味着对人群的疏远。怎么办?也许该寻得一套软甲。价格亲民,刀枪不如。
众所周知,Filecoin的存储证明体系是Filecoin网络的精髓,也是Filecoiini研究团队投入最多的部分,其中主要包括复制证明(PoRep)和时空证明(PoSt),而复制证明又是其中的重中之重,关键之中的关键。时至今日,尽管Filecoin的网络协议,共识,其他算法都基本定型,但是复制证明仍然处于完善阶段。仍然在苦苦寻求更加完善的方案。
复制证明到底证明什么?简单地说,Filecoin的复制证明就是矿工证明你真的存储了用户的数据。
详细一点讲,那就可以直接采用复制证明研究专家、证明算法的发明者 Ben Fisch 的话:
复制证明(PoRep)是一个交互式证明系统。在这个系统中,存储的提供者需要提供可公开验证的证明,来表明其为一个数据文件副本分配了独有的空间资源,而且所存储的数据是可检索的。也就是说,复制证明是一个把可检索证明(PoR)嵌入进容量证明(PoC)中的一种证明机制。
进一步说,PoRep使证明者能够证明他们正在使用不低于需要的最小空间来存储信息(这一点等同于空间证明:PoS),并实际使用该空间来存储有用的信息(这与大多数空间证明不同)。同时,PoRep可以有效地提取存储的任何数据(如可检索性证明)。
在一个带激励的网络中,存储节点以证明者的身份参与并存储数据文件,因为这样做可以使他们获得网络奖励。
PoRep的一项重要特性是,证明者如果不能证明他们声称的那样存储数据文件的复制副本,那么他们将不能获得奖励。这是通过系统设计来实现的,在一个合理的系统设计中,即使是那些重复的数据文件,也需要分别证明其每一个复制都需要根据协议被单独证明。
这里几个名词解释一些:
- PoRep:Proof of Replication (前面讲过了)
- PoC:Proof of Capacity - 容量证明,证明自己有足够的容量
- PoS:Proof of Storage - 存储证明,注意,这里没有包括检索部分(与PoC类似)
- PoR:Proof of Retrievability - 检索证明,证明数据可被读取
综上所述,我们知道: PoRep = PoS PoR
复制证明的使用
PoRep方案旨在用于云存储和分布式存储网络。在这样的网络中,重要的是要确保确实独立地存储数据文件的复制。
Ben Fisch 作为 Filecoin 研究团队中的重要一员,他在2018年发表了两篇重要论文,用于探索复制证明在 Filecoin 网络中的使用,分别是:
Tight Proofs of Space and Replication
PoReps: Proofs of Space on Useful Data
Filecoin 网络的复制证明的设计基本上基于上述论文,但做了更多的探索。其中包括,从 Zigzag DRG 到 WinSDR 再到 SDR 的改变。
复制证明的安全性当复制证明用于区块链系统,这里就涉及到一个重要的问题,这种证明是否可伪造?答案是肯定的。因为证明不过就是一些运算,也可以看成一个函数,当所有输入都知道的情况下,函数值也就可计算了。在区块链系统中,一切链上的信息都是透明的,即使不透明,对于需要发起证明的存储服务方而言,证明所需要的所有信息也是已知的。
然而,复制证明要求必须在存储的时候发起,同时,要一直保持承诺。也就是说,必须:
1)按照规定的时间内完成证明;
2)证明完成后,不能删除数据。
上面的第 1)点,可以通过交易和上链信息来进行验证,而第 2)点,就需要通过时空证明来保证。那么很简单的一个问题就是,能不能不保留数据,而在需要时空证明的时候再做一次复制证明来生成数据呢?答案是,可以,如果你能够满足网络的要求的话。
这里所提到的网络要求在实践中就是时间要求,为了这个安全性,一个简单的设计原理就是,让时空证明必须在很短的时间内完成,否则无效;而复制证明如果不能在很短的时间内完成的话,就不能做假。
那么,当这两个时间的差距越大,安全性就越高。
Filecoin网络中的要求:
时空证明(PoSt)要求在小于一个区块时间内完成(25s~45s,具体数值待定);注意,这里只考虑WinningPoSt (之前叫ElectionPoSt)。为什么可以不考虑 WindowedPoSt,读者自己想想做假的动机就差不多明白(当然全面的安全考虑不仅仅是这么简单)。
复制证明(PoRep)通过设计,在一般用户可承受成本之下,使得其不可能小时级别内完成。一般为数小时
注意,PoSt的时间是网络要求的,而PoRep的时间消耗,只能通过算法设计来实现。
如何增长PoRep需要的时间?如果单纯从安全性的角度考虑,复制证明完成的时间越长越好。要延长计算的时间,办法有很多,可以考虑的因素包括:
算法的长度:步骤越多的算法,可能需要更长的时间
算法的可并行性:并行度可以通过增加资源减少运算时间
算法的可简化性:算法本身如果能够简化,那么复杂度就存疑
PoRep要在这几个方面都要有足够的强度。就目前的SDR算法而言,对应上面的几点,Filecoin采用的方案是:
安全和成本的折衷
算法的长度通过多步骤计算实现:比如在整个SDR的算法过程中,计算Column Hash之前,要计算11层 labels,这个层数可以调整,层数越多,步骤越多,时间越长;
采用每一步的强依赖关系来去并行化:在计算labels时,每一步的计算都依赖上一步的结果,完全不能并行;因此不能通过增加资源的方式来缩短时间;
采用大量的密码哈希算法来抗简化:我们知道,密码学中的哈希算法是单向函数,而且是难以破解和简化的(实践中可以看成是不可破解的)。
但是,安全和成本是一个硬币的两面。如果不计成本,当然可以很安全。但是,Filecoin的愿景是做一个存储市场,是希望与 Amazon,阿里云抗衡的,如果PoRep的成本太高,那么整个存储的成本也就会高,在这个市场上的竞争力就降低了。
如何在尽量不增加成本的情况下,提高安全性,这是Filecoin团队考虑的最多的一个问题。其实,对于PoRep性能的提升,Filecoin团队一直在做,而且性能也一直在提升,这些提升的措施包括:采用更高效的hash算法 Poseidon 来提升零知识证明效率;利用SHA Extension指令来提升每一层的计算速度;采用八叉树来简化计算周期和存储需求;利用内存和存储的均衡来实现高效率的计算等。
这些考虑,更多的在于对于CPU,内存和存储资源的消耗上尽量降低,从而带来成本的降低,但是,前面提到过了,为了安全性不降低,计算的时间长度上不下降。换句话说,尽管你可以使用更少的资源,更低的成本来做复制证明,但是,你还是要花很长时间。
这里有一个问题要澄清一下:做复制证明花比较长的时间,并不意味着存储和检索的时间就长了,也并不意味着会很大地影响网络的响应时间。这是两回事情。对存储用户而言,存储和检索都是直接和矿工打交道的,矿工对用户的响应时间并不依赖于Filecoin区块链网络。矿工完全有很多的方案还为用户提供快速的响应。因此,千万不要因为复制证明需要花的的时间长,就认为Filecoin网路的服务会有问题。
进一步的优化空间PoRep算法一直在进步,但仍然不能令人满意。安全性也许可以,但效率还是不够好。一方面,目前的算法对于不带 SHA Extension 的芯片不够友好,这可能造成大量存量设备不能高效地为Filecoin网络提供存储;另一方面,如果要充分利用现有设备来进行计算,现在的算法要么需要大量的内存消耗、要么需要高带宽、大量高速IO消耗。
到目前未知,尽管已经非常临近测试网第二阶段,但是,Filecoin团队仍在积极研究,希望进一步优化。就目前而言,团队对这个算法的满意度还可以,一个共识是:目前算法是安全的,而且也工作的很好。第二阶段可以采用这个算法。同时,希望有更好的算法,如果经过研究,发现新的不降低安全性,同时需要的成本可以更低,那么算法将会被替换。
这也是团队一直反复强调不要买硬件的原因。再等等吧,不用多久,就可以基本定型。不好意思,再说一句,优化无止境,改变总在发生。
(1、 内容来自链得得内容开放平台“得得号”,稿件内容仅代表作者观点,不代表链得得官方立场。2、 凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责。3、 得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:chengyiniu@chaindd.com)
,