重加密可验证性:如何检测恶意活动
1. 引言
在普通的代理重加密(PRE)方案中,代理通常被建模为半可信方,一般假设其会诚实地执行重加密过程。这意味着我们需要对代理给予较高程度的信任,然而对于某些PRE应用场景,如基于云的文件共享系统,这种高信任度可能并不理想。因此,我们致力于研究一种机制,以降低PRE系统中对代理的信任程度。
以云存储服务为例,这是PRE的主要应用之一。用户会将加密数据 $c$ 存储在云端。PRE提供了一种便捷的方式,让用户能够与他人共享云端的加密数据。如果数据 $c$ 的所有者(如用户A)想与用户B共享数据,只需将重加密密钥 $rk_{A→B}$ 交给云管理器,然后离线即可。当用户B向云管理器请求数据时,云管理器会将 $c$ 转换为重加密密文 $\tilde{c}$,用户B可以对其进行解密。
但在这种情况下,用户B如何确定 $\tilde{c}$ 确实是 $c$ 的重加密结果呢?能否检测云管理器(代理)是否有不当行为?普通的PRE方案并不要求支持检查原始密文 $c$ 和重加密密文 $\tilde{c}$ 之间关系的功能(若用户A将其私钥透露给用户B,B可以检查这种关系,但这显然不可取)。因此,若存在一种PRE方案,能让重加密密文的接收者(如本例中的用户B)在无需其他实体帮助的情况下,高效地检查原始密文和重加密密文之间的关系,将是非常理想的。
1.1 我们的贡献
我们为PRE引入了一种新功能,称为重加密可验证性。在具有重加密可验证性的PRE方案(简称可验证PRE,即VPRE)中,重加密密文的接收者可以验证所接收的密文是否由代理从原始密文正确转换而来,从而检测代理的非法活动。我们甚至期望重加密可验证性的存在能够抑制代理的非法活动,并且该功能使我们能够降低对代理的信任程度。
我们通过在(单跳、单向)PRE的语法中引入一种新算法——重加密验证算法,实现了重加密可验证性。该算法以两个密文 $c$ 和 $\tilde{c}$、接收者B的私钥 $sk_B$ 以及另一个用户A的公钥 $pk_A$ 作为输入,能够判断 $\tilde{c}$ 是否是使用将用户A的密文转换为用户B的密文的重加密密钥从 $c$ 转换而来。需要强调的是,该算法不仅需要重加密密文 $\tilde{c}$,还需要(候选)原始密文 $c$(而通常解密重加密密文时,不需要原始密文 $c$)。这种情况在我们前面介绍的PRE应用中是很自然的。
我们对VPRE方案的安全模型进行了形式化定义。特别是,为了使重加密验证算法有意义,除了普通的选择密文(CCA)安全性(针对原始/转换后的密文),我们还引入了一种新的安全概念——健全性。我们的CCA安全模型基于Hanaoka等人使用的模型,并进行了扩展,以考虑重加密验证算法的存在。为了与普通PRE(没有重加密验证算法)的模型实现“向后兼容”,我们证明了在我们的模型中安全的VPRE方案,在Hanaoka等人的模型中通常也作为PRE方案是安全的。
我们还证明了Hanaoka等人的PRE方案(简称“HKK+”)可以扩展为VPRE方案(简称“eHKK+”),方法是为HKK+方案添加专门的重加密验证算法。为了证明VPRE方案eHKK+的安全性,我们需要底层阈值公钥加密(TPKE)方案具有我们称为强平滑性的属性(本质上与文献中以 $\gamma$-一致性命名引入的概念相同)。自然的TPKE方案通常满足这一属性,因此这并不是一个很强的假设。
1.2 简单方法及其问题
有人可能认为,通过在PRE方案中使用签名方案(即考虑代理重“签密”方案)可以解决检查代理不诚实行为的问题,但我们认为这种方法不可行。
具体来说,考虑发送者持有签名方案密钥对的情况,以及典型的“先签名后加密”风格的代理重签密方案构造,即先对明文进行签名,然后将明文和签名一起用PRE方案加密生成密文。在这种代理重签密方案中,重加密密文的接收者验证的是原始明文未被修改且确实由发送者生成,但无法验证转换后的密文是否是代理重加密的结果。例如,这种构造容易受到以下攻击:发送者向代理生成多个密文,代理对其中一个进行重加密并发送给接收者。接收者可能会发现从接收到的密文中恢复的明文确实来自发送者,但无法确定代理重加密的是哪个密文(甚至无法确定接收到的密文是否是其中一个密文的重加密结果)。
在“先加密后签名”风格的构造中,即发送者先对明文进行加密,然后对密文生成签名,情况更糟,因为附加在原始密文上的签名对于重加密密文将不再是有效的签名。此外,这些代理重签密风格的方法还存在一个潜在缺点,即接收者需要知道生成原始密文的发送者,而在我们的VPRE模型(以及普通PRE方案)中这并非必要,这可能会成为(V)PRE某些应用的障碍。
综上所述,代理重签密风格的方法所实现的功能与我们在本文中实现的功能(即检测代理不诚实行为的可验证性)是非常不同的属性,一种方法无法解决另一种方法的问题。
1.3 安全定义所基于的安全模型选择
我们的VPRE定义基于Hanaoka等人采用的PRE定义。他们的选择密文安全性定义是PRE文献中最强的定义之一。值得注意的是,除了涵盖选择密文安全性(非可重放变体),他们的安全模型不假设所谓的密钥知识(KOSK)假设,即在该假设中,攻击者可以使用受损用户的任何公钥,而无需透露相应的私钥。KOSK假设在涉及多个用户的密码学原语的安全模型中通常会出现(如多接收者PKE、多签名),但它不太符合现实情况,并且有一些对该假设的批评。据我们所知,Hanaoka等人的模型是PRE中唯一不假设KOSK假设的安全定义,因此我们的安全定义基于他们的模型。
据我们所知,大多数无随机预言机的流行PRE方案仅在KOSK假设下是安全的。因此,我们认为这些方案在我们的模型中无法实现重加密可验证性。然而,我们并不排除这些现有PRE方案可以扩展为VPRE方案,并在从其原始安全模型适当扩展的安全模型中被证明是安全的可能性。特别是,基于配对的方案似乎允许对重加密密文和原始密文之间进行强有效性检查,我们认为它们是VPRE方案的良好候选者。是否能将这些现有PRE方案扩展为VPRE方案,并在适当扩展的安全模型中证明其安全性,将作为我们未来的工作。
1.4 相关工作
我们简要回顾相关工作:
- Mambo和Okamoto引入了代理解密的概念。
- Ivan和Dodis提出了基于顺序多重加密的代理密码学通用构造。
- Blaze、Bleumer和Strauss提出了PRE密码系统的概念,并基于ElGamal PKE方案提出了第一个双向PRE方案。
- Ateniese等人、Canetti和Hohenberger、Libert和Vergnaud以及Chow等人提出了具有不同特性的PRE方案。
- Shao和Cao提出了一种无配对的PRE方案,但后来Zhang等人指出该方案在Libert - Vergnaud安全模型中不安全,即不提供主密钥安全性。
- Matsuda等人提出了一种无配对的PRE方案,但Weng、Zhao和Hanaoka指出该方案不具有选择密文安全性。
- Hanaoka等人提出了PRE中CCA安全的新定义,并展示了单向PRE的通用构造。
- Isshiki等人提出了一种CCA安全的PRE方案。
- Kirshanova提出了一种基于格的PRE方案。
据我们所知,之前的工作均未考虑重加密可验证性。
1.5 预备知识
1.5.1 基本符号
- $\mathbb{N}$ 表示所有自然数的集合,对于 $n \in \mathbb{N}$,我们定义 $[n] := {1, \ldots, n}$。
- “$x \leftarrow y$” 表示:若 $y$ 是有限集,$x$ 从 $y$ 中均匀随机选取;若 $y$ 是函数或算法,$x$ 是 $y$ 的输出;否则,将 $y$ 赋值给 $x$。
- “$x | y$” 表示 $x$ 和 $y$ 的连接。
- “$|x|$” 表示:若 $x$ 是有限集,为集合的大小;若 $x$ 是字符串,为 $x$ 的比特长度。
- “PPT” 代表概率多项式时间。若 $A$ 是概率算法,则 $y \leftarrow A(x; r)$ 表示 $A$ 以 $x$ 为输入,使用 $r$ 作为随机性,计算输出 $y$。
- $k$ 表示安全参数。若函数 $f(k) : \mathbb{N} \to [0, 1]$ 对于所有正多项式 $p$ 和所有足够大的 $k \in \mathbb{N}$,都有 $f(k) < 1/p(k)$,则称 $f(k)$ 是可忽略的。
1.5.2 可重拆分阈值公钥加密
我们回顾可重拆分阈值PKE的定义。这是TPKE的一个特殊类别,其中私钥可以多次拆分,只要在相同拆分下受损私钥份额的数量小于阈值,方案的安全性就能得到保证。第一个可重拆分TPKE方案由Hanaoka等人提出,最近Ohata等人又提出了另外三种方案(目前所有方案均基于双线性映射)。
形式上,可重拆分TPKE方案由以下六个PPT算法组成:
|算法|描述|
| ---- | ---- |
|$TKG$|密钥生成算法,以 $1^k$、$n$ 和 $t$($0 < t \leq n$)为输入,输出私钥 $tsk$ 和公钥 $tpk$。|
|$TEnc$|加密算法,以 $tpk$ 和明文 $m$ 为输入,输出密文 $c$。|
|$TSplit$|密钥拆分算法,以 $tsk$ 为输入,输出 $n$ 个私钥份额 $tsk_1, \ldots, tsk_n$ 和验证密钥 $tvk$。|
|$TShDec$|份额解密算法,以 $tpk$、$TSplit(tsk)$ 输出的私钥份额 $tsk_i$($i \in [n]$)和密文 $c$ 为输入,输出解密份额 $\mu_i$(若 $c$ 无效,$\mu_i$ 为特殊符号 $\perp$)。|
|$TShVer$|份额验证算法,以 $tpk$、$tvk$、密文 $c$、索引 $i \in [n]$ 和解密份额 $\mu$ 为输入,输出 $\top$ 或 $\perp$。当输出为 $\top$(或 $\perp$)时,称 $\mu$ 是密文 $c$ 的有效(或无效)解密份额。|
|$TCom$|组合算法,以 $tpk$、$tvk$、密文 $c$ 以及 $t$ 个在不同私钥份额下生成的解密份额为输入,输出解密结果 $m$(若无效,为特殊符号 $\perp$)。|
对于任意 $k \in \mathbb{N}$、任意多项式 $t$ 和 $n$($0 < t \leq n$)、任意 $(tsk, tpk) \leftarrow TKG(1^k, n, t)$ 以及任意 $(tsk_1, \ldots, tsk_n, tvk) \leftarrow TSplit(tsk)$,我们要求满足以下两个正确性属性:
1. 对于任意密文 $c$,若 $\mu = TShDec(tpk, tsk_i, c)$,则 $TShVer(tpk, tvk, c, i, \mu) = \top$。
2. 对于任意明文 $m$,若 $c$ 是 $TEnc(tpk, m)$ 的输出,且 $S = {\mu_{s_1}, \ldots, \mu_{s_t}}$ 是一组解密份额(即对于所有 $i \in [t]$,$\mu_{s_i} = TShDec(tpk, tsk_{s_i}, c)$),则 $TCom(tpk, tvk, c, S) = m$。
下面是可重拆分阈值公钥加密的流程mermaid图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(输入1^k, n, t):::process --> B(TKG生成tsk和tpk):::process
B --> C(输入tpk和m):::process
C --> D(TEnc生成密文c):::process
B --> E(TSplit拆分tsk):::process
E --> F(生成n个tsk份额和tvk):::process
D --> G(输入tpk, tsk_i, c):::process
G --> H(TShDec生成解密份额μ_i):::process
F --> I(输入tpk, tvk, c, i, μ):::process
H --> I
I --> J(TShVer验证份额):::process
F --> K(输入tpk, tvk, c, S):::process
H --> K
K --> L(TCom组合解密份额):::process
1.5.2.1 选择密文安全性
可重拆分TPKE方案的CCA安全性通过以下游戏定义,该游戏由挑战者和攻击者 $A$ 进行,参数为两个整数 $t$ 和 $n$($0 \leq t \leq n$):
1. 挑战者首先运行 $(tsk, tpk) \leftarrow TKG(1^k, n, t)$,并将 $tpk$ 交给 $A$。
2. $A$ 可以自适应地进行以下类型的查询:
- 拆分与腐败查询:输入一组索引 $S = {s_1, \ldots, s_{t - 1}}$,挑战者运行 $(tsk_1, \ldots, tsk_n, tvk) \leftarrow TSplit(tsk)$,并将 $(tsk_{s_1}, \ldots, tsk_{s_{t - 1}}, tvk)$ 返回给 $A$。挑战者还会存储 ${tsk_i} {i \in [n]}$ 和 $tvk$,以备 $A$ 后续的份额解密查询。
- 份额解密查询:输入 $(tvk, i, c)$,其中 $tvk$ 必须是之前拆分与腐败查询的答案之一,$i \in [n]$,且 $c \neq c^ $,挑战者找到之前与 $tvk$ 一起生成的 $tsk_i$,并将解密份额 $\mu_i \leftarrow TShDec(tpk, tsk_i, c)$ 返回给 $A$。
- 挑战查询:此查询仅可进行一次。输入 $(m_0, m_1)$,挑战者随机选择 $b \in {0, 1}$,并将 $c^ \leftarrow TEnc(tpk, m_b)$ 返回给 $A$。
3. 最后,$A$ 输出对 $b$ 的猜测 $b’$,若 $b = b’$,则 $A$ 赢得游戏。我们定义 $A$ 的优势为 $Adv^{CCA - TPKE} {(A,n,t)}(k) = | Pr[b = b’] - 1/2|$。若对于任何PPT攻击者 $A$ 以及任何多项式 $t$ 和 $n$($0 < t \leq n$),$Adv^{CCA - TPKE}_{(A,n,t)}(k)$ 都是可忽略的,则称可重拆分TPKE方案是CCA安全的。
1.5.2.2 解密一致性
解密一致性通过与CCA游戏类似的游戏定义,但不包含挑战查询。攻击者 $A$ 最终输出一个密文 $c$、一个验证密钥 $tvk$ 以及两组解密份额 $S = {\mu_{s_1}, \ldots, \mu_{s_t}}$ 和 $S’ = {\mu’ {s’_1}, \ldots, \mu’ {s’ t}}$。若满足以下条件,$A$ 赢得游戏:
1. $tvk$ 是 $A$ 之前拆分与腐败查询的响应中返回的验证密钥之一。
2. 在 $tvk$ 下,$S$ 和 $S’$ 中的所有份额对于密文 $c$ 都是有效的,即对于所有 $i \in [t]$,$TShVer(tpk, tvk, c, i, \mu {S_i}) = TShVer(tpk, tvk, c, i, \mu’_{S’_i}) = \top$。
3. 无论元素如何重新排序,$S$ 和 $S’$ 都是不同的集合。
4. $TCom(tpk, tvk, c, S) \neq TCom(tpk, tvk, c, S’)$。
我们用 $Adv^{DC - TPKE} {(A,n,t)}(k)$ 表示 $A$ 在该游戏中获胜的概率。若对于任何PPT攻击者 $A$ 以及任何多项式 $t$ 和 $n$($0 < t \leq n$),$Adv^{DC - TPKE} {(A,n,t)}(k)$ 都是可忽略的,则称TPKE方案具有解密一致性。
1.5.2.3 强平滑性
我们使用强平滑性这一属性,它在普通PKE中以 $\gamma$-一致性的名称引入,是文献中使用的平滑性的更强版本。形式上,若以下量
$Smth(k) = \max_{c,m,R, (tpk,tsk) \leftarrow TKG(1^k;R)} Pr_{c’ \leftarrow TEnc(tpk,m)}[c = c’]$
是可忽略的,则称可重拆分TPKE方案具有强平滑性。这里,$R$ 是 $TKG$ 使用的随机性。
若密文包含不可预测的组件(如循环群的生成元 $g$ 和随机性 $r$ 构成的随机群元素 $g^r$),则强平滑性成立。据我们所知,基于双线性映射的(可重拆分)TPKE的自然构造都具有强平滑性。例如,Hanaoka等人和Ohata等人提出的可重拆分TPKE方案无条件地具有此属性。
1.5.3 其他原语
1.5.3.1 公钥加密
公钥加密方案(PKE)由以下三个算法组成:
|算法|描述|
| ---- | ---- |
|$PKG$|密钥生成算法,以 $1^k$ 为输入,输出解密密钥 $dk$ 和公钥 $pk$。|
|$PEnc$|加密算法,以公钥 $pk$ 和明文 $m$ 为输入,输出密文 $c$。|
|$PDec$|解密算法,以解密密钥 $dk$ 和密文 $c$ 为输入,输出解密结果 $m$(若 $c$ 无效,为特殊符号 $\perp$)。|
我们要求PKE方案满足标准正确性,即对于任何 $(dk, pk) \leftarrow PKG(1^k)$ 和任何明文 $m$,都有 $m = PDec(dk, PEnc(pk, m))$。我们将使用PKE的选择密文安全性,其正式定义将在完整版本中给出。
1.5.3.2 签名
签名方案由以下三个算法组成:
|算法|描述|
| ---- | ---- |
|$SKG$|密钥生成算法,以 $1^k$ 为输入,输出签名密钥 $sk$ 和验证密钥 $vk$。|
|$Sign$|签名算法,以签名密钥 $sk$ 和消息 $m$ 为输入,输出签名 $\sigma$。|
|$SVer$|验证算法,以验证密钥 $vk$、消息 $m$ 和签名 $\sigma$ 为输入,输出 $\top$ 或 $\perp$(表示签名是否有效)。|
2. 可重拆分阈值公钥加密的应用与分析
2.1 可重拆分TPKE在PRE中的应用
可重拆分阈值公钥加密(TPKE)在代理重加密(PRE)方案中具有重要应用。在前面提到的云存储服务场景中,可重拆分TPKE可以用于增强数据的安全性和共享的灵活性。
例如,当用户A要与用户B共享加密数据时,可重拆分TPKE的密钥拆分算法 $TSplit$ 可以将私钥拆分成多个份额,分发给不同的代理。这样,即使部分代理出现问题,只要受损私钥份额的数量小于阈值,方案的安全性仍然能够得到保证。
具体操作步骤如下:
1. 用户A使用 $TKG$ 算法生成私钥 $tsk$ 和公钥 $tpk$。
2. 用户A根据共享需求,确定需要拆分的私钥份额数量 $n$ 和阈值 $t$。
3. 用户A使用 $TSplit$ 算法将私钥 $tsk$ 拆分成 $n$ 个私钥份额 $tsk_1, \ldots, tsk_n$ 和验证密钥 $tvk$。
4. 用户A将部分私钥份额(如 $tsk_{s_1}, \ldots, tsk_{s_{t - 1}}$)和验证密钥 $tvk$ 分发给代理。
5. 当用户B请求数据时,代理使用相应的私钥份额和 $TShDec$ 算法对数据进行解密,然后使用 $TCom$ 算法组合解密份额,得到最终的解密结果。
2.2 可重拆分TPKE的安全性分析
可重拆分TPKE的安全性主要体现在选择密文安全性(CCA)和解密一致性上。
2.2.1 CCA安全性分析
CCA安全性通过前面提到的游戏进行定义。在这个游戏中,攻击者 $A$ 试图通过各种查询来猜测挑战者选择的比特 $b$。为了保证可重拆分TPKE方案的CCA安全性,需要确保攻击者在游戏中的优势 $Adv^{CCA - TPKE}_{(A,n,t)}(k)$ 是可忽略的。
以下是CCA安全性的分析流程表格:
|步骤|描述|
| ---- | ---- |
|1|挑战者生成私钥 $tsk$ 和公钥 $tpk$,并将 $tpk$ 交给攻击者 $A$。|
|2|攻击者 $A$ 进行拆分与腐败查询、份额解密查询和挑战查询。|
|3|挑战者根据攻击者的查询进行相应的操作,并返回结果。|
|4|攻击者 $A$ 输出对 $b$ 的猜测 $b’$。|
|5|若 $b = b’$,攻击者 $A$ 赢得游戏,计算其优势 $Adv^{CCA - TPKE}_{(A,n,t)}(k)$。|
2.2.2 解密一致性分析
解密一致性通过一个与CCA游戏类似的游戏定义,但不包含挑战查询。攻击者 $A$ 试图找到两组不同的解密份额,使得它们在相同的验证密钥下对于同一密文都是有效的,但组合后的解密结果不同。为了保证可重拆分TPKE方案的解密一致性,需要确保攻击者在这个游戏中的获胜概率 $Adv^{DC - TPKE}_{(A,n,t)}(k)$ 是可忽略的。
下面是解密一致性分析的mermaid流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(攻击者A开始):::process --> B(进行拆分与腐败查询):::process
B --> C(获取验证密钥tvk和部分私钥份额):::process
C --> D(输出密文c、验证密钥tvk和两组解密份额S和S'):::process
D --> E(判断tvk是否为之前查询的响应):::process
E -->|是| F(判断S和S'中的份额是否有效):::process
E -->|否| G(A未获胜):::process
F -->|是| H(判断S和S'是否不同):::process
F -->|否| G
H -->|是| I(判断TCom结果是否不同):::process
H -->|否| G
I -->|是| J(A获胜):::process
I -->|否| G
2.3 强平滑性的作用
强平滑性是可重拆分TPKE方案的一个重要属性。它保证了密文的不可预测性,从而增强了方案的安全性。
在前面提到的VPRE方案eHKK+的安全性证明中,强平滑性起到了关键作用。由于强平滑性的存在,攻击者很难通过分析密文来获取有用的信息,从而降低了攻击的成功率。
强平滑性的具体体现如下:
- 密文包含不可预测的组件,如随机群元素 $g^r$,使得攻击者无法通过已知信息预测密文的具体形式。
- 对于任何给定的明文和公钥,加密得到的密文具有很高的随机性,攻击者很难找到两个相同的密文。
3. 重加密可验证性的实现与优势
3.1 重加密可验证性的实现
我们通过引入重加密验证算法,实现了重加密可验证性。该算法以两个密文 $c$ 和 $\tilde{c}$、接收者B的私钥 $sk_B$ 以及另一个用户A的公钥 $pk_A$ 作为输入,能够判断 $\tilde{c}$ 是否是使用将用户A的密文转换为用户B的密文的重加密密钥从 $c$ 转换而来。
以下是重加密验证算法的实现步骤:
1. 接收者B获取原始密文 $c$、重加密密文 $\tilde{c}$、自己的私钥 $sk_B$ 和用户A的公钥 $pk_A$。
2. 接收者B使用重加密验证算法对 $c$、$\tilde{c}$、$sk_B$ 和 $pk_A$ 进行处理。
3. 重加密验证算法根据输入信息进行计算和判断,输出验证结果(是或否)。
3.2 重加密可验证性的优势
重加密可验证性为PRE方案带来了诸多优势:
- 检测恶意活动 :重加密密文的接收者可以验证所接收的密文是否由代理从原始密文正确转换而来,从而检测代理的非法活动。例如,在云存储服务中,用户B可以通过重加密验证算法判断云管理器是否对数据进行了正确的重加密。
- 降低对代理的信任程度 :由于重加密可验证性的存在,用户不需要对代理给予过高的信任。即使代理出现不诚实行为,用户也能够及时发现并采取相应的措施。
- 增强安全性 :重加密可验证性与CCA安全性、健全性等安全概念相结合,进一步增强了PRE方案的安全性。例如,在eHKK+方案中,重加密验证算法的引入使得方案在面对各种攻击时更加健壮。
3.3 与其他方案的比较
与简单的代理重签密方案相比,重加密可验证性具有明显的优势。
| 方案 | 优点 | 缺点 |
|---|---|---|
| 代理重签密方案 | 可以验证原始明文未被修改且由发送者生成 | 无法验证转换后的密文是否是代理重加密的结果;接收者需要知道生成原始密文的发送者 |
| VPRE方案(具有重加密可验证性) | 可以验证转换后的密文是否是代理重加密的结果;接收者不需要知道生成原始密文的发送者 | 需要引入重加密验证算法 |
综上所述,重加密可验证性为PRE方案提供了一种更加安全、可靠的解决方案,能够有效地检测代理的恶意活动,降低对代理的信任程度,增强方案的安全性。在未来的研究中,我们可以进一步探索如何将现有PRE方案扩展为VPRE方案,并在适当扩展的安全模型中证明其安全性。
超级会员免费看

被折叠的 条评论
为什么被折叠?



