可验证时延加密函数(Verifiable Time-Delay Encoding Function): VDF有两大要求,即时间要求(加密时间长,而解密时间短)和可验证要求(证明与验证过程高效)。目前,设计使用的VDF算法是学术界研究的热点。
两种解决方案
迭代SNARK哈希链,迭代过程实现时延特性,zk-SNARK本身满足可验证特性。目前已小范围被应用。
模的平方根方法,这也是一种常见的可验证加密方法。缺点是,生成证明的时间最好的情况和最坏的情况差一个数量级,因此很难控制加密时间。
现阶段
可验证时延加密算法(VDF)。目前这一过程通过BLS12-381加密算法,多次迭代完成。
限制
加密过程需要的时间必须足够的长,并且尽量不能并行化
- 这一算法不能并行化,不能通过提高节点的计算力缩短加密时间
- 可并行化的加密算法可能让攻击者使用高性能计算机或改进计算架构来近似线性地降低执行时间,才能保证恶意矿工无法通过女巫攻击或外源攻击达到目的。
原理: 如何限制并行化
一般可并行化的代码, 软件内启用了多进程或多线程功能.
上下文没有信赖的操作, 编译器可能会做些可并行执行的优化, cpu也可能会做多核间的调度
通过多次迭代BLS12-381的加密算法,即后一个执行的输入信赖前一个执行的输出, 将无法运用多线程或多进程运算, 编译器与cpu也不会作并行化的优化
时空证明 PoSt
它的具体过程如下:首先由矿工生成随机挑战对应的副本片段到整个副本的默克尔路径,随后进行t次迭代操作。每一次循环,随机挑战被更新为上一轮的随机挑战与本轮的迭代轮数以及上一轮的存储证明整体的哈希值。如此循环往复t次,最后输出时空证明。
一次PoSt是通过PoRep实现的,具体流程如图5-8所示。首先根据挑战c,通过循环次数i生成一个新的挑战;根据新的挑战,找到一条能够到达默克尔根rt的默克尔路径,由此生成当前时刻(或者说当前i轮)的证明;还没有结束,再由上一轮生成的证明生成新的挑战,进而生成当前轮的矿工证明,以此往复下去,累计完成了t次,将这个过程生成的证明序列全部交给检验者。
构建加密区块
- 防碰撞哈希函数 MerkleCRH
- zk-SNARKs
密封操作
SEAL: AES256
挖矿周期(对于存储矿工)
- 抵押:存储矿工向网络抵押存储
- 接收订单:存储矿工从存储市场获取存储请求
- 密封:存储矿工为未来的证明准备碎片
- 密封是一种缓慢的顺序操作,它将扇区中的数据转换成复制品,即一个与矿工公钥相关联的唯一的物理副本。
- 证明:存储矿工证明他们正在存储所承诺的碎片
挖矿周期(对于检索矿工)
- 收到订单:检索矿工从检索市场得到数据请求
- 发送:检索矿工发送碎片给客户
隐私
实现保密性:如果客户希望他们的数据被私密存储,他们必须在上传数据之前进行数据加密。