可验证重加密:如何检测恶意活动
在当今的加密领域,可验证代理重加密(VPRE)方案对于保障数据安全和检测恶意活动起着至关重要的作用。本文将深入探讨VPRE方案的相关内容,包括其语法、安全定义以及具体实现。
1. VPRE方案的语法
VPRE方案主要由以下七个算法构成:
-
KG
:密钥生成算法,输入为 $1^k$,输出秘密密钥 $sk$ 和公钥 $pk$,表示为 $(sk, pk) \leftarrow KG(1^k)$。
-
RKG
:重加密密钥生成算法,以用户 $i$ 的秘密密钥 $sk_i$ 和用户 $j$ 的公钥 $pk_j$ 为输入,输出重加密密钥 $rk_{i \to j}$,即 $rk_{i \to j} \leftarrow RKG(sk_i, pk_j)$。
-
Enc
:加密算法,输入为公钥 $pk$ 和明文 $m$,输出可被重加密的二级密文 $c$,表示为 $c \leftarrow Enc(pk, m)$。
-
REnc
:重加密算法,以用户 $i$ 的二级密文 $c$ 和重加密密钥 $rk_{i \to j}$ 为输入,输出用户 $j$ 的一级密文 $\tilde{c}$ 或特殊符号 $\perp$(表示 $rk_{i \to j}$ 或 $c$ 无效),即 $\tilde{c}$(或 $\perp$)$\leftarrow REnc(rk_{i \to j}, c)$。
-
REncVer
:重加密验证算法,输入为用户 $i$ 的公钥 $pk_i$、用户 $j$ 的秘密密钥 $sk_j$、二级密文 $c$ 和一级密文 $\tilde{c}$,输出 $\top$(表示 $\tilde{c}$ 是 $c_i$ 的有效重加密密文)或 $\perp$,表示为 $\top$(或 $\perp$)$\leftarrow REncVer(pk_i, sk_j, c, \tilde{c})$。
-
Dec1
:一级解密算法,以秘密密钥 $sk$ 和一级密文 $\tilde{c}$ 为输入,输出解密结果 $m$(可能为特殊符号 $\perp$,表示 $\tilde{c}$ 无效),即 $m \leftarrow Dec1(sk, \tilde{c})$。
-
Dec2
:二级解密算法,以秘密密钥 $sk$ 和二级密文 $c$ 为输入,输出解密结果 $m$(可能为 $\perp$),即 $m \leftarrow Dec2(sk, c)$。
一个VPRE方案若满足以下条件,则被认为是正确的:对于从 $KG(1^k)$ 输出的所有 $(sk_i, pk_i)$ 和 $(sk_j, pk_j)$、所有明文 $m$、所有 $rk_{i \to j} \leftarrow RKG(sk_i, pk_j)$、所有 $c_i \leftarrow Enc(pk_i, m)$ 以及所有 $\tilde{c}
j \leftarrow REnc(rk
{i \to j}, c_i)$,有:
1. $Dec2(sk_i, c_i) = m$。
2. $Dec1(sk_j, \tilde{c}_j) = m$。
3. $REncVer(pk_i, sk_j, c_i, \tilde{c}_j) = \top$。
以下是VPRE方案各算法的流程说明:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(KG算法):::process
B --> C(生成sk和pk):::process
C --> D(RKG算法):::process
D --> E(生成rk_{i->j}):::process
E --> F(Enc算法):::process
F --> G(生成二级密文c):::process
G --> H(REnc算法):::process
H --> I{是否有效?}:::decision
I -->|是| J(生成一级密文~c):::process
I -->|否| K(输出⊥):::process
J --> L(REncVer算法):::process
L --> M{是否有效?}:::decision
M -->|是| N(输出⊤):::process
M -->|否| O(输出⊥):::process
J --> P(Dec1算法):::process
P --> Q{是否有效?}:::decision
Q -->|是| R(输出解密结果m):::process
Q -->|否| S(输出⊥):::process
G --> T(Dec2算法):::process
T --> U{是否有效?}:::decision
U -->|是| V(输出解密结果m):::process
U -->|否| W(输出⊥):::process
R --> X([结束]):::startend
V --> X
K --> X
O --> X
S --> X
W --> X
2. VPRE方案的安全定义
VPRE方案的安全定义主要包括以下三个方面:
2.1 健全性(Soundness)
健全性的定义是为了避免重加密验证算法 $REncVer$ 出现无意义的“正确”情况。大致来说,健全性保证了拥有重加密密钥 $rk_{i \to j}$ 的攻击者在给定原始二级密文 $c$ 时,只能生成解密结果与 $c$ 相同的重加密密文 $\tilde{c}$;若攻击者没有重加密密钥,则无法生成有效的重加密密文。
具体通过一个游戏来定义健全性,该游戏由挑战者和攻击者 $A$ 参与,参数为整数 $n \in N$:
1. 挑战者为诚实用户生成密钥对 $(sk_i, pk_i) \leftarrow KG(1^k)$,$i \in [n]$,并设置 $PK = {pk_i}
{i \in [n]}$。
2. 挑战者为挑战用户生成密钥对 $(sk
{i^
}, pk_{i^
}) \leftarrow KG(1^k)$。
3. 挑战者将 $1^k$ 和 $PK^
= PK \cup {pk_{i^
}}$ 提供给 $A$。
4. $A$ 可以自适应地进行以下类型的查询:
-
重加密密钥生成(RKG)查询
:输入 $(pk_i \in PK^
, pk_j)$,若 $pk_i = pk_{i^
}$ 且 $pk_j \notin PK^
$,挑战者回复 $\perp$;否则,回复 $RKG(sk_i, pk_j)$。
-
重加密(REnc)查询
:输入 $(pk_i \in PK^
, pk_j, c)$,挑战者回复 $REnc(RKG(sk_i, pk_j), c)$。
-
重加密验证(REncVer)查询
:输入 $(pk_i, pk_j \in PK^
, c, \tilde{c})$,挑战者回复 $REncVer(pk_i, sk_j, c, \tilde{c})$。
-
挑战查询
:仅可查询一次,输入 $m^
$,挑战者运行 $c^
\leftarrow Enc(pk_{i^
}, m^
)$,并将 $c^
$ 返回给 $A$。
-
一级解密(Dec1)查询
:输入 $(pk_j \in PK^
, \tilde{c})$,挑战者回复 $Dec1(sk_j, \tilde{c})$。
-
二级解密(Dec2)查询
:输入 $(pk_i \in PK^
, c)$,挑战者回复 $Dec2(sk_i, c)$。
5. 最后,若 $A$ 输出的 $(pk_j \in PK^
, \tilde{c}^
)$ 满足以下三个条件,则 $A$ 赢得游戏:
- $REncVer(pk_{i^
}, sk_j, c^
, \tilde{c}^
) = \top$。
- $\tilde{c}^
$ 不是 $A$ 某些 $REnc$ 查询(形式为 $(pk_{i^
}, pk_j, c^
)$)的答案。
- 满足以下两个条件之一:
- 若 $A$ 提交过形式为 $(pk_{i^
}, pk_j)$ 的 $RKG$ 查询并获得重加密密钥 $rk_{i^
\to j}$,则 $Dec1(sk_j, \tilde{c}^
) \neq m^
$。
- 否则,$Dec1(sk_j, \tilde{c}^*) \neq \perp$。
我们定义 $A$ 的优势为 $Adv_{SND - VPRE}^{(A,n)}(k) = Pr[A$ 赢$]$。若对于任何多项式时间概率算法(PPT)攻击者 $A$ 和所有正多项式 $n$,$Adv_{SND - VPRE}^{(A,n)}(k)$ 都是可忽略的,则称VPRE方案满足健全性。
2.2 二级密文的选择密文攻击安全(Second - Level CCA Security)
二级密文的CCA安全通过一个游戏来定义,同样由挑战者和攻击者 $A$ 参与,参数为整数 $n \in N$:
1. 挑战者为诚实用户生成密钥对 $(sk_i, pk_i) \leftarrow KG(1^k)$,$i \in [n]$,并设置 $PK = {pk_i}
{i \in [n]}$。
2. 挑战者为挑战用户生成密钥对 $(sk
{i^
}, pk_{i^
}) \leftarrow KG(1^k)$。
3. 挑战者将 $1^k$ 和 $PK^
= PK \cup {pk_{i^
}}$ 提供给 $A$。
4. $A$ 可以自适应地进行以下类型的查询:
-
重加密密钥生成(RKG)和重加密验证(REncVer)查询
:与健全性游戏中的查询相同。
-
重加密(REnc)查询
:输入 $(pk_i \in PK^
, pk_j, c)$,若 $(pk_i, c) = (pk_{i^
}, c^
)$ 且 $pk_j \notin PK^
$,挑战者返回 $\perp$ 给 $A$;否则,挑战者回复 $REnc(RKG(sk_i, pk_j), c)$。
-
挑战查询
:仅可查询一次,输入 $(m_0, m_1)$,挑战者随机选择一个比特 $b \in {0, 1}$,计算 $c^
\leftarrow Enc(pk_{i^
}, m_b)$,并将 $c^
$ 给 $A$。
-
一级解密(Dec1)查询
:输入 $(pk_j \in PK^
, \tilde{c})$,若 $REncVer(pk_{i^
}, sk_j, c^
, \tilde{c}) = \top$,挑战者返回 $\perp$ 给 $A$;否则,挑战者回复 $Dec1(sk_j, \tilde{c})$。
-
二级解密(Dec2)查询
:输入 $(pk_i \in PK^
, c)$,若 $(pk_i, c) = (pk_{i^
}, c^*)$,挑战者返回特殊符号 $\perp$ 给 $A$;否则,挑战者回复 $Dec2(sk_i, c)$。
5. 最后,$A$ 输出对 $b$ 的猜测 $b’$,若 $b = b’$,则 $A$ 赢得游戏。我们定义 $A$ 的优势为 $Adv_{second - VPRE}^{(A,n)}(k) = | Pr[b = b’] - 1/2|$。若对于任何PPT攻击者 $A$ 和所有正多项式 $n$,$Adv_{second - VPRE}^{(A,n)}(k)$ 都是可忽略的,则称VPRE方案是二级CCA安全的。
2.3 一级密文的选择密文攻击安全(First - Level CCA Security)
一级密文的CCA安全也通过一个游戏来定义,由挑战者和攻击者 $A$ 参与:
1. 挑战者生成挑战密钥对 $(sk^
, pk^
) \leftarrow KG(1^k)$,并将 $1^k$ 和 $pk^
$ 给 $A$。
2. $A$ 可以自适应地进行以下类型的查询:
-
重加密密钥生成(RKG)查询
:输入 $pk$,挑战者回复 $RKG(sk^
, pk)$。
-
重加密验证(REncVer)查询
:输入 $(pk, c, \tilde{c})$,挑战者回复 $REncVer(pk, sk^
, c, \tilde{c})$。
-
挑战查询
:仅可查询一次,输入 $(sk_A, pk_A, m_0, m_1)$(其中 $(sk_A, pk_A)$ 必须是有效密钥对),挑战者随机选择挑战比特 $b \in {0, 1}$,运行 $c \leftarrow Enc(pk_A, m_b)$ 和 $\tilde{c}^
\leftarrow REnc(RKG(sk_A, pk^
), c)$,然后将 $\tilde{c}^
$ 返回给 $A$。
-
一级解密(Dec1)查询
:输入 $\tilde{c}$,若 $\tilde{c} = \tilde{c}^
$,挑战者返回特殊符号 $\perp$ 给 $A$;否则,挑战者回复 $Dec1(sk^
, \tilde{c})$。
-
二级解密(Dec2)查询
:输入 $c$,挑战者回复 $Dec2(sk^*, c)$。
3. 最后,$A$ 输出对 $b$ 的猜测 $b’$,若 $b = b’$,则 $A$ 赢得游戏。我们定义 $A$ 的优势为 $Adv_{first - VPRE}^A(k) = | Pr[b = b’] - 1/2|$。若对于任何PPT攻击者 $A$,$Adv_{first - VPRE}^A(k)$ 都是可忽略的,则称VPRE方案是一级CCA安全的。
3. 与其他定义的差异及兼容性
与其他PRE方案的定义相比,VPRE方案的健全性是一个新的安全定义。在一级CCA安全的定义中,我们允许攻击者进行 $REncVer$ 查询,这比其他定义更强大。在二级密文的安全定义中,我们使用 $REncVer$ 来决定“禁止”的解密查询,简化了定义,同时需要健全性来保证 $REncVer$ 的意义。
此外,我们证明了VPRE方案的安全定义具有“向后兼容性”:
- 若VPRE方案在我们的一级CCA安全定义下是安全的,则在其他方案的一级CCA安全定义下也是安全的。
- 若VPRE方案在我们的二级CCA安全定义下是安全的且满足健全性,则在其他方案的二级CCA安全定义下也是安全的。
以下是不同安全定义下的查询和响应对比表格:
| 安全定义 | RKG查询 | REnc查询 | REncVer查询 | Dec1查询 | Dec2查询 | 挑战查询 |
| — | — | — | — | — | — | — |
| 健全性 | 若 $pki = pki^
$ 且 $pkj \notin PK^
$,回复 $\perp$;否则,回复 $RKG(ski, pkj)$ | 回复 $REnc(RKG(ski, pkj), c)$ | 回复 $REncVer(pki, skj, c, \tilde{c})$ | 回复 $Dec1(skj, \tilde{c})$ | 回复 $Dec2(ski, c)$ | 输入 $m^
$,运行 $c^
\leftarrow Enc(pki^
, m^
)$ 并返回 $c^
$ |
| 二级CCA安全 | 与健全性相同 | 若 $(pki, c) = (pki^
, c^
)$ 且 $pkj \notin PK^
$,返回 $\perp$;否则,回复 $REnc(RKG(ski, pkj), c)$ | 与健全性相同 | 若 $REncVer(pki^
, skj, c^
, \tilde{c}) = \top$,返回 $\perp$;否则,回复 $Dec1(skj, \tilde{c})$ | 若 $(pki, c) = (pki^
, c^
)$,返回 $\perp$;否则,回复 $Dec2(ski, c)$ | 输入 $(m0, m1)$,随机选 $b$,计算 $c^
\leftarrow Enc(pki^
, mb)$ 并返回 $c^
$ |
| 一级CCA安全 | 回复 $RKG(sk^
, pk)$ | - | 回复 $REncVer(pk, sk^
, c, \tilde{c})$ | 若 $\tilde{c} = \tilde{c}^
$,返回 $\perp$;否则,回复 $Dec1(sk^
, \tilde{c})$ | 回复 $Dec2(sk^
, c)$ | 输入 $(skA, pkA, m0, m1)$,随机选 $b$,运行 $c \leftarrow Enc(pkA, mb)$ 和 $\tilde{c}^
\leftarrow REnc(RKG(skA, pk^
), c)$ 并返回 $\tilde{c}^*$ |
可验证重加密:如何检测恶意活动
4. 具体的VPRE方案
在这一部分,我们将介绍一个具体的VPRE方案,即扩展的HKK+(eHKK+)方案,它是对Hanaoka等人提出的PRE方案(HKK+)的扩展,重点在于实现重加密验证功能。
4.1 实现重加密验证的直觉
为了实现具有重加密可验证性的PRE方案,一种可行的方法是设计一个满足以下特性的方案:
1. 当将用户A的二级密文 $c_A$ 重加密为用户B的一级密文 $\tilde{c}_B$ 时,$c_A$ 以某种方式嵌入到 $\tilde{c}_B$ 中,使得用户B在解密 $\tilde{c}_B$ 时能够提取出嵌入的二级密文 $c_A$。
2. 在重加密验证过程中(比较 $\tilde{c}_B$ 和候选二级密文 $c’_A$),用户B检查提取出的密文 $c_A$ 是否与给定的候选密文 $c’_A$ 相等。
我们发现HKK+方案具有这些理想的特性,因此选择以该方案为基础进行扩展。
4.2 将Hanaoka等人的PRE方案扩展为VPRE方案
HKK+方案是基于可重拆分的TPKE方案、普通PKE方案和签名方案构建的。我们观察到HKK+方案的重加密密文(一级密文)$\tilde{c}$ 包含了原始密文(二级密文)$c$ 的信息,而 $c$ 是底层TPKE方案的密文。因此,我们的重加密验证算法相对简单:在输入 $(pki, skj, c, \tilde{c})$ 时,部分执行HKK+方案的一级解密算法以恢复“嵌入”的二级密文 $c’$,并检查 $c$ 是否等于 $c’$。
以下是扩展后的VPRE方案eHKK+的正式描述:
设 $(TKG, TEnc, TSplit, TShDec, TShVer, TCom)$ 是可重拆分的TPKE方案,$(PKG, PEnc, PDec)$ 是PKE方案,$(SKG, Sign, SVer)$ 是签名方案。使用这些作为构建块,VPRE方案eHKK+的具体算法如下:
KG(1k) :
(tsk, tpk) ←TKG(1k, 2, 2)
(dk, pk) ←PKG(1k)
(sk, vk) ←SKG(1k)
sk ←(tsk, dk, sk)
pk ←(tpk, pk, vk)
Return (sk, pk).
Enc(pki, m) :
(tpki, pki, vki) ←pki
Return c ←TEnc(tpki, m).
RKG(ski, pkj) :
(tski, dki, ski) ←ski
(tpkj, pkj, vkj) ←pkj
(tski.1, tski.2, tvki) ←TSplit(tski)
ψ ←PEnc(pkj, tski.1)
σ ←Sign(ski, ⟨ψ∥tvki∥pki∥pkj⟩)
rki→j ←(pki, pkj, tski.2, ψ, tvki, σ)
Return rki→j.
Dec1(skj, cj) :
(tskj, dkj, skj) ←skj
M ←PDec(dkj, cj)
If M = ⊥then return ⊥.
⟨pk′i∥pk′j∥ci∥μ2∥ψ∥tvki∥σ⟩←M
If pk′j ̸= pkj then return ⊥.
(tpki, pki, vki) ←pk′i
If SVer(vki, ⟨ψ∥tvki∥pk′i∥pk′j⟩, σ) = ⊥
then return ⊥.
tski.1 ←PDec(dkj, ψ)
If tski.1 = ⊥then return ⊥.
μ1 ←TShDec(tpki, tski.1, ci)
If μ1 = ⊥then return ⊥.
If TShVer(tpki, tvki, ci, 2, μ2) = ⊥
then return ⊥.
m ←TCom(tpki, tvki, ci, {μ1, μ2})
Return m.
REnc(rki→j, ci) :
(pki, pkj, tski.2, ψ, tvki, σ) ←rki→j
(tpki, pki, vki) ←pki
If SVer(vki, ⟨ψ∥tvki||pki∥pkj⟩, σ) = ⊥
then return ⊥.
(tpkj, pkj, vkj) ←pkj
μ2 ←TShDec(tpki, tski.2, ci)
If μ2 = ⊥then return ⊥.
M ←⟨pki∥pkj∥ci∥μ2∥ψ∥tvki∥σ⟩
Return cj ←PEnc(pkj, M).
Dec2(ski, c) :
(tpki, pki, vki) ←pki
(tski, dki, ski) ←ski
(tski.1, tski.2, tvki) ←TSplit(tski)
μ1 ←TShDec(tpki, tski.1, c)
If μ1 = ⊥then return ⊥.
μ2 ←TShDec(tpki, tski.2, c)
If μ2 = ⊥then return ⊥.
m ←TCom(tpki, tvki, c, {μ1, μ2})
Return m.
REncVer(pki, skj, c′i, cj) :
(tpki, pki, vki) ←pki
(tskj, dkj, skj) ←skj
M ←PDec(dkj, cj)
If M = ⊥then return ⊥.
⟨pk′i∥pk′j∥ci∥μ2∥ψ∥tvki∥σ⟩←M
If (pk′i, pk′j) ̸= (pki, pkj) then return ⊥.
If SVer(vki, ⟨ψ∥tvki∥pk′i∥pk′j⟩, σ) = ⊥
then return ⊥.
tski.1 ←PDec(dkj, ψ)
If tski.1 = ⊥then return ⊥.
μ1 ←TShDec(tpki, tski.1, ci)
If μ1 = ⊥then return ⊥.
If TShVer(tpki, tvki, ci, 2, μ2) = ⊥
then return ⊥.
If c′i = ci then return ⊤else return ⊥.
以下是eHKK+方案主要算法的流程说明:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(KG算法):::process
B --> C(生成sk和pk):::process
C --> D(Enc算法):::process
D --> E(生成二级密文c):::process
E --> F(RKG算法):::process
F --> G(生成rk_{i->j}):::process
G --> H(REnc算法):::process
H --> I{是否有效?}:::decision
I -->|是| J(生成一级密文~c):::process
I -->|否| K(输出⊥):::process
J --> L(REncVer算法):::process
L --> M{是否有效?}:::decision
M -->|是| N(输出⊤):::process
M -->|否| O(输出⊥):::process
J --> P(Dec1算法):::process
P --> Q{是否有效?}:::decision
Q -->|是| R(输出解密结果m):::process
Q -->|否| S(输出⊥):::process
E --> T(Dec2算法):::process
T --> U{是否有效?}:::decision
U -->|是| V(输出解密结果m):::process
U -->|否| W(输出⊥):::process
R --> X([结束]):::startend
V --> X
K --> X
O --> X
S --> X
W --> X
4.3 eHKK+方案的安全性
我们证明了eHKK+方案满足VPRE的三种安全定义:
1.
健全性
:若PKE方案是CCA安全的,签名方案是强不可伪造的,且可重拆分的TPKE方案具有解密一致性,则eHKK+方案满足健全性。
2.
二级CCA安全
:若PKE方案是CCA安全的,签名方案是强不可伪造的,且可重拆分的TPKE方案是CCA安全的,则eHKK+方案是二级CCA安全的。
3.
一级CCA安全
:由于eHKK+方案是基于HKK+方案扩展而来,在满足上述条件的情况下,也能保证一级CCA安全。
以下是eHKK+方案安全性依赖条件的总结表格:
| 安全定义 | PKE方案 | 签名方案 | 可重拆分TPKE方案 |
| — | — | — | — |
| 健全性 | CCA安全 | 强不可伪造 | 解密一致性 |
| 二级CCA安全 | CCA安全 | 强不可伪造 | CCA安全 |
| 一级CCA安全 | CCA安全 | 强不可伪造 | CCA安全 |
综上所述,VPRE方案通过引入重加密验证算法,增强了PRE方案的安全性和可验证性。eHKK+方案作为一个具体的实现,在满足一定条件下能够保证健全性、二级CCA安全和一级CCA安全,为实际应用提供了可靠的加密解决方案。
超级会员免费看
2万+

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



