论文vchain+笔记
论文链接:https://ieeexplore.ieee.org/document/9835165
概要
这篇论文是vchain的续作,但是总的思路与vchain大不相同了,不再使用跳表,而是改为滑动窗口方案。内部也不再使用Jaccard相似度来聚合交易对象,而是用了字典树。对于嵌套的布尔查询,vchain可以在一轮BFS中获取全部结果,即对每个遍历到的结点中包含的交易对象都要判断是否match;而vchain+需要进行多轮BFS,每轮BFS找匹配条件中一个关键字对应的交易对象ID。
总之,两者的主要差异在于区块中的merkle tree不同。vchain中的树的结点包含多个交易对象,而vchain+的树是字典树,是某个关键字的前缀(交易对象包含若干个关键字)。
思想
对于ObjReg索引来说,要保证最近2k-1个块的所有对象的ID是distinct的,这样就可以减少对象ID的size,从而减少公钥大小。为什么是2k-1个块,因为当查询的时间窗口小于k时,需要用两个窗口为k的查询的结果相减,然后得到最终结果,为了保证相减时不会出现ID重复的情况,所以ObjReg索引记录最近2k-1个块
问题
每个块的ObjReg索引怎么维护的?
对于一个包含很多条件的布尔表达式,需要对字典树进行很多轮BFS,这个会带来性能上的负担。
若关键字的size都很大(如256位),那么字典树的高度也会很高,BFS的性能也会下降。
Algorithm 2: Boolean Query Processing中第8行,如何merge?假如两次单关键字查询中某个节点n,第一次查询时n是mismatch的,第二次是match的,那么就会有关于这个结点的两个proof。考虑图Fig.9中,若查询的关键字为5e7a or 9a3e,那么内部结点 \(n_3\) 就会在proof中出现2次:当搜索5e7a时经过 \(n_3\),那么其proof为 <5e>;当搜索9a3e时同样要经过 \(n_3\),此时其proof为<5e,\(cildHash_3\)>。根据猜测,merge的方法是判断两个的关键字,若关键字相同,保留proof更短的(即不包括\(childHash_n\)的)

 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号