高效的文件分享交互式验证方法及基于其的文件分享方法

文档序号:33269720发布日期:2023-02-24 16:45阅读:34来源:国知局
高效的文件分享交互式验证方法及基于其的文件分享方法

1.本发明涉及区块链技术领域和文件分享领域,具体来说,涉及一种高效的文件分享交互式验证方法及基于其的文件分享方法。


背景技术:

2.基于p2p技术的分布式文件分享技术被广泛应用于互联网,常见的应用包括bittorrent、edonkey、emule、μtorrent、napster、kazaa等,这些应用依赖在线节点互相进行文件传输,极大地提高了文件分享效率。为了确保p2p文件分享网络中的资源不枯竭,需要有大量在线用户持续分享文件,因此,一种能够吸引更多用户参与文件分享的激励机制对p2p文件分享系统的正常运行至关重要。传统的激励机制依赖网络中的诚实节点或者中心化服务器来计算奖惩值,存在恶意用户攻击、中心化服务器单点失效或数据被篡改等安全问题。
3.针对这些问题,一种有效的解决方案是将区块链技术和p2p文件分享系统进行结合,利用数字货币奖励分享文件的用户。区块链的交互式验证协议可以确保参与分享文件的用户具备文件分享的资格,区块链的分布式和防篡改等特性可以确保系统不会发生单点失效或者信息被篡改等安全问题。目前,基于区块链的文件分享技术的研究分为两个方向。
4.一个方向是将p2p文件分享系统与成熟的区块链技术结合,如btfs、blockipfs、siacoin、storj等,该方向专注于将文件分享过程与区块链现有的交互式验证协议结合,用户的文件分享资格验证依赖于现有的区块链交互式验证协议。为了通过分享文件获得代币奖励,用户需要保存该文件,并具备完成交互式验证协议所需的其他能力,例如强大的计算能力、大量权益证明、大量的存储空间等。上述需求在造成资源浪费的同时,由于交互式验证协议没有与被分享文件的内容相关联,因此也很难验证被分享的文件确实是文件下载者需要的。
5.另一个方向是研究适用于文件分享场景的交互式验证协议,这些交互式验证协议使用存储资源作为凭证完成文件分享资格验证。例如,空间证明(proof of space,pospace)通过向外界证明一定量的磁盘空间已经被占用来验证资格,简单时空证明(simple proof of spacetime,post)允许用户向外界证明自己在一段时间内确实保存了一定量的文件。然而,上述交互式验证协议只考虑了文件大小,无法与文件内容相关联,因此很难验证该文件是否为文件下载者所需要。filecoin是目前比较流行的基于区块链的文件系统(主要被用于文件存储,也可被用于文件分享),其交互式验证协议与文件内容相关联,filecoin使用复制证明(proof of replication,porep)和时空证明(proof of spacetime,post)来向验证者证明用户确实在某个时间段内存储了特定文件,同时使用了一个较复杂的零知识证明zk-snarks来确保证明的过程中不泄露隐私信息。但是,在实际使用过程中,zk-snarks运行效率较低且需要依赖可信第三方来生成公共参数,将会导致新的安全风险。
6.已公开的专利申请cn111950027a提供了一种基于区块链智能合约的文件分享方
法,该专利的实现过程为:分享者登录dapp,选择需要分享的本地文件,选择/输入分享对象的dapp账号,通过智能合约将该分享文件和分享对象存入链上,并返回分享文件的链上id,由链上id生成分享链接并向外发送;该分享链接接收者打开该分享链接,提示登陆dapp,若核实确为分享对象,则允许其查阅/下载该分享文件。但是需要发送方和接收方的交互。
7.已公开的专利申请cn112100144a提供了一种基于区块链的文件分享方法,该专利的实现过程为:根据目标加密方式对源文件进行加密;对加密后的所述源文件进行分割,得到至少一个分割文件;将分割文件上传至区块链网络进行存储;其中,分割文件包括基于加密密钥生成的身份验证序列,用于文件接收方验证接收到的文件是否为目标分割文件,加密密钥为目标加密方式使用的密钥。但是该方法下其他用户节点无法帮助验证文件的正确性。


技术实现要素:

