2. 安全查询的威胁模型与安全目标

在密文索引与安全查询工程中,讨论“安全性”之前必须先回答三个问题:谁在攻击、攻击者能看到什么、我们希望保护到什么程度。这三者分别对应敌手能力、泄露函数与安全目标。若跳过威胁模型直接谈加密方案,往往会出现“算法本身安全,但部署后被流量分析击穿”的错位。本节围绕这三个问题展开,并给出前向安全与后向安全的精确定义。

一、敌手能力:从被动观察到主动注入

敌手能力刻画攻击者能执行哪些操作、能获取哪些信道。工程上通常按能力递增分为若干档,方案设计必须明确“防到哪一档”。

  • 被动敌手(Passive / Honest-but-Curious):只监听网络与存储,不篡改、不注入。典型如云存储服务商读取密文索引与查询令牌。
  • 主动敌手(Active):可注入伪造查询、重放旧令牌、篡改索引条目,甚至删除或回滚数据。回滚攻击是后向安全要重点应对的场景。
  • 自适应敌手(Adaptive):查询令牌的构造可依赖此前观察到的所有泄露,而非预先固定查询集合。自适应模型更贴近真实攻击,也更难证明。
  • 快照敌手(Snapshot):在某一时刻获取数据库与索引的完整快照,之后结合后续查询令牌推断历史内容。前向安全正是针对此类敌手。

需要强调:敌手能力不是越强越好,而是要与部署环境匹配。若服务端完全可信,则无需前向安全;若服务端可能被入侵并留存快照,则前向安全是硬性要求。

二、泄露函数:把“不可避免的泄露”显式化

可搜索加密无法做到零泄露,因为查询本身会暴露访问模式。泄露函数(Leakage Function)把方案在理想执行中必然暴露的信息形式化为若干分量,常见包括:

  • 搜索模式(Search Pattern):哪些查询检索了同一个关键词,即查询间的等价关系。
  • 访问模式(Access Pattern):每次查询命中的文档标识集合。
  • 结果规模(Result Size):命中数量,常与访问模式合并考虑。
  • 更新模式(Update Pattern):插入、删除操作的时间与数量分布。
  • 体积泄露(Volume):密文长度、令牌长度等可测量量。

泄露函数是安全证明的“合同”:方案承诺除 L 之外不泄露任何信息。工程评估时应把 L 与真实业务敏感度对照——例如访问模式泄露在关键词基数极低时可能直接暴露查询内容。

泄露函数不是缺陷,而是设计选择。明确写出 L,才能判断方案是否满足业务合规要求。

三、前向安全与后向安全:定义与区别

前向安全(Forward Privacy)与后向安全(Backward Privacy)刻画的是更新操作与历史查询之间的隔离关系,二者方向相反,必须分别定义。

前向安全定义:对于任意在时间 t 执行的更新操作,敌手即使掌握了 t 之前所有查询令牌与泄露信息,也无法判断该更新是否与某个历史关键词相关。换言之,新更新不会泄露其与旧查询的关联。典型实现是让每次更新的索引位置由独立随机数派生,使旧令牌无法定位新条目。

后向安全定义:对于已删除或已更新的条目,敌手即使掌握该条目对应的历史查询令牌,也无法从后续查询结果中获知其内容或存在性。后向安全通常分为若干强度等级:

  • Type-I:删除后,历史令牌无法再检索到该条目。
  • Type-II:删除后,历史令牌无法检索到该条目,且新令牌也不暴露该条目曾被删除。
  • Type-III:进一步要求删除操作本身不泄露被删条目的关键词信息。

方向约定:前向安全保护“未来更新不被过去令牌推断”,后向安全保护“过去条目不被历史令牌追溯”。二者共同构成动态可搜索加密的核心安全目标。

威胁模型与安全目标关系图 敌手能力 被动监听 · 只读 主动注入 · 篡改/重放 自适应 · 令牌依赖历史 快照 · 留存历史状态 泄露函数 L 搜索模式 · 查询等价类 访问模式 · 命中文档集 更新模式 · 时间与数量 体积泄露 · 密文/令牌长度 安全目标 前向安全 · 新更新不关联旧查询 后向安全 · 旧令牌不追溯已删条目 Type-I / II / III 强度分级 L 之外零额外泄露 观测 约束 时间 t₁ 查询 w t₂ 插入 d t₃ 删除 d t₄ 查询 w 前向安全:t₂ 更新不被 t₁ 令牌推断 后向安全:t₃ 删除不被 t₄ 令牌追溯 工程判据 • 若服务端可能留存快照 → 必须前向安全,更新位置由独立随机数派生 • 若业务存在删除/合规擦除 → 至少后向安全 Type-II,避免历史令牌复活已删条目 • 泄露函数 L 需与业务敏感度逐项对照,访问模式在低基数关键词下风险最高

四、工程落地:如何把定义转化为可检查的约束

定义只有落到实现细节才有意义。以下给出一个可参考的检查清单,用于评估一个动态可搜索加密方案是否满足本节所述安全目标。

检查项对应定义判断依据
更新令牌是否含独立随机数前向安全旧查询令牌无法定位新条目位置
删除是否真正移除可检索性后向安全 Type-I历史令牌检索结果为空
删除是否隐藏“曾存在”后向安全 Type-II新令牌不暴露删除痕迹
删除是否隐藏关键词后向安全 Type-III删除操作不泄露被删关键词
泄露函数是否显式声明泄露函数 L安全证明中给出 L 的完整分量
敌手是否自适应敌手能力证明覆盖查询依赖历史的场景

以一个教学示例说明:假设关键词 w 在 t₁ 被查询,t₂ 插入文档 d,t₃ 删除 d,t₄ 再次查询 w。若方案满足前向安全,则 t₂ 的更新令牌与 t₁ 的查询令牌无关联,敌手无法从 t₁ 推断 d 与 w 的关系;若满足后向安全 Type-II,则 t₄ 的查询结果中 d 不出现,且敌手无法从 t₄ 令牌判断 d 曾被删除。这两个性质分别由不同的密码学机制保障,不能互相替代。

常见误区:认为“加密了索引就安全”。若更新位置可被旧令牌预测,快照敌手即可还原历史关联;若删除仅做逻辑标记,历史令牌仍可检索到已删条目。前向安全与后向安全必须分别验证。