可证明安全——签名

定义

定义数字签名方案 Π = ( Gen, Sign, Vrfy ) \Pi = (\text{Gen, Sign, Vrfy}) Π=(Gen, Sign, Vrfy) 如下:

  • Gen:输入安全参数 1 n 1^n 1n,输出长度均为 n n n 的公司钥对 ( p k , s k ) (pk,sk) (pk,sk)
  • Sign:输入私钥 s k sk sk 和明文 m m m,输出签名 σ ← Sign s k ( m ) \sigma \leftarrow \text{Sign}_{sk}(m) σSignsk(m)
  • Vrfy:输入公钥 p k pk pk,明文 m m m,签名 σ \sigma σ。输出 Vrfy p k ( m , σ ) \text{Vrfy}_{pk}(m,\sigma) Vrfypk(mσ)

安全性

定义伪造签名实验 Sig-forge A , Π ( n ) \text{Sig-forge}_{\mathcal{A},\Pi}(n) Sig-forgeA,Π(n)

  • ( p k , s k ) ← Gen ( 1 n ) (pk,sk)\leftarrow \text{Gen}(1^n) (pk,sk)Gen(1n)
  • 敌手 A \mathcal A A 输入 p k , Sign s k ( ⋅ ) pk, \text{Sign}_{sk}(\cdot) pk,Signsk(),敌手输出 ( m , σ ) (m,\sigma) (m,σ) Q \mathcal Q Q 表示 A \mathcal A A 查询过的全部明文。
  • A \mathcal A A 成功当且仅当 Vrfy p k ( m , σ ) = 1 \text{Vrfy}_{pk}(m,\sigma) = 1 Vrfypk(m,σ)=1 m ∉ Q m \notin \mathcal Q m/Q

电子签名方案 Π = ( Gen, Sign, Vrfy ) \Pi = (\text{Gen, Sign, Vrfy}) Π=(Gen, Sign, Vrfy) 不可伪造,当且仅当对任意多项式时间敌手 A \mathcal A A
Pr ⁡ [ Sig-forge A , Π ( n ) = 1 ] ≤ negl ( n ) \Pr[\text{Sig-forge}_{\mathcal A, \Pi}(n)=1] \le \text{negl}(n) Pr[Sig-forgeA,Π(n)=1]negl(n)

RSA-FDH 原理

GenRSA 是一个多项式算法,输入 1 n 1^n 1n,输出两个 n n n 位质数的乘积 N N N,两个整数 e , d e,d e,d 满足 e d ≡ 1 ( m o d ϕ ( N ) ) ed \equiv 1 \pmod {\phi(N)} ed1(modϕ(N))
定义 RSA-FDH 加密方案如下:

  • Gen: < N , e , d > ← GenRSA ( 1 n ) <N,e,d> \leftarrow \text{GenRSA}(1^n) <N,e,d>GenRSA(1n)。公钥为 < N , e > <N,e> <N,e>,私钥为 < N , d > <N,d> <N,d>。指定 H : { 0 , 1 } ∗ → Z N ∗ H:\{0,1\}^* \rightarrow \mathbb Z_N^* H:{0,1}ZN
  • Sign:输入私钥 < N , d > <N,d> <N,d> 和明文 m ∈ { 0 , 1 } ∗ m \in \{0,1\}^* m{0,1},计算 σ ← [ H ( m ) d m o d    N ] \sigma \leftarrow [H(m)^d \mod N] σ[H(m)dmodN]
  • Vrfy:输入公钥 <N,e>,消息 m m m,签名 σ \sigma σ,当且仅当 σ e = H ( m ) m o d    N \sigma ^ e = H(m) \mod N σe=H(m)modN 时,输出 1

证明