8.针对现有方案中存在的技术问题,本发明公开了一种高效的文件分享交互式验证方法及基于其的文件分享方法,其核心思想是将文件内容和协议进行关联,使用交互式时空证明来完成文件分享资格验证,用户可以向外界证明特定的文件确实被存储了一段时间。
9.本发明的技术方案如下:
10.一种高效的文件分享交互式验证方法,其步骤包括:
11.1)文件分享者p生成初始证明文件,并广播用户标识id
p
与初始证明文件的随机抽样,以使任一保存被分享文件的文件分享者v,生成一随机挑战ch;
12.2)将针对随机挑战ch生成的响应,发送给文件分享者v,以使文件分享者v验证所述响应后,文件分享者p具有文件分享资格。
13.进一步地,通过以下步骤生成初始证明文件:
14.1)对分享文件f进行分块,计算每一分块b[k]的消息摘要hb[k];
[0015]
2)将每一消息摘要hb[k]切为p个分片,对每一分片p生成一节点列表n[i];
[0016]
3)通过尝试不同的随机数,获取符合设定条件的节点列表n[i];
[0017]
4)基于符合设定条件的节点列表n[i],使用固定随机挑战ch

执行证明阶段,生成初始证明文件。
[0018]
进一步地,通过以下步骤生成所述响应:
[0019]
1)根据节点列表的总数,计算索引j,并根据随机挑战ch,生成一大小为m的数组ch,其中数组中的每个元素ch[i]占j-1位;
[0020]
2)以元素ch[i]的值作为序号选择节点列表n[i],并连接被选择的节点列表n[i]后,计算摘要值d;
[0021]
3)将摘要值d与所有的节点列表n[i]进行拼接后,计算哈希值hd[i];
[0022]
4)将每一哈希值hd[i]作为叶子节点g,构建merkle树,其中merkle树内部父节点的值是通过拼接两个子节点后进行随机预言得到,merkle树的根标签使用nroot表示;
[0023]
5)根据叶子节点总数,计算索引x,并对根标签nroot进行随机预言后,切割为一组大小为q的数组e;
[0024]
6)计算各叶子节点g到根节点的路径πg,其中路径πg包含相应节点的nonce;当e[g]
是奇数时,路径πg包含从叶子节点n[e[g]]到根节点的路径,e[g]表示数组e的第g个元素;当e[g]是偶数,路径πg包含从叶子节点n[e[g]]与叶子节点n[e[g]-1]到根节点的路径;
[0025]
7)输出响应x={nroot,π1,π2,

,πg}。
[0026]
进一步地,通过以下步骤生成数组ch:
[0027]
1)使用散列算法,计算随机挑战ch的散列值;
[0028]
2)切割所述散列值,以生成数组ch。
[0029]
进一步地,随机预言的方法包括:基于哈希的消息认证码算法。
[0030]
进一步地,通过以下步骤验证所述响应:
[0031]
1)根据随机挑战ch,生成一大小为m的数组ch;
[0032]
2)根据数组ch

