前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Filecoin文件的分片和加密分析

Filecoin文件的分片和加密分析

作者头像
rectinajh
发布2019-11-27 22:45:03
1.6K1
发布2019-11-27 22:45:03
举报

问题1:存储矿工接收用户订单,接收用户的文件,存放到本地扇区,第一个问题本地文件是否有文件加密?如果有文件加密,检索矿工如何查找到文件?

问题2:存放到矿工本地的文件是否有文件分片存储,如果没有文件分片,如何做文件的冗余备份,如何将大文件上传到矿工端做断点续传,秒传?比如用户端发往矿工端的时候,用户将文件分片,矿工接受后文件合并是不是这样呢?

参考:

https://docs.filecoin.io/go-filecoin-tutorial/Getting-Started.html#start-running-filecoin

https://filecoin-project.github.io/specs/#sector-in-storageminer-state-machine-both

Filecoin矿工文件存储的流程?

Filecoin矿工文件存储的流程

存储市场工作流程:

存储矿工提交报价单(ask)——>用户提交出价单(bid)——>链上撮合订单匹配——>支付&存储。

Step1:操作节点参与链上身份注册,提交抵押与存储容量,成为一个存储矿工

Step2:创建 Ask 订单,与用户节点交易。

Step3:先密封数据并提交复制证明(PoRep)于链上,更新订单状态,完成交易,并开启 PoSt 证明周期(证明期是矿工必须向网络提交空间时间证明的固定时间。)

Step4:存储矿工收集证明集合,创建 PoSt,计算 ProveStorage 和 StoragePower (算力)。

Step5:当矿工完成他们的 PoSt 时,调用 SubmitPoSt 将其提交给网络,并伴随区块更新同步状态。

复制证明(PoRep)的核心思想:确保证明矿工在他的节点上确实保存数据备份,证明者受到网络委托存储n个数据D的独立备份;当验证者向P提出挑战,P需要向验证证明的确存储存储了每一个D的备份,这是一次验证的过程。

filecoin里面运行.pramcache参数程序确保本地数据其实用于复制证明 Generate the proof parameters for proving/verification /.paramcache

Miner.go 我们在链上成功注册一个新的矿工身份后,Filecoin 存储市场 Actor将调用 NewActor()方法为我们生成一个新的存储矿工新的状态NewState,这个newState包括下面矿工存储的方法:

// 矿工向存储市场发送订单的方法。 AddAsk(price TokenAmount, expiry uint64) AskID GetAsk()//矿工获得订单 // 提交扇区的方法。 CommitSector(commD, commR, commRStar []byte, proof SealProof) SectorID // 用于向链上提交时空证明的方法,证明矿工已实际存储了其声称的文件。 SubmitPoSt(p PoSt, faults []FailureSet, recovered SectorSet, doneSet SectorSet) // 允许矿工为网络提供更多存储空间的方法 IncreasePledge(addspace Integer) // 若缺乏复制证明证据,将用此方法惩罚矿工 SlashStorageFault()</pre>

1,生成成交订单后,双方签名提交到链上。接下来用户发送数据到存储矿工,存储矿工接收数据存储并且给出数据存储的证明(复制证明,porep)。

复制证明(还有POST)就是一种加密算法,有点特殊可验证时延加密算法,filecoin中是BLS12-381(一种新型的zk-SNARK椭圆曲线加密算法,属于bellman库),其实底层加密是是零知识证明的方法,跟一般的私钥和内容加密的模式不一样,指的是证明人能够在不向验证者提供任何有用的信息的情况下,使验证在某个概率下相信某个论断大概率正确。

filecoin的存储矿工的分片过程其实是:

客户的大文件在IPFS网络中只有唯一的哈希值,去中心化存储市场将这一笔存储订单按标准(合同存储大小/256KB)分拆成多份,接到订单的这些矿工们(矿工A)就像切蛋糕一样把客户的大文件分割封装,每个拿到相应部分副本的矿工提交复制证明给主链。

矿工将客户上传的原始数据进行封装,所谓封装,需要将一个完整的文件分割封装成若干个256KB的小文件副本。而且这些256KB的小文件副本,在分布存储在不同的硬盘中节点中,以保证数据永不丢失。

为啥需要引入sector?

sector是一个数据结构,用于存储和证明一个或多个数据分片。从原始数据构建副本的过程被成为封装seal,可理解此过程为分片。

在扇区密封操作(SEAL)过程中,其实是POREP复制证明初始化的过程,可验证时延函数初始化时间很长,验证和解密时间短。

官方反馈:

屏幕快照 2019-11-27 上午11.40.51.png

如果Filecoin没有加密保存到本地,那任何检索矿工都可以给客户下载文件就好解释了。

为什么多次提到了IPLD,这个跟文件加密保存有啥关联?

IPLD(InterPlanetary Linked Data)本身也作为通用数据结构来进行设计,也就是说它不仅仅限于IPFS使用。作为一种数据组织形式,它可以用于任何数据关系链接的场合,包括区块链,目录结构,大文件的分片存储等等。

IPLD定义了数据链接的格式,规范了协议之间的数据交换。也就是说,IPLD是为互操作协议而制定的数据模式,其表达的是数据之间的关系。为实现此目的,IPLD融合了密码学里的散列算法、默克尔树,有向无环图等技术,数据可以通过JSON和YAML等格式在协议交换中呈现。这些技术的采用使得IPLD所表达的数据结构具有以下几个特点:

分布式的数据存储 (适用于大规模的应用和去中心化的应用) 自验证的数据完整性 (任何的修改和破坏都很容易被发现) 基于内容寻址的哈希链接数据结构 (适合于区块链,有向无环图,目录结构等数据关系) ​ 另外,IPLD的定义本身也考虑到了数据结构的演化,为日后的改进做了设计。

filecoin数据格式详细说明: https://filecoinproject.slack.com/files/UEP35QQJJ/FPCCE1W8K/filecoin-pieces.compressed.pdf

ps: 1,https://github.com/Peergos/Peergos/blob/master/papers/wuala-cryptree.pdf https://github.com/Peergos/Peergos 2,https://docs.textile.io

总结:

1,filecoin的矿工在存储文件的过程中用到了文件加密的过程,不是严格文件加密,但是跟传统的加密算法不一样,采用了零知识加密算法,因为矿工扇区密封后将数据文件分片打散个各种服务器节点中,服务器节点里面不需要通过私钥即可验证节点的数据,将文件进行复制证明和时空证明保证数据可信。

2,filecoin中文件有分片的操作,在扇区seal密封后,将文件切分到各种服务器节点中。但是不是在用户向矿工传输文件的过程中分片。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么多次提到了IPLD,这个跟文件加密保存有啥关联?
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档