FileCoin技术文档学习笔记1
1. 概述:
FileCoin协议是在IPFS存储协议基础之上增加的奖励协议层。使得用户可以支付token来支付存储矿机的服务,同时矿机接受Filecoin作为存储服务的奖励。IPFS的代码已经开源并且相对稳定,了解详情可以通过官网查阅资料:www.ipfs.io。
Filecoin协议由网络,客户,存储矿机和读取矿机组成,通过四个方面的设计,完成存储任务的分发和及时准确的token奖励:
A,去中心化的存储网络:DSN,提供独立的分布式的数据存储与读取
B,存储量证明机制,filecoin存在2个证明机制,一个是冗余存储证明,Proof-of-Replication,一种存储者证明没有把冗余数据存储在同一个物理设备上的机制。另一个是空间时长证明,Proof-of-Spacetime,一种存储者证明数据再固定的时间内有效的机制。
C,可检验的交易所:存储者和客户通过在市场上创建存储订单和读取数据订单的方式,实现数据的存储,读取以及对应的token支付,交易所分为存储订单交易所和读取数据的订单交易所。
D,工作量证明机制pow的改进,不同于其它公链的无效运算来保证公链安全的做法,Filecoin通过累计衡量存储矿机存储的数据及时长Proof-of-Spacetime作为共识协商的参数,解决了传统pow浪费能源的问题。
FileCoin的架构图如下:
架构图中所有角色已经所有箭头的含义与逻辑会在后面详细的解释,总体上来看,Filecoin是在区块链基础上发行tonken,并通过扩展区块链的数据结构来衔接数据存储底层和交易所应用层的方式,实现数据的去中心化付费存取服务的。
2. 去中心化存储网络DSN的数学定义:
DSN使用数学符号π表示,该网络可以通过一个多元组来表示:
π=(Put, Get, Manage);
其中Put协议:
Put(data) → key ;data:为用户需要存储的数据,key为put协议将数据分发给存储矿机之后得到的唯一标示,全局唯一。
Get协议:
Get(key) → data;key为用户存储数据后得到的全局唯一标示,data为数据读取矿机根据key值,在全网查询并拼接的数据。
Manage协议:
Manage协议负责统计可用磁盘存储,数据读取统计,修复可能存在的数据丢失。该协议由存储矿机与客户后者审查者一起协作执行来实现。
原谅我不会用word编辑数学公式,关于D与B的数学定义会在稍后给出,基本概念是D为需要存储和读取的数据,B为长度大于0的字节序。该数学公式是实现Filecoin区块链网络的一种具体实现形式,在技术白皮书中,并未具体定义具体的取值范围,此处的B64是我根据IPFS具体的实现方式,给出的定义,方便大家理解。
2.1DSN的容错:容错机制分为2类,管理容错和存储容错。对于管理容错,他依赖于管理协议实现的容错机制。DSN的管理层协议使用了拜占庭协议来检查存储提供者的有效性,通过次协议审查存储提供者生存的存储证明,如果拜占庭协议的容错值为f/n,其中f是故障点个数,n是全网节点个数,那么DSN的容错故障点个数f
对于数据容错机制,他与拜占庭容错能力一致。衡量一个PUT的操作的容错能力公式为(f,m),f表示出现故障的节点个数,m表示一份数据被m个阶段冗余存储。f,m的值根据具体的实现协议而定,可以设置为固定的值,也可以再调用Put函数时候设置,例如Put(data)->Put(data,
f, m)。Get操作可以在故障点数小于f的情况下获取对应的数据。
2.2DSN的基本属性:
2.2.1数据完整性:对于任何一次成功的Put(d)操作得到的唯一表示k,不存在一个恶意的节点可以通过计算手段,使得Get(k)操作得到的数据D不等于d,即存入DSN网络的数据,可以通过返回的唯一表示重新获得。
2.2.2 可检索行:对于DSN网π的容错能力为f的情况下,如果当前的故障节点fc
2.2.3Filecoin特有的属性:
a,公开可证明:
在只需要掌握数据唯一标示K的情况下,对于任意的检查者,对于任一数据d的成功Put操作,存储提供者需要提供对数据d的存储证明,以说服检查者数据d正在被正确的存储和获取。但是无需检查将k对应的所有数据d下载之后再检查。
b,可审核性:
网络π必须生成一些列可验证的操作以便在奖励的某个时间点来检验,这样可以证明数据再规定的世纪内是被有效存储的。
c,奖励的相容性:对应成功的存储和数据读取,要给予适当的奖励,对应失败的操作要有对应的惩罚,这样存储提供者更倾向于提供稳定的存取服务以获得更高的收益并避免被惩罚。
小节,基本属性应该可以通过数学公式来表达,但是Filecoin官方对此没有明确的数学定义,为避免以后官方文档与本文数学公式可能在数学符号上的不一致而造成误解。基本属性描述部分暂时用文字而不是数学公式表示。
3. Filecoin网络的冗余证明机制和空间时长证明机制
传统的存储证明Proofs-of-Storage机制,如Provable
Data Possession (PDP) 和Proof-of-Retrievability
(POR)只能通过定时的检查存储提供者提供的数据采样,来确定在某一时刻,存储这者提供了有效的数据存储服务。Filecoin除了要满足这些基本的需求之外,还要避免以下三种攻击:
a, 女巫攻击(Sybil Attacks):此攻击方法是,创建多个账号,所有账号只提供同样的物理存储空间,以赚取不合理的奖励。
b, Outsourcing Attacks:凭借自己的带宽优势和速度优势,获取超出自己物理存储能力的数据存储权,这样会导致网络上的合格的存储者得不到数据,而作恶的存储着会把数据存储权获取之后,将数据丢弃掉,而不是存储起来。
c, Generation Attacks:恶意的矿工可以声明自己存储了超过实际数量的存储能力,然后在存储奖励中获取不合理的回报。
3.1冗余证明机制: Proof-of-Replication:
冗余证明机制使用PoRep作为协议代表符号,他改进了PDP和POR机制,并且可以有效的避免前面提到的三种攻击方式。PoRep协议的数学定义:
公式1:PoRep协议包含三类操作,setup,prove,verify。该协议的设计主要为了实现存储矿机的证明需求:a:矿机证明已经存储了数据D的备份R;b:矿机在检查者进行检查时能够正确的回答问题以证明在此检查点存储了有效的数据备份R。
公式2:根据用户输入的数据D和安全参数λ,生成数据备份R,关于存储服务提供者的参数Sp和服务验证者的参数Sv。其中Sp和Sv的用法有点类似于RSA非对称加密中公钥和密钥的使用方式。
公式3:服务提供者P在接收到服务检验者V发出的数据有效性问询时,给出挑战参数C,通过prove函数,将C与数据拷贝R,类似公钥的,在Setup阶段生成的参数Sp,进行运算,得到一个数据有效性证明πc。
公式4:服务检查者V收到数据有效性证明πc之后,根据挑战参数C,Setup阶段生成的参数Sv进行运算,检验πc是否有效。如果有效输出结果为1否则为0.
小节:此公式是对PoRep的数学理论描述,是对此协议应该具备的属性进行概括性的描述,或者更像是一种需求描述,并不是具体的技术落地方案。后面Filecoin会给出具体的技术实现方案。
3.2存储空间时长证明机制: Proof-of-Spacetime
存储空间时长证明机制Post与PoRep类似,只是次协议主要用于存储的检验者来定期检查服务提供者在固定的时间段内提供了有效的存储服务:
公式1中已经无需生成数据备份R,因为此公式是服务检查者用来检查存储有效性的。公式2是由存储服务提供者来执行,也就是矿机需要在某个时刻t证明他存储了数据D,其中C是检查者给出的问题,πc是于次问题相对于的答案。公式3是检查者根据C,t,等参数检查收到的πc是否正确,正确返回1否则是0.其中Sp和Sv的核心作用是为了保证问题的提问者和问题的回答者针对的是通一个数据D,因此公式1的目的也是通过加密技术保证提问和回答无法被破解。
3.3PoRep与PoSt的技术实现。
以上讲解的证明机制聚焦在理论分析,更确切的说是一种规范,只有符合这个规范的技术实现才能够有效的解决区块链存储的安全问题和效率问题。Filecoin给出了具体的技术方案来实现以上需求和规范。
3.3.1构建加密的数据块。
在构建加密数据块的时候,Filecoin采用了防碰撞的hash函数CRH和MerkleCRH,同时为了方便数据的审查,采用了zk-SNARKs(zero-knowledge
Succinct Non-interactive ARguments of
Knowledge)这个机制,这个机制非常复杂,需要单独的篇幅来介绍,我先列出其数学公式,下一节笔记再给出详细的数学证明。
公式1给出了一种机制,生成2个公开的秘钥,其中秘钥pk对于某一种NP实例x的运算的结果可以被秘钥Vk验证,并且是在无交互下的,快速的验证。KegGen的设计需要用单独的篇幅来介绍,这里涉及到了同态隐藏,多项式盲验证等数学知识,我需要整理一下资料给出详细的数学证明。
公式2是通过pk等参数来生存一个证明π,公式3是验证π的有效性,以证明x的特性,这种证明逻辑适合于存储方在不知道数据具体内容的情况下,给出数据的某些加密特性,而对于付费的用户来说,可以在并不知道存储者具体的存储信息的情况下,检查对方是否提供了有效的数据存储。这个可以举个例子来解释:用户存了一箱密封好的核桃在存储提供那里,存储者并不知道存储的具体物品,用户隔一段时间就会问一些关于封箱核桃的属性,比如问一下存储提供者,箱子摇一摇会怎样,存储者回答是发出物体碰撞的声音,而不是流水的声音,那么用户就认为存储者此时正在有效的存储自己的物品。
其它变量需要在接下来的数学证明中给出具体的介绍。请大家持续关注