每个元素的值选择分块,连接被选择分块并计算摘要d;
[0033]
3)对根标签nroot进行随机预言后,切割为一组大小为q的数组;
[0034]
4)根据e[g]的值,计算被选择分块的索引,从而得到相应的分块b[k],并计算相应的摘要hb[k];
[0035]
5)在摘要hb[k]中选取分片p[g],其中分片p[g]对应于节点列表n[g];
[0036]
6)验证路径πg中各叶子节点的有效性;
[0037]
7)若叶子节点有效,验证数组hd[j]的值;
[0038]
8)若数组hd[j]的值正确,则当g是奇数时,验证路径πg是从叶子节点hd[p[g]]到根节点的有效merkle路径;当g是偶数,分别验证路径πg包含从叶子节点hd[p[g]]与叶子节点hd[p[g]-1]到根节点的有效merkle路径;
[0039]
9)若路径πg有效,则验证所述响应。
[0040]
一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行以上所述方法。
[0041]
一种电子装置,包括存储器和处理器,其中存储器存储执行以上所述方法的程序。
[0042]
一种基于文件分享交互式验证的文件分享方法,包括:
[0043]
1)文件下载者在分享市场发布包含一所需文件的订单;
[0044]
2)通过上述任一方法,保存该所需文件的文件分享者p证明其具有所需文件的文件分享资格;
[0045]
3)最先完成文件分享资格证明的文件分享者p,分享所需文件。
[0046]
进一步地,订单中还包括若干代币,其中所述代币包括消费代币、奖励代币和下载者抵押代币,消费代币用于数据上链,奖励代币用于奖励合法的文件分享者,下载者抵押代币用于确保文件下载者的合法性;文件分享者p证明其具有所需文件的文件分享资格时,需支付分享者抵押代币;分享所需文件后,文件分享者p获取消费代币。
[0047]
和现有技术相比,本发明一种高效的文件分享交互式验证协议具有如下优势:
[0048]
1.本发明一种高效的文件分享交互式验证协议,将文件内容和交互式验证协议进行了关联,使用交互式时空证明来完成文件分享资格验证,通过文件分享者互相验证的方式,确保该文件确实是文件下载者所需要的,该协议的共识过程不泄露文件的隐私信息,且不依赖第三方。
[0049]
2.本发明一种高效的文件分享交互式验证协议,在证明和验证阶段具有更低的计算复杂度,且能够满足一定安全强度。
附图说明
[0050]
图1是本发明的时空证明流程图。
[0051]
图2是本发明一种高效的文件分享交互式验证协议证明者初始化阶段。
[0052]
图3是本发明一种高效的文件分享交互式验证协议证明者证明阶段。
[0053]
图4是本发明一种新的基于区块链的文件分享模型。
[0054]
图5是本发明一种高效的文件分享交互式验证协议证明文件的生成效率。
[0055]
图6是本发明一种高效的文件分享交互式验证协议生成证明文件大小测试图。
[0056]
图7是本发明一种高效的文件分享交互式验证协议生成证明和验证阶段消耗时间测试图。
具体实施方式
[0057]
本发明提出的文件分享交互式验证协议主要基于时空证明,下面给出这个证明的具体实施方式。
[0058]
本发明的文件分享交互式验证方法,通过保存相同文件的文件分享者相互验证对方是否在一定时间内存储了特定文件的方法:交互式协议。其具体描述为:首先证明者p根据用户标识和被分享的文件生成初始证明文件,证明者p将用户标识和初始证明文件的随机抽样发送给验证者v;验证者v收到所述用户标识和证明文件的随机抽样后向证明者p发送一个随机挑战,证明者p针对所述随机挑战生成响应并发送给验证者v;验证者v对所述响应进行验证。若验证者验证成功,则证明者将获取交易奖励;否则,一旦验证者验证失败,则证明者失去奖励。因此,验证者并不需要将验证结果返回给证明者。
[0059]
文件分享者向外界证明某文件被持续存储了一段时间的方法:时空证明(post)。其具体描述为:所有保存相同文件的分享者相互进行验证,采用“挑战-应答”的交互式协议,保存文件的分享者充当证明者p,验证p资格的其他文件分享者充当验证者v。
[0060]
同时,为了引导文件分享者使用存储资源而不是计算资源,本发明在一定程度上限制了计算的并行性,提出了一种限制证明文件不能被并行计算加速生成的方法:限制并行计算的工作量证明(parallel limited proof of work,pl-pow),一个较为简单的pl-pow是输出反馈随机预言:
[0061]
{h[i]=h(h[i-1]‖x)|h[-1]=0,i≥0,x∈{0,1}k,h[i]《p}
[0062]
其中,p是控制工作量证明难度的参数,x是随机数,k为随机数长度,h为散列算法。第i次随机预言的计算过程依赖于i-1次随机预言的结果,从而限制并行运算。
[0063]
本发明的时空证明流程,如图1所示,包含三个阶段:
[0064]
1)初始化阶段,如图2所示:
[0065]
该阶段由证明者p执行,输入证明者p身份标识id∈{0,1}
*
、分享文件f∈{0,1}
*
、分享文件的大小l,该阶段包含以下步骤:
[0066]

将f进行分块,用数组b来表示,其中将f进行分块,用数组b来表示,其中数组b中的每个元素的长度为s,最后不够整块的部分进行填充;
[0067]

对于每个分块,计算其消息摘要,即其中crh是一个抗碰撞哈希函数,hb[k]是数组b中第k个元素的消息摘要;
[0068]

对于每个hb[k],将其切为p个分片,其中hb(k)=p[k
·
p]‖p[k
·
p+1]‖

