【密码学】7. 数字签名

发布于:2025-08-10 ⋅ 阅读:(16) ⋅ 点赞:(0)

数字签名

数字签名的基本概念

  1. 核心特性
    • 不可伪造性:仅签名者能生成合法签名,他人无法伪造。
    • 认证性:接收者可确认签名来自签名者。
    • 不可重复使用性:一个消息的签名不能用于其他消息。
    • 不可修改性:消息签名后无法被篡改。
    • 不可否认性:签名者事后不能否认自己的签名。
  2. 签名体制组成
    • 签名算法:输入消息 m m m 和密钥 k k k,输出签名 s = S i g k ( m ) s = Sig_k(m) s=Sigk(m)
    • 验证算法:输入消息 m m m 和签名 s s s,输出 “真” 或 “伪”( V e r ( m , s ) Ver(m, s) Ver(m,s))。
    • 安全性基础:从 m m m s s s 难以推出密钥 k k k,或伪造可验证的消息 - 签名对。
  3. 分类方式
    • 按用途:普通数字签名、特殊用途签名(盲签名、不可否认签名、群签名、代理签名等)。
    • 按消息恢复功能:具有消息恢复功能、不具有消息恢复功能。
    • 按随机数使用:确定性数字签名、随机化数字签名。

RSA 数字签名

  1. 参数与密钥生成
    • 选两个保密大素数 p p p q q q,计算 n = p q n = pq n=pq,欧拉函数 φ ( n ) = ( p − 1 ) ( q − 1 ) φ(n) = (p-1)(q-1) φ(n)=(p1)(q1)
    • 随机选 e e e 1 < e < φ ( n ) 1 < e < φ(n) 1<e<φ(n) g c d ( e , φ ( n ) ) = 1 gcd(e, φ(n)) = 1 gcd(e,φ(n))=1),计算 d d d 满足 d e ≡ 1 m o d φ ( n ) de ≡ 1 mod φ(n) de1modφ(n)
    • 公钥为 ( e , n ) (e, n) (e,n),私钥为 d d d
  2. 签名与验证
    • 签名:对消息 m ∈ Z n m ∈ Zₙ mZn s = S i g k ( m ) = m d m o d n s = Sig_k(m) = m^d mod n s=Sigk(m)=mdmodn
    • 验证:若 m = s e m o d n m = s^e mod n m=semodn,则签名有效。
  3. 缺陷
    • 伪造随机消息签名:选 s s s,计算 m = s e m o d n m = s^e mod n m=semodn,则 s s s m m m 的伪造签名。
    • 对消息组合脆弱:若 m 1 m_1 m1 的签名为 s 1 s_1 s1 m 2 m_2 m2 的签名为 s 2 s_2 s2,则 m 1 m 2 m_1m_2 m1m2 的伪造签名为 s 1 s 2 m o d n s_1s_2 mod n s1s2modn(因 ( m 1 m 2 ) d = m 1 d m 2 d m o d n (m_1m_2)^d = m_1^dm_2^d mod n (m1m2)d=m1dm2dmodn)。
    • 消息长度限制:仅能对 l o g 2 n log_2n log2n 位消息签名,长消息需分组,导致签名变长、运算量增加。
  4. 改进方法
    • 对消息的 Hash 值签名:签名 s = h ( m ) d m o d n s = h(m)^d mod n s=h(m)dmodn,验证时检查 h ( m ) = s e m o d n h(m) = s^e mod n h(m)=semodn h h h 为 Hash 函数)。

ElGamal 数字签名

  1. 参数与密钥生成
    • 选大素数 p p p g g g Z p ∗ Z_p* Zp 的本原元( p p p g g g 公开)。
    • 随机选 x x x 1 ≤ x ≤ p − 2 1 ≤ x ≤ p-2 1xp2),计算 y = g x m o d p y = g^x mod p y=gxmodp
    • 公钥为 y y y,私钥为 x x x
  2. 签名与验证
    • 签名:对消息 m m m,随机选 k k k 1 ≤ k ≤ p − 2 1 ≤ k ≤ p-2 1kp2),计算 r = g k m o d p r = g^k mod p r=gkmodp s = ( h ( m ) − x r ) k − 1 m o d ( p − 1 ) s = (h(m) - xr)k^{-1} mod (p-1) s=(h(m)xr)k1mod(p1) h h h 为 Hash 函数),签名为 ( r , s ) (r, s) (r,s)
    • 验证:若 y r ∗ r s ≡ g h ( m ) m o d p y^r * r^s ≡ g^{h(m)} mod p yrrsgh(m)modp,则签名有效。

