隐藏大小的私有集合交集与安全比较协议
1. 降低客户端复杂度
在计算 Kc:i 时,若采用朴素的计算方法会导致 $O(v^2)$ 次指数运算。不过,通过动态规划可以将其降低到 $O(v log(v))$。其原理在于,对于任意的 (i, j),Kc:i 和 Kc:j 仅相差一个指数,因为 $PCH_i = \prod_{l=1,l\neq i}^v h_{cl}$,而 $PCH_j = \prod_{l=1,l\neq j}^v h_{cl}$。
定义 $Z’ = ZR_c$,以及 $i:j = Z’[\prod_{l\notin [i,j]} h_{cl}] \mod N$。可以用树结构来解释这一技术,树的叶子节点包含 $K_{c:i}$ 的值($1 \leq i \leq v$),例如 $i = Z’[\prod_{l\neq i} h_{cl}] \mod N = ZR_c\cdot PCH_i \mod N = K_{c:i}$。
从值为 $i:j$ 的节点可以按以下方式得到子节点 $i:h$ 和 $h + 1:j$:
- $i:h = (i:j)^{(\prod_{l=h + 1}^j h_{cl})} (\mod N)$
- $h + 1:j = (i:j)^{(\prod_{l=i}^h h_{cl})} (\mod N)$
当 $h = i + (j - i + 1)/2$ 时,每个操作恰好涉及 $(j - i + 1)/2$ 次指数运算。在第 0 层有 $v$ 个值,每个值通过一次指数运算从第 1 层的父节点得到;在第 1 层有 $v/2$ 个值,每个值通过 2 次指数运算从第 2 层的节点得到。一般来说,在第 $i$ 层有
超级会员免费看
订阅专栏 解锁全文
30

被折叠的 条评论
为什么被折叠?



