最近在思考:在cp-abe方案下,每一次的双线性运算都是要很大开销的。那么,对于一个数据集的不同访问策略, 如何实现快速匹配呢?对于相同策略的不同数据集,能不能实现批量快速解密呢?
在cp-abe方案下,每一次的双线性运算确实会带来很大的开销。为了实现快速匹配,可以通过策略树来优化。策略树是树形结构,它将访问策略转换为树形结构,每一次双线性运算都是在树上进行。这样做可以减少不必要的运算,同时也能够快速匹配不同的访问策略,提高了系统的效率。对于相同策略的不同数据集,我们可以采用批量解密技术来实现批量快速解密。批量解密是一种在一次运算中解密多个密文的技术,其基本思想是将多个密文合并成一个大密文,然后进行一次解密运算,可以大大提高系统效率。
例如,假设我们有两个访问策略分别为A和B,我们希望能够快速地匹配。首先,我们将这两个访问策略转化为策略树形式,然后进行比较,找到它们的公共节点。接下来,我们将数据集的密文分别解密,得到明文信息,再根据不同的访问策略进行相应的操作,实现了快速匹配。而对于相同策略的不同数据集,我们可以将它们合并成一个大密文,进行批量解密,大大提高了系统的效率。
基本的CP-ABE方案安全性基于挑战者和攻击者之间的博弈过程进行证明. 过程概括为
(1) 系统初始化: 攻击者A\mathcal{A}A选择一个挑战访问结构A∗\mathbb{A}^*A∗发送给挑战者B\mathcal{B}B. (目的是攻击所选择的挑战访问结构, 尝试通过非对应的私钥询问解密挑战结构的密文.
(2) 参数设置阶段: 挑战者B\mathcal{B}B运行Setup算法, 得到PK, MSK, 将PK发送给A\mathcal{A}A, 然后保留MSK.
(3) 密钥查询阶段 1: 攻击者A\mathcal{A}A查询一系列与属性集合S1,S2,...,Sq′S_1, S_2, ..., S_{q'}S1,S2,...,Sq′有关的密钥, 即A\mathcal{A}A发送属性集合给B\mathcal{B}B, 然后B\mathcal{B}B返回对应私钥给A\mathcal{A}A. 但要求所有的私钥查询都不能满足挑战访问结构A∗\mathbb{A}^*A∗.
(4) 挑战阶段: A\mathcal{A}A提交两个等长消息M0∗,M1∗M_0^*, M_1^*M0∗,M1∗给B\mathcal{B}B, B\mathcal{B}B随机选择β∈{0,1}\beta \in \{0, 1\}β∈{0,1}, 加密Mβ∗M_\beta^*Mβ∗得到挑战密文CTb∗CT_b^*CTb∗, 然后发送给A\mathcal{A}A.(即不可区分性安全目标
(5) 密钥查询阶段 2: 类似密钥查询阶段 1, 攻击者A\mathcal{A}A再查询另一系列与属性集合Sq′+1,Sq′+2,...,SqS_{q' + 1}, S_{q' + 2}, ..., S_qSq′+1,Sq′+2,...,Sq有关的密钥, 即A\mathcal{A}A发送属性集合给B\mathcal{B}B, 然后B\mathcal{B}B返回对应私钥给A\mathcal{A}A. 但要求所有的私钥查询都不能满足挑战访问结构A∗\mathbb{A}^*A∗.
(6) 猜测阶段: 攻击者A\mathcal{A}A输出β′∈{0,1}\beta' \in \{0, 1\}β′∈{0,1}, 如果β′=β\beta' = \betaβ′=β, 称A\mathcal{A}A赢得游戏. A\mathcal{A}A在游戏中的优势为
AdvA=∣Pr[β′=β]−12∣ Adv_{\mathcal{A}} = | Pr[\beta' = \beta] - \frac{1}{2}| AdvA=∣Pr[β′=β]−21∣
定义
如果没有多项式时间内的攻击者A\mathcal{A}A以不可忽略的优势攻破上述安全模型, 则称基本CP-ABE方案是安全的.