数字签名
数字签名概述
特征
- 验证签名者、签名日期和时间
- 认证被签名消息内容
- 能够由第三方仲裁
数字签名具有认证功能,具有可验证性和不伪造性
攻击
- 唯密钥攻击
攻击者知道公钥
- 已知消息攻击
攻击者掌握一些<消息
,签名
>对
- 一般选择消息攻击
攻击者选择一些消息获得签名,不针对特定签名者
- 定向选择消息攻击
攻击者掌握公钥,选择一些消息获得签名,针对特定签名者
- 适应性选择消息攻击
攻击者选择与已知<消息
,签名
>对相关的消息获得签名
攻击方案
- 完全破译
获得私钥
- 通用伪造
伪造对任意消息的签名
- 选择性伪造
伪造对特定消息的签名
- 存在性伪造
至少可以生成一个消息的有效签名
ElGamal数字签名方案
ELGamal安全性基于有限域上离散对数问题的难解性。
参数
- 素数 p p p
- 生成元 α \alpha α
- 私钥 1 < X A < p − 1 1<X_A<p-1 1<XA<p−1
- 公钥 Y A = α A X m o d p Y_A=\alpha ^ X_A\mod p YA=αAXmodp
签名
- 选择 1 ⩽ K ⩽ p − 1 , gcd ( K , p ) = 1 1\leqslant K\leqslant p-1,\gcd(K,p)=1 1⩽K⩽p−1,gcd(K,p)=1
- S 1 = α K m o d p S_1=\alpha ^K\mod p S1=αKmodp
- S 2 = K − 1 ( m − X A S 1 ) m o d p − 1 S_2=K^{-1}(m-X_AS_1)\mod p-1 S2=K−1(m−XAS1)modp−1
- 签名 ( S 1 , S 2 ) (S_1,S_2) (S1,S2)
验证
- V 1 = α m m o d p V_1=\alpha ^m\mod p V1=αmmodp
- V 2 = Y A S 1 S 1 S 2 m o d p V_2={Y_A}^{S_1}{S_1}^{S_2}\mod p V2=YAS1S1S2modp
- 验证 V 1 = V 2 V_1=V_2 V1=V2
Schnorr数字签名方案
Schnorr安全性基于有限域上离散对数问题的难解性。
安全性较ElGamal更低,但计算效率更高。
参数
-
素数 p p p
- 1024位
-
素数 q q q,满足 q ∣ p − 1 q~|~p-1 q ∣ p−1
-
选择 α \alpha α,满足 α q = 1 m o d p \alpha ^q=1\mod p αq=1modp
-
私钥 1 < X A < q 1<X_A<q 1<XA<q
-
公钥 Y A = α − X A m o d p Y_A=\alpha ^ {-X_A}\mod p YA=α−XAmodp
签名
- 选择 0 < r < q 0<r<q 0<r<q,计算 x = α r m o d p x=\alpha ^ r\mod p x=αrmodp
- e = H a s h ( M ∣ ∣ e ) e=Hash(M~||~e) e=Hash(M ∣∣ e)
- y = ( r + X A e ) m o d q y=(r+X_Ae)\mod q y=(r+XAe)modq
- 签名 ( e , y ) (e,y) (e,y)
验证
- x ′ = α y Y A e m o d p x'=\alpha ^ y{Y_A}^e\mod p x′=αyYAemodp
- 验证 e = H a s h ( M ∣ x ′ ) e=Hash(M~|~x') e=Hash(M ∣ x′)
椭圆曲线数字签名算法
安全性基于椭圆曲线上离散对数问题难解性。
参数
- 素数 p p p
- 椭圆曲线参数 a , b a,b a,b
- 基点 G G G
- 基点的阶 n n n
- 私钥 1 ⩽ X A ⩽ n − 1 1\leqslant X_A\leqslant n-1 1⩽XA⩽n−1
- 公钥 Y A = X A G Y_A=X_AG YA=XAG
签名
- 选择 0 < k < n 0<k<n 0<k<n
- P = k G = ( x , y ) , r = x m o d n P=kG=(x,y),r=x\mod n P=kG=(x,y),r=xmodn
- e = H a s h ( m ) e=Hash(m) e=Hash(m)
- s = k − 1 ( e + X A r ) m o d n s=k^{-1}(e+X_Ar)\mod n s=k−1(e+XAr)modn
- 签名 ( r , s ) (r,s) (r,s)
验证
- 验证 0 < r , s < n 0<r,s<n 0<r,s<n
- e = H a s h ( m ) e=Hash(m) e=Hash(m)
- w = s − 1 m o d n w=s^{-1}\mod n w=s−1modn
- u 1 = e w , u 2 = r w u_1=ew,u_2=rw u1=ew,u2=rw
- X = u 1 G + u 2 Q = ( x ′ , y ′ ) X=u_1G+u_2Q=(x',y') X=u1G+u2Q=(x′,y′)
- v = x ′ m o d n v=x'\mod n v=x′modn
- 验证 v = r v=r v=r