当 RSA 假设成立,且 H H H 符合随机预言模型,即将输入随机映射到 Z n ∗ \mathbb Z_n^* Zn 时,可以证明其不可伪造性。
A \mathcal A A 查询 H H H q q q 次,构造实验 Sig-forge A , Π ′ ( n ) \text{Sig-forge}'_{\mathcal{A}, \Pi}(n) Sig-forgeA,Π(n)

  • 随机选择 j ∈ { 1 , . . . , q } j \in \{1, ..., q\} j{1,...,q}(不输入给 A \mathcal A A
  • ( N , e , d ) ← GenRSA ( 1 n ) (N,e,d) \leftarrow \text{GenRSA}(1^n) (N,e,d)GenRSA(1n),选定随机函数 H : { 0 , 1 } ∗ → Z N ∗ H:\{0,1\}^* \rightarrow \mathbb Z_N^* H:{0,1}ZN
  • 给敌手 A \mathcal A A 输入 p k = ( N , e ) , H , Sign < N , d > ( ⋅ ) pk = (N,e), H, \text{Sign}_{<N,d>}(\cdot) pk=(N,e),H,Sign<N,d>(),明文 m m m,返回 σ ← [ H ( m ) d m o d    N ] \sigma \leftarrow [H(m)^d \mod N] σ[H(m)dmodN]。当查询 Sign < N , d > ( m j ) \text{Sign}_{<N,d>}(m_j) Sign<N,d>(mj) 时,会返回失败。
  • A \mathcal A A 输出此前没有查询过签名的 ( m , σ ) (m, \sigma) (m,σ)。设 m = m i m = m_i m=mi 为第 i i i 次查询 H H H 的输入。 Sig-forge A , Π ′ ( n ) = 1 \text{Sig-forge}'_{\mathcal{A}, \Pi}(n) = 1 Sig-forgeA,Π(n)=1 当且仅当 σ e ≡ H ( m ) ( m o d N ) \sigma^e \equiv H(m) \pmod N σeH(m)(modN) i = j i = j i=j

由于 Sig-forge A , Π ′ ( n ) \text{Sig-forge}'_{\mathcal{A}, \Pi}(n) Sig-forgeA,Π(n) 成功,必须输出 m j m_j mj 的加密码,因此禁止查询 m j m_j mj。显然, Pr ⁡ [ Sig-forge A , Π ′ ( n ) = 1 ] = 1 q Pr ⁡ [ Sig-forge A , Π ( n ) = 1 ] \Pr[\text{Sig-forge}'_{\mathcal{A}, \Pi}(n) = 1] = \frac 1q \Pr[\text{Sig-forge}_{\mathcal{A}, \Pi}(n) = 1] Pr[Sig-forgeA,Π(n)=1]=q1Pr[Sig-forgeA,Π(n)=1],即输出的 m m m 正好是随机确定的那个。

给定 N , e , y N, e, y N,e,y,构造敌手 A ′ \mathcal A' A 解决 RSA 问题:

  • 随机选择 j ∈ { 1 , . . . , q } j \in \{1, ..., q\} j{1,...,q}
  • 运行 A \mathcal A A。记录所有的三元组 < m i , σ i , y i > <m_i,\sigma_i,y_i> <mi,σi,yi> 表明已经查询过 H ( m i ) = y i H(m_i) = y_i H(mi)=yi σ i e ≡ y i ( m o d N ) \sigma_i^e \equiv y_i \pmod N σieyi(modN)
  • A \mathcal A A i i i 次查询 H H H
    • 如果 i = j i = j i=j,返回 y y y
    • 否则选择随机的 σ i ∈ Z n ∗ \sigma_i \in \mathbb Z_n^* σiZn,计算 y i ← [ σ i e m o d    N ] y_i \leftarrow [\sigma_i^e \mod N] yi[σiemodN] 并返回。记录 < m i , σ i , y i > <m_i, \sigma_i, y_i> <mi,σi,yi>
  • A \mathcal A A 查询 m m m 的签名时,设 m i = m m_i = m mi=m
    • 如果 j = i j = i j=i,禁止查询
    • 如果有三元组 ( m i , σ i , y i ) (m_i, \sigma_i, y_i) (mi,σi,yi),返回 σ i \sigma_i σi
  • 最后 A \mathcal{A} A 输出 ( m , σ ) (m,\sigma) (m,σ)。如果 m = m j m = m_j m=mj σ e ≡ y ( m o d N ) \sigma^e \equiv y \pmod N σey(modN) A ′ \mathcal A' A 输出 σ \sigma σ

