复制证明PoReps(一)

2018-07-23  本文已影响0人  建怀

2 Proof-of-Replication

我们首先定义复制证明(PoRep)的语法。PoRep对任意数据D∈{0,1}* 对于给定的安全系数λ,复杂度不会超过O(poly(λ))的大小。 假设所有算法在RAM计算模型中操作(特别是读取一个比特的输入,被认定为O(1)的操作)。并行算法在PRAM模型中运行。

image

该图说明了PoRep协议中证明者和验证者之间的交互。设置和数据预处理在外部运行,产生pp←PoRep.Setup(λ,T)和D~,τD←PoRep.Preproc(sk,D)。挑战-响应协议是定时的,并且验证者拒绝在发送挑战之后超过T个时间步骤接收的任何响应。这是通过要求PoRep.Prove在最多T的并行时间运行而正式捕获的。与T相比,Prover和Verifier之间的通信通道上的传播延迟被假定为标称值。

PoRep interactive protocol 如上图所示,这些算法用于交互协议中。设置(无论是确定性的,可信的还是透明的公共设置,例如涉及公共随机源的设置)都在外部运行,并且pp作为输入提供给所有各方。对于每个文件D,预处理器(在无密钥操作时的特殊方或证明方,但不是验证方)运行(D˜,τD) ← PoRep.Preproc(sk, D)。输出D˜,τD是证明方的输入和验证方的τD。

Transparency, public coin, and public verifiability
PoRep方案可能涉及可信的一次性设置,在这种情况下,PoRep.Setup由可信方运行,输出pp发布供所有各方查看。透明PoRep方案是其中设置不涉及任何私人信息的方案。该可信设置是独立的一次性过程,并且运行该设置的可信方应该不再参与交互协议。另一方面,数据预处理器可以使用密钥,但它不受信任。特别是,验证者不知道预处理器是否与server进行合谋。我们将在下面讨论,秘密钥匙预处理只对数据可检索性有影响,但对于可公开验证的数据复制的安全性(或者proof of space)是没有影响的。这与系统Mirror中提出的数据复制证明概念有重要区别。如果PoRep.Poll的私有输入r非空,则PoRep方案可以是private coin,如果r=s,则RoRep方案是public coin。A public coin PoRep就有额外的理想特性,PoRep。Poll输出的挑战可以被来自不可预测的公共随机信标的挑战所取代。

image

PoRep协议的时空图。在证明者生成新副本的长度为tinit的阶段之后,验证者反复询问证明者以在挑战时间段长度T内产生PoRep,以便验证证明者仍然存储原始数据的唯一副本。为了使这个证明系统健全,有必要使用tinit>>T。

Data preprocessing and data retrievability 当使用密钥对数据输入进行预处理时,得到的PoRep是public-coin PoR(在满足关于复制和空间证明的其他属性之间,我们将在下面的PoRep安全模型部分中进一步讨论)。在这种情况下,我们可以想象预处理器是一个想要在server上存储(和复制)数据的客户端,并生成数据标记τD以及外包该验证工作。当预处理以无密钥模式运行时,得到的PoRep是关于输出τD的PoRC(Section A.4),其包括对数据D的承诺。在给定开头承诺的情况下,任何(有状态的)verifier可以使用该标签来验证PoReps作为标准PoRs。这对于多个客户端将其文件汇集在一起并希望为整个数据集接收单个PoRep的设置特别有用,但它们彼此不相互信任以共享私钥。它也适用于动态设置,使新客户端知道存储在服务器上的数据,并希望在不信任原始客户端的私钥预处理的情况下验证可检索性。

以这种方式将数据预处理作为单独的“堆栈层”处理允许在不同设置中适当的更多种结构,而不会影响底层PoRep协议本身的效率。事实上,一个PoRep协议(没有预处理)满足(δ, C)-PoRC(例如,用于C将数据划分成恒定大小的块),利用任何数量的先前技术,能立马被解析成公钥PoR或PoRC。我们将重视两种场景:

Efficiency 所有的算法必须在时间复杂度O(poly(λ))内运行,最多只能在时间复杂度O(poly(λ))下并行运行。我们不直接在PoRep定义中强加进一步的效率要求,但隐含地,PoRep方案不能同时正确和安全,除非在 O(poly(λ))处理器上,PoRep.Poll和PoRep.Prove具有比PoRep.Replicate更低的并行时间复杂度。否则,为了保持挑战-响应时间的正确性将足够长,以便对抗性证明者从头开始重新运行副本生成。此外,出于实际目的,非常希望PoRep.Prove和PoRep.Verify以常数或O(polylog(|D|))时间运行,其中|D|是数据文件的长度。除此之外,还可以实现批量证明和验证相同(或不同)文件的多个副本,这些副本在副本/文件的数量上进行线性缩放。副本生成PoRep.Replicate运行时间大于max(T,|D|),但是这个运行时希望在T·| D |中是次线性的随着文件大小的增加。

Correctness 在正确的PoRep结构中,运行PoRep.Replicate和PoRep.Prove的证明者必须诚实地通过验证1.为了通过验证,算法PoRep.Prove必须在最多T的并行时间运行,否则验证者将不会收到挑战 - 响应期内的输出。此外,PoRep.Extract必须正确提取使用PoRep.Replicate生成的副本中的原始数据。

Definition 1 (PoRep correctness)。PoRep结构是正确的,如果对于任何安全系数λ,任何id和数据输入D,存在Tλ,是的对于所有T≥Tλ,pp←PoRep.Setup(λ,T)和(R,τ)←PoRep.Replicate(pp, id, D) :

image
上一篇下一篇

猜你喜欢

热点阅读