属性加密入门
简介
属性加密(Attribute Based Encryption, ABE)可以认为是一种泛化的基于身份加密。相较于需要接收者的公钥对消息进行加密的传统公私钥加密方案,基于身份的加密允许用户使用消息接收者的ID加密消息,基于属性的加密进一步允许用户基于消息接收者拥有的属性加密消息。使得只有某个属性约束(Policy)被满足时用户才能解密该消息。
这里“属性”是一个集合。例如,对于属性集合
上面我们描述了一种将属性约束嵌入到密文中的加密方案,这种方案被称为Ciphertext-Policy ABE (CP-ABE)。
另一种加密方案是Key-Policy ABE
(KP-ABE),在这种方案下,发送者基于一个属性集合对消息进行加密,属性约束被嵌入到用户的私钥中。例如,发送者基于集合
Fuzzy-Identity Based Encryption
Fuzzy IBE是最早提出属性加密的方案。在Fuzzy
IBE方案中,用户的身份是一个属性的集合
双线性对
对于素数阶的群
- 双线性:对于所有的
,有 - 非退化性:
其中
由于
我们可以看到,该结论与之前提到的双线性性质在循环群中是等价的。类似的,我们还有
(换成除法同样适用)
Fuzzy IBE方案
Fuzzy IBE与传统IBE类似,都需要KGC的参与。该方案的组成部分如下:
KGC密钥生成:假设所有属性的集合为
,为了简单起见,取 为 中的前 个元素,即 。 是一个定义在阶为素数 的群上的双线性对。 - 从
中随机取 作为主密钥保密存储 - 将
作为公开参数公开
- 从
用户密钥生成:对于持有属性集合
的用户(假设 ),KGC随机选取一个系数在 中的 阶多项式 使得 。用户的私钥即为 。(注意我们这里能直接使用 是因为密钥生成阶段作出的假设 ) 加密:假设加密使用的属性集合为
,待加密消息 。 - 随机选取
- 计算
作为密文
- 随机选取
解密: 当且仅当
时,我们可以解密消息。 取 ,记 为拉格朗日插值中点 对应的系数,即 (上式中
) 将密文中的 展开有: 根据拉格朗日插值公式,我们有
因此
因此消息
我们可以看到,在上述方案中,KGC的主密钥和公共参数的大小随着属性取值空间
更大的属性空间
论文作者提供了另一种方案,该方案允许将
在这个更大的属性空间下,用户可以使用任意的字符串作为其属性,然后通过一个可靠的哈希函数
该方案的组成部分如下:
KGC密钥生成:
选择
。 从
中随机选取 ,定义 以及函数 : 这里
可以被看作某个 阶多项式 的函数,其中 。 将
作为主密钥, 作为公开参数
密钥生成:对于拥有身份
的用户 - KGC随机选择一个
阶多项式 使得 - 用户私钥分为两部分,分别为
以及 。其中 是从 中随机选取的。
- KGC随机选择一个
加密:使用身份
加密消息 的过程如下: - 随机选取
- 计算密文
- 随机选取
解密:由于
我们可以得到
TODO: 这是怎么构造出来的?
参考资料
- https://crypto.stackexchange.com/questions/17893/what-is-attribute-based-encryption/17894#17894
- Sahai2005 - Fuzzy Identity-Based Encryption