Page 435 - 《软件学报》2026年第3期
P. 435
1398 软件学报 2026 年第 37 卷第 3 期
② 为每个真子句分别构造一个子句布隆过滤器
初始化 4 个长度为 M, 值均为 0 的布隆过滤器 BF[m] = 0, ∀m ∈ [1, M].
使用一组相互独立的抗碰撞的哈希函数 H = {h 1 ,h 2 ,...,h ι } 将各个子句 C j 中包含的属性分别映射到布隆过滤
BF[h ι (a i,J ) ι∈l,i∈I ] = 1, 并将这些位置上的值由 0 置为 1, 其余位置上的值不变. 当某个位置多
器的 l 个不同的位置上
次被置 1 时, 其值仍取 1. 真子句 C 1 = {a 5 ,a 6 ,a 7 ,a 2 } 的构造如图 2(a) 所示, 为了直观展示, 对图中布隆过滤器的位数
和哈希函数个数进行了简化. 其余真子句的构造过程与 C 1 相同.
属性组合 布隆过滤器
a 2 a 5
H 1 H 2 H 1 H 2
用户属性 a 2 a 4 a 5 c 1 1 0 0 … 0 1 1
0 0 1 0 0 1 … 0 1 0 0 1 1
a 2 a 5 a 6 a 7 0 0 1 0 1 1
真子句 C 1 …
H 1 H 2 H 1 H 2
a 2 a 3 0 1 0 0 1 0
真子句 C 2 …
a 6 a 7
a 2 a 4 1 0 0 0 1 0
真子句 C 3 …
真子句 C 1 布隆过滤器 BF C1
0 0 1 0 1 1 a 1 0 0 0 1 0 0
a 2 a 5 a 6 a 7 … 真子句 C 4 …
(a) 真子句的哈希映射与布隆过滤器构建示例 (b) 基于布隆过滤器的策略判定过程示例
图 2 复用策略生成及判定过程
(3) 复用策略判定
云服务器根据密文中的复用策略标识符提取相应的子句布隆过滤器和属性值组件, 并进行如下判定.
① 对数据访问者的属性布隆过滤器和子句布隆过滤器进行等位判定.
要求子句布隆过滤器中值为 1 的位在数据访问者属性布隆过滤器中也必须为 1, 否则判定失败. 其中, 数据访
问者的属性布隆过滤器由权威中心生成. 当且仅当真子句是用户属性的子集时, 等位判定才能通过. 判定过程如
图 2(b) 所示, 只有 C 3 满足条件.
② 对属性密钥和子句的属性值组件进行配对验证.
利用布隆过滤器加快属性的判定过程, 快速过滤掉不匹配的属性访问组合. 考虑到布隆过滤器存在假阳性, 为
进一步保证访问的合法性, 在布隆过滤器初步判定完成后, 需要结合具体的算法进行双线性配对验证.
当步骤①和②都判定成功时, 云服务器返回判定结果 FR ν = 0 并进行后续的外包属性解密.
2.5 支持多关键词检索和更新的倒排索引结构
数据索引主要用于建立数据与检索关键词间的映射关系, 根据映射方向的不同, 通常可以分为正向索引和倒
排索引两种基本形式: 传统的索引结构采用正向映射方式, 建立数据到关键词的映射关系. 这种索引的构建方式简
单, 便于数据的添加和删除操作, 但查找关键词时需要线性遍历整个索引结构, 效率较低. 倒排索引采用将关键词
映射到数据, 通过访问关键词即可获取相关的数据集合, 提升了查找速度. 常规的倒排索引采用静态结构设计, 在
构建完成后难以进行局部更新.
为解决这一局限性, 我们引入了一个两层索引架构: 外层采用哈希表实现关键词到数据集合的快速映射, 内层
则利用跳表组织具体的数据项. 哈希表提供了 O(1) 的平均访问时间, 确保了检索操作的高效性; 跳表的概率平衡
特性使得对数据项的插入、删除和更新操作都能在 O(logn) 时间内完成, 这一特性有效解决了传统静态索引难以
应对频繁数据更新的实际需求. 为确保更新操作的安全性, 我们引入了 BLS 签名机制用以验证更新权限, 确保操
作只有合法的数据所有者才能执行对指定关键词的更新操作. 同时, 得益于该索引结构的精确寻址能力, 所有的更
新操作都被严格限制在目标数据项范围内, 有效避免了对无关数据的干扰.
(1) 索引构建
① 数据所有者选用性能良好且密码安全的哈希函数 (如 SHA-256、BLAKE2 等) 将关键词映射为一个固定长
∗
度的大整数 KW 并随着密文发送给云服务器. 该步骤支持自定义哈希函数以适应不同的性能需求.