‖p[(k+
1)
·
p-1],p中元素的长度为t,不够切进行补码;
[0069]

对于每个p元素,生成一个节点列表,使用数组n表示,即{n[i]=h
pl-pow
(id||n[i-1]||nonce)|n[-1]=0,0≤i《(k+1)
·
p},h
pl-pow
为限制并行计算的工作量证明函数,n[i]的前t位等于p[i],nonce为随机数。在生成n[i]时,需保证n[i]的前t位等于p[i],t的长度决定了限制并行计算工作量证明的难度,该值可以动态调整,为了得出符合该条件的n[i],证明者需尝试不同nonce值。通过该操作使得证明者持续保存证明文件的实际成本比使用pl-pow资源重新计算的成本更低,促使证明者更加愿意时许保存证明文件;
[0070]

使用固定的ch执行证明阶段(例如,ch=0),生成初始证明文件,证明者将初始证明文件持续存储在证明者本地(这一步需消耗时间和空间资源),后续证明者就能以较小的计算代价对验证者做出正确的响应;
[0071]

广播共享文件的元数据、证明者身份标识id和初始证明文件,其中文件的元数据包含文件名称、文件哈希值、文件大小等标识信息,不泄露文件内容。
[0072]
2)证明阶段,如图3所示:
[0073]
该阶段由证明者p执行,当证明者p收到来自验证者v的随机挑战ch时,具体步骤如下:
[0074]

根据节点的总数(k+1)
·
p-1,计算索引j,表示为2
j-1
≤(k+1)
·
p-1《2j,然后切割h(ch)(h是散列算法)为一组大小为m的数组,数组的每个元素ch[i]占j-1位;
[0075]

以元素ch[i]的值作为序号选择节点,连接这些选定的节点并计算其摘要值{d=h(n[ch[0]]‖n[ch[1]]‖

‖n[ch[m-1]])};
[0076]

将d与所有的节点n[i]进行拼接,计算其哈希值hd[i]=h(n[i]‖d)|i∈z,0≤i《(k+1)
·
p-1;
[0077]

构造一个merkle树,其叶子节点是hd数组,merkle树内部父节点的值是通过拼接两个子节点后计算随机预言h
ch
得到(h
ch
是一个基于哈希的消息认证码算法(hash-based message authentication code,hmac),密钥是ch),使用nroot表示merkle树的根标签。由于证明者无法提前获得挑战值ch,因此必须在收到挑战值后进行这一步运算。如果证明者保存了初始证明文件,则merkle树的构造过程高效。否则,证明者必须重新运行初始化阶段以生成证明文件。为了节约资源,证明者更愿意持续保存证明文件而非重新生成;
[0078]

根据merkle树叶子节点总数,计算索引x,表示为2
x-1
≤(k+1)
·
p-1《2
x
,然后将h
ch
(nroot)切割为一组大小为q的数组e,其中每个元素占用x-1位,可以表示为1位,可以表示为其中e[g]表示数组e的第g个元素;
[0079]

使用πg表示从被选中的叶子节点到根节点的merkle路径。如果|e[g]|为奇数,即选中的叶子节点个数为奇数,则πg包含从n[e[g]]到根nroot的路径;如果|e[g]|为偶数,即选中的叶子节点个数为偶数,πg包含从n[e[g]]和n[e[g]-1]到根nroot的路径。路径还包含相应节点的nonce;
[0080]

输出nroot,π1,π2,

,πg。
[0081]
3)验证阶段:
[0082]
该阶段由验证者v执行,验证者生成一个随机挑战ch并将其发送给证明者p,等待接收来自证明者p的nroot,π1,π2,

,πg,具体步骤如下:
[0083]

根据ch的值,计算h(ch)的值并将其切割为一组大小为m的数组ch(与证明者p相同);
[0084]

根据ch数组每个元素的值选择分块,连接这些选择的分块并计算摘要d(与证明者p相同);
[0085]

将h
ch
(nroot)分割为一组大小为q的数组e(与证明者p相同);
[0086]

