IPFS & FileCoin - PoRep和PoSt算法

区块链在2017年爆发,很多项目都在用去中心化的思路去重塑。存储是很多人想去重塑的一个方向,用去中心化的存储代替中心化的存储。2015年,IPFS设计提出了一个点对点的分布式媒体发布协议。IPFS被认为是最有可能取代HTTP的新一代互联网协议。FileCoin在IPFS协议基础上,设计自己的区块链,激励更多的存储服务以及用户参与IPFS协议。

IPFS以及FileCoin的白皮书相对来说,知识量很大,读懂需要花一点时间。我总结一下FileCoin中设计的PoRep以及PoSt算法的原理,方便理解。

1)PoRep算法

PoRep 算法是用来证明一个存储系统确实存储了某一份数据的拷贝,而且每一份拷贝使用不同的物理存储。 
PoRep 需要抵抗的三种攻击: 
1) 女巫攻击(多份数据使用同一物理存储) 
2) 外包攻击(用其他存储,而不是自己的存储进行数据存储) 
3) 生成攻击(及时生成检验数据) 
*) 解决女巫攻击的方法是数据编码,引入混淆因子: 
            RDek = Encode(D, ek) 
RDek 是编码后的数据,D 是原数据,ek是混淆因子。 
*)解决外包攻击或者生成攻击的方法是:Encode 的时间要足够长 
(a) T honest = RTTV→P→V + Time(PoRep.Prove(SP, RD ek, c)) 
(b) T attack = RTTV→P→V + Time(PoRep.Prove(SP, Encode(D, ek), c)) 
保证 T Encode = 10 × T honest or 100 × T honest。也就是攻击者需要花10倍,甚至百倍的时间进行编码,从而可以区分出攻击者和诚实的矿工。 
Encode 的方法必须具备以下几个特征: 
1) 足够慢,保证 T honest << T attack 
2) 可以 Decode 
3) 必须有混淆因子 
4) 输出不能压缩 
5) Decode 足够快 
6) Encode 的速度可调 
7) Encode 的结果,所有人都能验证 
8) Encode 必须和数据中的所有 bit 相关 
9) … 
Filecoin 选择的 Encode( Seal)的方法是多轮的 AES-256的CBC加密。

数据编码以及验证过程的几个小概念: 
1) 散列函数: CRH 以及 MerkleCRH(把一段数据切成一段段的,组成一个 Merkle 树,针对每个节点,算 CRH,输出是根上的 CRH) 
2) zk-SNARKs: 零知识验证算法,在生成和验证数据之前,需要生成一对生成/验证密钥。

整个PoRep的生成以及验证的计算过程如下图所示:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

值得强调的是,最终存储在硬盘的是Seal之后的数据,也就是AES的加密结果。

整个过程中有几种计算: 
1) 散列 CRH 以及 MerkleCRH 
2) 零知识 Prove 以及 Verify 
3) Seal ( AES-256 CBC) 
具体的计算公式可以查看FileCoin的白皮书第15 页。

2)PoSt算法

PoSt算法是在 PoRep算法的基础上,循环做一定次数的 PoRep 的证明。因为整个循环计算需要一定的时间,从而证明数据确实在物理存储上存储了一定的时间。 这也就是 Proof-of-SpaceTime 的由来。

可以参看白皮书上的图来理解:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

整个计算会重复PoRep计算t次。每次PoRep的计算结果,会作为输入再次计算新的PoRep结果。最后一次PoRep的计算结果,作为PoSt的结果。

转载于:https://my.oschina.net/gavinzheng731/blog/3032203

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值