开放科学(资源服务)标志码(OSID):
0 概述
随着云计算技术[1-2]的发展,越来越多的用户将数据存储在云上,由于云服务器不能保证数据的安全以及用户的私密性,因此将数据加密后再发送到云[3]成为数据属主(Data Owner,DO)普遍采用的方法,但是该过程中数据使用者将面临密文搜索的难题[4-5]。为解决该问题,2000年SONG等[6]提出一种可搜索加密技术。
2004年,BONEH等[7]提出首个基于关键字搜索的公钥加密方案,该方案在通信过程中需要安全通道,导致通信代价较大。2020年,RHEE等[8]提出指定测试者的可搜索公钥加密方案,其在随机预言机模型下证明了陷门的不可区分性是抗关键字猜测攻击(Keyword Guessing Attack,KGA)的充分条件。2014年,PENG等[9]提出带有关键字搜索的无证书公钥加密方案,但该方案存在内部关键字猜测攻击(Inside Keyword Guessing Attack,IKGA)问题。2017年,HUANG等[10]提出基于关键字搜索的公钥认证可搜索加密方案,该方案可以对数据属主的身份进行认证。2018年,MA等[11]提出工业物联网环境下无证书可搜索加密方案,但其不能抵抗IKGA。2020年,YANG等[12]对文献[11]方案进行改进,改进后的方案可抵抗IKGA,但其只支持单关键字搜索。2019年,WANG等[13]设计的抗IKGA的可搜索加密方案中以非确定性算法生成搜索陷门,使得方案满足陷门不可区分性和密文不可区分性,但其存在证书管理问题。2019年,LU等[14]提出的无证书公钥可搜索加密方案解决了证书管理问题且能抵抗IKGA,但其只支持单关键字搜索。文献[15-16]中无双线性对的可搜索加密方案均提高了计算效率,但都不能支持多关键字搜索,且文献[16]方案存在证书管理及密钥托管问题。2020年,CHI等[17]提出的云辅助医疗物联网下的公钥认证可搜索加密方案仅支持单关键字搜索。文献[18]中基于身份的动态可搜索加密方案存在密钥托管问题。可以看出,上述方案都是基于单关键字搜索而设计的。2020年,LUO等[19]提出的基于连接关键字的实用化可搜索加密方案,解决了搜索结果不精确的问题,但其存在证书管理及密钥托管问题。上述所提方案都是基于单服务器所设计,存储和搜索都在一个服务器上完成,且没有对数据使用者身份的合法性进行验证。
针对上述方案单关键字搜索结果不精确和单服务器检索效率低等问题,本文提出一种基于无证书且指定使用者的多服务器多关键字可搜索加密方案。该方案使用多服务器来降低服务器负荷,采用多关键字技术使得搜索结果更精确。利用搜索服务器(Search Server,SS)对用户身份的合法性进行验证,通过用户身份及搜索服务器私钥来验证用户是否为指定使用者,若身份合法,则存储服务器(Cloud Server,CS)根据关键字返回相应密文,数据使用者使用私钥解密密文以获得明文。
1 预备知识
1.1 双线性映射
假设$ q $是一个大素数,$ {G}_{1} $和$ {G}_{2} $是2个阶为$ q $的循环群。若映射$ e:{G}_{1}\times {G}_{1}\to {G}_{2} $满足以下属性,则称其为双线性映射[20]:
1) 双线性。对于$ \forall g\in {G}_{1} $和$ x, y\in {Z}_{q}^{\mathrm{*}} $,满足$ e({g}^{x}, $ $ {g}^{y})=e{(g, g)}^{xy} $。
2) 非退化性。$ \exists g\in {G}_{1} $,满足$ e(g, g)\ne 1 $。
3) 可计算性。对于$ \forall g\in {G}_{1} $,存在一个有效的算法计算$ e(g, g) $。
1.2 困难问题假设
计算的双线性Diffie-Hellman(Computational Bilinear Diffie-Hellman,CBDH)问题[21]定义为:给定双线性对e:G1×G1→G2,四元组(g,ga,gb,gc)∈G1,其中,a,b,c∈Z$ {}_{q}^{\mathrm{*}} $为未知数,则计算e(g,g)abc是困难的。
2 加密方案框架
2.1 系统模型
本文所提方案包含5个不同的实体,分别为密钥生成中心(Key Generation Center,KGC)、存储服务器、搜索服务器、数据属主、数据用户(Data User,DU),系统模型如图 1所示。
5个实体的具体功能如下:
1) KGC:生成系统的公共参数以及数据属主、数据用户、搜索服务器的部分私钥。
2) 数据属主:首先将文档集密文$ C=\{{C}_{1}, {C}_{2}, \cdots , $ $ {C}_{n}\} $和相对应的文件索引集$ I=\{{I}_{1}, {I}_{2}, \cdots , {I}_{n}\} $上传到存储服务器,其次将关键字密文$ {C}_{{w}_{i}}(1\le i\le n) $和对应的文件索引集$ I=\{{I}_{1}, {I}_{2}, \cdots , {I}_{n}\} $上传到搜索服务器。
3) 数据用户:生成搜索陷门$ {T}_{W} $并发送给搜索服务器进行验证搜索,同时对搜索结果进行解密。
4) 存储服务器:存储数据属主上传的文档密文和对应的文件索引集。
5) 搜索服务器:对数据用户的身份进行验证,若为指定使用者,则根据数据用户发送的搜索陷门$ {T}_{{W}^{\text{'}}} $和数据属主上传的密文$ {C}_{W} $进行验证,若验证成功,将对应的(文件索引$ {I}_{i}(1\le i\le n) $,用户身份$ \mathrm{I}\mathrm{D} $)发送给存储服务器,存储服务器返回对应的密文给数据用户;否则,说明数据用户不是指定使用者,向其返回终止符"⊥"。
2.2 形式化定义
在形式上,本文所提方案由以下7个算法组成:
1) $ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p}\left(l\right)\to (s, \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}) $:输入安全参数$ l $,输出KGC的主密钥$ s $和公共参数$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $。
2) $ \mathrm{P}\mathrm{a}\mathrm{r}\mathrm{t}\mathrm{i}\mathrm{a}\mathrm{l}\mathrm{P}\mathrm{r}\mathrm{i}\mathrm{v}\mathrm{a}\mathrm{t}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, s, \mathrm{I}\mathrm{D})\to \left(D\right) $:输入$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $、$ s $以及数据属主、用户、搜索服务器的身份$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{O}}\mathrm{、}\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}\mathrm{、}\mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}} $,输出它们各自对应的部分私钥$ {D}_{\mathrm{D}\mathrm{O}}\mathrm{、}{D}_{\mathrm{D}\mathrm{U}}\mathrm{、}{D}_{\mathrm{S}\mathrm{S}} $。
3) $ \mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, \mathrm{I}\mathrm{D}, D)\to (\mathrm{P}\mathrm{K}, \mathrm{S}\mathrm{K}) $:输入$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{O}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}} $、$ {\mathrm{D}}_{\mathrm{D}\mathrm{O}} $、$ {\mathrm{D}}_{\mathrm{D}\mathrm{U}} $、$ {\mathrm{D}}_{\mathrm{S}\mathrm{S}} $,输出数据属主、用户及搜索服务器的公/私钥对$ (\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}, \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}) $、$ (\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}, $ $ \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}) $及$ (\mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}, \mathrm{S}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}) $。
4) $ \mathrm{E}\mathrm{n}\mathrm{c}\mathrm{r}\mathrm{y}\mathrm{p}\mathrm{t}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, W, \mathrm{I}\mathrm{D}, \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}})\to \left({C}_{W}\right) $:输入$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $、$ \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{O}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}} $、$ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}} $及关键字集$ W $,输出关键字密文$ {C}_{W} $。
5) $ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, W\text{'}, \mathrm{I}\mathrm{D}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}, \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}\to ({T}_{W\text{'}}) $:输入$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $、$ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}} $、$ \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}} $、$ \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{U}} $及关键字集$ {W}^{\text{'}} $,输出关键字陷门$ {T}_{{W}^{\text{'}}} $。
6) $ \mathrm{S}\mathrm{e}\mathrm{a}\mathrm{r}\mathrm{c}\mathrm{h}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, {C}_{\mathrm{I}\mathrm{D}}, {T}_{\mathrm{I}\mathrm{D}}, {C}_{W}, {T}_{{W}^{\text{'}}}) $$ \to \left({C}_{W}\right) $:输入$ {C}_{\mathrm{I}\mathrm{D}} $、$ {T}_{\mathrm{I}\mathrm{D}} $、$ {C}_{W} $、$ {T}_{{W}^{\text{'}}} $,输出关键字密文$ {C}_{W} $。
7) $ \mathrm{D}\mathrm{e}\mathrm{c}\mathrm{r}\mathrm{y}\mathrm{p}\mathrm{t}({C}_{W}, {x}_{\mathrm{D}\mathrm{U}}) $$ \to \left(F\right) $:输入$ {C}_{W} $和$ {x}_{\mathrm{D}\mathrm{U}} $,输出文件$ F $。
2.3 安全模型
由于本文方案是在无证书密码体制下所提出的,因此应考虑2个不同类型的敌手:
1) $ {A}_{1} $(恶意的内部服务器或外部攻击者)无法访问KGC的主密钥,但能替换用户公钥。
2) $ {A}_{2} $(诚实但好奇的拥有主密钥的KGC)能为用户生成部分私钥,但不允许替换公钥。
本文方案的安全模型由以下游戏定义,该游戏在挑战者$ C $和敌手$ {A}_{1} $、$ {A}_{2} $之间分别进行:
$ \mathrm{G}\mathrm{a}\mathrm{m}\mathrm{e} $:挑战者$ C $执行算法$ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p} $产生KGC的主密钥$ s $和系统的公共参数$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $。如果敌手$ A={A}_{1} $,则返回$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $;如果$ A={A}_{2} $,则返回$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $和$ s $。
$ \mathrm{H}\mathrm{a}\mathrm{s}\mathrm{h} $询问:敌手$ A $进行4个$ \mathrm{H}\mathrm{a}\mathrm{s}\mathrm{h} $询问,挑战者$ C $返回相应的$ \mathrm{H}\mathrm{a}\mathrm{s}\mathrm{h} $值;$ \mathrm{P}\mathrm{a}\mathrm{r}\mathrm{t}\mathrm{i}\mathrm{a}\mathrm{l}\mathrm{P}\mathrm{r}\mathrm{i}\mathrm{v}\mathrm{a}\mathrm{t}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y} $询问:敌手$ A $对身份$ \mathrm{I}{\mathrm{D}}_{I} $进行部分私钥询问时,挑战者$ C $向$ A $返回相应的部分私钥;$ \mathrm{S}\mathrm{e}\mathrm{c}\mathrm{r}\mathrm{e}\mathrm{t} $$ - $$ \mathrm{V}\mathrm{a}\mathrm{l}\mathrm{u}\mathrm{e}- $$ \mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $询问:敌手$ A $对身份$ \mathrm{I}{\mathrm{D}}_{I} $进行秘密值询问时,挑战者$ C $计算相应的秘密值给$ A $;$ \mathrm{P}\mathrm{u}\mathrm{b}\mathrm{l}\mathrm{i}\mathrm{c}\mathrm{K}\mathrm{e}\mathrm{y} $$ - $$ \mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $询问:敌手$ A $对身份$ \mathrm{I}{\mathrm{D}}_{I} $进行公钥询问时,挑战者$ C $计算相应的公钥给$ A $;$ \mathrm{R}\mathrm{e}\mathrm{a}\mathrm{p}\mathrm{l}\mathrm{a}\mathrm{c}\mathrm{e} $$ - $$ \mathrm{P}\mathrm{u}\mathrm{b}\mathrm{l}\mathrm{i}\mathrm{c}\mathrm{K}\mathrm{e}\mathrm{y} $询问:敌手$ A={A}_{1} $可以替换任何用户的公钥;$ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $$ - $$ \mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $询问:敌手$ A $对身份$ \mathrm{I}{\mathrm{D}}_{I} $的关键字$ w $进行陷门询问时,挑战者$ C $计算相应的陷门给$ A $。
$ \mathrm{C}\mathrm{h}\mathrm{a}\mathrm{l}\mathrm{l}\mathrm{e}\mathrm{n}\mathrm{g}\mathrm{e} $阶段:$ A $输出挑战关键字$ ({w}_{0}, {w}_{1}) $,挑战者$ C $随机选择$ b\in \left\{\mathrm{0, 1}\right\} $,并返回密文$ {C}_{wb} $。
$ \mathrm{M}\mathrm{o}\mathrm{r}\mathrm{e} $$ - $$ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $询问:$ A $可以对其他关键字$ {w}_{i} $进行陷门询问,但$ {w}_{i}\notin \{{w}_{0}, {w}_{1}\} $。
$ \mathrm{G}\mathrm{u}\mathrm{e}\mathrm{s}\mathrm{s} $阶段:$ A $输出猜测值$ {b}^{\text{'}}\in \left\{\mathrm{0, 1}\right\} $,如果$ {b}^{\text{'}}=b $,则赢得游戏。如果$ A $在上述游戏中获胜的优势$ {A}_{\mathrm{A}\mathrm{d}\mathrm{v}}=2\left|\mathrm{P}\mathrm{r}\right[b={b}^{\mathrm{\text{'}}}]-1/2| $是可忽略的,则称方案是抗IKGA语义安全的。
3 方案实现
3.1 方案的具体描述
方案的具体描述如下:
1) $ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p}\left(l\right)\to (s, \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}) $。输入安全参数$ l $,KGC执行以下步骤:
(1) 选择2个阶为$ q $的循环群$ {G}_{1} $和$ {G}_{2} $,双线性映射$ e:{G}_{1}\times {G}_{1}\to {G}_{2} $,$ g $为$ {G}_{1} $的生成元,随机选择$ s\in {Z}_{q}^{\mathrm{*}} $作为系统主密钥,计算$ {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}={g}^{s} $。
(2) 选取哈希函数:$ {H}_{1}:{\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}}\to {G}_{1}, {H}_{2}:{G}_{1}\to {\left\{\mathrm{0, 1}\right\}}^{l} $,$ {H}_{3}:{G}_{2}\to {\left\{\mathrm{0, 1}\right\}}^{l} $,$ {H}_{4}:{\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}}\times {\left\{\mathrm{0, 1}\right\}}^{l}\times {\left\{\mathrm{0, 1}\right\}}^{l}\times {\left\{\mathrm{0, 1}\right\}}^{l}\to {Z}_{q}^{\mathrm{*}} $,最后生成系统的公共参数为$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}=\{{G}_{1}, {G}_{2}, e, q, g, $ $ {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}, {H}_{1}, {H}_{2}, {H}_{3}, {H}_{4}\} $,且保留主密钥$ s $。
2) PartialPrivateKeyGen(params,s,ID)$ \to \left(D\right) $。KGC执行以下步骤:
(1) 数据属主向KGC输入身份$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{O}} $,KGC计算$ {Q}_{\mathrm{D}\mathrm{O}}={H}_{1}\left(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{O}}\right) $,$ {D}_{\mathrm{D}\mathrm{O}}={Q}_{\mathrm{D}\mathrm{O}}^{s} $,并将部分私钥$ {D}_{\mathrm{D}\mathrm{O}} $返回给数据属主。
(2) 数据用户向KGC输入身份$ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}} $,KGC计算$ {Q}_{\mathrm{D}\mathrm{U}}={H}_{1}\left(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}\right) $,$ {D}_{\mathrm{D}\mathrm{U}}={Q}_{\mathrm{D}\mathrm{U}}^{s} $,并将部分私钥$ {D}_{\mathrm{D}\mathrm{U}} $返回给数据用户。
(3) 搜索服务器向KGC输入身份$ \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}} $,KGC计算$ {Q}_{\mathrm{S}\mathrm{S}}={H}_{1}\left(\mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}\right) $,$ {D}_{\mathrm{S}\mathrm{S}}={Q}_{\mathrm{S}\mathrm{S}}^{s} $,并将部分私钥$ {D}_{\mathrm{S}\mathrm{S}} $返回给搜索服务器。
3) $ \mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, \mathrm{I}\mathrm{D}, {D}_{\mathrm{D}\mathrm{O}}, {D}_{\mathrm{D}\mathrm{U}}, {D}_{\mathrm{S}\mathrm{S}})\to (\mathrm{P}\mathrm{K}, \mathrm{S}\mathrm{K}) $。数据属主、数据用户及搜索服务器执行以下步骤:
(1) 数据属主随机选择秘密值$ {x}_{\mathrm{D}\mathrm{O}}\in {Z}_{q}^{\mathrm{*}} $,则完整私钥为$ \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}=\mathrm{ }({x}_{\mathrm{D}\mathrm{O}}, {D}_{\mathrm{D}\mathrm{O}}) $,计算公钥$ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}={g}^{{x}_{\mathrm{D}\mathrm{O}}} $。
(2) 数据用户随机选择秘密值$ {x}_{\mathrm{D}\mathrm{U}}\in {Z}_{q}^{\mathrm{*}} $,则完整私钥为$ \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}=\mathrm{ }({x}_{\mathrm{D}\mathrm{U}}, {D}_{\mathrm{D}\mathrm{U}}) $,计算公钥$ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}={g}^{{x}_{\mathrm{D}\mathrm{U}}} $。
(3) 搜索服务器随机选择秘密值$ {x}_{\mathrm{S}\mathrm{S}}\in {Z}_{q}^{\mathrm{*}} $,则完整私钥为$ \mathrm{S}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}=\mathrm{ }({x}_{\mathrm{S}\mathrm{S}}, {D}_{\mathrm{S}\mathrm{S}}) $,计算公钥$ \mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}={g}^{{x}_{\mathrm{S}\mathrm{S}}} $。
4) Encrypt(params,$ {w}_{i}, \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}, \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, $ $ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}) $→$ {C}_{W} $。输入文件索引集$ I\in \{\mathrm{1, 2}, \cdots , n\} $对应的关键字集$ W=\left\{{w}_{i}\right|i=\mathrm{1, 2}, \cdots , n\} $中的每个关键字$ w $,文件集$ F=\{{f}_{1}, {f}_{2}, \cdots , {f}_{n}\} $,数据属主执行以下步骤计算身份及关键词密文信息:
(1) 随机选择$ r\in {Z}_{q}^{\mathrm{*}} $。
(2) 计算下式:
$ {C}_{\mathrm{I}\mathrm{D}}={H}_{3}(e(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}{P}_{\mathrm{p}\mathrm{u}\mathrm{b}}\mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}, {Q}_{\mathrm{D}\mathrm{U}}{)}^{r{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, k)}), {C}_{w1}= $$ {g}^{r}, {C}_{w2}={H}_{3}\left(e\right(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}\cdot {P}_{\mathrm{p}\mathrm{u}\mathrm{b}}, {Q}_{\mathrm{D}\mathrm{U}}{)}^{r\mathop \sum \limits_{i=1}^{n}{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {w}_{i}, k)}) $,$ {C}_{w3}=F\mathrm{♁}(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}{)}^{r} $,其中,$ k={H}_{2}\left(\right(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}{)}^{{x}_{\mathrm{D}\mathrm{O}}}) $。
(3) 发送$ {C}_{W}=({C}_{\mathrm{I}\mathrm{D}}, {C}_{w1}, {C}_{w2}, {C}_{w3}) $给搜索服务器。
5) $ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r}(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, {{w}_{i}}^{\mathrm{\text{'}}}, \mathrm{S}{\mathrm{K}}_{\mathrm{D}\mathrm{U}})\to {T}_{{W}^{\text{'}}} $。关键字集合为$ {W}^{\text{'}}=\left\{{w}_{i}^{\mathrm{\text{'}}}\right|i=\mathrm{1, 2}, \cdots , n\} $,数据用户先计算身份及关键词陷门信息:$ {T}_{\mathrm{I}\mathrm{D}}={H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}^{\mathrm{\text{'}}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {k}^{\text{'}})({Q}_{\mathrm{D}\mathrm{U}}^{{x}_{\mathrm{D}\mathrm{U}}+s}\cdot \mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}) $,$ {T}_{w1}=\mathop \sum \limits_{i=1}^{n}{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {w}_{i}^{\mathrm{\text{'}}}, {k}^{\text{'}})\left({Q}_{\mathrm{D}\mathrm{U}}^{{x}_{\mathrm{D}\mathrm{U}+s}}\right), {T}_{w2}=e({T}_{w1}, $ $ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}) $,其中,$ {k}^{\text{'}}={H}_{2}\left(\right(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}{)}^{{x}_{\mathrm{D}\mathrm{U}}}) $,再将$ {T}_{{W}^{\text{'}}}=({T}_{\mathrm{I}\mathrm{D}}, {T}_{w1}, {T}_{w2}) $发送给搜索服务器。
6) $ \mathrm{S}\mathrm{e}\mathrm{a}\mathrm{r}\mathrm{c}\mathrm{h}\left(\mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}, {C}_{\mathrm{I}\mathrm{D}}, {T}_{\mathrm{I}\mathrm{D}}, {C}_{w2}, {T}_{w1}\right) $。搜索服务器根据数据用户上传的陷门,执行以下步骤:
(1) 身份验证。根据数据用户的身份,判断该用户是否为指定使用者,即验证$ {C}_{\mathrm{I}\mathrm{D}}={H}_{3}\left(e\right({g}^{r}, {T}_{\mathrm{I}\mathrm{D}}\left)\right) $是否成立,若等式成立,说明用户的身份合法,则进行第2步;否则,算法终止操作。
(2) 关键字匹配:判断$ {T}_{w{i}^{\text{'}}}\in {C}_{wi}(1\le i\le n) $,验证$ {C}_{w2}={H}_{3}\left(e\right({C}_{w1}, {T}_{w1}\left)\right) $是否成立,若等式成立,说明关键字匹配,则把关键字对应的(文件索引$ {I}_{i} $,用户身份$ \mathrm{I}\mathrm{D} $)发送给存储服务器,存储服务器向数据使用者返回对应的密文;否则,搜索服务器返回终止符"⊥"给数据用户。
7) $ \mathrm{D}\mathrm{e}\mathrm{c}\mathrm{r}\mathrm{y}\mathrm{p}\mathrm{t}({C}_{W}, {x}_{\mathrm{D}\mathrm{U}}) $。数据用户收到密文$ {C}_{W}=({C}_{w1}, {C}_{w3}) $后,利用私钥$ {x}_{\mathrm{D}\mathrm{U}} $进行解密获得文档$F = {C_{w3}} \oplus {({C_{w1}})^{{x_{{\rm{DU}}}}}}$。
3.2 方案的正确性分析
方案的正确性分析具体如下:
1) 搜索服务器验证数据用户的身份是否合法:
$ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{H}_{3}\left(e\right({g}^{r}, {T}_{\mathrm{I}\mathrm{D}}\left)\right)={H}_{3}\left(e\right({g}^{r}, {H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}^{\mathrm{\text{'}}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {k}^{\text{'}})\\({Q}_{\mathrm{D}\mathrm{U}}^{{x}_{\mathrm{D}\mathrm{U}}+s}\cdot \mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}})\left)\right) ={H}_{3}\left(e\right({g}^{{x}_{\mathrm{D}\mathrm{U}}+s}\cdot \mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}, {Q}_{\mathrm{D}\mathrm{U}}{)}^{r{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}^{\mathrm{\text{'}}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {k}^{\text{'}})})=\\{H}_{3}\left(e\right(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}\cdot {P}_{\mathrm{p}\mathrm{u}\mathrm{b}}\cdot \mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}, {Q}_{\mathrm{D}\mathrm{U}}{)}^{r{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}^{\mathrm{\text{'}}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {k}^{\text{'}})}) $
|
$ \mathrm{因}\mathrm{为}{k}^{\text{'}}={H}_{2}\left(\right(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}{)}^{{x}_{\mathrm{D}\mathrm{U}}})={H}_{2}(\left({g}^{{x}_{\mathrm{D}\mathrm{O}}}{)}^{{x}_{\mathrm{D}\mathrm{U}}}\right)={H}_{2}\left(\right({g}^{{x}_{\mathrm{D}\mathrm{U}}}{)}^{{x}_{\mathrm{D}\mathrm{O}}})= $$ k $,$ {C}_{\mathrm{I}\mathrm{D}}={H}_{3} $$ \left(e\right(\mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{U}}\cdot {P}_{\mathrm{p}\mathrm{u}\mathrm{b}}\cdot \mathrm{P}{\mathrm{K}}_{\mathrm{S}\mathrm{S}}, {Q}_{\mathrm{D}\mathrm{U}}{)}^{r{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}, \mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, k)}) $,所以等式$ {C}_{\mathrm{I}\mathrm{D}}={H}_{3}\left(e\right({g}^{r}, {T}_{\mathrm{I}\mathrm{D}}\left)\right) $成立,证毕。
2) 验证关键字是否匹配,证明等式$ {C}_{w2}={H}_{3}\left(e\right({C}_{w1}, {T}_{w1}\left)\right) $的过程与上述过程类似。如果2个等式都成立,则说明$ {T}_{w{i}^{\text{'}}}\in {C}_{wi} $,存储服务器根据关键字返回密文给数据使用者;否则,输出终止符"⊥"。
搜索服务器验证身份是否合法及关键字匹配算法描述如下:
算法 1 搜索服务器验证身份及关键字匹配算法
$ \begin{array}{l}\mathrm{i}\mathrm{f}{\mathrm{C}}_{\mathrm{I}\mathrm{D}}={\mathrm{H}}_{3}\left(\mathrm{e}\right({\mathrm{g}}^{\mathrm{r}}, {\mathrm{T}}_{\mathrm{I}\mathrm{D}}\left)\right)\\ \mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}=\mathrm{I}{\mathrm{D}}_{\mathrm{D}\mathrm{U}}^{\mathrm{\text{'}}};\\ \mathrm{e}\mathrm{l}\mathrm{s}\mathrm{e}\\ \mathrm{r}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{r}\mathrm{n}\mathrm{ }\perp ;\\ \mathrm{e}\mathrm{l}\mathrm{s}\mathrm{e}\mathrm{ }\mathrm{i}\mathrm{f}{\mathrm{C}}_{\mathrm{w}2}={\mathrm{H}}_{3}\left(\mathrm{e}\right({\mathrm{C}}_{\mathrm{w}1}, {\mathrm{T}}_{{\mathrm{W}}^{\mathrm{\text{'}}}}\left)\right)\\ {\mathrm{T}}_{{\mathrm{W}}^{\mathrm{\text{'}}}}\in {\mathrm{C}}_{\mathrm{W}};\\ \mathrm{r}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{r}\mathrm{n}{\mathrm{C}}_{\mathrm{W}}=({\mathrm{C}}_{\mathrm{w}1}, {\mathrm{C}}_{\mathrm{w}3})\\ \mathrm{e}\mathrm{l}\mathrm{s}\mathrm{e}\\ \mathrm{r}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{r}\mathrm{n}\mathrm{ }\perp ;\end{array} $
|
3) 数据使用者使用私钥$ {x}_{\mathrm{D}\mathrm{U}} $解密关键字密文获得文档$ F $:
$
F = {C_{w3}} \oplus {({C_{w1}})^{{x_{{\rm{DU}}}}}} = {C_{w3}} \oplus {({g^r})^{{x_{{\rm{DU}}}}}} = {C_{w3}} \oplus {({\rm{P}}{{\rm{K}}_{{\rm{DU}}}})^r}
$
|
4 安全性证明
定理 1 如果CBDH问题是困难的,则本文方案在随机预言机模型下抵抗关键字猜测攻击是语义安全的。
定理1由以下2个引理可以证明:
引理 1 若存在敌手$ {A}_{1} $能够在$ t $时间内以$ \epsilon $的优势攻破本文方案,则存在一个算法$ C $能够在$ O\left(t\right) $时间内以$ {\epsilon }^{\text{'}}\ge \left(\frac{1}{e{q}_{1}{q}_{T}}\right){\left(1-\frac{1}{{q}_{1}}\right)}^{{q}_{P}} $的概率解决CBDH问题。其中:$ {q}_{1}\mathrm{、}{q}_{P} $和$ {q}_{T} $分别表示对$ {H}_{1}\mathrm{、} $$ \mathrm{P}\mathrm{a}\mathrm{r}\mathrm{t}\mathrm{i}\mathrm{a}\mathrm{l}\mathrm{P}\mathrm{r}\mathrm{i}\mathrm{v}\mathrm{a}\mathrm{t}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y} $和$ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $询问的最大查询数。
证明 已知$ (g, {g}^{a}, {g}^{b}, {g}^{c}) $求解$ e{(g, g)}^{abc} $为CBDH问题实例。算法$ C $模拟游戏中的挑战者与敌手$ {A}_{1} $进行如下交互:$ C $输入安全参数$ l $执行$ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p} $算法生成参数$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}=\{{G}_{1}, {G}_{2}, e, q, g, {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}, {H}_{1}, {H}_{2}, {H}_{3}, {H}_{4}\} $,其中,$ {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}={g}^{a} $,再随机选择$ \mathrm{I}{\mathrm{D}}_{I} $作为挑战者身份,最后向敌手$ {A}_{1} $发送公共参数$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $。
1) $ {H}_{1} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法C保存一个由$ (\mathrm{I}{\mathrm{D}}_{i}, {\beta }_{\mathrm{I}{\mathrm{D}}_{i}}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}) $组成的列表$ {L}_{H1} $。敌手询问身份$ \mathrm{I}{\mathrm{D}}_{i} $时,如果$ {L}_{H1} $包含$ (\mathrm{I}{\mathrm{D}}_{i}, {\beta }_{\mathrm{I}{\mathrm{D}}_{i}}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}) $,则直接输出$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}} $;否则,$ C $随机选择$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}}\in {Z}_{q}^{\mathrm{*}} $,将$ (\mathrm{I}{\mathrm{D}}_{i}, {\beta }_{\mathrm{I}{\mathrm{D}}_{i}}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}) $插入到$ {L}_{H1} $,并返回$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}} $。
2) $ {H}_{2} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法$ C $保存一个由$ ({v}_{i}, {k}_{i}) $组成的列表$ {L}_{H2} $。敌手询问$ {H}_{2}\left({v}_{i}\right) $时,如果$ {L}_{H2} $包含$ ({v}_{i}, {k}_{i}) $,则直接输出$ {k}_{i} $;否则,随机选择$ {k}_{i}\in {\left\{\mathrm{0, 1}\right\}}^{l} $,将$ ({v}_{i}, {k}_{i}) $插入到$ {L}_{H2} $,并返回$ {k}_{i} $。
3) $ {H}_{3} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法$ C $保存一个由$ ({z}_{i}, {h}_{3i}) $组成的列表$ {L}_{H3} $。敌手询问$ {H}_{3}\left({z}_{i}\right) $时,如果$ {L}_{H3} $包含$ ({z}_{i}, {h}_{3i}) $,则直接输出$ {h}_{3i} $;否则,随机选择$ {h}_{3i}\in {\left\{\mathrm{0, 1}\right\}}^{l} $,将$ ({z}_{i}, {h}_{3i}) $插入到$ {L}_{H3} $,并返回$ {h}_{3i} $。
4) $ {H}_{4} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法$ C $保存一个由$ ({w}_{i}, {u}_{i}, {c}_{i}, {H}_{4}^{i}) $组成的列表$ {L}_{H4} $。敌手询问关键字$ {w}_{i} $时,如果$ {L}_{H4} $包含$ ({w}_{i}, {u}_{i}, {c}_{i}, {H}_{4}^{i}) $,则直接输出$ {H}_{4}^{i} $;否则,挑战者$ C $随机选择$ {c}_{i}\in \left\{\mathrm{0, 1}\right\} $并设$ \mathrm{P}\mathrm{r}\left[{c}_{i}=0\right]=\varsigma $,挑战者$ C $再随机选择$ {u}_{i}\in {Z}_{q}^{\mathrm{*}} $,并且设置$ {H}_{4}^{i}=(1-{c}_{i}){g}^{b}+{g}^{{u}_{i}} $,最后将$ ({w}_{i}, {u}_{i}, {c}_{i}, {H}_{4}^{i}) $插入到表$ {L}_{H4} $并返回$ {H}_{4}^{i} $。
5) $ \mathrm{P}\mathrm{a}\mathrm{r}\mathrm{t}\mathrm{i}\mathrm{a}\mathrm{l}\mathrm{P}\mathrm{r}\mathrm{i}\mathrm{v}\mathrm{a}\mathrm{t}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法$ C $保存一个由$ (\mathrm{I}{\mathrm{D}}_{i}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}}) $组成的表$ {L}_{\mathrm{P}\mathrm{P}} $。$ {A}_{1} $对$ \mathrm{I}{\mathrm{D}}_{i} $进行部分私钥询问时,随机选择$ {\beta }_{\mathrm{I}\mathrm{D}i}, {D}_{\mathrm{I}{\mathrm{D}}_{i}}\in {Z}_{q}^{\mathrm{*}} $,计算$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}}=\frac{{g}^{{D}_{\mathrm{I}{\mathrm{D}}_{i}}}}{{P}_{\mathrm{p}\mathrm{u}\mathrm{b}}} $,将$ (\mathrm{I}{\mathrm{D}}_{i}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {\beta }_{\mathrm{I}{\mathrm{D}}_{i}}) $和$ (\mathrm{I}{\mathrm{D}}_{i}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}}) $分别插入到表$ {L}_{H1} $和$ {L}_{\mathrm{P}\mathrm{P}} $,并返回$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}} $。
6) $ \mathrm{S}\mathrm{e}\mathrm{c}\mathrm{r}\mathrm{e}\mathrm{t} $$ -\mathrm{V}\mathrm{a}\mathrm{l}\mathrm{u}\mathrm{e} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法$ C $保存列表$ {L}_{\mathrm{S}\mathrm{V}} $。$ {A}_{1} $对$ \mathrm{I}{\mathrm{D}}_{i} $进行秘密值询问时,如果$ \mathrm{I}{\mathrm{D}}_{i}=\mathrm{I}{\mathrm{D}}_{I} $,则挑战者$ C $计算$ \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}={g}^{c} $,并将$ (\mathrm{I}{\mathrm{D}}_{i}, \perp , \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}) $插入到$ {L}_{\mathrm{S}\mathrm{V}} $;否则,挑战者$ C $随机选择$ {x}_{\mathrm{I}{\mathrm{D}}_{i}}\in {Z}_{q}^{\mathrm{*}} $,计算$ \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}={g}^{{x}_{\mathrm{I}{\mathrm{D}}_{i}}} $,并将$ (\mathrm{I}{\mathrm{D}}_{i}, \perp , \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}) $插入到$ {L}_{\mathrm{S}\mathrm{V}} $,返回$ {x}_{\mathrm{I}{\mathrm{D}}_{i}} $。
7) $ \mathrm{P}\mathrm{u}\mathrm{b}\mathrm{l}\mathrm{i}\mathrm{c}\mathrm{K}\mathrm{e}\mathrm{y} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}y $:$ {A}_{1} $对$ \mathrm{I}{\mathrm{D}}_{i} $进行公钥询问时,挑战者$ C $在表$ {L}_{\mathrm{S}\mathrm{V}} $中查找$ (\mathrm{I}{\mathrm{D}}_{i}, {x}_{\mathrm{I}{\mathrm{D}}_{i}}, \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}) $,返回$ \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}} $。
8) $ \mathrm{R}\mathrm{e}\mathrm{a}\mathrm{p}\mathrm{l}\mathrm{a}\mathrm{c}\mathrm{e} $$ -\mathrm{P}\mathrm{u}\mathrm{b}\mathrm{l}\mathrm{i}\mathrm{c}\mathrm{K}\mathrm{e}\mathrm{y} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:$ {A}_{1} $对身份$ \mathrm{I}{\mathrm{D}}_{i} $进行公钥替换询问时,挑战者$ C $用$ (\mathrm{I}{\mathrm{D}}_{i}, \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}^{\text{'}}) $替换$ (\mathrm{I}{\mathrm{D}}_{i}, \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}}) $,并设置$ ({D}_{\mathrm{I}{\mathrm{D}}_{i}}=\perp , {x}_{\mathrm{I}{\mathrm{D}}_{i}}=\perp ) $。
9) $ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:$ {A}_{1} $对$ (\mathrm{I}{\mathrm{D}}_{i}, {w}_{i}) $进行陷门询问时,挑战者$ C $在列表$ {L}_{H4} $中查找$ ({w}_{i}, {u}_{i}, {c}_{i}, {H}_{4}^{i}) $,如果$ {c}_{i}=0 $,则挑战者$ C $终止模拟;否则,$ C $通过公钥询问得到$ \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{i}} $,在表$ {L}_{H1} $中查找$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}} $并计算$ {T}_{w1}=\mathop \sum \limits_{i=1}^{n}{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {\mu }_{i}, {k}^{\text{'}})\left({Q}_{\mathrm{D}\mathrm{U}}^{{x}_{\mathrm{D}\mathrm{U}}+s}\right), {T}_{w2}=e({T}_{w1}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}) $,返回$ {T}_{{W}^{\text{'}}}=({T}_{w1}, {T}_{w2}) $。
10) $ \mathrm{C}\mathrm{h}\mathrm{a}\mathrm{l}\mathrm{l}\mathrm{e}\mathrm{n}\mathrm{g}\mathrm{e} $:$ {A}_{1} $输出挑战$ ({w}_{0}, {w}_{1}, \mathrm{I}{\mathrm{D}}^{\mathrm{*}}) $,如果$ \mathrm{I}{\mathrm{D}}^{\mathrm{*}}\ne \mathrm{I}{\mathrm{D}}_{i} $,则挑战者$ C $终止模拟;否则,$ C $在列表$ {L}_{H4} $中查找$ ({w}_{0}, {u}_{0}, {c}_{0}, {H}_{4}^{0}) $和$ ({w}_{1}, {u}_{1}, {c}_{1}, {H}_{4}^{1}) $,如果$ {c}_{0}={c}_{1} $,则终止模拟,否则$ C $随机选择$ b\in \left\{\mathrm{0, 1}\right\} $、$ {c}_{b}=0 $以及$ r\in {Z}_{q}^{\mathrm{*}}, D\in {G}_{1} $,返回密文$ {C}_{W}=(D, {g}^{r}) $。
11) $ \mathrm{M}\mathrm{o}\mathrm{r}\mathrm{e} $$ -\mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:$ {A}_{1} $可以对其他关键字$ {w}_{i} $进行陷门询问,但$ {w}_{i}\notin \{{w}_{0}, {w}_{1}\} $。
12) $ \mathrm{G}\mathrm{u}\mathrm{e}\mathrm{s}\mathrm{s} $:$ {A}_{1} $输出猜测值$ {b}^{\text{'}}\in \left\{\mathrm{0, 1}\right\} $,按如下方式计算$ e{(g, g)}^{abc} $。
$ \frac{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {P}_{\mathrm{p}\mathrm{u}\mathrm{b}}{)}^{b+{u}_{i}}}{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {P}_{\mathrm{p}\mathrm{u}\mathrm{b}}{)}^{{u}_{i}}}=e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+ {Q}_{\mathrm{D}\mathrm{O}} \cdot {g}^{a}{)}^{b} $
|
$ \frac{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{a}{)}^{b}}{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{a})}=e({g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{a}{)}^{b}\\\frac{e({g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{a}{)}^{b}}{e({g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}})}=e({g}^{c}, {g}^{a}{)}^{b}=e{(g, g)}^{abc} $
|
引理 2 若存在敌手$ {A}_{2} $能够在$ t $时间内以$ \epsilon $的优势攻破本文方案,则存在算法$ C $能够在$ O\left(t\right) $时间内以$ \epsilon \text{'}\ge \left(\frac{2\epsilon }{e{q}_{T}{q}_{{H}_{I}}}\right) $的概率解决CBDH问题。
证明 已知$ (g, {g}^{a}, {g}^{b}, {g}^{c}) $求解$ e{(g, g)}^{abc} $为CBDH问题实例。算法$ C $模拟游戏中的挑战者与敌手$ {A}_{2} $进行如下交互:$ C $输入安全参数$ l $执行$ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p} $算法生成$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s}=\{{G}_{1}, {G}_{2}, e, q, g, {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}, {H}_{1}, {H}_{2}, {H}_{3}, {H}_{4}\} $。其中,$ {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}={g}^{s} $,设置$ \mathrm{P}{\mathrm{K}}_{\mathrm{I}{\mathrm{D}}_{I}}={g}^{a} $,$ \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}={g}^{b} $,再随机选择$ \mathrm{I}{\mathrm{D}}_{I} $作为挑战者身份,最后向敌手$ {A}_{2} $发送$ \mathrm{p}\mathrm{a}\mathrm{r}\mathrm{a}\mathrm{m}\mathrm{s} $。
1) $ {H}_{1} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:挑战者$ C $与敌手$ {A}_{2} $的$ {H}_{1} $询问过程同引理1。
2) $ {H}_{2} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:挑战者$ C $与敌手$ {A}_{2} $的$ {H}_{2} $询问过程同引理1。
3) $ {H}_{3} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:挑战者$ C $与敌手$ {A}_{2} $的$ {H}_{3} $询问过程同引理1。
4) $ {H}_{4} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:挑战者$ C $与敌手$ {A}_{2} $的$ {H}_{4} $询问过程同引理1。
5) $ \mathrm{P}\mathrm{a}\mathrm{r}\mathrm{t}\mathrm{i}\mathrm{a}\mathrm{l}\mathrm{P}\mathrm{r}\mathrm{i}\mathrm{v}\mathrm{a}\mathrm{t}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:算法$ C $保存一个由$ (\mathrm{I}{\mathrm{D}}_{i}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}}) $组成的表$ {L}_{\mathrm{P}\mathrm{P}} $,$ {A}_{1} $对$ \mathrm{I}{\mathrm{D}}_{i} $进行部分私钥询问时,随机选择$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}}\in {Z}_{q}^{\mathrm{*}} $,计算$ {D}_{\mathrm{I}{\mathrm{D}}_{i}}={g}^{{Q}_{\mathrm{I}{\mathrm{D}}_{i}}} $,将$ (\mathrm{I}{\mathrm{D}}_{i}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}}) $插入到表$ {L}_{\mathrm{P}\mathrm{P}} $中,并返回$ {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}} $。
6) $ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:敌手$ {A}_{1} $对$ (\mathrm{I}{\mathrm{D}}_{i}, {w}_{i}) $进行陷门询问时,挑战者$ C $在列表$ {L}_{H4} $中查找$ ({w}_{i}, {u}_{i}, {c}_{i}, {H}_{4}^{i}) $,如果$ {c}_{i}=0 $,则挑战者$ C $终止模拟;否则,挑战者$ C $在表$ {L}_{\mathrm{P}\mathrm{P}} $中查找$ (\mathrm{I}{\mathrm{D}}_{i}, {Q}_{\mathrm{I}{\mathrm{D}}_{i}}, {D}_{\mathrm{I}{\mathrm{D}}_{i}}) $并计算$ {T}_{w1}=\mathop \sum \limits_{i=1}^{n}{H}_{4}(\mathrm{I}{\mathrm{D}}_{\mathrm{C}\mathrm{S}}, \mathrm{I}{\mathrm{D}}_{\mathrm{S}\mathrm{S}}, {\mu }_{i}, {k}^{\text{'}})\left({Q}_{\mathrm{D}\mathrm{U}}^{{x}_{\mathrm{D}\mathrm{U}}+s}\right), {T}_{w2}=e({T}_{w1}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {P}_{\mathrm{P}\mathrm{u}\mathrm{b}}) $,返回$ {T}_{{W}^{\text{'}}}=({T}_{w1}, {T}_{w2}) $。
7) $ \mathrm{C}\mathrm{h}\mathrm{a}\mathrm{l}\mathrm{l}\mathrm{e}\mathrm{n}\mathrm{g}\mathrm{e} $:证明过程同引理1。
8) $ \mathrm{M}\mathrm{o}\mathrm{r}\mathrm{e} $$ -\mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r} $$ -\mathrm{q}\mathrm{u}\mathrm{e}\mathrm{r}\mathrm{y} $:证明过程同引理1。
9) $ \mathrm{G}\mathrm{u}\mathrm{e}\mathrm{s}\mathrm{s} $:$ {A}_{2} $输出猜测值$ {b}^{\text{'}}\in \left\{\mathrm{0, 1}\right\} $,按如下方式计算$ e{(g, g)}^{abc} $。
$ \frac{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s}{)}^{c+{u}_{i}}}{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s}{)}^{{u}_{i}}}=e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{c}, \mathrm{P}{\mathrm{K}}_{\mathrm{D}\mathrm{O}}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s}{)}^{c} $
|
$ \frac{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s}{)}^{c}}{e({g}^{{D}_{\mathrm{I}{\mathrm{D}}_{I}}}+{g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s})}=e({g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s}{)}^{b} $
|
$ \frac{e({g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}}\cdot {g}^{s}{)}^{b}}{e({g}^{a}, {g}^{b}+{Q}_{\mathrm{D}\mathrm{O}})}=e({g}^{a}, {g}^{b}{)}^{c}=e{(g, g)}^{abc} $
|
5 性能分析
将本文方案与文献[8]方案、文献[10]方案、文献[13]方案在计算开销、功能及效率方面进行性能对比。其中:$ {T}_{p} $表示双线性对运算的运行时间;$ {T}_{E} $表示指数运算的运行时间;$ {T}_{M} $表示点乘运算的运行时间。从表 1可以看出,本文方案在关键字加密及搜索验证阶段的性能优于其他3个方案,且其在支持多服务器多关键字搜索的同时能够抵抗IKGA,安全性高于对比方案。
表 1
(Table 1)
表 1 4种方案的性能对比结果
Table 1 Performance comparison results of four schemes
方案 |
关键字加密 |
搜索验证 |
抗 IKGA |
支持 多关键字 |
支持多服务器 |
文献[8]方案 |
$ {T}_{E}+4{T}_{M}+7{T}_{p} $ |
$ 2{T}_{M}+3{T}_{p} $ |
× |
× |
× |
文献[10]方案 |
$ {T}_{E}+4{T}_{M}+5{T}_{p} $ |
$ {T}_{M}+3{T}_{P} $ |
× |
× |
× |
文献[13]方案 |
$ 3{T}_{E}+{T}_{M}+2{T}_{p} $ |
$ 3{T}_{p} $ |
√ |
× |
× |
本文方案 |
$ 2{T}_{E}+2{T}_{M}+2{T}_{p} $ |
$ 2{T}_{p} $ |
√ |
√ |
√ |
|
下载CSV
表 1 4种方案的性能对比结果
Table 1 Performance comparison results of four schemes
|
在以笔记本电脑(Windows 7(64位)处理器Intel®CoreTMi5CPU@2.3 GHz)为实验平台、Visual C++6.0为编译软件的环境下,基于0.4.7的PBC库,将本文方案与文献[8]方案、文献[10]方案的关键字加密及搜索验证阶段进行效率对比分析,关键字个数选取为[1, 10, 20, 30, 40, 50],对比结果如图 2、图 3所示。
从图 2可以看出,本文方案和文献[8]方案、文献[10]方案的运行时间在关键字加密阶段均随着关键字个数的增加而增加,但本文方案所使用时间明显低于其他2个方案。从图 3可以看出,3种方案的运行时间在搜索验证阶段均随着查询关键字个数的增加而不断增加,即使本文方案添加了多服务器,但效率还是高于其他2个方案。因此,本文方案在综合性能上具有明显优势。
6 结束语
本文在无证书密码体制下提出一种指定使用者的多服务器多关键字可搜索加密方案,该方案使用多服务器提高用户检索密文的速度,采用多关键字技术使搜索结果更加精确,搜索服务器可以验证数据用户身份的合法性。本文在随机预言机模型下证明了该方案能够抵抗内外关键字猜测攻击,同时,理论分析和实验结果表明,本文方案具有较高的运算效率。下一步将在标准模型下探索实现更加高效并指定使用者的多服务器多关键字可搜索加密方案。