PKEET加密
带等式测试的公钥加密(PKEET)通俗讲解与数学原理分析
一、什么是 PKEET?
带等式测试的公钥加密(Public Key Encryption with Equality Test, PKEET),是一种在保密信息的同时,允许受信方判断两个密文是否加密了相同明文的加密方案。
你可以把它看作是“带比较功能的加密”,即:
不解密、不泄密、可判断内容是否一致。
二、为什么需要 PKEET?
现实中有很多隐私场景中,我们只想知道两个值是否一样,而不想暴露值本身,例如:
- 医院之间是否接诊了同一个癌症患者?
- 银行之间是否共享了同一个风险客户?
- 匿名用户之间是否喜欢了同一部电影?
- 云存储中是否上传了重复的加密文件?
这时候就需要一种“可比较但不可识破”的加密机制,PKEET 就是为这些场景而生的。
三、PKEET 的基本功能
PKEET 主要提供六个算法组件:
算法 | 功能说明 |
---|---|
Setup | 系统初始化,生成主密钥 |
KeyGen | 用户生成自己的公钥和私钥 |
Encrypt | 加密明文并生成可测试的密文 |
Decrypt | 使用私钥恢复明文 |
TestKeyGen | 为受信方生成等式测试密钥 |
Test | 判断两个密文是否加密了相同的明文 |
四、类比生活:加密后的“指纹比对”
我们可以把 PKEET 想象成:
- 把明文变成一个只有授权人才能识别的“指纹”;
- 密文中藏着这个“指纹”;
- 授权方可以把两个指纹对一下,判断是否是同一个人;
- 但看不出指纹代表谁。
五、数学原理解析:一个基于双线性对的 PKEET 实现
现在我们深入到一个经典实现:基于**双线性对(Bilinear Pairing)**的 PKEET。
1. 数学基础
设:
- 是两个椭圆曲线群,阶为素数
- 是一个非退化、双线性、可计算的配对函数
- , 是生成元
2. 算法结构
🔧 Setup(系统初始化)
- 选择私有主密钥
- 设置主公钥为
- 系统参数:
🔐 KeyGen(用户密钥生成)
用户选择私钥
计算公钥:
🔏 Encrypt(加密)
给定明文 ,选择随机
- Tag = H(m)(哈希明文生成标签)
最终密文为
🔓 Decrypt(解密)
用私钥 解密:
因为:
🧪 TestKeyGen(生成等式测试密钥)
系统为某个用户生成等式测试密钥:
- 令该用户的授权密钥为 ,只暴露等式测试功能
或者直接发布一个用于测试的函数,输入两个 Tag 对比即可。
✅ Test(等式测试)
判断两个密文是否是相同明文加密:
- 比较两者的 :即
由于 Tag 是 ,而 H 是不可逆的哈希,无法通过 Tag 恢复 m,但相等说明原始 m 相等。
六、安全性分析
安全目标
安全性质 | 说明 |
---|---|
语义安全性 | 未授权者不能从密文中恢复明文 |
标签隐藏性 | Tag 不可逆,即使泄露也无法获取明文 |
可控等式测试 | 只有授权者才能执行 Test 操作 |
抗攻击性
- 对标签的保护依赖于哈希函数抗碰撞性;
- 对明文保护依赖双线性对的 Decisional Bilinear Diffie-Hellman 假设(DBDH)。
七、PKEET 应用实例
场景 | 功能 |
---|---|
医疗病例比对 | 医院之间加密病例,通过等式测试判断是否是同一患者 |
银行黑名单共享 | 不泄露客户身份的前提下识别重复嫌疑人 |
社交匹配平台 | 双方兴趣标签加密,通过等式测试发现匹配 |
云存储去重 | 加密文件上传,平台判断是否重复 |
八、小结与展望
PKEET 是在传统加密之上增强了一种“加密下可比较性”的能力,它既保留了隐私保护的优点,又提升了数据的交互性和可用性。在数据共享日益频繁而隐私问题突出的今天,PKEET 可能会在医疗、金融、社交和云计算等多个领域成为核心加密工具。
未来研究还可能聚焦在:
- 支持模糊匹配的 PKEET
- 高效标签生成与压缩
- 与可搜索加密(PEKS)的融合