高海强:去中心化存储中,数据完整性证明是关键 | 巴比特加速器技术公开课

高海强:去中心化存储中,数据完整性证明是关键 | 巴比特加速器技术公开课

李小平 发布在 技术指南 区块链 44070

巴比特加速器推出的全球线上区块链技术深度对话栏目Geekhub Global Online,定期邀请世界各地的资深技术大咖连线对话。同时Geekhub技术社区成员也可以参与直播互动。

11月28日-30日每天下午14:00,Geekhub 技术社区将举行【Geekhub Global Online】技术公开课第三期的活动,主题为“分布式存储,数字基石”。

存储是区块链三大方向中急需解决的问题之一,其难度及意义不亚于账本信息的不可篡改,而去中心化存储中数据完整性证明,是较为关键的问题。11月28日14时,Lambda联合创始人高海强带来了题为“你‘链上’的文件确实被存了吗”的线上分享。

 

以下为文字实录,由巴比特整理发布:

 

大家好,我是Lambda联合创始人高海强,今天下午要分享的主题是“你‘链上’的文件确实被存了吗”。以下是目录,今天要分享的内容分为五个部分:

1.背景介绍 2.PDP方案及问题 3.基于Bitcoin的持有性证明 4.副本复制,时间证明 5.总结
 

1.背景介绍

 

据估计,到2020年时,全球联网设备的数量将超过200亿台,它们将产生海量数据,随之而来的,是要对这些数据进行管理、存储和检索。而当下,全球范围内的中心化数据库出现了严重的数据泄露。企业对数据的依赖导致海量数据被存储在易受攻击的中心化数据库,构成了前所未见的巨大风险。

去中心化存储将集合区块链技术的最佳功能,满足存储大量数据的实际需求。Lambda项目致力于为区块链和去中心化应用提供一个数据存储基础设施,在此基础设施平台之上,提供去中心化的云数据库存储和访问能力,并且,Lambda基于水平可扩展性和分片技术,提供了高速的交易能力。

微信图片_20181128233735

我先说一下Lambda的系统构成,LambdaChain连接了存储矿工、用户和检索矿工,链上会有一个去中心化的交易。

基本的流程是:

存储矿工会注册到区块链网络中,然后变成真正的存储矿工。有需求的存储用户,也会在链上进行登记,通过market达成交易,用户就能将数据上传给存储矿工。LambdaChain将追踪存储订单,包括订单登记、定期结算等等。
今天要讲的重点内容是存储矿工和LambdaChain之间的Post(证明),这是保证去中心化存储最核心的技术之一。

 

2.PDP方案及问题

 

首先要讲的是数据持有性证明(PDP),这个技术早在10年前就被提出了:

在云存储平台中,用户将数据以外包的方式存放在云存储系统中。在这种模式下,用户与云存储服务提供商之间的关系,从“服务器-客户端”演变成为“商家-顾客”的关系。

从服务方来看,如果没有相应的检测和监督机制,出于规避商业或法律法规风险的考虑,云存储服务提供商在自身出现问题,导致数据丢失的时候会选择隐瞒不报,或推卸应付的责任。

从使用方来看,用户必须随时知道自己的数据是否仍然有效地保存在云存储平台中,以及自己是否可以随时随地获取该数据。只有当存储服务商对用户提供数据是否有效存在、能否成功获取的验证方法,并不断提高服务水平,云存储才能够获得广泛的应用。

为此,科研人员提出数据持有性证明的问题,研究如何通过高置信度的技术手段,保证存储服务商按照服务契约,维护数据的可用性和完整性。

我们现在使用的云存储服务,大多数都是以其品牌做背书,比如阿里云。如果要做去中心化存储,那就意味着没有中心化机构,也就是说,存储矿工是个不被信任的实体。LambdaChain连接的就是大量不被信任的矿工,然后为用户提供可靠的服务。

微信图片_20181128234012

去中心化存储的核心是数据的完整性证明。其实,数据完整性验证机制根据是否对数据文件采用了容错预处理分为数据持有性证明PDP机制(Provable Data Posesion,PDP)和数据可恢复证明POR机制(Proofs of Retrievability,POR)。

数据持有性证明就是验证不可信的存储服务器是否正确地持有(保存)数据,避免存储服务提供者删除或篡改数据。目前的研究工作主要集中在可证明数据持有(Provable Data Posesion,PDP)方案和可恢复方案(Proofs of Retrievability,POR)。

