密钥管理与公钥变革
Needham-Schroeder协议
(对称)
1978年提出, 非安全网络环境下, 借助可信第三方利用对称
密码技术分配会话密钥
假设A和B分别与信任权威T建立了一个共享的静态密钥Kat和Kbt
Diffie-Hellman (-Merkle) KE 协议
安全定义:
如果DDH问题对于群 G 是困难的,那么DiffieHellman密钥交换协议在窃听者存在的情况下是安全的
中间人攻击
公钥加密
发送方使用公钥对消息进行加密;接收方使用私钥解密生成的密文。
优势:
-
公钥加密(在某种程度上)解决了密钥分发问题,因为通信各方不需要在通信之前秘密地共享密钥。即使双方之间的所有通信都被监控,双方也可以秘密通信。
-
当单个接收方与N个发送方通信时,接收方存储单个私钥sk要比共享、存储和管理N不同的对称密钥(即每个发送方一个)方便得多。
缺点:
-
公钥加密方案允许任何人充当发送者,这可能是一个缺点,因为接收方可能只想接收特定发送者的消息。
-
主要缺点是公钥加密大约比对称加密慢2到3个数量级。
选择明文安全
定义 11.1 一个公钥加密方案是一个PPT算法的三元组 (Gen, EncDec) 使得:
- 密 钥 生 成 算 法 Gen将 安 全 参 数 1 n \textbf{密 钥 生 成 算 法 Gen将 安 全 参 数 }1^n 密 钥 生 成 算 法 Gen将 安 全 参 数 1n作为输入,并输出一对密
钥 ( p k , s k ) (公钥暗含了消息空间 M ) 。 \begin{aligned}\text{钥}(pk,sk)\text{(公钥暗含了消息空间}\mathcal{M})。\end{aligned} 钥(pk,sk)(公钥暗含了消息空间M)。 - 加 密 算 法 Enc将 公 钥 p k \textbf{加 密 算 法 Enc将 公 钥 }pk 加 密 算 法 Enc将 公 钥 pk和某个消息空间中的消息 m m m作为输入,输出一个密文 c c c,我们将其写作 c ← E n c p k ( m ) c\leftarrow\mathsf{Enc}_{pk}(m) c←Encpk(m)。(我们也经常写作 c ← c\leftarrow c← E n c ( m , p k ) )。 \begin{aligned}\mathsf{Enc}(m,pk)\text{)。}\end{aligned} Enc(m,pk))。
- 确定性解密算法Dec以私钥 s k sk sk和密文 c c c作为输入,输出消息 m m m或特殊符号 ⊥ \bot ⊥表示失败。我们将其写作 m : = m: = m:= D e c s k ( c ) Dec_{sk}( c) Decsk(c)。(我们通常也写作 m : = m:= m:=Dec ( c , s k ) (c,sk) (c,sk))。
-
加密算法可以是确定性的,也可以是概率性的。
-
解密算法可能是完全正确的(从未失败),也可能以可忽略的概率失败。
-
如果一个公钥加密方案在窃听者的存在下具有不可区分加密,那么它是IND-CPA安全的。
-
没有公钥加密方案是具有完善保密性的。
-
没有确定性的公钥加密方案是IND-CPA安全的。
-
如果公钥加密方案Π是IND-CPA安全的,那么它对于多消息加密也具有不可区分加密。
-
Π与Π’
选择密文攻击安全一个公钥加密方案 Π = ( \Pi=( Π=(Gen,Enc,Dec)在选择密文攻击下具有不可区分加密(或是 CCA-安全的)如果对于所有PPT敌手 A \mathcal{A} A都存在一个可忽略函数 negl 使得
Pr [ P u b K A , Π сса ( n ) = 1 ] ≤ 1 / 2 + n e g l ( n ) . \Pr[\mathsf{PubK}_{\mathcal{A},\Pi}^\text{сса}{(n)}=1]\leq1/2+\mathsf{negl}(n). Pr[PubKA,Πсса(n)=1]≤1/2+negl(n).
KEM
一个密钥封装机制 (KEM)是一个PPT算法的三元组 (Gen
Encaps, Decaps) 使得:
- 密 钥 生 成 算 法 Gen以 安 全 参 数 1 n \textbf{密 钥 生 成 算 法 Gen以 安 全 参 数 1}^n 密 钥 生 成 算 法 Gen以 安 全 参 数 1n为输入,输出一对密钥 ( p k , s k ) (pk,sk) (pk,sk)
(密钥的长度至少为 n , n n,n n,n可由 p k pk pk确定)。 - 封 装 算 法 Encaps将 公 钥 p k \textbf{封 装 算 法 Encaps将 公 钥 }pk 封 装 算 法 Encaps将 公 钥 pk和安全参数1 n ^n n作为输入,输出一个密文 c c c和一个密钥 k ∈ { 0 , 1 } p ( n ) k\in\{0,1\}^p(n) k∈{0,1}p(n),其中 p p p是密钥长度。我们将其写作 ( c , k ) ← (c,k)\leftarrow (c,k)←Encaps p k ( 1 n ) _pk(1^n) pk(1n)(或 ( c , k ) ← (c,k)\leftarrow (c,k)←Encaps ( 1 n , p k ) ) (1^n,pk)) (1n,pk))。
- 确定性解封装算法Decaps以私钥 s k sk sk和密文 c c c为输入,输出密钥 k k k或表示失败的特殊符号 ⊥ \bot ⊥。我们将其写作 k : = Decaps s k ( c ) k:=\textbf{ Decaps}_{sk}(c) k:= Decapssk(c)(或 k : = k:= k:= D e c a p s ( s k , c ) \mathsf{Decaps}(sk,c) Decaps(sk,c))。
混合加密Hybrid encryption
给定一个KEM和一个DEM(对称加密方案),我们可以很容易构造一个混合加密方案。 在实际中,这种方案明显比只使用PKE方案更有效(当加密消息需要调用多个PKE时)
设 Π = ( \Pi=( Π=(Gen, Encaps, Decaps) 是密钥长度为 n n n的KEM, Π ′ = ( G e n ′ , E n c ′ , D e c ′ ) \Pi^{\prime}=(\mathrm{Gen}^{\prime},\mathrm{Enc}^{\prime},\mathrm{Dec}^{\prime}) Π′=(Gen′,Enc′,Dec′)是对称加密方案(DEM)。我们构造一个公钥加密方案 Π h y = ( G e n h y , E n c h y \Pi^hy=(\mathrm{Gen}^{hy},\mathrm{Enc}^{hy} Πhy=(Genhy,Enchy,Dec h y ) ^hy) hy)如下: - Gen h y ^hy hy:输入1 n ^n n,输出 ( p k , s k ) ← (pk,sk)\leftarrow (pk,sk)←Gen ( 1 n ) (1^n) (1n)
-
Enc h y ^{hy} hy:输入一个公钥 p k pk pk和一个消息 m ∈ { 0 , 1 } ∗ m\in\{0,1\}^* m∈{0,1}∗,运行:
∙ \bullet ∙计算 ( c , k ) ← (c,k)\leftarrow (c,k)←Encaps p k ( 1 n ) _pk(1^n) pk(1n)
∙ \bullet ∙计算 c ′ ← E n c k ′ ( m ) c^\prime\leftarrow\mathrm{Enc}_k^{'}(m) c′←Enck′(m)
·输出密文 ( c , c ′ ) (c,c^\prime) (c,c′) -
Dec h y ^hy hy:输入私钥 s k sk sk和密文 ( c , c ′ ) (c,c^\prime) (c,c′),运行:
∙ \bullet ∙计算 k : = k: = k:=D e c a p s s k ( c ) ecaps_sk( c) ecapssk(c) ∙ \bullet ∙输出消息 m : = m: = m:=D e c k ′ ( c ′ ) ec_k^\prime ( c^{\prime }) eck′(c′)
如果Π是CPA-安全的KEM,Π’是存在窃听者情况下具有不可区分加密的对称加密方案,那么Πhy是一个CPA-安全的公钥加密方案。
如果Π是CCA-安全的KEM,Π′是CCA-安全的对称加密方案,则Πhy是CCA-安全的公钥加密方案。
ElGamal
∙ \bullet ∙ Gen ( 1 n ) (1^n) (1n): 运行 ( G , q , g ) ← G ( 1 n ) (G,q,g)\leftarrow\mathbb{G}(1^n) (G,q,g)←G(1n), 选择 $x\xleftarrow{$}\mathbb{Z}_q$, 计算 y : = g x y:=g^x y:=gx 并输出 ( s k , p k ) : = ( ( G , q , g , x ) , ( G , q , g , y ) ) . (sk,pk):=((G,q,g,x),(G,q,g,y)). (sk,pk):=((G,q,g,x),(G,q,g,y)).
∙ \bullet ∙ Enc ( m , p k ) (m,pk) (m,pk): 输入 m ∈ G m\in G m∈G 和 p k = ( G , q , g , y ) pk=(G,q,g,y) pk=(G,q,g,y), 选择 $r\xleftarrow{$}\mathbb{Z}_q$, 计算 并输出 C : = ( g r , m ⋅ y r ) . C:=(g^r,m\cdot y^r). C:=(gr,m⋅yr).
∙ \bullet ∙ Dec ( C , s k ) (C,sk) (C,sk): 输入 C = ( C 1 , C 2 ) C=(C_1,C_2) C=(C1,C2) 和 s k = ( G , q , g , x ) sk=(G,q,g,x) sk=(G,q,g,x), 计算 并输出 m : = C 2 ⋅ ( C 1 x ) − 1 . m:=C_2\cdot(C_1^x)^{-1}. m:=C2⋅(C1x)−1.
· 正确性:
C 2 ⋅ ( C 1 x ) − 1 = m ⋅ y r ⋅ ( ( g r ) x ) − 1 = m ⋅ y r ⋅ ( y r ) − 1 = m ⋅ 1 = m . C_2\cdot(C_1^x)^{-1}=m\cdot y^r\cdot((g^r)^x)^{-1}=m\cdot y^r\cdot(y^r)^{-1}=m\cdot1=m. C2⋅(C1x)−1=m⋅yr⋅((gr)x)−1=m⋅yr⋅(yr)−1=m⋅1=m.
DDH问题相对于 g g g是困难的,如果对于所有的PPT算法 A \mathcal{A} A有一个可忽略函数使得 P r [ A ( G , q , g , g x , g r , g z ) = 1 ] − P r [ A ( G , q , g , g x , g r , g x r ) = 1 ] \begin{aligned}\mathsf{Pr}[\mathcal{A}(G,q,g,g^x,g^r,g^z)=1]-\mathsf{Pr}[\mathcal{A}(G,q,g,g^x,g^r,g^{xr})=1]\end{aligned} Pr[A(G,q,g,gx,gr,gz)=1]−Pr[A(G,q,g,gx,gr,gxr)=1]
≤ \leq ≤negl ( n ) (n) (n),
其中, x , r , z ∈ Z q x,r,z\in\mathbb{Z}_q x,r,z∈Zq是均匀一致选取的。
RSA
(普通RSA)
∙ \bullet ∙ Gen():生成 RSA 参数。
输入 1 n ^n n,输出 N N N, N N N是两个 n n n-比特素数 p p p和 q q q的乘积;随机选择 e e e,其中 1 < e < ϕ ( N ) <e<\phi(N) <e<ϕ(N)且 g c d ( e , ϕ ( N ) ) = 1 ; gcd(e,\phi(N))=1; gcd(e,ϕ(N))=1;计算 d d d满足 e d = 1 m o d ϕ ( N ) . ed=1\mod\phi(N). ed=1modϕ(N).
p k = ( N , e ) , s k = ( d ) pk=(N,e),\:sk=(d) pk=(N,e),sk=(d)
∙ \bullet ∙ Enc ( p k , m ) : ( 1 ) c = m e ( pk, m) \nobreak {: } ( 1) \textit{c}= m^e (pk,m):(1)c=me mod N N N
(2)输出 c c c
∙ \bullet ∙ Dec ( s k , c ) (sk,c) (sk,c):输出 m : = c d m:=c^d m:=cd mod N . N. N.
证明:由加密过程知 c = m e m o d N c=m^e\mod N c=memodN,所以
c d c^d cd mod N = m e d N=m^ed N=med mod N = m k ϕ ( N ) + 1 N=m^k\phi(N)+1 N=mkϕ(N)+1 mod N N N
分两种情况:
1 ◯ m \textcircled{1}m 1◯m与 N N N互素,则由Euler定理得
m ϕ ( N ) = 1 m o d N , m k ϕ ( N ) = 1 m o d N , m k ϕ ( N ) + 1 = m m o d N по d \begin{aligned}\\&m^{\phi(N)}=1\mod N,\\&m^{k\phi(N)}=1\mod N,\\&m^{k\phi(N)+1}=m\mod N\\&\quad\text{по }d\end{aligned} mϕ(N)=1modN,mkϕ(N)=1modN,mkϕ(N)+1=mmodNпо d
即 c d m o d N = m . c^d\mod N=m. cdmodN=m.
② g c d ( m , N ) ≠ 1 , 不妨设 m = t p 。 由 g c d ( m , q ) = 1 及Euler定理得 m ϕ ( q ) = 1 m o d q , 所以 m k ϕ ( q ) = 1 m o d q , [ m k ϕ ( q ) ] ϕ ( p ) = 1 m o d q , m k ϕ ( N ) = 1 m o d q 因此存在一整数 r ,使得 m k ϕ ( N ) = 1 + r q ,两边同乘 以 m = t p 得 m k ϕ ( N ) + 1 = m + r t p q = m + r t N , 所以 m k ϕ ( N ) + 1 = m m o d N ,即 c d m o d N = m 。 \begin{aligned} & ②gcd(m,N)\neq1,\text{不妨设 }m=tp\mathrm{。} \\ & \text{由 }gcd(m,q)=1\text{及Euler定理得 }m^{\phi(q)}=1{\mathrm{mod}}q, \\ & \text{所以 }m^{k\phi(q)}=1{\mathrm{mod}}q, \\ & [m^{k\phi(q)}]^{\phi(p)}=1{\mathrm{mod}}q, \\ & m^{k\phi(N)}=1{\mathrm{mod}}q \\ & \text{因此存在一整数 }r\text{,使得 }m^{k\phi(N)}=1+rq\text{,两边同乘} \\ & \text{以}m=tp\text{ 得} \\ & m^{k\phi(N)+1}=m+rtpq=m+rtN, \\ & \text{所以}m^{k\phi(N)+1}=m{\mathrm{mod}}N\text{,即}c^d{\mathrm{mod}}N=m\mathrm{。} \end{aligned} ②gcd(m,N)=1,不妨设 m=tp。由 gcd(m,q)=1及Euler定理得 mϕ(q)=1modq,所以 mkϕ(q)=1modq,[mkϕ(q)]ϕ(p)=1modq,mkϕ(N)=1modq因此存在一整数 r,使得 mkϕ(N)=1+rq,两边同乘以m=tp 得mkϕ(N)+1=m+rtpq=m+rtN,所以mkϕ(N)+1=mmodN,即cdmodN=m。
攻击:
普通RSA加密是确定性的,因此无法到达CPA安全。
对于恢复 m m m的二次改进(quadratic improvement)。
使用小的 e e e加密短消息。加密部分已知的消息。
加密相关消息。
c 1 = m e c_{1}=m^{e} c1=me mod N , c 2 = ( m + δ ) e N,c_2=(m+\delta)^{e} N,c2=(m+δ)e mod N . N. N.
窃听者可以定义 f 1 ( x ) = d e f x e − c 1 f_1(x)\stackrel{def}{=}x^e-c_1 f1(x)=defxe−c1和 f 2 ( x ) = d e f ( x + δ ) e − c 2 f_2(x)\stackrel{def}{=}(x+\delta)^e-c_2 f2(x)=def(x+δ)e−c2
(modulo N ) . N). N).
x = m x=m x=m是两个多项式的根 (modulo N ) , ( x − m ) N),(x-m) N),(x−m)是两个多项式的因式。如果 f 1 ( x ) f_1(x) f1(x) 和 f 2 ( x ) f_2(x) f2(x) (作为 Z N ∗ \mathbb{Z}_N^* ZN∗上的多项式)的最大公因式是线性的,那么将会泄露 m m m。最大公因式可以在poly ( ∣ ∣ N ∣ ∣ , e ) (||N||,e) (∣∣N∣∣,e)时间内计算出来,这种攻击对于小的 e e e是可行的。
2.
向多个接收者发送相同的消息。
发送方将同一消息加密后发送给给多个接收方。
设 e = 3 , m e=3,m e=3,m使用三个不同的公钥加密 p k 1 = ( N 1 , 3 ) pk_1=(N_1,3) pk1=(N1,3),
p k 2 = ( N 2 , 3 ) pk_{2}= ( N_{2}, 3) pk2=(N2,3), p k 3 = ( N 3 , 3 ) . pk_{3}= ( N_{3}, 3) . pk3=(N3,3).假设对于不同的 i , j i,j i,j,
gcd ( N i , N j ) = 1. \gcd(N_i,N_j)=1. gcd(Ni,Nj)=1.窃听者可以得到
c 1 = m 3 c_1=m^3 c1=m3 mod N 1 , c 2 = m 3 N_1,c_2=m^3 N1,c2=m3 mod N 2 , c 3 = m 3 N_2,c_3=m^3 N2,c3=m3 mod N 3 . N_3. N3. Let N ∗ = N 1 N 2 N 3 . N^*=N_1N_2N_3. N∗=N1N2N3.存在唯一的非负整数 c ^ < N ∗ \hat{c}<N^* c^<N∗使得 c ^ = c 1 \hat{c}=c_1 c^=c1 mod N 1 = c 2 N_1=c_2 N1=c2 mod N 2 = c 3 N_2=c_3 N2=c3 mod N 3 . N_3. N3.
可以计算 m 3 = c ^ . ( m 3 < N ∗ 因为 m 3 < min { N 1 , N 2 , N 3 } ) m^3=\hat{c}.\left(m^3<N^*\text{ 因为 }m^3<\min\left\{N_1,N_2,N_3\right\}\right) m3=c^.(m3<N∗ 因为 m3<min{N1,N2,N3})
3.共模攻击
在实现RSA时,为方便起见,可能给每一用户相同的模数 N N N,
虽然加解密密钥不同,然而这样做是不行的。
设两个用户的公钥分别为 e 1 e_1 e1和 e 2 e_2 e2,且 e 1 e_1 e1和 e 2 e_2 e2互素,明文消息
是 m m m,密文分别是
c 1 = m e 1 m o d N , c 2 = m e 2 m o d N c_1=m^{e_1}\mod N,c_2=m^{e_2}\mod N c1=me1modN,c2=me2modN
敌手截获 c 1 和 c 2 后,可如下恢复 m 。用扩展的Euclid算法求出 \begin{aligned}\text{敌手截获}c_1\text{和}c_2\text{后,可如下恢复}m\text{。用扩展的Euclid算法求出}\end{aligned} 敌手截获c1和c2后,可如下恢复m。用扩展的Euclid算法求出
满足 r e 1 + s e 2 = 1 re_1+se_2=1 re1+se2=1的两个整数 r r r和 s s s,由此
得 c 1 r c 2 s = m r e 1 + s e 2 = m m o d N c_1^rc_2^s= m^{re_1+ se_2}= m\allowbreak {\mathrm{mod}}N c1rc2s=mre1+se2=mmodN。
永远不要使用“教科书式的”RSA!
RSAES-OAEP
![在
RSA是陷门置换(trapdoor permutation) ⇒RSA-OAEP是CCA安全的,当 H, G 是 随机函数 在实际中:使用 SHA-256 实例化 H 和 G
过程:
n n n 是 RSA 模数的位数, k 0 k_0 k0 和 k 1 k_1 k1是协议中的固定整数,
m m m 是 n − k 0 − k 1 n-k_0-k_1 n−k0−k1位长的明文消息, G G G 和 H H H 是Hash函数, ⊕ \oplus ⊕
是异或运算。
编码过程包括如下步骤:
1.用 k 1 k_1 k1位长的 0 将消息 m m m填充至 n − k 0 n-k_0 n−k0位的长度。
2.随机生成 k 0 k_0 k0位长的串 r r r
3.用 G G G将 k 0 k_0 k0位长的 r r r扩展至 n − k 0 n-k_0 n−k0位长。
- X X X = m 00 ⋯ 0 ⊕ m00\cdots 0\oplus m00⋯0⊕ G ( r ) G( r) G(r)
5. H H H将 n − k 0 n-k_0 n−k0位长的 X X X缩短至 k 0 k_0 k0位长。
6. Y 6. Y 6.Y = r r r ⊕ \oplus ⊕ H ( X ) H( X) H(X)
7.输出为 X ∣ ∣ Y X||Y X∣∣Y, X X X 为最左边的块, Y Y Y 为最右边的块。
加密:随后可以使用 RSA 加密编码的消息,使用 OAEP 可以避免 RSA 的确定性。解码过程包括如下步骤:
- 恢复随机串 r r r 为 Y ⊕ H ( X ) Y \oplus H(X) Y⊕H(X)
- 恢复消息 m 0 … 0 m_0 \ldots 0 m0…0 为 X ⊕ G ( r ) X \oplus G(r) X⊕G(r)
数字签名
可以看作公钥环境下MAC,具有公共可验证性。
• 完整性保护:可以检测到对签名消息的任何修改。
• 来源认证性:识别签名消息的发送者。
• 不可否认性:签名者不能否认已签署(发送)过的消息。
安全性(直观):对于未由私钥持有者签名的消息,应该很难找到一个签名。
一个数字签名方案是一个PPT算法的三元组(Gen、Sig、Vrfy) 使得:
·密钥生成算法Gen以安全参数1 n ^n n为输入,输出一对密钥 ( p k , s k ) ( pk, sk) (pk,sk) ( 我 们 假 设 p k pk pk和 s k sk sk的 长 度 为 n n n, 并 且 n n n可 以从 p k pk pk或 s k sk sk推断出来)。
·签名算法Sig将私钥 s k sk sk和来自某个消息空间 M \mathcal{M} M的消息 m m m作为输入,输出签名 σ \sigma σ,我们将其写作 σ \sigma σ ← \leftarrow ← Sig s k ( m ) \operatorname{Sig}_{sk}(m) Sigsk(m)。
∙ \bullet ∙ 确定性验证算法Vrfy将公钥 p k pk pk、消息 m m m和签名 σ \sigma σ作为输 入输出 b , b = 1 表示签名有效, b = 0 表示无效。我 们将其写作 b : = Vrfy p k ( m , σ ) 。 \begin{array}{c}\text{入输出}b,b=1\text{表示签名有效,}b=0\text{表示无效。我}\\\text{们将其写作}b:=\text{Vrfy}_{pk}(m,\sigma)\mathrm{。}\end{array} 入输出b,b=1表示签名有效,b=0表示无效。我们将其写作b:=Vrfypk(m,σ)。
( p k , s k ) ← (pk,sk)\leftarrow (pk,sk)←Gen ( 1 n ) , 我 们 有 ( 1^n) \textbf{, 我 们 有 } (1n), 我 们 有
Vrfy p k ( m , S i g s k ( m ) ) = 1 \text{Vrfy}_{pk}(m,\mathbf{Sig}_{sk}(m))=1 Vrfypk(m,Sigsk(m))=1,
对于任意消息 m ∈ M . m\in\mathcal{M}. m∈M.
• 可能是确定性的或者是概率的
• 可能是有状态的,也可能是无状态的(后者是标准的)
确定性验证算法可能是完全正确的(从未失败)或可能以可忽略的概率失败。
威胁模型(逐渐增强):
- 无消息攻击(No-message attack,NMA): 敌手只能知道公钥。
- 随机消息攻击(Random message attack,RMA): 敌手可以获取随机消息的签名(不受敌手控制)。
- 非适应性选择消息攻击(Non-adaptive chosen messageattack,naCMA): 敌手确定一个想要获得签名的消息列表(在他知道公钥之前)。
- 选择消息攻击(Chosen message attack,CMA): 敌手可以适应性地要求对其选择的消息进行签名。
敌手的目标(难度降低)
- 无条件伪造(Universal forgery,UF): 给定敌手一个目标,敌手需要为其输出有效的签名。
- 存在性伪造(Existential forgery,EF): 敌手为其选择的消息输出签名。
EUF-CMA: 选择消息攻击下的存在不可伪造性
教科书式RSA签名
KeyGen: 输入 1 n ^n n,随机选择 n n n-比特的素数 p , q p,q p,q,令 N = p q N=pq N=pq,
选择 e e e使得 gcd ( e , ϕ ( N ) ) = 1 (e,\phi(N))=1 (e,ϕ(N))=1,计算 d : = e − 1 d:=e^-1 d:=e−1 mod ϕ ( N ) \phi(N) ϕ(N),
输出 ( s k , p k ) : = ( ( d , N ) , ( e , N ) ) . (sk,pk):=((d,N),(e,N)). (sk,pk):=((d,N),(e,N)).
Sig: 输入 m ∈ Z N ∗ m\in\mathbb{Z}_N^* m∈ZN∗和 s k = ( d , N ) sk=(d,N) sk=(d,N),计算并输出 σ = m d \sigma=m^d σ=md mod
N . N. N.
Vrfy: 输入公钥 p k = ( e , N ) pk=(e,N) pk=(e,N),消息 m ∈ Z N ∗ m\in\mathbb{Z}_N^* m∈ZN∗和签名 σ ∈ Z N ∗ \sigma\in\mathbb{Z}_N^* σ∈ZN∗,
输出 1 当且仅当 m : = σ e m:=\sigma^e m:=σe mod N . N. N.
攻击:
无消息(No-message)攻击
1.输出伪造 ( m ∗ , σ ∗ ) : = ( 1 , 1 ) . (m^*,\sigma^*):=(1,1). (m∗,σ∗):=(1,1).是有效的因为 1 d = 1 1^d=1 1d=1 mod N . N. N.
2.选择 σ ∈ Z N ∗ \sigma\in\mathbb{Z}_N^* σ∈ZN∗并计算 m : = σ e m:=\sigma^e m:=σe mod N . N. N.
E U F − C M A \mathsf{EUF-CMA} EUF−CMA攻击
∙ \bullet ∙请求消息 m 1 , m 2 ∈ Z N ∗ m_1,m_2\in\mathbb{Z}_N^* m1,m2∈ZN∗的签名 σ 1 , σ 2 \sigma_1,\sigma_2 σ1,σ2 for m 1 , m 2 ∈ Z N ∗ m_1,m_2\in\mathbb{Z}_N^* m1,m2∈ZN∗并输
出 ( m ⋆ , σ ⋆ ) : = ( m 1 ⋅ m 2 (m^\star,\sigma^\star):=(m_1\cdot m_2 (m⋆,σ⋆):=(m1⋅m2 mod N , σ 1 ⋅ σ 2 N,\sigma_1\cdot\sigma_2 N,σ1⋅σ2 mod N ) . N). N). 即使是安全的,消息空间是 Z N ∗ \mathbb{Z}_N^* ZN∗也是不可取的!
扩展消息空间:
分块签名
• 考虑 m := (m1, …, mn),mi ∈ M 并计算 σ := (σ1, …, σn).
• 需要注意避免混合-匹配(mix-and-match)攻击(块重新排
序,交换来自不同签名的块等)。
• 对于长消息效率低(每个块调用一次方案)。
先哈希再签名(Hash-and-Sign)
• 在签名之前,使用哈希函数H将任意长的消息压缩为固定
长度的字符串。
• H的取值范围需要与签名方案的消息空间兼容。
RSA-FDH
GenRSA与前面的章节一样,构造签名方案如下: ∙ Gen: 输入 1 n , 运行 GenRSA ( 1 n ) 计算 ( N , e , d ) . 公钥 是 < N , e > , 私钥是 < N , d > . 作为密钥生成的一部分,函数 H : { 0 , 1 } ∗ → Z N ∗ 是指 定的,但我们将其隐式地保留。 ∙ Sign: 输入私钥 < N , d > 和消息 m ∈ { 0 , 1 } ∗ ,计算 σ : = [ H ( m ) d m o d N ] . ∙ Vrfy: 输入公钥 < N , e > , 消息 m 和签名 σ , 输出 1 当 且仅当 σ e = ? H ( m ) m o d N . \begin{aligned} & \\ & \text{GenRSA与前面的章节一样,构造签名方案如下:} \\ & \bullet\text{Gen: 输入 }1^n,\text{运行 GenRSA}(1^n)\text{ 计算 }(N,e,d).\text{ 公钥} \\ & \text{是}<N,e>,\text{ 私钥是}<N,d>. \\ & \text{作为密钥生成的一部分,函数}H:\{0,1\}^*\to Z_N^*\text{是指} \\ & \text{定的,但我们将其隐式地保留。} \\ & \bullet\text{ Sign: 输入私钥}<N,d>\text{和消息 }m\in\{0,1\}^*\text{,计算} \\ & \sigma:=[H(m)^d\mathrm{~mod~}N]. \\ & \bullet\text{ Vrfy: 输入公钥 }<N,e>,\text{消息 }m\text{ 和签名 }\sigma,\text{输出 }1\text{ 当} \\ & \text{且仅当 }\sigma^e\overset{?}{\operatorname*{\operatorname*{=}}}H(m)\mathrm{~mod~}N. \end{aligned} GenRSA与前面的章节一样,构造签名方案如下:∙Gen: 输入 1n,运行 GenRSA(1n) 计算 (N,e,d). 公钥是<N,e>, 私钥是<N,d>.作为密钥生成的一部分,函数H:{0,1}∗→ZN∗是指定的,但我们将其隐式地保留。∙ Sign: 输入私钥<N,d>和消息 m∈{0,1}∗,计算σ:=[H(m)d mod N].∙ Vrfy: 输入公钥 <N,e>,消息 m 和签名 σ,输出 1 当且仅当 σe=?H(m) mod N.
RSA假设
Schnorr 签名
∙ \bullet ∙ KeyGen: 运行 G ( 1 n ) \mathcal{G}(1^n) G(1n)得到 ( G , q , g ) (G,q,g) (G,q,g).选择 x ← s Z q x\leftarrow^s\mathbb{Z}_q x←sZq并计算 y : = y:= y:= g x g^x gx.私钥为 x x x,对应的公钥是 ( G , q , g , y ) (G,q,g,y) (G,q,g,y).作为密钥生成的一部分,确定哈希函数 H : { 0 , 1 } ∗ → Z q . H:\{0,1\}^*\to\mathbb{Z}_q. H:{0,1}∗→Zq.
∙ \bullet ∙ Sign: 输入私钥 x x x和消息 m ∈ { 0 , 1 } ∗ m\in\{0,1\}^* m∈{0,1}∗,选择 k ← s Z q k\leftarrow^{\mathfrak{s}}\mathbb{Z}_q k←sZq并计算 I : = g k I:=g^k I:=gk.计算 r : = H ( I , m ) r:=H(I,m) r:=H(I,m)和 s : = r x + k s:=rx+k s:=rx+k mod q . q. q.输出签名 σ : = ( r , s ) . \sigma:=(r,s). σ:=(r,s).
∙ \bullet ∙ Vrfy: 输入公钥 ( G , q , g , y ) (G,q,g,y) (G,q,g,y),消息 m ∈ { 0 , 1 } ∗ m\in\{0,1\}^* m∈{0,1}∗和签名 σ = ( r , s ) \sigma=(r,s) σ=(r,s)
计算 I : = g s ⋅ y − r I:=g^s\cdot y^{-r} I:=gs⋅y−r并输出 1 如果 H ( I , m ) = r . H(I,m)=r. H(I,m)=r.
正确性: g s ⋅ y − r = g r x + k ⋅ g − x r = g k = I g^s\cdot y^{-r}=g^{rx+k}\cdot g^{-xr}=g^k=I gs⋅y−r=grx+k⋅g−xr=gk=I
如果离散对数问题相对于G是困难的,而H是随机预言机,那么Schnorr签名方案是EUF-CMA安全的。
DSA/ECDSA
∙ \bullet ∙ KeyGen:运行 G ( 1 n ) \mathcal{G}(1^n) G(1n)得到 ( G , q , g ) . (G,q,g). (G,q,g).选取$x\leftarrow$\mathbb{Z}_q$并设置$y:=gx.$ 私钥为 x x x,对应的公钥为 ( G , q , g , y ) . (G,q,g,y). (G,q,g,y).作为密钥生成的一部分,确定两个哈希函数 H : { 0 , 1 } ∗ → Z q H:\{0,1\}^*\to\mathbb{Z}_q H:{0,1}∗→Zq和 F : G → Z q . F:G\to\mathbb{Z}_q. F:G→Zq.
∙ \bullet ∙ Sign: 输入私钥 x x x和消息 m ∈ { 0 , 1 } ∗ m\in\{0,1\}^* m∈{0,1}∗,选取$k\leftarrow^{$}\mathbb{Z}_q 并设置 并设置 并设置r:=$ F ( g k ) . F(g^{k}). F(gk).计算 s : = k − 1 ( H ( m ) + r x ) s:=k^{-1}(H(m)+rx) s:=k−1(H(m)+rx) mod q ( q( q(如果 r = 0 r=0 r=0或 k = 0 k=0 k=0或r s = 0 s=0 s=0,那么重新选择 k ) . k). k).输出签名 σ : = ( r , s ) . \sigma:=(r,s). σ:=(r,s).
∙ Vrfy: 输 入 公 钥 ( G , q , g , y ) \bullet \textbf{Vrfy: 输 入 公 钥 }( G, q, g, y) ∙Vrfy: 输 入 公 钥 (G,q,g,y),消 息 m ∈ { 0 , 1 } ∗ m\in \{ 0, 1\} ^* m∈{0,1}∗ 和 签 名 σ = ( r , s ) \sigma = ( r, s) σ=(r,s), 其 中 r , s ≠ 0 m o d q r, s\neq 0\allowbreak {\mathrm{mod}}q r,s=0modq,计 算 u = s − 1 m o d q u= s^{- 1}\allowbreak {\mathrm{mod}}q u=s−1modq 并 输 出 1 如 果 r = r= r= F ( a H ( m ) u , r u ) F(a^{H(m)u},ru) F(aH(m)u,ru)
F ( g H ( m ) u y r u ) . F(g^{H(m)u}y^{ru}). F(gH(m)uyru).
∙ \bullet ∙ DSA 适
用于 Z p ∗ \mathbb{Z}_p^* Zp∗的素数q阶子群且 F ( I ) = I F(I)=I F(I)=I mod q . q. q.
∙ \bullet ∙ ECDSA 适用于椭圆曲线. E ( Z p ) E(\mathbb{Z}_p) E(Zp)的素数q阶子群且 I = ( x , y ) , F ( I ) = x I=(x,y),F(I)=x I=(x,y),F(I)=x
mod q q q
·如果 H H H和 F F F被模拟为随机预言机,EUF-CMA安全性可在DL假设下得
到证明。但对于上述这些的具体形式,尚无可证明安全。
其他
- Nyberg-Rueppel签名方案是一个具有消息恢复功能的数字签
名方案, 即验证算法不需要输入原始消息, 原始消息可以从
签名自身恢复出来, 适合短消息的签名。 - 基于大整数分解问题的数字签名
Feige-Fiat-Shamir签名方案—参数与密钥生成 - 盲签名
盲签名允许使用者获得一个消息的签名, 而签名者既不知道该消息的内容,也不知道该消息的签名。 - 群签名允许一个群体中的任意一个成员以匿名的方式代表整个
群体对消息进行签名。 - 代理签名方案中, 允许一个原始签名者把他的签名权力委托给一
个称为代理签名者的人, 然后代理签名者就可以代表原始签名者进行签名。
证书
后续更新
————————————————————————————————
致谢:感谢张源老师一学期的教学