38、标准模型下的可分电子现金

标准模型下的可分电子现金

1. 可分电子现金的定义

电子现金方案涉及银行(B)、众多用户(U)和商家(M,可视为特殊用户)。这些参与方通过以下协议进行交互:
- CashSetup(λ) :以安全参数 λ 为输入,输出公共参数 params。
- BankKG(params, L) :生成银行的公共和秘密参数 (skB, pkB),使银行能发行价值为 2L 的钱包(假设 L 是 pkB 的一部分),同时定义一个空数据库 DBB 供后续使用。
- UserKG(params) :生成用户密钥对 (skU, pkU),用 HU 表示诚实生成的公钥集合。
- Withdraw :用户 U 和银行 B 之间的交互协议,允许诚实用户获取价值为 2L 的硬币。钱包 W 包含硬币、用户的私钥、银行的签名和一些状态信息 state。银行从用户账户扣款,并在数据库 T 中存储追踪信息 TW,用于揭露双花者的身份。
- Spend :用户 U 调用此协议花费钱包中价值为 2ℓ 的硬币,并生成硬币有效的证明 Π。输出包含证明 Π 的硬币和指定交易的新公共信息 info。
- VerifyCoin :允许商家 M 检查给定硬币的有效性,并根据验证结果输出一个比特值。
- Deposit :银行 B 使用 {(coin, flag, 2ℓ)} 更新数据库 DBB,其中 flag 表示硬币是否为价值 2ℓ 的有效硬币,以及是否检测到作弊尝试。
- 如果硬币验证失败,银行拒绝并将 flag 设置为 “M”,表示作弊商家。
- 如果硬币验证通过,银行运行双花检测算法,若检测到超额花费,将 flag 设置为 “U”,输出两枚硬币并报告双花情况。
- 如果硬币通过所有测试,银行接受硬币,将 flag 设置为 “accept” 并向商家账户充值。
- Identify :银行使用数据库 DBB 和两枚不同的硬币检索双花者的公钥 pkU。

1.1 安全模型