PDP和POR方案的主要区别在于:

PDP方案可检测到存储数据是否完整,但无法确保数据可恢复性;POR方案保证了存储数据的可恢复性。事实上,大部分的PDP方案只要加入纠删/错编码就可以成为一个POR方案。
今天主要讲PDP机制,然后我们来看数据持有性证明模型

微信图片_20181128234139

“挑战-应答”:

将数据托管给云存储服务器后,任何时候都可以向服务器发起挑战,询问文件是否还完好地存放在服务器上。用户可以只询问部分数据块的完整性,以一种抽查的方式提高效率。

服务器不能通过返回整个目标文件或返回被抽查的所有数据块来证明其完整性,服务器必须根据用户的挑战,通过GenProof返回一个简短的数据持有证明。用户接收到这个证明后,通过CheckProof来检验该证明的正确性,从而确信数据是完好保存于服务器的。

数据持有性证明方案分类:

微信图片_20181128234213

基于BLS签名的PDP方案实例:

微信图片_20181128234309

如果把PDP方案引入到去中心化存储中,系统会面临什么样的实际问题呢?主要有以下六个问题:

(1)Challenge随机挑战信息的生成依赖于TPA(Third Party Auditor,第三方审计人),这个随机挑战值是否安全。 (2)为了更高的检测率,对多块数据生成随机挑战,大大增加了发起挑战的通信复杂度。 (3)交互式的挑战要求必须为强同步网络,交互次数过多造成系统的网络负载增加。 (4)存储矿工保存大量订单,如果每次挑战针对一个文件,挑战数量会严重影响系统的负载。 (5)如果一份数据以多副本方式保存,如何解决女巫攻击和多副本的虚假保存。 (6)PDP可以证明当前时刻保存了文件,如何保证在两个检测周期之间是否存储了文件。
 

3.基于Bitcoin的数据持有性证明

 

我们来看一下一些公链在存储领域有哪些突破。

微信图片_20181128234348

比如第一个,基于Bitcoin的数据持有性证明。这个公链将存储、证明、生成加入到Bitcoin寻找随机数nounce的过程。

基于存储证明(Proof of storage)的Permacoin是一个微软研究院和美国马里兰大学联合提出的与比特币竞争的币种,把存储证明的过程变成挖矿的过程,然后变成有用的挖矿。

其特点主要在于,它的挖矿行为并非注释纯粹的工作量证明,除此之外必须加入一种有意义的担保,即对挖矿矿工的资格进行了某种限定。这正如很多大型企业招聘明确要求必须是985本科以上学历是一样的。

微信图片_20181128234503

在区块链中,大部分的共识算法,无论是 POW、POS,或是由他们衍生出来的 DPOS,都需要选出一堆或者一个节点来参与共识或者打包区块,这个过程虽然会有持币情况、设备配置、信誉等各种因素影响,但必须是随机的、无法被预测的。这时候就可能会用到随机算法。

很多新型的共识算法都用到了VRF(可验证随机函数),都是为了找到随机而又安全地抽取出块节点。

VRF 的目的就是要生成一个真正随机而且无法被预测的值。在区块链选出块节点的过程中,为了保证安全,随机是一个基本要求。不过,区块链选节点不单纯是随机就 OK 的,还要考虑到攻击成本等,所以共识机制往往加入算力和持币权益等影响因素,以增加攻击者的攻击成本。如果单纯使用随机算法,就很容易受到女巫攻击,攻击者可以廉价找大量的傀儡机(肉鸡)来增加自己抽中的概率。
理解VRF之前,需要先理解带秘钥的哈希函数,和传统的哈希函数不同,带秘钥的哈希函数在计算HASH数值的时候引入了一个不公开的秘钥,这样为从明文到HASH数值计算之间添加了一定的难度,这个难度就是由秘钥引入的。我们简单的定义一个带秘钥的HASH函数为如下的形式:
hash_value=HASH(pri_key, message)
那么当我们拥有了计算出来的hash_value和数据message,我们需要知道pri_key才可以验证hash_value是否由message通过HASH函数生成。一般我们知道秘钥pri_key对于我们信息安全的重要性。

因此现在引出来如下的问题:

·对外只暴露pri_key对应的pub_key ·在不暴露pri_key的情况下,验证hash_value和message之间是匹配的。
微信图片_20181128234542

