Filecoin使用向量承诺的复制证明

发布时间:2019年03月04日 价值:20000.00 / 共识:21

Filecoin使用向量承诺的复制证明

PoRep with RSA Vector Commitments

本文档描述了使用BBF-VC(Boneh Bunz Fisch Vector Commitments)的复制证明。这样做的动机是从我们的SNARK证明中删除Merkle Trees。

PoRep复制算法将保持不变(除非它将Merkle Trees替换为具有相同API的BBF-VC)。在本文档的其余部分中,我们将介绍如何使用Vector Commitments。

概述

证明者将向验证者发送包含三个组成部分的证明:

  • VC证明:将受挑战的复制节点,原始数据节点和父节点包含在累加器中commAcc。
  • VC打开:从VC证据中显示的比特用作公共输入以验证SNARK证明
  • SNARK证明:证明:

    • 受挑战的节点正确地从数据节点和父节点编码
    • VC Opening Bits是数据节点,副本节点和父节点的正确最后一位

证明算法

我们使用以下常量:

  • PARENTS_COUNT = BASEDEGREE + EXPANSIONDEGREE
  • c_t 原始数据节点的揭秘位数
  • c_d 每个父节点的揭秘位数

证据是 (VCProof, (ParentBits, DataBits), SNARKProof)

VC包含证明(VCProof)

  • 输出 VCProof
    • 包含证据:受挑战的数据节点,受挑战的副本节点和受挑战的副本节点的父节点

VC打开 ((ParentBits, DataBits))

  • For each challenge in 0..CHALLENGE_COUNT:
    • DataBits[challenge] = Replica[challenge][:c_t]
    • For each parent in 0..PARENTS_COUNT:
      • ParentBits[challenge][parent] = Replica[GetParent(challenge)[parent]][:c_d]
  • 输出 ParentBits, DataBits

SNARK circuit (SNARKProof)

TODO: Check if we need ReplicaBits

  • Private Inputs:
    • Parents [CHALLENGES_COUNT][PARENTS_COUNT]Fr
    • Data [CHALLENGES_COUNT]Fr
  • Public Inputs:
    • ParentBits [CHALLENGES_COUNT][PARENTS_COUNT][c_d]Bool
    • DataBits [CHALLENGES_COUNT][c_t]Bool
  • Computation
    • Run the encoding check (same as in drgporep circuit)
      • Compute key = KDF(parents, node)
      • Compute obtained = VDE.Decode(node, key)
      • Check that Data === obtained
    • Check q bits:
      • For each challenge ch:
        • For each parent parent:
          • Check that parent[:c_d] == ParentBits[ch][parent]
      • Check that Data[:c_t] == DataBits[ch]

验证者算法

验证者将执行以下操作:

  • 验证VCProof是否正确
  • 验证(ParentBits,DataBits)是否在累加器中
  • 验证SNARKProof是否正确
  • 分享 收藏
0 条评论
  • 这篇文章暂无评论,赶紧评论一下吧~