电子现金方案安全需同时具备正确性、匿名性、平衡性、可识别性和免责性。
- 匿名性 :采用基于模拟的匿名性定义,任何银行和商家联盟都不应能区分 Spend 协议的真实执行和模拟执行。在安全实验中,对手可通过预言机 QGetKey、Qwithdraw、QSpend 分别获取用户公钥、提取和花费硬币。正式定义为:存在模拟器 (SimCashSetup, SimSpend),对于任何对手 A = (A1, A2),存在可忽略函数 negl : N → R,使得:
[
\left|
\begin{array}{l}
\Pr[\text{params} \leftarrow \text{CashSetup}(\lambda); (\text{pkB}, \text{state}) \leftarrow A_1(\text{params}) : \
A_2^{\text{QSpend}(\text{params},\text{pkB},\cdot,\cdot),\text{QGetKey}(\text{params},\cdot),\text{Qwithdraw}(\text{params},\text{pkB},\cdot,\cdot)}(\text{state}) = 1] \
- \Pr[(\text{params}, \text{Sim}) \leftarrow \text{SimCashSetup}(\lambda); (\text{pkB}, \text{state}) \leftarrow A_1(\text{params}) : \
A_2^{\text{QSimSpend}(\text{params},\text{pkB},\cdot,\cdot),\text{QGetKey}(\text{params},\cdot),\text{Qwithdraw}(\text{params},\text{pkB},\cdot,\cdot)}(\text{state}) = 1]
\end{array}
\right| < \text{negl}(\lambda)
]
预言机定义如下:
- QGetKey(params, j) :输出 pkUj。若 Uj 不存在,预言机生成 (skUj, pkUj) ← UserKG(params) 并输出 pkUj。
- Qwithdraw(params, pkB, j, f) :给定钱包标识符 f,预言机扮演用户 j 的角色,在 Withdraw 协议执行中与扮演银行的对手 A 交互,创建价值为 2i 的钱包 Wf。
- QSpend :首先检查钱包 Wf 是否通过 Qwithdraw 创建,若未创建则输出 ⊥;若 Wf 有足够金额,运行 Spend 协议并输出价值为 v 的硬币;否则输出 ⊥。
- QSimSpend :若 f 不是通过 Qwithdraw 获得的有效提款钱包的索引,输出 ⊥;否则,对输入运行模拟器 SimSpend。
- 平衡性 :任何用户联盟花费的硬币数量都不能超过他们提取的数量。对于任何对手和每个值 L ∈ poly(λ),有:
[
\Pr [\text{params} \leftarrow \text{CashSetup}(\lambda); (\text{pkB}, \text{skB}) \leftarrow \text{BankKG}(\text{params}, L); (\text{qw}, \text{nd}) \leftarrow A^{\text{Qwithdraw}(\text{params},\cdot,\text{pkB},\cdot)(),\text{Qdeposit}(\text{params},\text{pkB},\text{DBB})} : \text{qw} \cdot 2^L < \text{nd}] < \text{negl}(\lambda)
]
其中 nd 是成功调用 Qdeposit 预言机后存入的总金额,qw 是成功调用 QWithdraw 的次数。预言机定义如下:
- Qwithdraw :在 Withdraw 协议执行中扮演银行角色,与扮演作弊用户的对手交互,结束时在数据库 T 中存储追踪信息 TW。
- Qdeposit :在协议中扮演银行角色,对手扮演商家角色,初始化银行数据库 DBB 为空,并返回与 Deposit 协议相同的响应。
- 可识别性 :给定两枚欺诈但格式良好的硬币,银行应能识别双花者。对于任何对手 A 和任何 L ∈ poly(λ),有:
[
\begin{align }
&\Pr [\text{params} \leftarrow \text{CashSetup}(\lambda); (\text{pkB}, \text{skB}) \leftarrow \text{BankKG}(\text{params}, L); \
&((\text{coina}, \text{va}), (\text{coinb}, \text{vb})) \leftarrow A^{\text{Qwithdraw}(\text{params},\cdot,\text{skB},\cdot)}(\text{params}, \text{pkB}) : \
&(\text{infoa}; \text{pkMa}) \neq (\text{infob}; \text{pkMb}) \land \text{SameCoin}(\text{coina}, \text{coinb}, \text{va}, \text{vb}) = 1 \
&\land \text{VerifyCoin}(\text{params}, \text{pkMt}, \text{pkB}, \text{coint}, \text{vt}) = 1 \text{ for } t \in {a, b} \
&\land \text{Identify}(\text{params}, \text{pkB}, \text{coina}, \text{coinb}) \notin T] < \text{negl}(\lambda)
\end{align
}
]
其中 Qwithdraw 预言机的规范与平衡性属性中的相同。
- 免责性 :任何与诚实用户 U 交互的银行和商家联盟都不应能产生两枚硬币 (coina, coinb),使得 Identify(params, pkB, coina, coinb) = pkU,而用户 U 从未进行双花。对于任何 PPT 对手 A,有:
[
\begin{align }
&\Pr [\text{params} \leftarrow \text{CashSetup}(\lambda); (\text{pkB}, \text{st}) \leftarrow A(\text{params}); \
&(\text{pkB}, \text{coina}, \text{coinb}, \text{va}, \text{vb}) \leftarrow A^{\text{QSpend}(\text{params},\text{pkB},\cdot,\cdot),\text{QGetKey}(\text{params},\cdot),\text{Qwithdraw}(\text{params},\cdot,\cdot,\cdot)}(\text{params}, \text{st}); \
&\text{SameCoin}(\text{coina}, \text{coinb}, \text{va}, \text{vb}) = 1; \text{pkU} \leftarrow \text{Identify}(\text{params}, \text{coina}, \text{coinb}) : \text{pkU} \in \text{HU}] < \text{negl}(\lambda)
\end{align
}
]
其中 HU 表示诚实用户的集合,QGetKey、Qwithdraw 和 QSpend 预言机的定义与匿名性概念中的完全相同。