当g∈{0,

,q-1}时,根据e[g]的值,计算其相关块的索引,得到b[k]的值,并计算其摘要hb[k];在摘要hb[k]中选取块p[g],p[g]对应于节点n[g];验证πg的节点是否有效,计算n[e[g]]=h
pl-pow
(id||n[e[g]-1]||nonce),检查n[e[g]]的前t位是否等于p[e[g]],如果g是偶数,计算n[e[g]-1]=h
(pl-pow)
(id||e[p[g]-2]||nonce),检查n[e[g]-1]的前t位是否等于p[e[g]-1];节点有效后,验证hd[j]的值;最后验证πg是从节点hd[p[g]]到根nroot的有效merkle路径,如果g是偶数,还需验证从节点hd[p[g]-1]到根nroot的merkle路径的有效性。
[0087]
基于上述方法构建了一个通过代币流通的文件分享市场,如图4所示,该文件分享应用场景包含两类用户:文件下载者和文件分享者。文件下载者利用交互式证明验证文件分享者是否确实存储了文件,并通过支付代币下载所需文件。文件分享者花费存储资源来存储证明文件并通过分享文件获取代币,生成证明文件需消耗算力且花费较长时间,存储证明文件消耗的实际费用较低,证明文件的正确性容易被验证。其步骤包括:
[0088]
1)文件下载者在分享市场发布文件下载订单,并在订单中存入一定数量的代币,存入的代币不能在订单截止前赎回。代币分为消费、奖励、抵押三部分,消费代币用于数据上链,奖励代币被用于奖励合法的文件分享者,抵押代币用于确保文件下载者的合法性,抵押代币在文件传输成功后可以被全部赎回;
[0089]
2)文件分享者存储了文件下载者需要的文件,为了参与文件分享,文件分享者花费适当的“成本”,即时空证明,来证明文件确实被存储了一段时间;
[0090]
3)当相应订单出现在市场中时,所有保存了与订单中描述一致文件的分享者需要向该订单支付一定数量的抵押代币,表示他们愿意加入一个“集群”来分享文件并获取奖励,文件分享者的抵押代币不能在订单截止时间前赎回;
[0091]
4)持有相同文件的多个文件分享者通过共识协议竞争文件分享资格,最先完成时空证明的分享者可以获得分享资格,其余文件分享者赎回抵押代币;
[0092]
5)订单截止后,文件分享者获得文件下载者的奖励代币并且赎回自己的抵押代币。
[0093]
利用本发明的文件分享交互式验证方法,进行了相应的效率测试:
[0094]
在证明者初始化阶段,程序将文件切割为多个分块,并计算每个分块的哈希值,将这些哈希值拼接为分块文件。分块文件大小分别为1kb、5kb、50kb、500kb、0.98mb、1.95mb、2.93mb、3.90mb和4.88mb。接下来,程序根据分块文件生成证明文件。根据t值的不同,证明文件的生成效率如图5所示,为了便于显示,图5显示的消耗时间是log2(t)。实验结果表明,消耗的时间与分块文件的大小呈线性关系,与t的值呈指数关系。
[0095]
证明文件的大小与分块文件的关系如图6所示,实验结果表明证明文件的大小与分块文件的大小呈线性关系,随着t值的增加,证明文件大小的增长率降低。在这个阶段,生成证明文件需要花费一定的计算资源,由于使用的pl-pow算法,因此较难通过增加并行计
算的方法来加速这一过程,因此,文件分享者更愿意花费一定的计算资源来提前生成和持续保存该证明文件。
[0096]
在证明者证明阶段,实验程序测试了在证明者收到验证者的挑战时生成响应所花费的时间,挑战值是一个256位的随机字符串,每当收到挑战时,证明者将挑战值用作密钥,根据预先保存的证明文件构建新的merkel树,构建merkel树的复杂度与节点数呈线性关系,新生成的merkel树的大小与证明文件的大小相同.如果证明者没有事先生成证明文件,而是在收到挑战后再生产证明文件,那么这个阶段将非常耗时,最终导致响应失败.证明者证明阶段的消耗时间与分块大小的关系如图7所示,实验结果表明,当t值增加时,该阶段消耗的时间将会减少,原因是当t值增加时,证明文件将会变小。
[0097]
验证者验证阶段的消耗时间与分块大小的关系如图7所示,实验的平均验证时间为199ms.由于基于h(ch)或h
ch
(nroot)选择叶节点的效率与分享文件的大小关系较小,因此该阶段的消耗时间相对稳定。
[0098]
以上算法仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1