欢迎大家来到第七章,经过前章《【Filecoin源码仓库全解析】第六章:如何单机部署多节点集群及矿池设计思路》的介绍,我们分享了如何在单机部署多节点集群的知识以及矿池设计的一些思路。
我们将在本章介绍目前Filecoin工程实现中所采用的复制证明(PoRep)方式与时空证明(PoSt)方式,以及如何参与协议实验室发起的复制证明游戏(Replication-Game)。
一、Filecoin所设计的证明类型
Filecoin是一个利用区块链技术来实现的去中心化存储系统,我们都知道,在一个区块链系统中,需要保证每个节点公平有序地按照规则自行运转,能抵制恶意攻击,确保整个体系的可信安全。
为此,Filecoin体系下也需要一个严谨的证明手段来确保矿工不会在没有存储数据的情况下谎称自己存储了用户的数据,需要矿工凭借他们的存储能力争夺出块资格。
Filecoin系统中的证明算法最初源于存储证明(PoS)、数据持有性证(PDP)和可检索证明(PoRet),后面逐渐迭代、增强约束条件,才完善为如今工程中所采用的复制证明(PoRep)与时空证明(PoSt),这里分别详细介绍一下它们的含义:
- 存储证明(Proof-of-Storage, PoS):为存储空间提供的证明机制。
- 数据持有性证明(Provable Data Possession ,PDP):用户发送数据给矿工进行存储,矿工证明数据已经被自己存储,用户可以重复检查矿工是否还在存储自己的数据。
- 可检索证明(Proof-of-Retrievability,PoRet):和PDP过程比较类似,证明矿工存储的数据是可以用来查询的。
- 复制证明(Proof-of-Replication,PoRep):存储证明PoS的一个实际方案,用以证明数据被矿工独立地保存,可以防止女巫攻击,外源攻击和生成攻击。
- 空间证明(Proof-of-Space,PoSpace):存储量的证明,PoSpace是PoW的一种,不同的是PoW使用的计算资源,而PoSpace使用的是存储资源。
- 时空证明(Proof-of-Spacetime,PoSt):证明在一段时间内,矿工在自己的存储设备上实际的存储了特定的数据。
如下图所示,这6种证明的定义并不是互斥独立的,PoS包括PDP, PoRet, PoRep, PoSpace;而PoRep和PoSt是PoSpace的两种实例,他们之间的定义相互有交叉:
复制证明和时空证明的实现方式决定了 Filecoin 矿机的配置。间接决定 Filecoin 系统的整体成本。Filecoin 提供了存储和数据下载服务两种服务,系统成本最终决定用户的使用成本。
如果复制证明和时空证明消耗的资源过多,那么会系统性的提升整个 Filecoin 成本,这会让 Filecoin 系统的价值大打折扣。
目前所开源的第一版go-filecoin0.1.x
系列所采用的是ZigZagDrg和StackedDrg的VDF方式来作为PoRep的实现,官方对此认为仍有改进空间,协议实验室也为此设立了RFPs基金,专门研究该课题,而复制游戏的诞生也是为了更好地让社区爱好者提前参与测试和协助官方优化这个部分。
二、复制证明PoRep
2.1 PoRep职能
PoRep算法的职能是用来证明一个存储系统确实存储了某一份数据的拷贝,而且每一份拷贝使用不同的物理存储,并用来抵御去中心化系统中三种常见的攻击:
2.2 PoRep本质
PoRep本质是一个加密时间长,解密时间短且证明与验证过程高效的算法, 这个过程在学术圈,被称为可验证时延加密(Verifiable Time-Delay Encoding Function):
如上图,我们假设这一加密算法的验证时长是一倍,解密时间大约2-5倍,挑战有效时间算作10倍,那么这一加密时间大约要1000倍才能在概率上达到99.9%的相对安全。
2.3 挑战及证明模型
Filecoin证明机制的角色和过程可以抽象成如下,挑战者、