1.2 流程图示

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A[CashSetup]:::process --> B[BankKG]:::process
    A --> C[UserKG]:::process
    B --> D[Withdraw]:::process
    C --> D
    D --> E[Spend]:::process
    E --> F[VerifyCoin]:::process
    F --> G[Deposit]:::process
    G --> H{检测结果}:::process
    H -- 验证失败 --> I[拒绝, flag = M]:::process
    H -- 双花检测到 --> J[报告双花, flag = U]:::process
    H -- 通过所有测试 --> K[接受, flag = accept]:::process
    J --> L[Identify]:::process

2. F - 不可伪造签名

多块签名方案由高效算法 Σ = (SigSetup, KeyGen, Sign, Verify) 组成:
- SigSetup(λ) :以安全参数 λ 为输入,输出指定待签名消息向量长度 n ∈ poly(λ) 的 params。
- Keygen(params) :以公共参数为输入,输出密钥对 (pk, sk)。
- Sign(sk, ⃗m) :可能是随机化算法,以私钥 sk 和消息向量 ⃗m 为输入,输出签名 σ。
- Verify(pk, ⃗m, σ) :确定性算法,以公钥 pk、签名 σ 和消息向量 ⃗m 为输入,若 σ 对 ⃗m 有效则输出 1,否则输出 0。

多块签名方案 Σ 对于某个单射函数 F(.) 是 F - 不可伪造的,即没有概率多项式时间 (PPT) 对手在以下游戏中有不可忽略的优势:
1. 挑战者运行 Setup 和 Keygen 获得 (pk, sk),将 pk 发送给对手 A。
2. 对手 A 自适应查询签名预言机,每次查询选择向量 ⃗m 并获得签名 σi。
3. 对手 A 输出一对 并在以下条件下获胜:
- Verify(pk, m⋆, σ⋆) = 1。
- A 未获得向量 (m⋆1, …, m⋆n) 的任何签名。

多块 P - 签名结合了 F - 不可伪造多块签名方案 Σ、承诺方案 (Com, Open) 和三个协议:
- SigProve(params, pk, σ, ⃗m) :生成一系列承诺和 NIZK 证明。
- NIZK 证明 :证明两个承诺打开到相同的值。
- SigIssue ⇄ SigObtain :允许用户在不向签名者透露消息向量信息的情况下获得签名。

3. 双线性映射和复杂度假设

考虑素数阶 p 的非对称双线性群 (G1, G2, GT),映射 e : G1 × G2 → GT 满足:
- 对于任何 (g, h) ∈ G1 × G2 和 a, b ∈ Z,e(ga, hb) = e(g, h)ab。
- 当 g ≠ 1G1 且 h ≠ 1G2 时,e(g, h) ≠ 1GT。

由于依赖 G1 和 G2 中 DDH 问题的难度,还要求 G2 和 G1 之间不存在高效可计算的同构。

3.1 复杂度问题定义

  • q - 隐藏强 Diffie - Hellman 问题 (q - HSDH) :给定 (g, u, h, Ω = hω) ∈ G21 × G22 和元组 (g1/(ω + ci), gci, hci, uci),找到 (g1/(ω + c), hc, uc) 使得 c ≠ ci。
  • q - 决策 Diffie - Hellman 反转问题 (q - DDHI) :给定 (g, g(α), …, g(αq)) ∈ Gq + 11 和 η ∈ G1,判断 η = g1/α 还是 η ∈R G1。
  • 三重 Diffie - Hellman 问题 (TDH) :给定元组 (g, ga, gb, h, ha) 和对 (ci, g1/a + ci),找到三元组 (gμb, hμa, gμab) 使得 μ ≠ 0。
  • 决策三方 Diffie - Hellman 问题 (D3DH) :给定元素 (g, ga, gb, gc, h, ha, hb, hc, Γ),判断 Γ = gabc 还是 Γ ∈R G1。

