1 Elgamal 签名
1.1 公共参数
- α \alpha α 是 q q q 的原根。
1.2 Gen 过程
-
随机选择 X A ∈ Z X_A \in \mathbb{Z} XA∈Z, 1 < X A < q − 1 1 < X_A < q - 1 1<XA<q−1。
-
计算 Y A = α X A m o d q Y_A = \alpha^{X_A}\bmod q YA=αXAmodq。
-
私钥 { X A } \{X_A\} {XA},公钥 { Y A } \{Y_A\} {YA}。
1.3 Sign 过程
-
m = H ( M ) m = H(M) m=H(M), 0 ≤ m ≤ q − 1 0 \leq m \leq q-1 0≤m≤q−1。
-
随机选择 K ∈ Z K \in \mathbb{Z} K∈Z, 1 ≤ K ≤ q − 1 1 \leq K \leq q-1 1≤K≤q−1 和 g c d ( K , q − 1 ) = 1 gcd(K,q-1)=1 gcd(K,q−1)=1。
-
计算 S 1 = α K m o d q S_1 = \alpha^{K}\bmod q S1=αKmodq。
-
计算 S 2 = [ K − 1 ( m − X A S 1 ) ] m o d ( q − 1 ) S_2 = [K^{-1}(m - X_AS_1)]\bmod(q-1) S2=[K−1(m−XAS1)]mod(q−1)。
-
输出签名 ( S 1 , S 2 ) (S_1, S_2) (S1,S2)。
1.4 Vrfy 过程
-
计算 V 1 = α m m o d q V_1 = \alpha^m\bmod q V1=αmmodq。
-
计算 V 2 = [ ( Y A ) S 1 ′ ( S 1 ′ ) S 2 ′ ] m o d q V_2 = [(Y_A)^{S'_1}(S'_1)^{S'_2}]\bmod q V2=[(YA)S1′(S1′)S2′]modq。
-
验证 V 1 = ? V 2 V_1 \overset{\text{?}}= V_2 V1=?V2。
2 Schnorr 签名
2.1 公共参数
-
选择素数 p p p 和 q q q , p − 1 = 0 m o d q p - 1 = 0\bmod q p−1=0modq。
-
选择 α ∈ Z \alpha \in \mathbb{Z} α∈Z, α q = 1 m o d p \alpha^q = 1\bmod p αq=1modp。
2.2 Gen 过程
-
随机选择 s ∈ Z s \in \mathbb{Z} s∈Z, 0 < s < q 0 < s < q 0<s<q。
-
计算 v = α − s m o d p v = \alpha^{-s}\bmod p v=α−smodp。
-
私钥 { s } \{s\} {s},公钥 { v } \{v\} {v}。
2.3 Sign 过程
-
随机选择 r ∈ Z r \in \mathbb{Z} r∈Z, 0 < r < q 0 < r < q 0<r<q。
-
计算 x = α r m o d p x = \alpha^r\bmod p x=αrmodp。
-
计算 e = H ( M ∥ x ) e = H(M\|x) e=H(M∥x)。
-
计算 y = ( r + s e ) m o d q y = (r + se)\bmod q y=(r+se)modq。
-
输出签名 ( e , y ) (e, y) (e,y)。
2.4 Vrfy 过程
-
计算 x ′ = ( α y ′ v e ′ ) m o d p x' = (\alpha^{y'}v^{e'})\bmod p x′=(αy′ve′)modp。
-
验证 e ′ = ? H ( M ∥ x ′ ) e' \overset{\text{?}}= H(M\|x') e′=?H(M∥x′)。
3 DSA 签名
3.1 公共参数
-
选择素数 p p p, 2 L − 1 < p < 2 L 2^{L-1} < p < 2^L 2L−1<p<2L, 512 ≤ L ≤ 1024 512\leq L\leq 1024 512≤L≤1024, L = 0 m o d 64 L = 0\bmod 64 L=0mod64。
-
选择素数 q q q, p − 1 = 0 m o d q p - 1 = 0\bmod q p−1=0modq, 2 N − 1 < q < 2 N 2^{N-1} < q < 2^N 2N−1<q<2N。
-
选择 h ∈ Z h \in \mathbb{Z} h∈Z, h ( p − 1 ) / q m o d p > 1 h^{(p - 1) / q}\bmod p > 1 h(p−1)/qmodp>1, 1 < h < p − 1 1 < h < p - 1 1<h<p−1
-
计算 g = [ h ( p − 1 ) / q ] m o d p g = [h(p - 1)/q]\bmod p g=[h(p−1)/q]modp。
3.2 Gen 过程
-
随机选择 x ∈ Z x\in \mathbb{Z} x∈Z, 0 < x < q 0 < x < q 0<x<q。
-
计算 y = g x m o d p y = g^x\bmod p y=gxmodp。
-
私钥 { x } \{x\} {x},公钥 { y } \{y\} {y}。
3.3 Sign 过程
-
随机选择 k ∈ Z k \in \mathbb{Z} k∈Z, 0 < k < q 0 < k < q 0<k<q。
-
计算 r = ( g k m o d p ) m o d q r = (g^k\bmod p)\bmod q r=(gkmodp)modq。
-
计算 s = [ k − 1 ( H ( M ) + x r ) ] m o d q s = [k^{-1}(H(M) + xr)]\bmod q s=[k−1(H(M)+xr)]modq。
-
输出签名 ( r , s ) (r, s) (r,s)。
3.4 Vrfy 过程
-
计算 w = ( s ′ ) − 1 m o d q w = (s')^{-1}\bmod q w=(s′)−1modq。
-
计算 u 1 = [ H ( M ′ ) w ] m o d q u_1 = [H(M')w]\bmod q u1=[H(M′)w]modq。
-
计算 u 2 = ( r ′ w ) m o d q u_2 = (r'w)\bmod q u2=(r′w)modq。
-
计算 v = [ ( g u 1 y u 2 ) m o d p ] m o d q v = [(g^{u_1}y^{u_2})\bmod p]\bmod q v=[(gu1yu2)modp]modq。
-
验证 v = ? r ′ v \overset{\text{?}}= r' v=?r′。
4 ECDSA 签名
4.1 公共参数
-
选择素数 q q q。
-
选择 a ∈ Z p a\in Z_p a∈Zp 和 b ∈ Z p b\in Z_p b∈Zp,定义椭圆曲线 y 2 = ( x 3 + a x + b ) m o d q y^2 = (x^3 + ax + b)\bmod q y2=(x3+ax+b)modq。
-
椭圆曲线的基点 G = ( x g , y g ) G = (x_g, y_g) G=(xg,yg)。
-
基点 G G G 的阶为 n n n。
4.2 Gen 过程
-
随机选择 d ∈ Z d\in \mathbb{Z} d∈Z, 1 ≤ d ≤ n − 1 1\leq d\leq n - 1 1≤d≤n−1。
-
计算 Q = d G Q = dG Q=dG。
-
私钥 { d } \{d\} {d},公钥 { Q } \{Q\} {Q}。
4.3 Sign 过程
-
随机选择 k ∈ Z k\in \mathbb{Z} k∈Z, 1 ≤ k ≤ n − 1 1\leq k\leq n - 1 1≤k≤n−1。
-
计算 P = ( x , y ) = k G P = (x, y)= kG P=(x,y)=kG 和 r = x m o d n r = x\bmod n r=xmodn,如果 r = 0 r = 0 r=0 则重新选择。
-
计算 e = H ( m ) e = H(m) e=H(m)。
-
计算 s = [ k − 1 ( e + d r ) ] m o d n s = [k^{-1}(e + dr)]\bmod n s=[k−1(e+dr)]modn,如果 s = O s = O s=O 则重新选择。
-
输出签名 ( r , s ) (r, s) (r,s)。
4.4 Vrfy 过程
-
检验 r ′ r' r′ 和 s ′ s' s′ 是否是 [ 1 , n − 1 ] [1, n - 1] [1,n−1] 中的整数。
-
计算 e ′ = H ( m ′ ) e' = H(m') e′=H(m′)。
-
计算 w = s ′ − 1 m o d n w = s'^{-1}\bmod n w=s′−1modn。
-
计算 u 1 = e ′ w u_1 = e'w u1=e′w。
-
计算 u 2 = r ′ w u_2 = r'w u2=r′w。
-
计算 X = ( x 1 , y 1 ) = u 1 G + u 2 Q X = (x_1, y_1) = u_1G + u_2Q X=(x1,y1)=u1G+u2Q,如果 X = O X = O X=O 则拒绝。
-
计算 v = x 1 m o d n v = x_1\bmod n v=x1modn。
-
验证 v = ? r ′ v \overset{\text{?}}= r' v=?r′。
5 RSA 签名
5.1 Gen 过程
-
选择两个 n n n 比特的素数 p p p 和 q q q。
-
计算 n = p × q n = p\times q n=p×q。
-
计算 ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p - 1)\times (q - 1) ϕ(n)=(p−1)×(q−1)。
-
随机选择 e ∈ Z e\in \mathbb{Z} e∈Z, 0 < e < ϕ ( n ) 0 < e < \phi(n) 0<e<ϕ(n), g c d ( e , ϕ ( n ) ) = 1 gcd(e, \phi(n)) = 1 gcd(e,ϕ(n))=1。
-
计算 d = e − 1 m o d ϕ ( n ) d = e^{-1}\bmod \phi(n) d=e−1modϕ(n)。
-
私钥 { p , q , d } \{p, q, d\} {p,q,d},公钥 { n , e } \{n, e\} {n,e}。
5.2 Sign 过程
-
计算 σ = m d m o d n \sigma = m^d\bmod n σ=mdmodn。
-
输出签名 σ \sigma σ。
5.3 Vrfy 过程
-
计算 m ′ ′ = σ ′ e m o d n m'' = \sigma'^e\bmod n m′′=σ′emodn。
-
验证 m ′ = ? m ′ ′ m' \overset{\text{?}}= m'' m′=?m′′。
6 SM2 签名
6.1 公共参数
-
椭圆曲线 E ( F q ) E(F_q) E(Fq) 的规模 q q q 和两个元素 a , b ∈ F q a,b\in F_q a,b∈Fq。
-
椭圆曲线的基点 G = ( x G , y G ) G = (x_G, y_G) G=(xG,yG)。
-
基点 G G G 的阶。
6.2 Gen 过程
-
随机选择 d A ∈ Z d_A\in \mathbb{Z} dA∈Z, 1 ≤ d A ≤ n − 1 1\leq d_A\leq n - 1 1≤dA≤n−1。
-
计算 P A = [ d A ] G = ( x A , y A ) P_A = [d_A]G = (x_A, y_A) PA=[dA]G=(xA,yA)。
-
私钥 { d A } \{d_A\} {dA},公钥 { P A } \{P_A\} {PA}。
6.3 Sign 过程
-
计算 Z A = H ( E N T L A ∥ I D A ∥ a ∥ b ∥ x G ∥ y G ∥ x A ∥ y A ) Z_A = H(ENTL_A\|ID_A\|a\|b\|x_G\|y_G\|x_A\|y_A) ZA=H(ENTLA∥IDA∥a∥b∥xG∥yG∥xA∥yA)。
-
计算 M ‾ = Z A ∥ M \overline{M} = Z_A\|M M=ZA∥M。
-
计算 e = H ( M ‾ ) e = H(\overline{M}) e=H(M)。
-
随机选择 k ∈ Z k\in \mathbb{Z} k∈Z, 1 ≤ k ≤ n − 1 1\leq k\leq n - 1 1≤k≤n−1.
-
计算 ( x 1 , y 1 ) = [ k ] G (x_1, y_1) = [k]G (x1,y1)=[k]G。
-
计算 r = ( e + x 1 ) m o d n r = (e + x_1)\bmod n r=(e+x1)modn,若 r = 0 r = 0 r=0 或 r + k = n r + k = n r+k=n 则重新选择。
-
计算 s = [ ( 1 + d A ) − 1 × ( k − r d A ) ] m o d n s = [(1 + d_A)^{-1}\times (k - rd_A)]\bmod n s=[(1+dA)−1×(k−rdA)]modn,若 s = 0 s = 0 s=0 则重新选择。
-
输出签名 ( r , s ) (r, s) (r,s)。
6.4 Vrfy 过程
-
检验 r ′ r' r′ 和 s ′ s' s′ 是否是 [ 1 , n − 1 ] [1, n - 1] [1,n−1] 中的整数。
-
计算 M ‾ ′ = Z A ∥ M ′ \overline{M}' = Z_A\|M' M′=ZA∥M′。
-
计算 e ′ = H ( M ‾ ′ ) e' = H(\overline{M}') e′=H(M′)。
-
计算 t = r ′ + s ′ t = r' + s' t=r′+s′,若 t = 0 t = 0 t=0 则不通过。
-
计算 ( x 1 ′ + y 1 ′ ) = [ s ′ ] G + [ t ′ ] P A (x'_1 + y'_1) = [s']G + [t']P_A (x1′+y1′)=[s′]G+[t′]PA。
-
计算 R = ( e ′ + x 1 ′ ) m o d n R = (e' + x'_1)\bmod n R=(e′+x1′)modn。
-
验证 R = ? r ′ R \overset{\text{?}}= r' R=?r′。
7 BLS 签名
7.0 预备知识
-
双线性映射:对于阶数均为素数 p p p 的加性群 G 1 G_1 G1 和 G 2 G_2 G2,乘性群 G T G_T GT , G 1 G_1 G1 的生成元为 P P P, G 2 G_2 G2 的生成元为 Q Q Q。双线性映射 e : G 1 × G 2 → G T e:G_1\times G_2\rightarrow G_T e:G1×G2→GT 满足以下性质:
-
双线性性: ∀ a , b ∈ Z : e ( a P , b Q ) = e ( P , Q ) a b \forall a,b\in \mathbb{Z}:e(aP, bQ) = e(P,Q)^{ab} ∀a,b∈Z:e(aP,bQ)=e(P,Q)ab;
-
非退化性: e ( P , Q ) ≠ 1 e(P,Q)\neq 1 e(P,Q)=1;
-
出于应用目的, e e e 的计算应是可高效计算的。
特别地,当 G 1 = G 2 = G G_1 = G_2 = G G1=G2=G 时,称 e e e 是对称的;当 G G G 是循环群时, e e e 是可交换的,即 e ( P , Q ) = e ( g p , g q ) = e ( g , g ) p q = e ( g q , g p ) = e ( Q , P ) e(P,Q) = e(g^p, g^q) = e(g, g)^{pq} = e(g^q, g^p) = e(Q, P) e(P,Q)=e(gp,gq)=e(g,g)pq=e(gq,gp)=e(Q,P)。
-
-
Computational Diffie-Hellman Problem, CDHP:对于 G G G,给定 g a , g b ∈ G g^a, g^b\in G ga,gb∈G,计算 g a b g^{ab} gab 是困难的。
-
Decisional Diffie-Hellman Problem, DDHP:对于 G G G,以下两个三元组的概率分布是计算不可区分的:
-
( g a , g b , g a b ) (g^a, g^b, g^{ab}) (ga,gb,gab),其中 a , b a,b a,b 是从 Z q \mathbb{Z}_q Zq 中独立且随机抽取的;
-
( g a , g b , g c ) (g^a, g^b, g^c) (ga,gb,gc),其中 a , b , c a,b,c a,b,c 是从 Z q \mathbb{Z}_q Zq 中独立且随机抽取的。
-
-
Computational co-Diffie-Hellman, co-CDH:对于 ( G 1 , G 2 ) (G_1, G_2) (G1,G2),给定 g 2 , g 2 a ∈ G 2 g_2, g_2^a\in G_2 g2,g2a∈G2 和 h ∈ G 1 h\in G_1 h∈G1,计算 h a ∈ G 1 h^a\in G_1 ha∈G1 是困难的。
-
Decisional co-Diffie-Hellman, co-DDH:对于 ( G 1 , G 2 ) (G_1, G_2) (G1,G2),给定 g 2 , g 2 a ∈ G 2 g_2, g_2^a\in G_2 g2,g2a∈G2 和 h , h b ∈ G 1 h, h^b\in G_1 h,hb∈G1,判断 a = ? b a\overset{\text{?}}= b a=?b。如果 a = b a = b a=b,则称 ( g 2 , g 2 a , h , h a ) (g_2, g_2^a, h, h^a) (g2,g2a,h,ha) 是 co-DDH 元组。
7.1 公共参数
- Gap co-Diffie-Human group pair ( G 1 , G 2 ) (G_1, G_2) (G1,G2), ∥ G 1 ∥ = ∥ G 2 ∥ = p \|G_1\| = \|G_2\| = p ∥G1∥=∥G2∥=p,co-CDH 计算困难,co-DDH 计算简单。
7.2 Gen 过程
-
随机选择 x ∈ Z p x\in \mathbb{Z}_p x∈Zp。
-
计算 v = g 2 x ∈ G 2 v = g_2^x\in G_2 v=g2x∈G2。
-
私钥 { x } \{x\} {x},公钥 { v } \{v\} {v}。
7.3 Sign 过程
-
计算 h = H ( M ) ∈ G 1 h = H(M)\in G_1 h=H(M)∈G1。
-
计算 σ = h x ∈ G 1 \sigma = h^x\in G_1 σ=hx∈G1。
-
输出签名 σ \sigma σ。
7.4 Vrfy 过程
- 验证 ( g 2 , v , h , σ ) (g_2, v, h, \sigma) (g2,v,h,σ) 是否为 co-DDH 元组。
1857

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



