Vchain:可验证的查询
总体概述
本文于2019年7月发表在顶会SIGMOD,题目为《vChain: Enabling Verifiable Boolean Range Queries over Blockchain Databases》,来自香港浸会大学。2020年本团队在SIGMOD再投一篇vchain会议论文,展示了他们的研究进展并确定了vchain的实用性。
本文希望设计出一个能够满足各种类型的查询,且保证查询结果正确、查询效率高的新型框架;行业内的数据库巨头公司也在纷纷致力于开发研究基于区块链的数据库,并设计成比较综合的关键字查询模式。
论文核心内容
现在查询区块链中数据的需求越来越大,论文提出vChain框架,减轻用户查询的存储、计算成本,并保证查询结果的完整性。主要是提出了摘要数据结构AttDigest、块内块间索引和IP树索引结构。
全文内容概述
密码学名词解释
想比较通透的读懂本论文,需要了解一点密码学的基础知识,包括非对称加密技术,双线性配对(Bilinear Pairing),多重集(Multiset),密码学累加器。接下来简单介绍一下。
- 密码学累加器
累加器可利用哈希函数的性质生成一个短的承诺,利用承诺可以验证一些证明。累加器的重要性质是,它可以用来证明集合不相交。Merkle tree就是一个最简单的累加器。累加器分为动态的和静态的:
- 动态累加器:当有元素加入或者移除时,commitment和membership proofs可以进行有效更新(所谓有效更新,是指更新的代价应与已累加的元素数量无关。)
- 静态累加器:当有元素加入或者移除时,commitment和membership proofs需总体重新生成,无法进行有效更新。
另外,vector commitment(VC)具有与累加器完全相同的功能,但是对应的元素是有序的。
-
多重集
多重集是数学中的一个概念,是集合概念的推广。在一个集合中,相同的元素只能出现一次,因此只能显示出有或无的属性。在多重集之中,同一个元素可以出现多次。
举例来说,{1,2,3}是一个集合,而{1,1,1,2,2,3}是一个多重集。其中元素1的重数是3,2的重数是2,3的重数是1。{1,1,1,2,2,3}的元素个数是6。多重集中的元素是没有顺序分别的。 -
双线性配对:Bilinear Pairing
定义:一个双线性映射是由两个向量空间上的元素,生成第三个向量空间上一个元素之函数,并且该函数对每个参数都是线性的。理解:若B:V×W→X是一个双线性映射,则V固定,W可变时,W到X的映射是线性的,W固定,V可变时,V到X的映射也是线性的,也就是说保持双线性映射中的任意一个参数固定,另一个参数对X的映射都是线性的。
双线性配对是多集累加器的基本操作,用于生成一对公私钥对。 -
非对称加密
非对称加密是使用公钥/私钥对中的公钥来加密明文,然后使用对应的私钥来解密密文的过程。 非对称加密也称为公钥加密。 与此相对的,对称加密使用相同一组密钥来加密和解密数据。 -
密码学函数
全文的使用的函数的安全性是由密码学保证的。如下所示:
- KeyGen(1λ) → (sk, pk),产生公钥pk和密钥sk。
- Setup(X, pk) → acc(X),输入多重集X和公钥pk,计算出累加器的值- acc(X)。具体怎么计算的可以暂时放下。
- ProveDisjoint(X1,X2, pk) → π,输入两个多重集(这两个多重集中的元素是没有交集的)和一个公钥,输出证明π。顾名思义,这个函数是用来生成两个多重集没有交集的证明。
- VerifyDisjoint(acc(X1), acc(X2), π, pk) → {0, 1},这个函数用来验证两个多重集X1和X2是否有交集,如果输出为1,表示没有交集。