3.2 构建模块

  • 非交互见证不可区分证明 :使用 Groth - Sahai 证明来处理配对积方程 (PPE):
    [
    \prod_{j = 1}^{n} e(A_j, Y_j) \prod_{j = 1}^{n} e(X_i, B_j) \prod_{i = 1}^{m} \prod_{j = 1}^{n} e(X_i, Y_j)^{\gamma_{i,j}} = t_T
    ]
    证明系统是四个算法的元组 (SetupGS, ProveGS, VerifyProofGS):
    • SetupGS 输出公共参考字符串 (CRS) crs。
    • ProveGS 首先生成变量的承诺,然后构建证明。
    • VerifyProofGS 验证证明。
    • GS 证明具有见证不可区分性,部分可实现零知识。
  • 多块 P - 签名 :在 HSDH 和 TDH 假设下,多块 P - 签名被证明是 F - 安全的。
    • 公共参数定义为 (p, G1, G2, GT, e, g, h, paramsGS, e(g, h))。
    • 公钥和私钥分别为 pk = (u, U = gβ, ˜U = hβ, {Vi = gai, ˜Vi = hai}ni = 1) 和 sk = (β, ⃗a = (a1, …, an))。
    • 签名向量 ⃗m 时,签名者选择 r 并计算 σ = (g1/β + r + ∑ni = 1 aimi, hr, ur)。
    • 验证签名时,检查 e(σ1, ˜U · σ2 · ∏ni = 1 ˜V mi i) = e(g, h) 和 e(u, σ2) = e(σ3, h)。

3.3 协议流程

协议 描述
SigProve(params, pk, σ, ⃗m) 解析签名和向量,计算承诺和 NIZK 证明。
VerifyProof(params, pk, πsig, (C1, …, Cn)) 验证 SigProve 生成的证明。
EqComProve(params, pk, x, y) 证明两个承诺打开到相同的值。
SigIssue(sk, (C1, …, Cn)) ⇆ SigObtain(params, pk, ⃗m, {(Ci, openi)}ni = 1) 安全的两方协议,接收者在承诺消息向量上获得签名。

如果 HSDH 和 TDH 假设在 (G1, G2) 中成立,该方案对于单射函数 F(m) = (hm, um) 是 F - 不可伪造的。

4. 多块 P - 签名协议细节

4.1 SigProve 协议

在 SigProve 协议中,需要对签名和消息向量进行详细处理。具体步骤如下:
1. 解析签名和消息向量 :将签名 σ 解析为 (σ1, σ2, σ3),消息向量 ⃗m 解析为 (m1, …, mn)。
2. 计算承诺 :对于每个指数 mi ∈ Zp,计算 Groth - Sahai 对 hmi 和 umi 的承诺。
- 计算 (Ci,1, Ci,2, Ci,3) = Com(mi, (openmi,1, openmi,2, openmi,3)),具体为 (GSCom(hmi, openmi,1), GSCom(umi, openmi,2), GSCom(˜V mi i, openmi,3))。
3. 生成辅助变量承诺 :生成辅助变量 θ = 1 ∈ Zp 及其承诺 Cθ = GSCom(θ, openθ)。
4. 生成签名承诺 :生成对 {στ}3 τ = 1 的承诺 {Cστ}3 τ = 1。
5. 构建 NIZK 证明 :给出一系列等式的 NIZK 证明,包括:
- e(gθ, h) = e(σ1, ˜U · σ2 · ∏ni = 1 ˜V mi i)
- e(u, σ2) = e(σ3, h)
- θ = 1
- e(g, ˜V mi i) = e(Vi, hmi)
- e(u, hmi) = e(umi, h) (i ∈ {1, …, n})

证明 πsig 由 {Cστ}3 τ = 1、πsig 1、πsig 2、πsig θ、{πsig mi,1, πsig mi,2}n i = 1 组成。不同的证明部分所需的元素数量不同,例如 πsig 1 是二次方程的证明,需要 4 个 G1 元素和 4 个 G2 元素;其他线性方程的证明所需元素数量相对较少。在模拟的 CRS 上,除了 θ = 1 这个方程可以简单地对承诺进行伪装外,其他证明都可以使用 1G1、1G2 和 θ = 0 作为见证进行模拟。

