PEKS加密

通俗地讲解一下 PEKS(Public Key Encryption with Keyword Search)加密流程

🧠 先建立思维图景

我们的目标是:用公开密钥对关键词加密(不是整个文件!),使得服务端可以根据你提交的“搜索陷门”(Trapdoor)来判断哪些加密关键词是匹配的,但却无法得知关键词是什么


📦 一、PEKS 体系结构四个核心算法

算法 作用
Gen() 生成密钥对(公钥/私钥)
PEKS(PK, w) 用公钥对关键词 w 进行加密(得出 PEKS 密文)
Trapdoor(SK, w) 用私钥为关键词 w 生成一个陷门
Test(C, Tw) 判断 PEKS 密文 C 是否和陷门 Tw 匹配(服务器用)

🧪 二、流程演示:一步步来(通俗化 + 图示)

假设数据拥有者 Alice,想上传包含关键词 “salary” 的加密文档,并让未来某人(或她自己)能搜索这个关键词。

第一步:密钥生成

1
(PK, SK) ← Gen()
  • Alice 生成一对公钥 PK 和私钥 SK。
  • 公钥会用于加密关键词。
  • 私钥仅自己保留,用于生成搜索陷门。

第二步:关键词加密(PEKS)

1
C ← PEKS(PK, "salary")
  • Alice 把关键词 "salary" 用公钥加密,生成一个密文 C(不是加密文本,而是加密关键词!)
  • 这个 C 会与文档一起存入云端。

云平台只知道:文件 X 关联了某个加密标签 C,但不知道 C 是哪个词。


第三步:搜索陷门生成(Trapdoor)

1
Tw ← Trapdoor(SK, "salary")
  • 用户 Bob 想找包含“salary”的文件。
  • 他从 Alice 得到 SK 或她帮忙生成陷门。
  • 用私钥对 “salary” 生成陷门 Tw,并交给服务器。

第四步:云端匹配(Test)

1
Test(C, Tw) → true or false
  • 云端服务器使用 Test 算法,把陷门 Tw 和存储的密文 C 一一比较。
  • 如果 Test(C, Tw) == true,说明该文件匹配关键词“salary”。

服务器从头到尾:

  • 看不到关键词原文;
  • 无法解密文件内容;
  • 只能做“是否匹配”的判断。

🔐 三、底层原理简述(略技术)

PEKS 原始论文(Boneh et al., 2004)提出的方案用到了:

  • RSA 或双线性对(Bilinear Pairings)
  • 加密哈希函数:对关键词做哈希再加密
  • Trapdoor 是构造能与密文比较的“钥匙”

大致思路是:

  • 对关键词 w 做哈希 H(w)
  • 然后用某种加密算法处理这个值(如群指数、椭圆曲线)
  • 使得陷门 Tw 能被用于与密文 PEKS(w') 作数学上的“测试”

🧾 四、实际应用示意图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+--------------------------+
| 数据拥有者 Alice |
|--------------------------|
| 文档内容 + "salary" |
| 生成 PK, SK |
| PEKS(PK, "salary") → C |
| 上传文档 + C 到云端 |
+--------------------------+

+--------------------------+
| 云平台服务器 |
|--------------------------|
| 存了文档 + C |
| 收到 Trapdoor(SK, "salary") → Tw |
| Test(C, Tw) → true |
| 返回匹配的文档ID |
+--------------------------+