数字签名标准(DSS)

  1. 参数与密钥生成
    • p p p L L L 位素数( 512 ≤ L ≤ 1024 512 ≤ L ≤ 1024 512L1024 L L L 是 64 的倍数), q q q:160 位素数且 q ∣ ( p − 1 ) q | (p-1) q(p1)
    • h h h 1 < h < p − 1 1 < h < p-1 1<h<p1),计算 g = h ( p − 1 ) q m o d p g = h^{(p-1) \over q} mod p g=hq(p1)modp g g g 为生成元)。
    • 随机选 x x x 0 < x < q 0 < x < q 0<x<q),计算 y = g x m o d p y = g^x mod p y=gxmodp
    • 公开参数 p , q , g p, q, g p,q,g,公钥 y y y,私钥 x x x
  2. 签名与验证
    • 签名:对消息 m m m,随机选 k k k 0 < k < q 0 < k < q 0<k<q),计算 r = ( g k m o d p ) m o d q r = (g^k mod p) mod q r=(gkmodp)modq s = k − 1 ( h ( m ) + x r ) m o d q s = k^{-1}(h(m) + xr) mod q s=k1(h(m)+xr)modq h h h 为 SHA-1),签名为 ( r , s ) (r, s) (r,s)
    • 验证:计算 w = s − 1 m o d q w = s^{-1} mod q w=s1modq u 1 = h ( m ) w m o d q u₁ = h(m)w mod q u1=h(m)wmodq u 2 = r w m o d q u₂ = rw mod q u2=rwmodq v = ( g u 1 ∗ y u 2 m o d p ) m o d q v = (g^{u_1} * y^{u_2} mod p) mod q v=(gu1yu2modp)modq,若 v = r v = r v=r,则签名有效。

其他数字签名

基于离散对数问题的数字签名

  1. 离散对数签名方案(通用框架)
    • 参数:大素数 p p p q q q p − 1 p-1 p1 的大素因子, g ∈ Z p ∗ g ∈ Zₚ* gZp g q ≡ 1 m o d p g^q ≡ 1 mod p gq1modp;私钥 x x x 1 < x < q 1 < x < q 1<x<q),公钥 y = g x m o d p y = g^x mod p y=gxmodp
    • 签名:计算 h ( m ) h(m) h(m),选 k k k 1 < k < q 1 < k < q 1<k<q),得 r = g k m o d p r = g^k mod p r=gkmodp,从 a k ≡ ( b + c x ) m o d q ak ≡ (b + cx) mod q ak(b+cx)modq s s s a , b , c a, b, c a,b,c 为参数,如 a = r , b = h ( m ) , c = − r a=r, b=h(m), c=-r a=r,b=h(m),c=r),签名为 ( r , s ) (r, s) (r,s)
    • 验证:检查 r a ≡ g b ∗ y c m o d p r^a ≡ g^b * y^c mod p ragbycmodp
  2. Schnorr 签名方案
    • 参数: p ≥ 2 512 p ≥ 2^{512} p2512(素数), q ≥ 2 160 q ≥ 2^{160} q2160(素数且 q ∣ p − 1 q | p-1 qp1), g ∈ Z p ∗ g ∈ Zₚ* gZp g q ≡ 1 m o d p g^q ≡ 1 mod p gq1modp;私钥 x x x,公钥 y = g x m o d p y = g^x mod p y=gxmodp
    • 签名:选 k k k,得 r = g k m o d p r = g^k mod p r=gkmodp e = h ( r , m ) e = h(r, m) e=h(r,m) s = ( x e + k ) m o d q s = (xe + k) mod q s=(xe+k)modq,签名为 ( e , s ) (e, s) (e,s)
    • 验证:计算 r ′ = g s ∗ y − e m o d p r' = g^s * y^{-e} mod p r=gsyemodp,若 h ( r ′ , m ) = e h(r', m) = e h(r,m)=e,则有效。
  3. Nyberg-Rueppel 签名方案
    • 参数:同 Schnorr( p , q , g p, q, g p,q,g,私钥 x x x,公钥 y = g x m o d p y = g^x mod p y=gxmodp)。
    • 签名:计算 R ( m ) R(m) R(m)(冗余函数),选 k k k,得 r = g − k m o d p r = g^{-k} mod p r=gkmodp e = r ∗ R ( m ) m o d p e = r * R(m) mod p e=rR(m)modp s = ( x e + k ) m o d q s = (xe + k) mod q s=(xe+k)modq,签名为 ( e , s ) (e, s) (e,s)
    • 验证:检查 0 < e < p 0 < e < p 0<e<p 0 ≤ s < q 0 ≤ s < q 0s<q,计算 v = g s ∗ y e m o d p v = g^s * y^e mod p v=gsyemodp t = e ∗ v − 1 m o d p t = e * v^{-1} mod p t=ev1modp,若 t ∈ R t ∈ R tR 的值域,则恢复 m = R − 1 ( t ) m = R^{-1}(t) m=R1(t)

