Skip to content

1. 倒排索引的构造

倒排索引(inverted index)是一种以关键词为索引的构造形式。每个关键词对应着一系列的文件。这样做的目的是提高搜索效率,因为在搜索时服务器直接可以根据用户提交的关键词来匹配。 对于可搜索加密来说,为了确保用户搜索的关键词不被服务器获知,我们需要采取一些密码学手段对关键词进行转化。

最经典的是 OXT 协议,使用 TSet 来描述这种结构,其中关键词索引由 \mathsf{stag} 表示,即:

\mathsf{TSetGetTag}(K_T, w)\to \mathsf{stag}

用更简单的话来说,假如有一个伪随机函数 F,那么可以直接生成关键词 w 对应的关键词索引:

\mathsf{stag}=F(K_T, w)

再举一个例子,比如 SeUpdate 中,使用了双线性对的性质生成索引,即:

ST_j^w = \hat{e}(H(w), g_2)^{k_j}

其目的是让多用户场景下,实现多用户的搜索权限授权。ST_j^w 表示的是第 j 个用户对于关键词 w 的索引。

Note

注意上面两个构造都不涉及到公钥体系,因此以上两个可搜索加密都属于对称可搜索加密,其中密钥是不能公开的。

用户的搜索权限,也就是用户是否可以生成索引陷门的权限。更直接地说,就是用户对密钥的拥有权限。

有没有办法使用 Hierarchical Key Assignment 来构造合适的方案?


2. 读/写权限的分离

读权限,也就是搜索权限;写权限,也就是更新权限。我们先考虑最简单的写入新文件,不考虑文件更改等情况。

我们用 \mathcal{G}_1\preceq \mathcal{G}_2 来表示 \mathcal{G}_2 的权限高于 \mathcal{G}_1。在这种情况下,\mathcal{G}_2 中的用户可以直接搜索 \mathcal{G}_1 中的文件。