4.2 VerifyProof 协议

VerifyProof 协议用于验证 SigProve 生成的证明。它的工作方式很直接,当且仅当 SigProve 生成的证明 πsig 令人信服时,返回 1。

4.3 EqComProve 协议

EqComProve 协议用于证明两个承诺打开到相同的值,它采用了在 [3,5] 中已经使用过的常用技术。

4.4 SigIssue ⇆ SigObtain 协议

这是一个安全的两方协议,允许接收者在承诺的消息向量上获得签名。可以使用 [32] 中的两方协议来计算承诺输入上的电路,也可以使用 [4] 中基于同态加密的两方计算协议。

4.5 协议流程图示

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A[SigProve]:::process --> B[计算承诺]:::process
    B --> C[生成辅助变量承诺]:::process
    C --> D[生成签名承诺]:::process
    D --> E[构建 NIZK 证明]:::process
    E --> F[输出证明 πsig]:::process
    G[VerifyProof]:::process --> H{证明是否有效}:::process
    H -- 有效 --> I[返回 1]:::process
    H -- 无效 --> J[返回 0]:::process
    K[EqComProve]:::process --> L[证明承诺相同]:::process
    M[SigIssue]:::process --> N[SigObtain]:::process
    N --> O[获得签名]:::process

5. 可分电子现金与相关技术的关联

可分电子现金方案的实现依赖于多个相关技术,它们之间相互协作,共同保证了电子现金系统的安全性和功能性。

5.1 与 F - 不可伪造签名的关联

电子现金方案中的银行签名等操作依赖于 F - 不可伪造签名。在用户提取硬币时,银行对钱包等信息进行签名,保证了信息的完整性和不可伪造性。例如,在 Withdraw 协议中,银行对钱包的签名可以防止用户篡改钱包信息。而 F - 不可伪造签名的特性,使得任何试图伪造签名的行为都具有极低的成功概率,从而保障了电子现金系统的安全性。

5.2 与非交互见证不可区分证明的关联

非交互见证不可区分证明在 Spend 协议中发挥了重要作用。当用户花费硬币时,需要生成证明 Π 来证明硬币的有效性。使用 Groth - Sahai 证明等非交互见证不可区分证明技术,可以在不泄露用户隐私信息的情况下,让商家和银行验证硬币的有效性。这种证明技术的见证不可区分性和部分零知识特性,保证了用户的交易信息不会被泄露。

5.3 与多块 P - 签名的关联

多块 P - 签名为电子现金系统提供了更高级的签名和证明机制。在电子现金的交易过程中,涉及到多个消息向量的签名和验证。多块 P - 签名的 SigProve、VerifyProof 等协议可以对这些消息向量进行有效的签名和验证,确保交易的合法性和安全性。例如,在 Deposit 协议中,银行可以使用多块 P - 签名的验证协议来验证硬币的签名是否有效。

5.4 关联关系表格

技术 与可分电子现金的关联
F - 不可伪造签名 保证银行签名的不可伪造性,用于钱包等信息的签名
非交互见证不可区分证明 用于 Spend 协议中硬币有效性证明,保护用户隐私
多块 P - 签名 提供高级签名和验证机制,用于交易信息的签名和验证

6. 总结

可分电子现金方案是一个复杂而安全的系统,它结合了多种密码学技术来实现电子现金的安全交易。通过定义详细的协议和安全属性,如匿名性、平衡性、可识别性和免责性,确保了用户和商家的利益。F - 不可伪造签名、非交互见证不可区分证明和多块 P - 签名等技术为系统的安全性提供了坚实的保障。

在未来,随着密码学技术的不断发展和应用场景的不断拓展,可分电子现金方案可能会得到更广泛的应用。同时,也需要不断研究和改进这些技术,以应对新的安全挑战和需求。例如,进一步优化证明的效率,降低计算和通信开销,提高系统的性能和可用性。对于开发者和研究者来说,深入理解这些技术的原理和实现细节,有助于更好地设计和实现安全高效的电子现金系统。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值