目录 数字签名 数字签名的基本概念 RSA 数字签名 ElGamal 数字签名 数字签名标准(DSS) 其他数字签名 基于离散对数问题的数字签名 基于大整数分解问题的数字签名 具有特殊用途的数字签名
数字签名
数字签名的基本概念
核心特性 不可伪造性:仅签名者能生成合法签名,他人无法伪造。 认证性:接收者可确认签名来自签名者。 不可重复使用性:一个消息的签名不能用于其他消息。 不可修改性:消息签名后无法被篡改。 不可否认性:签名者事后不能否认自己的签名。 签名体制组成 签名算法:输入消息 mm m 和密钥 kk k ,输出签名 s=Sigk(m)s = Sig_k(m) s = S i g k ( m ) 。 验证算法:输入消息 mm m 和签名 ss s ,输出 “真” 或 “伪”(Ver(m,s)Ver(m, s) V er ( m , s ) )。 安全性基础:从 mm m 和 ss s 难以推出密钥 kk k ,或伪造可验证的消息 - 签名对。 分类方式 按用途:普通数字签名、特殊用途签名(盲签名、不可否认签名、群签名、代理签名等)。 按消息恢复功能:具有消息恢复功能、不具有消息恢复功能。 按随机数使用:确定性数字签名、随机化数字签名。
RSA 数字签名
参数与密钥生成 选两个保密大素数 pp p 和 qq q ,计算 n=pqn = pq n = pq ,欧拉函数 φ(n)=(p−1)(q−1)φ(n) = (p-1)(q-1) φ ( n ) = ( p − 1 ) ( q − 1 ) 。 随机选 ee e (1<e<φ(n)1 < e < φ(n) 1 < e < φ ( n ) 且 gcd(e,φ(n))=1gcd(e, φ(n)) = 1 g c d ( e , φ ( n )) = 1 ),计算 dd d 满足de≡1modφ(n)de ≡ 1 mod φ(n) d e ≡ 1 m o d φ ( n ) 。 公钥为 (e,n)(e, n) ( e , n ) ,私钥为 dd d 。 签名与验证 签名:对消息 m∈Znm ∈ Zₙ m ∈ Z n ,s=Sigk(m)=mdmodns = Sig_k(m) = m^d mod n s = S i g k ( m ) = m d m o d n 。 验证:若 m=semodnm = s^e mod n m = s e m o d n ,则签名有效。 缺陷 伪造随机消息签名:选 ss s ,计算 m=semodnm = s^e mod n m = s e m o d n ,则 ss s 是 mm m 的伪造签名。 对消息组合脆弱:若 m1m_1 m 1 的签名为 s1s_1 s 1 ,m2m_2 m 2 的签名为 s2s_2 s 2 ,则 m1m2m_1m_2 m 1 m 2 的伪造签名为 s1s2modns_1s_2 mod n s 1 s 2 m o d n (因 (m1m2)d=m1dm2dmodn(m_1m_2)^d = m_1^dm_2^d mod n ( m 1 m 2 ) d = m 1 d m 2 d m o d n )。 消息长度限制:仅能对 log2nlog_2n l o g 2 n 位消息签名,长消息需分组,导致签名变长、运算量增加。 改进方法 对消息的 Hash 值签名:签名 s=h(m)dmodns = h(m)^d mod n s = h ( m ) d m o d n ,验证时检查 h(m)=semodnh(m) = s^e mod n h ( m ) = s e m o d n (hh h 为 Hash 函数)。
ElGamal 数字签名
参数与密钥生成 选大素数 pp p ,gg g 为 Zp∗Z_p* Z p ∗ 的本原元(pp p 和 gg g 公开)。 随机选 xx x (1≤x≤p−21 ≤ x ≤ p-2 1 ≤ x ≤ p − 2 ),计算 y=gxmodpy = g^x mod p y = g x m o d p 。 公钥为 yy y ,私钥为 xx x 。 签名与验证 签名:对消息 mm m ,随机选 kk k (1≤k≤p−21 ≤ k ≤ p-2 1 ≤ k ≤ p − 2 ),计算 r=gkmodpr = g^k mod p r = g k m o d p ,s=(h(m)−xr)k−1mod(p−1)s = (h(m) - xr)k^{-1} mod (p-1) s = ( h ( m ) − x r ) k − 1 m o d ( p − 1 ) (hh h 为 Hash 函数),签名为(r,s)(r, s) ( r , s ) 。 验证:若 yr∗rs≡gh(m)modpy^r * r^s ≡ g^{h(m)} mod p y r ∗ r s ≡ g h ( m ) m o d p ,则签名有效。
数字签名标准(DSS)
参数与密钥生成 pp p :LL L 位素数(512≤L≤1024512 ≤ L ≤ 1024 512 ≤ L ≤ 1024 ,LL L 是 64 的倍数),qq q :160 位素数且 q∣(p−1)q | (p-1) q ∣ ( p − 1 ) 。选 hh h (1<h<p−11 < h < p-1 1 < h < p − 1 ),计算 g=h(p−1)qmodpg = h^{(p-1) \over q} mod p g = h q ( p − 1 ) m o d p (gg g 为生成元)。 随机选 xx x (0<x<q0 < x < q 0 < x < q ),计算 y=gxmodpy = g^x mod p y = g x m o d p 。 公开参数 p,q,gp, q, g p , q , g ,公钥 yy y ,私钥 xx x 。 签名与验证 签名:对消息 mm m ,随机选 kk k (0<k<q0 < k < q 0 < k < q ),计算 r=(gkmodp)modqr = (g^k mod p) mod q r = ( g k m o d p ) m o d q ,s=k−1(h(m)+xr)modqs = k^{-1}(h(m) + xr) mod q s = k − 1 ( h ( m ) + x r ) m o d q (hh h 为 SHA-1),签名为 (r,s)(r, s) ( r , s ) 。 验证:计算 w=s−1modqw = s^{-1} mod q w = s − 1 m o d q ,u1=h(m)wmodqu₁ = h(m)w mod q u 1 = h ( m ) w m o d q ,u2=rwmodqu₂ = rw mod q u 2 = r w m o d q ,v=(gu1∗yu2modp)modqv = (g^{u_1} * y^{u_2} mod p) mod q v = ( g u 1 ∗ y u 2 m o d p ) m o d q ,若 v=rv = r v = r ,则签名有效。
其他数字签名
基于离散对数问题的数字签名
离散对数签名方案(通用框架) 参数:大素数 pp p ,qq q 为 p−1p-1 p − 1 的大素因子,g∈Zp∗g ∈ Zₚ* g ∈ Z p ∗ 且 gq≡1modpg^q ≡ 1 mod p g q ≡ 1 m o d p ;私钥 xx x (1<x<q1 < x < q 1 < x < q ),公钥 y=gxmodpy = g^x mod p y = g x m o d p 。 签名:计算 h(m)h(m) h ( m ) ,选 kk k (1<k<q1 < k < q 1 < k < q ),得 r=gkmodpr = g^k mod p r = g k m o d p ,从 ak≡(b+cx)modqak ≡ (b + cx) mod q ak ≡ ( b + c x ) m o d q 解 ss s (a,b,ca, b, c a , b , c 为参数,如 a=r,b=h(m),c=−ra=r, b=h(m), c=-r a = r , b = h ( m ) , c = − r ),签名为 (r,s)(r, s) ( r , s ) 。 验证:检查 ra≡gb∗ycmodpr^a ≡ g^b * y^c mod p r a ≡ g b ∗ y c m o d p 。 Schnorr 签名方案 参数:p≥2512p ≥ 2^{512} p ≥ 2 512 (素数),q≥2160q ≥ 2^{160} q ≥ 2 160 (素数且 q∣p−1q | p-1 q ∣ p − 1 ),g∈Zp∗g ∈ Zₚ* g ∈ Z p ∗ 且 gq≡1modpg^q ≡ 1 mod p g q ≡ 1 m o d p ;私钥 xx x ,公钥 y=gxmodpy = g^x mod p y = g x m o d p 。 签名:选 kk k ,得 r=gkmodpr = g^k mod p r = g k m o d p ,e=h(r,m)e = h(r, m) e = h ( r , m ) ,s=(xe+k)modqs = (xe + k) mod q s = ( x e + k ) m o d q ,签名为 (e,s)(e, s) ( e , s ) 。 验证:计算 r′=gs∗y−emodpr' = g^s * y^{-e} mod p r ′ = g s ∗ y − e m o d p ,若 h(r′,m)=eh(r', m) = e h ( r ′ , m ) = e ,则有效。 Nyberg-Rueppel 签名方案 参数:同 Schnorr(p,q,gp, q, g p , q , g ,私钥 xx x ,公钥 y=gxmodpy = g^x mod p y = g x m o d p )。 签名:计算 R(m)R(m) R ( m ) (冗余函数),选 kk k ,得 r=g−kmodpr = g^{-k} mod p r = g − k m o d p ,e=r∗R(m)modpe = r * R(m) mod p e = r ∗ R ( m ) m o d p ,s=(xe+k)modqs = (xe + k) mod q s = ( x e + k ) m o d q ,签名为 (e,s)(e, s) ( e , s ) 。 验证:检查 0<e<p0 < e < p 0 < e < p 和 0≤s<q0 ≤ s < q 0 ≤ s < q ,计算 v=gs∗yemodpv = g^s * y^e mod p v = g s ∗ y e m o d p ,t=e∗v−1modpt = e * v^{-1} mod p t = e ∗ v − 1 m o d p ,若 t∈Rt ∈ R t ∈ R 的值域,则恢复 m=R−1(t)m = R^{-1}(t) m = R − 1 ( t ) 。
基于大整数分解问题的数字签名
Feige-Fiat-Shamir 签名方案 参数:n=pqn = pq n = pq (p,qp, q p , q 为保密素数),kk k 为正整数;私钥 x1,...,xkx_1,..., x_k x 1 , ... , x k ,公钥 yi=xi−2modny_i= x_i^{-2} mod n y i = x i − 2 m o d n 。 签名:选 rr r ,得 u=r2modnu = r² mod n u = r 2 m o d n ,e=h(m,u)e = h(m, u) e = h ( m , u ) (ei∈0,1e_i ∈ {0,1} e i ∈ 0 , 1 ),s=r∗Πxieimodns = r * Πx_i^{e^i} mod n s = r ∗ Π x i e i m o d n ,签名为 (e,s)(e, s) ( e , s ) 。 验证:计算 u′=s2∗Πyieimodnu' = s^2 * Πy_i^{e^i} mod n u ′ = s 2 ∗ Π y i e i m o d n ,若 h(m,u′)=eh(m, u') = e h ( m , u ′ ) = e ,则有效。 Guillou-Quisquater 签名方案 参数:n=pqn = pq n = pq ,kk k 满足 gcd(k,(p−1)(q−1))=1gcd(k, (p-1)(q-1)) = 1 g c d ( k , ( p − 1 ) ( q − 1 )) = 1 ;私钥 xx x ,公钥 y=x−kmodny = x^{-k} mod n y = x − k m o d n 。 签名:选 rr r ,得 u=rkmodnu = r^k mod n u = r k m o d n ,e=h(m,u)e = h(m, u) e = h ( m , u ) ,s=r∗xemodns = r * x^e mod n s = r ∗ x e m o d n ,签名为 (e,s)(e, s) ( e , s ) 。 验证:计算 u′=sk∗yemodnu' = s^k * y^e mod n u ′ = s k ∗ y e m o d n ,若 h(m,u′)=eh(m, u') = e h ( m , u ′ ) = e ,则有效。
具有特殊用途的数字签名
群签名 特点:群体成员可代表群体签名,接收者用群公钥验证但不知具体签名者,争议时管理员可识别签名者。 组成:建立(生成群公钥 / 私钥)、加入(用户成为成员)、签名、验证、打开(识别签名者)。 性质:正确性、不可伪造性、匿名性、不可关联性、可跟踪性、可开脱性、抗联合攻击。 代理签名 组成:系统建立(参数和密钥)、签名权力委托、代理签名生成、代理签名验证。 盲签名 用途:匿名性场景(如电子投票、电子现金),签名者不知消息内容及签署对象。 步骤:消息盲化(用户用盲因子处理消息)、盲消息签名(签名者对盲化消息签名)、恢复签名(用户移除盲因子得真实签名)。