基于大整数分解问题的数字签名

  1. Feige-Fiat-Shamir 签名方案
    • 参数: n = p q n = pq n=pq p , q p, q p,q 为保密素数), k k k 为正整数;私钥 x 1 , . . . , x k x_1,..., x_k x1,...,xk,公钥 y i = x i − 2 m o d n y_i= x_i^{-2} mod n yi=xi2modn
    • 签名:选 r r r,得 u = r 2 m o d n u = r² mod n u=r2modn e = h ( m , u ) e = h(m, u) e=h(m,u) e i ∈ 0 , 1 e_i ∈ {0,1} ei0,1), s = r ∗ Π x i e i m o d n s = r * Πx_i^{e^i} mod n s=rΠxieimodn,签名为 ( e , s ) (e, s) (e,s)
    • 验证:计算 u ′ = s 2 ∗ Π y i e i m o d n u' = s^2 * Πy_i^{e^i} mod n u=s2Πyieimodn,若 h ( m , u ′ ) = e h(m, u') = e h(m,u)=e,则有效。
  2. Guillou-Quisquater 签名方案
    • 参数: n = p q n = pq n=pq k k k 满足 g c d ( k , ( p − 1 ) ( q − 1 ) ) = 1 gcd(k, (p-1)(q-1)) = 1 gcd(k,(p1)(q1))=1;私钥 x x x,公钥 y = x − k m o d n y = x^{-k} mod n y=xkmodn
    • 签名:选 r r r,得 u = r k m o d n u = r^k mod n u=rkmodn e = h ( m , u ) e = h(m, u) e=h(m,u) s = r ∗ x e m o d n s = r * x^e mod n s=rxemodn,签名为 ( e , s ) (e, s) (e,s)
    • 验证:计算 u ′ = s k ∗ y e m o d n u' = s^k * y^e mod n u=skyemodn,若 h ( m , u ′ ) = e h(m, u') = e h(m,u)=e,则有效。

具有特殊用途的数字签名

  1. 群签名
    • 特点:群体成员可代表群体签名,接收者用群公钥验证但不知具体签名者,争议时管理员可识别签名者。
    • 组成:建立(生成群公钥 / 私钥)、加入(用户成为成员)、签名、验证、打开(识别签名者)。
    • 性质:正确性、不可伪造性、匿名性、不可关联性、可跟踪性、可开脱性、抗联合攻击。
  2. 代理签名
    • 组成:系统建立(参数和密钥)、签名权力委托、代理签名生成、代理签名验证。
  3. 盲签名
    • 用途:匿名性场景(如电子投票、电子现金),签名者不知消息内容及签署对象。
    • 步骤:消息盲化(用户用盲因子处理消息)、盲消息签名(签名者对盲化消息签名)、恢复签名(用户移除盲因子得真实签名)。

网站公告

今日签到

点亮在社区的每一天
去签到