缩小范围,只考 DSA 和 ElGamal
7.2. 数字签名标准
数字签名标准 DSS (Digital Signature Standard) 是由美国 NIST 公布的联邦信息处理标准 FIPS PUB 186,其中采用了上一章介绍的 SHA 和一新的签名技术,称为 DSA (Digital Signature Algorithm)
7.2.1. DSS 的基本方式
首先将 DSS 与 RSA 的签名方式做一比较。RSA 算法既能用于加密和签名,又能用于密钥交换。与此不同,DSS 使用的算法只能提供数字签名功能。下图用于比较 RSA 签名和 DSS 签名的不同方式:
7.2.2. 数字签名算法 DSA
DSA 安全性基于求离散对数的困难性
算法描述如下
全局公开参数
- p 满足 2{L−1}<p<2L 的大素数,其中 512⩽L⩽1024 且 L 是 64 的倍数
- q 为 p−1 的素因子,满足 2{159}<q<2{160},即 q 长为 160 比特
- g 满足 g≡h(p−1)/qmodp,其中 h 是满足 1<h<p−1 且使得 hp−1/qmodp>1 的任一整数
用户秘密钥 x
x 是满足 0<x<q 的随机数或伪随机数
用户公开钥 y
y≡gxmodp
用户为待签消息选取的秘密数 k
k 是满足 0<k<q 的随机数或伪随机数
签名过程
用户对 M 的签名为 (r,s),其中 r≡gkmodpmodq,s≡k−1(H(M)+xr)modq,H(M) 是由 SHA 求出的哈希值。
签名 Sig(m,k)=(r,s)
验证过程
设接收方收到的消息为 M′,签名为 (r′,s′),为书写简便,此处不加撇号
u1u2v≡H(M)s−1modq≡rs−1modq≡(gu1yu2)modpmodq
检查 v=?r′,若相等,则认为签名有效
证明过程
gu1yu2=gH(M)s−1⋅(gx)r⋅s−1=gH(M)s−1+xr⋅s−1=g(H(M)+xr)⋅s−1≡gsk⋅s−1modpmodq=gk=r
预计算: r 的模指数运算 r=gkmodpmodq,这一运算与待签的消息无关。
用户可以预先计算出很多 r 和 k{−1} 以备以后的签名使用,可大大加快签名的速度。
例 如果 Bob 用同一个 k 签名不同的消息,有何风险?
解答
rs1s2≡gkmodqmodq≡k−1(H(M1)+xr)modq≡k−1(H(M2)+xr)modq可得
s1k≡H(M1)+xr(modq)s2k≡H(M2)+xr(modq)两式相减得
(s1−s2)k≡H(M1)−H(M2)(modq)该方程是一元一次同余方程,其中只有 k 未知,因此 k 可以求出。进而私钥 x 也可求出。
7.3. 其他签名体制
7.3.1. 基于离散对数问题的数字签名体制
2. ElGamal 签名体制
体制参数
- p : 大素数
- g : Zp∗ 的一个生成元
- x : 用户 A 的秘密钥,x∈RZp∗
- y : 用户 A 的公开钥,y≡gx(modp)
签名的产生过程
对于待签名的消息 m,A 执行以下步骤
- 计算 m 的哈希值 H(m)
- 选择随机数 k:k←RZp−1∗,计算 r≡gk(modp)
- 计算 s≡(H(m)−xr)k−1(modp−1)
签名 Sig(m,k)=(r,s)
验证过程
yrrs≡gH(m)modp
当上式成立时,即有 Ver(y,(r,s),H(m))=True
k 泄露的威胁
由 s≡k−1(H(m)−xr)(modp−1) 方程变成一元一次同余方程,私钥 x 即可求出,攻击者可以由此伪造任意消息和签名。
7.3.3. 基于身份的数字签名体制
1. ElGamal 签名体制
体制参数
- q 为大素数
- G1,G2 分别是阶为 q 的加法群和乘法群
- e^:G1×G1→G2 是一个双线性映射
- H1:{0,1}∗→G1∗ 和 H2:G2→{0,1}n 是两个哈希函数
- s←RZq∗ 是系统的主密钥
- P 是 G1 的一个生成元
- 用户 ID 的公开钥 QID=H1(ID)∈G1∗,P{pub}=sP
- 秘密钥 d{ID}=sQ{ID}
签名产生过程
对于待签名的消息 m,A 执行以下步骤
- 选择随机数 k:k←RZq∗
- 计算 R=kP=to be(xR,yR)
- 计算 S≡(H2(m)P+xRdID)k−1
以 (R,S) 作为产生的数字签名
签名验证过程
接收方在收到消息 m 和数字签名 (R,S) 后,先计算 H2(m),并按下式验证:
⇔Ver(QID,(R,S),H2(m))=Truee^(R,S)=e^(P,P)H2(m)e^(Ppub,QID)xR