为了实现上面的目的,于是就有了可验证随机函数VRF,现在我们一步一步看其实如何工作的:

step 1 : 生成一对公私钥,分别为pri_key和pub_key step 2 :计算hash_value=VRF_HASH(pri_key, message) step 3 :计算proof_value=VRF_PROOF(pri_key, message) step 4 : 现在将hash_value和proof_value提供给验证者 step 5 : 验证者拿到hash_value和proof_value计算hash_value=VRF_P2H(proof_value) step 6 : 如果step5成功,则验证者计算VRF_VERIFY(pub_key, message, proof) step 7 : 如果step6返回true则表示验证通过,否则验证失败
梳理一下,我们可以这样理解,首先验证proof是否是由message生成的,然后验证proof是否可以就散出hash_value,这样我们就可以推理出hash_value是否由message生成,并且能找到过程中proof是否出现问题。

 

4.副本复制,时间证明

 

微信图片_20181128234709

扇区是指存储矿工特定的存储空间,用来衡量有效存储以及提交存储证明的单位空间,当存储矿工存满(可能没存满也可以密封,但是应该会浪费部分的存储空间)一个扇区的数据后才运行扇区密封,密封后提交复制证明,这样才会形成有效存储。

微信图片_20181128234814

“女巫攻击”的名字由Brian Zill建议,来源是70年代的一部叫做《Sybil》的美国电影。片中的女主角人格混乱,扮演着16个角色。

女巫攻击,即在对等网络中,单一节点具有多个身份标识,通过控制系统的大部分节点来削弱冗余备份的作用。
解决方案是:PoRep(Proof-of-Replication,复制证明

微信图片_20181128234915

上面是filecoin白皮书的内容,和Lambda基本一致。,PoRep:新的 PoS(Proof-of-Storage),PoRep可以保证每份数据的存储都是独立的。PoRep必须能够防范以下三种常见的攻击方式:女巫攻击,外源攻击和生成攻击,他们的共同特点是攻击矿工实际存储的数据大小要比声称存储的数据小,这样攻击矿工就能获得本不该他获得的报酬。

外部数据源攻击(Outsourcing Attack):当攻击者矿工收到检验者要求提供数据D的证明的时候,攻击者矿工从别的矿工那里生成证明,证明自己一直存储了数据D,而实际上没有存储,攻击成功

生成攻击(Generation Attack):攻击者A可以使用某种方式生成数据D,当检验者验证的时候,攻击者A就可以重新生成数据D来完成存储证明,攻击成功。

微信图片_20181128235011

PDP是按周期来检测的,如果是在周期之间,该如何保证其安全呢?

微信图片_20181128235043

时空证明(Proof-of-Spacetime,PoSt):时空证明,矿工证明自己花费了spacetime资源,即:一定时间内的存储空间的使用,PoSt是基于PoReps实现的。

时空证明提出了证明链的数据结构,证明链把一些的提问和证明链接起来形成。在证明链的基础上添加上时间段,这样就得到了一段时间内的矿工存储数据的证明,这就是时空证明,可以证明在该段时间内矿工存储了特定的数据,并且利用时间戳锚定这些证明链,这样即使验证者不在线,也能够在将来去验证矿工在该段时间内生成了证明链。
微信图片_20181128235106

我觉得我们需要引入VDF(可验证延迟函数)算法。VDF是一些需要一定量的连续计算来进行求值的函数,但是一旦找到了解决方案,任何人都可以很容易地验证该方案的正确性。

我们可以将VDF看成对伪随机数生成器的输出进行时间延迟,这种延迟可以阻止恶意行为对伪随机数生成器的输出造成影响,因为在任何人完成对VDF的计算之前,所有的输入都将确定下来。

在选出领导者方面,VDF可以在很大程度上对可验证随机函数(verifiable random functions)加以改善。基于VDF只需通过任何一个诚实的参与者便可以选出领导者,而无需要求大多数参与者都是诚实的。

这一方案还将提高系统的鲁棒性,因为即使再多的并行计算(parallelism)也无法对VDF计算进行加速,并且任何非恶意参与者都可以轻易地验证其他人的VDF输出的正确性。

 

5.总结

 

微信图片_20181128235118

 

海报总览:

微信图片_20181128135649

评论(1)
登录 账号发表你的看法,还没有账号?立即免费 注册
  • ockmeta_zgn_jab 2018-11-29
    数据合法应该是重点吧,欧盟的数据被遗忘权