快速简单的部分遗忘伪随机函数及其应用
1. 现有协议问题与解决方案
当前部署的协议存在一个问题,即桶标识符 $H(u)$ 和盲化的 OPRF 输出之间缺乏加密绑定。这意味着恶意客户端可以查询任意用户名,而不仅仅是与 $H(u)$ 匹配的用户名。虽然在实践中这是否构成重大安全问题尚不清楚,但部分遗忘伪随机函数(POPRF)可以通过将 2HashDH 替换为 3HashSDHI 并设置 $t = H(u)$ 轻松解决这个问题。
在非对称密码认证密钥交换(PAKE)方面,密码认证密钥交换协议允许客户端和服务器通过短密码建立共享会话密钥。强非对称 PAKE(SaPAKE)协议进一步确保服务器存储的是用户密码的私有加盐哈希值。OPAQUE SaPAKE 协议将 OPRF 作为其核心组件之一,目前正由 IETF 考虑进行标准化,建议使用的 OPRF 是 2HashDH。在 OPAQUE 中,服务器为每个用户使用单独的 OPRF 密钥,而使用 3HashSDHI POPRF 可以让 OPAQUE 使用单个主密钥 $pk$,通过将用户名作为 3HashSDHI 的公共输入 $t$ 来为不同用户提供多样性,这将简化部署并可能提高安全性。
2. 预备知识
2.1 代数群模型
在一些安全证明中,会考虑针对代数攻击者的安全性,使用代数群模型进行建模。如果一个算法 $A$ 对于所有输出的群元素 $Z$(无论是最终输出还是作为预言机的输入),都能额外提供 $Z$ 相对于所有先前接收到的群元素的表示,那么称算法 $A$ 为代数算法。先前接收到的群元素包括算法的原始输入和调用预言机得到的输出。具体来说,如果 $[X] i$ 是算法 $A$ 到目前为止接收到的群元素列表 $[X_0, \ldots, X_n] \in G$,那么在生成群元素 $Z$ 时,$A$ 必须同时提供一个列表 $[z]_i = [z_0, \ldots, z_n]$,使得 $Z = \prod {i} X_i^{z_i}$。
2.2 随机预言机模型
使用理想原语来证明安全性,将哈希函数建模为随机预言机。由于方案会使用多个哈希函数,因此需要一个通用的抽象来处理理想原语的使用。一个理想原语 $P$ 指定了算法 $P.Init$ 和 $P.Eval$。初始化算法的语法为 $st_P \leftarrow \$ P.Init(1^{\lambda})$,有状态的评估算法的语法为 $y \leftarrow \$ P.Eval(x : st_P)$。有时用 $A^P$ 作为给算法 $A$ 提供对 $P.Eval(\cdot : st_P)$ 预言机访问的简写。虽然理想原语的有状态形式用于在安全证明中实现高效实例化,但理想原语本质上应该是无状态的,以防止出现人为设计的行为。
可以将对多个理想原语的访问组合起来,例如 $P = P_1 \times \ldots \times P_m$,其初始化和评估算法如下:
P.Init(1^λ)
[st_P,i]_i^m ←$ [Pi.Init(1^λ)]_i^m
Return [st_P,i]_i^m
P.Eval(x : [st_P,i]_i^m)
(i, x) ← x
y ←$ Pi.Eval(x : st_P,i)
Return y
对于随机预言机,定义一个接受任意输入并从采样算法 $Samp$ 产生随机输出的随机预言机,由理想原语 $RO[Samp] = (RO.Init, RO.H)$ 捕获:
RO.Init(1^λ)
T ← [·]
Return T
RO.Eval(x : T)
If x ∉ T then T[x] ←$ Samp()
Return T[x]
在随机预言机模型中支持代数算法时,需要为任何随机预言机 $RO$ 指定其定义域和值域的结构。假设可以有效地检查输入是否为定义域的有效成员,如果检查失败则隐式返回 $\perp$。代数算法需要为作为 $RO$ 定义域一部分的任何群元素输入提供表示,并且 $RO$ 的任何群元素输出都包含在代数攻击者接收到的群元素列表中。
2.3 非交互式零知识证明
定义一个非交互式证明系统 $NiZK$,它基于一个可有效计算的关系 $R$,该关系定义在对 $(x, w)$ 上,其中 $x$ 称为陈述,$w$ 称为见证。它由以下算法组成:
- 建立算法:$pp \leftarrow \$ NiZK.Setup(\lambda)$,产生执行的公共参数。
- 证明算法:$\pi \leftarrow \$ NiZK.Prove_P^{pp}(w, x)$,接受见证和陈述并产生证明。
- 验证算法:$b \leftarrow NiZK.Ver_P^{pp}(x, \pi)$,验证陈述的证明。
非交互式零知识证明系统具有以下安全属性:
-
完备性
:如果给定一个真实陈述,拥有见证的证明者能够说服验证者,则证明系统是完备的。使用具有完美完备性的证明系统,即对于所有 $(x, w) \in R$,有 $Pr[NiZK.Ver_P^{pp}(x, NiZK.Prove_P^{pp}(w, x)) = 1] = 1$。
-
知识可靠性
:如果证明者能够为陈述 $x$ 产生有效证明,那么该陈述是真实的,即存在某个见证 $w$ 使得 $(x, w) \in R$。知识可靠性由安全游戏 $Sound_A^{NiZK,R,P}(\lambda)$ 定义,攻击者的优势定义为 $Adv_{sound}^{NiZK,R,P,A}(\lambda) = Pr[Sound_A^{NiZK,R,P}(\lambda) = 1]$。
-
零知识
:如果证明除了陈述的真实性之外不泄露任何信息,则证明系统是计算零知识的。零知识由安全游戏 $ZK_A^{b,NiZK,R,S,P}(\lambda)$ 定义,攻击者的优势定义为 $Adv_{zk}^{NiZK,R,S,P,A}(\lambda) = |Pr[ZK_A^{1,NiZK,R,S,P}(\lambda) = 1] - Pr[ZK_A^{0,NiZK,R,S,P}(\lambda) = 1]|$。
对于包含两对具有相等离散对数的群元素的关系 $R = {(g, U, V, W), (\alpha) : U = g^{\alpha} \land W = V^{\alpha}}$,可以使用 Fiat - Shamir 启发式方法将 Sigma 协议转换为非交互式证明系统。Chaum - Pedersen 协议 $\Sigma_R$ 就是这样一个非交互式证明系统,它在随机预言机模型中具有完美完备性、计算可靠性和完美零知识性,其具体描述如下:
ΣR.ProveH(α, (g, U, V, W))
r ←$ Zp
sU ← g^r
sW ← V^r
c ← H(g || U || V || W || sU || sW)
z ← r - cα
π ← (z, c)
Return π
ΣR.VerH((g, U, V, W), π)
(z, c) ← π
sU ← g^z U^c
sW ← V^z W^c
Return c = H(g || U || V || W || sU || sW)
3. 部分遗忘伪随机函数
3.1 语法和语义
部分遗忘伪随机函数(POPRF)方案 $Fn$ 是一个算法元组 $(Fn.Setup, Fn.KeyGen, Fn.Req, Fn.BlindEv, Fn.Finalize, Fn.Ev)$。
-
设置和密钥生成
:设置算法生成公共参数 $pp$,密钥生成算法生成公钥 - 私钥对 $(pk, sk)$。
-
盲化评估
:作为客户端和服务器之间的交互式协议进行,简化为以下三个算法:
1. 客户端运行 $Fn.Req_P^{pp}(pk, t, x)$,输入公钥 $pk$、标签 $t$ 和私有输入 $x$,输出本地状态 $st$ 和请求消息 $req$,并将 $req$ 发送给服务器。
2. 服务器运行 $Fn.BlindEv_P^{pp}(sk, t, req)$,输入私钥 $sk$、标签 $t$ 和请求消息,产生响应消息 $rep$ 并发送回客户端。
3. 客户端运行 $Fn.Finalize(rep : st)$,输出 PRF 评估结果或 $\perp$(如果响应消息被拒绝)。
-
非盲化评估
:$Fn.Ev$ 是确定性算法,输入公钥 - 私钥对 $(pk, sk)$ 和输入对 $(t, x)$,输出 PRF 评估值 $y$。
同时定义了秘密密钥空间 $Fn.SK$、公钥空间 $Fn.PK$、标签空间 $Fn.T$、私有输入空间 $Fn.X$ 和输出空间 $Fn.Out$,输入空间 $Fn.In = Fn.T \times Fn.X$,并假设这些集合上有高效的采样和成员查询算法。
为了保证正确性,要求 $Ev$ 是一个函数,并且盲化评估和非盲化评估是一致的,即对于任何由 $Setup$ 输出的 $pp$、由 $KeyGen$ 输出的 $pk$ 和 $sk$ 以及任何 $t$ 和 $x$,有 $Pr[Ev(sk, t, x) = y] = 1$,其中 $y$ 通过以下过程选择:$(st, req) \leftarrow \$ Req_P(pk, t, x)$;$rep \leftarrow \$ BlindEv_P(sk, t, req)$;$y \leftarrow \$ Finalize_P(rep : st)$。
3.2 安全性
引入了三个新的安全定义:
-
伪随机性
:该定义捕获了 POPRF 与随机函数的不可区分性,即使对于可以访问盲化评估预言机的恶意客户端也是如此。通过一个伪代码游戏来定义,游戏由安全参数 $\lambda$、攻击者 $A$、挑战位 $b$、POPRF $Fn$、模拟器 $S = (S.Init, S.BlindEv, S.Eval)$ 和理想原语 $P$ 参数化。模拟器的 $S.BlindEv$ 和 $S.Eval$ 可以获得 $Ev$ 输出,但受到 $LimEv$ 预言机的限制,该限制是按每个元数据值 $t$ 进行的,即 $LimEv$ 对任何特定 $t$ 的查询受该特定 $t$ 的盲化评估查询总数的约束。攻击者的优势定义为:
$Adv_{po - prf}^{Fn,S,P,A}(\lambda) = \left|Pr[POPRF_A^{1,Fn,S,P}(\lambda) \Rightarrow 1] - Pr[POPRF_A^{0,Fn,S,P}(\lambda) \Rightarrow 1]\right|$
伪代码游戏如下:
Game POPRFA,b
Fn,S,P(λ)
RandFn ←$ FnGen(Fn.In, Fn.Out)
stP ←$ P.Init(λ)
pp ←$ Fn.Setup(λ)
(sk, pk1) ←$ Fn.KeyGenP
pp()
(stS, pk0) ←$ S.Init(pp)
b′ ←$ AEv,BlindEv,Prim(pp, pkb)
Return b′
Oracle Ev(t, x)
y1 ← Fn.EvP(sk, t, x)
y0 ← RandFn(t, x)
Return yb
Oracle LimEv(t, x)
qt,s ← qt,s + 1
If qt,s ≤ qt then
Return Ev(t, x)
Return ⊥
Oracle BlindEv(t, req)
qt ← qt + 1
rep1 ← Fn.BlindEvP(sk, t, req)
(rep0, stS) ←$ S.BlindEvLimEv(t, req : stS)
Return repb
Oracle Prim(x)
y1 ←$ P.Eval(x : stP)
(y0, stS) ←$ S.EvalLimEv(x : stS)
Return yb
-
请求隐私和不可链接性
:
-
POPRIV1 游戏
:捕获了客户端请求的隐私性,攻击者可以查询以获得 POPRF 诚实盲化评估的完整转录(包括输出)。转录要么正确返回($b = 0$),要么请求 - 响应对相对于输出交换($b = 1$)。如果攻击者无法区分这两个世界,则表明 POPRF 输出值与特定的盲化评估不可链接,同时也捕获了输入隐私安全性。攻击者的优势定义为:
$Adv_{po - priv1}^{Fn,P,A}(\lambda) = \left|Pr[POPRIV1_A^{1,Fn,P}(\lambda) \Rightarrow 1] - Pr[POPRIV1_A^{0,Fn,P}(\lambda) \Rightarrow 1]\right|$
-
POPRIV1 游戏
:捕获了客户端请求的隐私性,攻击者可以查询以获得 POPRF 诚实盲化评估的完整转录(包括输出)。转录要么正确返回($b = 0$),要么请求 - 响应对相对于输出交换($b = 1$)。如果攻击者无法区分这两个世界,则表明 POPRF 输出值与特定的盲化评估不可链接,同时也捕获了输入隐私安全性。攻击者的优势定义为:
POPRIV1 游戏代码如下:
Game POPRIV1A,b
Fn,P(λ)
pp ←$ Fn.Setup(λ)
(pk, sk) ←$ Fn.KeyGen(pp)
stP ←$ P.Init(λ)
b′ ←$ ATrans,P(pp, pk, sk)
Return b′
Oracle Trans(t, x0, x1)
(st0, req0) ←$ Fn.ReqP(pk, t, x0)
(st1, req1) ←$ Fn.ReqP(pk, t, x1)
rep0 ←$ Fn.BlindEvP(sk, t, req0)
rep1 ←$ Fn.BlindEvP(sk, t, req1)
y0 ← Fn.FinalizeP(rep0; st0)
y1 ← Fn.FinalizeP(rep1; st1)
τ ← (reqb, repb, y0)
τ ′ ← (req1 - b, rep1 - b, y1)
Return (τ, τ ′)
- **POPRIV2 游戏**:允许攻击者选择用于请求生成的公钥,并由攻击者决定如何回复请求。游戏将转录生成分为请求预言机($Req$)和最终化预言机($Fin$)。攻击者的优势定义为:
$Adv_{po - priv2}^{Fn,P,A}(\lambda) = \left|Pr[POPRIV2_A^{1,Fn,P}(\lambda) \Rightarrow 1] - Pr[POPRIV2_A^{0,Fn,P}(\lambda) \Rightarrow 1]\right|$
POPRIV2 游戏代码如下:
Game POPRIV2A,b
Fn,P(λ)
pp ←$ Fn.Setup(λ)
stP ←$ P.Init(λ)
i ← 0
b′ ←$ AReq,Fin,P(pp)
Return b′
Oracle Req(pk, t, x0, x1)
i ← i + 1
(sti,0, req0) ←$ Fn.ReqP(pk, t, x0)
(sti,1, req1) ←$ Fn.ReqP(pk, t, x1)
Return (reqb, req1 - b)
Oracle Fin(j, rep, rep′)
If j > i then return ⊥
yb ← Fn.FinalizeP(stj,b, rep)
y1 - b ← Fn.FinalizeP(stj,1 - b, rep′)
If y0 = ⊥ or y1 = ⊥ then
Return ⊥
Return (y0, y1)
POPRIV2 严格强于 POPRIV1,新的 POPRF 在省略验证时满足 POPRIV1,在需要验证时满足 POPRIV2。
- 唯一性 :在可验证的场景中,当客户端希望确保服务器诚实地执行盲化评估时,盲化评估协议的输出应该相对于公钥对是一致的,即与使用私钥的非盲化评估输出一致。将此正确性属性形式化为唯一性定义 $POUNIQ$,唯一性由正确性和 POPRIV2 隐含。
4. 与部分盲签名的关系
POPRF 与两阶段部分盲签名相关。部分盲签名是一个算法元组 $(DS.Setup, DS.KeyGen, DS.Sign, DS.Ver, DS.Req, DS.BlindSign, DS.Finalize)$,前四个算法定义了一个标准的数字签名方案,用于由标签 $t$ 和私有消息 $m$ 组成的消息空间。签名也可以通过交互式协议生成,类似于 POPRF 的处理方式,简化为单轮往返协议。
部分盲签名的主要安全属性是一次性不可伪造性,即对抗性客户端不能生成 $q + 1$ 个唯一的消息 - 签名对 $(m_1, \sigma_1), \ldots, (m_{q + 1}, \sigma_{q + 1})$,这些对在公钥 $pk$ 和公共标签 $t$ 下都能验证,即使客户端可以查询盲签名预言机,但对所选公共标签 $t$ 只能进行 $q$ 次查询。
如果 $DS.Sign$ 是确定性的,并且其在 $(pk, t, m)$ 上的输出与在相同三元组上启动的交互式协议的输出匹配,则部分盲签名是唯一的。可以将唯一的盲签名通过哈希签名转换为 OPRF,类似地,也可以从唯一的部分盲签名构建 POPRF。
大多数先前的部分盲签名方案不是唯一的,已知的唯一方案是 Zhang, Safavi - Naini, and Susilo(ZSS)提出的,但它依赖于双线性对,因此这种通用转换无法实现 POPRF 的目标,并且 ZSS 的安全分析存在错误。不过,新的构造与 ZSS 的构造有很多底层结构相同,通过新的证明技术可以解决相关问题。
以下是 POPRF 盲化评估流程的 mermaid 流程图:
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(客户端运行 Req):::process
B --> C(发送 req 到服务器):::process
C --> D(服务器运行 BlindEv):::process
D --> E(发送 rep 到客户端):::process
E --> F(客户端运行 Finalize):::process
F --> G{验证通过?}:::decision
G -->|是| H(输出 PRF 评估值):::process
G -->|否| I(输出 ⊥):::process
H --> J([结束]):::startend
I --> J
通过以上内容,我们详细介绍了部分遗忘伪随机函数的相关概念、安全定义以及与部分盲签名的关系,这些技术在密码学和安全通信领域具有重要的应用价值。
快速简单的部分遗忘伪随机函数及其应用
5. 技术优势与应用场景
部分遗忘伪随机函数(POPRF)在多个方面展现出显著的技术优势,并且在不同的应用场景中具有重要价值。
5.1 技术优势
-
增强安全性
:
- 伪随机性保障 :POPRF 的伪随机性定义确保其输出与随机函数难以区分,即使面对恶意客户端的攻击也能保持高度的安全性。通过严格的安全游戏和模拟器的限制,有效防止了攻击者通过盲化评估预言机获取额外信息,从而保障了系统的整体安全性。
- 客户端隐私保护 :请求隐私和不可链接性的安全定义为客户端提供了强大的隐私保护。POPRIV1 游戏确保了在诚实但好奇的服务器环境下,客户端的请求和输出之间不可链接,保护了客户端的输入隐私。而 POPRIV2 游戏则进一步增强了对恶意服务器的防御能力,使得客户端在面对不诚实的服务器时也能保证隐私安全。
- 唯一性保证 :唯一性定义 POUNIQ 确保了服务器在执行盲化评估时的诚实性,使得盲化评估的输出与非盲化评估的输出一致,避免了恶意服务器提供不一致输出的问题,增强了系统的可靠性和安全性。
- 简化部署 :在 OPAQUE SaPAKE 协议中,使用 3HashSDHI POPRF 可以让服务器使用单个主密钥 $pk$,通过将用户名作为 3HashSDHI 的公共输入 $t$ 来为不同用户提供多样性。这种方式简化了密钥管理和系统部署,减少了服务器的负担,同时也提高了系统的可扩展性。
5.2 应用场景
- 密码认证密钥交换 :在非对称密码认证密钥交换(PAKE)中,OPAQUE SaPAKE 协议将 OPRF 作为核心组件,利用 POPRF 可以进一步增强协议的安全性和隐私性。通过盲化评估,客户端的密码信息在传输和处理过程中得到保护,防止了密码泄露和离线攻击的风险。
- 隐私保护通信 :在需要保护客户端隐私的通信场景中,POPRF 的请求隐私和不可链接性特性可以确保客户端的请求和响应之间无法被关联,保护了客户端的身份和通信内容。例如,在匿名投票系统、隐私保护的搜索服务等场景中,POPRF 可以发挥重要作用。
- 部分盲签名应用 :由于 POPRF 与部分盲签名相关,它可以应用于需要部分盲签名的场景,如电子货币、数字版权管理等。在这些场景中,部分盲签名可以确保签名的隐私性和不可伪造性,同时允许签名者对部分信息进行控制。
6. 总结与展望
本文详细介绍了部分遗忘伪随机函数(POPRF)的相关概念、语法语义、安全定义以及与部分盲签名的关系。通过引入新的安全定义,包括伪随机性、请求隐私和不可链接性以及唯一性,为 POPRF 提供了全面的安全保障。同时,展示了 POPRF 在密码认证密钥交换、隐私保护通信等领域的应用潜力。
未来,随着密码学和安全通信技术的不断发展,POPRF 有望在更多的领域得到应用。例如,在区块链技术中,POPRF 可以用于保护用户的隐私和交易信息,提高区块链的安全性和可扩展性。此外,进一步研究 POPRF 的性能优化和实现细节,降低其计算和通信开销,将有助于推动其在实际系统中的广泛应用。
为了更好地理解 POPRF 的安全性和应用,下面通过一个表格总结其主要安全定义和优势:
| 安全定义 | 描述 | 优势 |
| — | — | — |
| 伪随机性 | POPRF 输出与随机函数不可区分,通过模拟游戏和严格的查询限制保证安全性 | 防止恶意客户端通过盲化评估预言机获取额外信息,保障系统整体安全性 |
| 请求隐私和不可链接性(POPRIV1) | 确保在诚实但好奇的服务器环境下,客户端请求和输出不可链接,保护输入隐私 | 保护客户端隐私,防止服务器通过请求和输出关联获取客户端信息 |
| 请求隐私和不可链接性(POPRIV2) | 增强对恶意服务器的防御能力,允许攻击者选择公钥和回复请求 | 提供更强的隐私保护,适用于更复杂的安全场景 |
| 唯一性(POUNIQ) | 盲化评估输出与非盲化评估输出一致,确保服务器诚实执行盲化评估 | 避免恶意服务器提供不一致输出,增强系统可靠性 |
以下是一个 mermaid 流程图,展示了 POPRF 在密码认证密钥交换中的应用流程:
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(客户端发起认证请求):::process
B --> C(客户端使用 POPRF 盲化密码信息):::process
C --> D(发送盲化请求到服务器):::process
D --> E(服务器使用 POPRF 进行盲化评估):::process
E --> F(服务器返回盲化评估结果):::process
F --> G(客户端使用 POPRF 最终化评估):::process
G --> H{认证是否成功?}:::decision
H -->|是| I(建立共享会话密钥):::process
H -->|否| J(认证失败):::process
I --> K([结束]):::startend
J --> K
通过以上总结和展望,我们可以看到 POPRF 在密码学和安全通信领域具有重要的地位和广阔的应用前景。随着技术的不断进步,相信 POPRF 将为更多的安全应用提供有力的支持。
超级会员免费看
1953

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



