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 | +--------------------------+ |