这个例子很好地用到了随机语言模型的可编程性。要输出一个均匀随机的 y y y A ′ \mathcal A' A 生成一个均匀随机的 σ \sigma σ,并返回 σ e m o d    N \sigma ^e \mod N σemodN

Pr ⁡ [ RSA-inv A ′ , GenRSA ( n ) = 1 ] = Pr ⁡ [ Sig-forge A , Π ′ ( n ) = 1 ] = 1 q Pr ⁡ [ Sig-forge A , Π ( n ) = 1 ] \begin{aligned} \Pr[\text{RSA-inv}_{\mathcal A',\text{GenRSA}}(n)=1] &= \Pr[\text{Sig-forge}'_{\mathcal{A}, \Pi}(n) = 1] \\ & = \frac 1q \Pr[\text{Sig-forge}_{\mathcal{A}, \Pi}(n) = 1] \end{aligned} Pr[RSA-invA,GenRSA(n)=1]=Pr[Sig-forgeA,Π(n)=1]=q1Pr[Sig-forgeA,Π(n)=1]

由于 Pr ⁡ [ RSA-inv A ′ , GenRSA ( n ) = 1 ] ≤ negl ( n ) \Pr[\text{RSA-inv}_{\mathcal A',\text{GenRSA}}(n)=1] \le \text{negl}(n) Pr[RSA-invA,GenRSA(n)=1]negl(n),所以 Pr ⁡ [ Sig-forge A , Π ( n ) = 1 ] ≤ q ⋅ negl ( n ) \Pr[\text{Sig-forge}_{\mathcal{A}, \Pi}(n) = 1] \le q\cdot \text{negl}(n) Pr[Sig-forgeA,Π(n)=1]qnegl(n)

构造安全签名

可变长度

Π ′ = ( Gen, Sign’, Vrfy’ ) \Pi' = (\text{Gen, Sign', Vrfy'}) Π=(Gen, Sign’, Vrfy’) 是固定长度 n n n 的不可伪造签名,则构造如下 Π = ( Gen, Sign, Vrfy ) \Pi = (\text{Gen, Sign, Vrfy}) Π=(Gen, Sign, Vrfy) 为任意长度签名:

  • Sign:输入秘钥 s k sk sk,长度为 l l l 的明文 m m m,将 m m m 切成 d d d m 1 , m 2 , . . . , m d m_1,m_2,...,m_d m1,m2,...,md, 每块长度为 n / 4 n/4 n/4.
    随机选择 r ∈ { 0 , 1 } n / 4 r \in \{0, 1\}^{n/4} r{0,1}n/4。对 i = 1 , 2 , . . . , d i = 1, 2, ..., d i=1,2,...,d,计算 t i ← S i g n s k ′ ( r ∣ ∣ l ∣ ∣ i ∣ ∣ m i ) t_i \leftarrow Sign_{sk}'(r||l||i||m_i) tiSignsk(rlimi),输出 < r , t 1 , . . . , t d > <r,t_1, ..., t_d> <r,t1,...,td> 作为签名。
  • Vrfy:输入公钥 p k pk pk,长度为 l l l 的明文 m m m,数字签名 < r , t 1 , . . . , t d ′ > <r,t_1, ..., t_{d'}> <r,t1,...,td>。将 m m m 切成 d d d m 1 , . . . , m d ′ m_1, ..., m_{d'} m1,...,md。当且仅当 d = d ′ d = d' d=d Vrfy p k ′ ( r ∣ ∣ l ∣ ∣ i ∣ ∣ m i , t i ) = 1 \text{Vrfy}_{pk}'(r||l||i||m_i,t_i) = 1 Vrfypk(rlimi,ti)=1 对任意 1 ≤ i ≤ d 1 \le i \le d 1id 成立。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值