网络安全 第七章 数字签名

网络安全 第七章 数字签名

数字签名的基本概念

纤细认证可以保护通信双方以防第三方的攻击,然而却不能保护通信双方中的一方防止另一方的欺骗或伪造。比如:

  • B 伪造一个消息并使用与 A 共享的密钥产生该消息的认证码,并声称该消息来自于 A。
  • 由于 B 有可能伪造 A 发来的消息,A 可对自己发过的消息予以否认。

则数字签名应满足以下要求:

  • 收方能够确认或证实发方的签名,但不能伪造签名
  • 发方发出签名的消息给收方后,不能再否认他所签发的消息
  • 收方对已收到的签名消息不能否认,即收报认证
  • 第三者可以确认收方双方之间的消息传送,但不能伪造这一过程

数字签名的基本特征:

  • 签名是可信的
  • 签名是不可伪造的
  • 签名是不可复制的
  • 签名的消息是不可改变的
  • 签名是不可抵赖的

数字签名原理

数字签名的产生可用加密算法或特定的签名算法。

利用加密算法的数字签名是指将消息消息的摘要加密后的密文作为对该消息的数字签名。具体用法根据加密方法而有所不同,如下所示:

数字签名产生的基本方式
数字签名产生的基本方式

由签名算法产生数字签名,签名算法的输入是明文消息 M 和密钥 x,输出是对 M 的数字签名,表示为 \(S=Sig_x(M)\)。相对应于签名算法,有一验证算法,表示为 \(Ver_x (S,M)\),其取值为

\[Ver_x(S,M)=\left\{\begin{align} &True,S=Sig_x(M) \\ &False,S\not= Sig_X(M) \end{align}\right.\]

算法的安全性在于从 M 和 S 难以推出密钥 x 或伪造一个消息 M' 使 M‘ 和 S 可被验证为真。

按照消息 / 签名的对应关系,可分为确定性数字签名和随机化数字签名。确定化数字签名中,消息和签名一一对应,同一消息的签名永不变化;随机化数字签名中,对同一消息的签名是变化的,签名算法中有随机参数。

RSA 签名体制

即用 RSA 加密算法计算签名。RSA 加密后的密文即是签名。RSA 算法见 https://wushouyuan.com/posts/391d5d2d/

DSS 数字签名标准

数字签名标准 DSS(Digital Signature Standard)是由美国 NIST 公布的数字签名标准。其中,数字签名算法 DSA(Digital Signature Algorithm) 采用了 SHA 和新的签字技术。

RSA 算法既能用于加密和签字,又能用于密钥交换;DSS 使用的算法只能提供数字签名功能。

RSA 签名和 DSS 签名的不同
RSA 签名和 DSS 签名的不同

采用 RSA 签字时,将消息输入到一个杂凑函数以产生一个固定长度的安全杂凑值,再用发方的秘密钥加密杂凑值就形成了对消息的签字。消息及其签字被一起发给收方,收方得到消息后再产生出消息的杂凑值,且使用发方的公开钥对收到的签字解密。这样收方就得了两个杂凑值,如果两个杂凑值是一样的,则认为收到的签字是有效的。 DSS 签字也利用一杂凑函数产生消息的一个杂凑值,杂凑值连同一随机数 k 一起作为签字函数的输入,签字函数还需使用发送方的秘密钥 SKA 和供所有用户使用的一族参数,称这一族参数为全局公开钥 PKG。签字函数的两个输出 s 和 r 就构成了消息的签字 (s,r)。接收方收到消息后再产生出消息的杂凑值,将杂凑值与收到的签字一起输入验证函数,验证函数还需输入全局公开钥 PKG 和发送方的公开钥 PKA。验证函数的输出如果与收到的签字成分 r 相等,则验证了签字是有效的。

数字签名算法 DSA

DSA 是在 EIGamal 和 Schnorr 两个签名方案上设计的,其安全性基于离散对数的困难行。

体制参数:

  • p:大素数,\(2^L-1<p<2^L,512<L<1024\),L 是 64 的倍数
  • q:(p-1) 的素因子,且 \(2^{159}<q<2^{160}\),即字长 160 比特
  • g:\(g\equiv h^{(p-1)/q}\),且 \(1<h<(p-1),h^{(p-1)/q} \ mod\ p>1\)
  • x:用户私钥,\(1<x<q\)
  • y:公钥参数,\(y\equiv g^x mod \ p\)
  • k:用户选区的秘密数 k,,\(1<k<q\)

签字过程:

  1. 用 SHA 算法计算消息摘要 H(m)
  2. 计算 \(r\equiv(g^k\ mod \ p)\ mod\ q\)\(s\equiv [k^{-1}\cdot (H(m)+xr)]\ mod\ q\)
  3. 签名为 \(Sig_k(M)=(r,s)\),将 m 和 (r, s) 发送给接收方

验证过程:

  1. 接收方收到 m 和 (r, s),计算出 H(M)
  2. 计算 \(w\equiv s^{-1}mod\ q,\ u_1\equiv [H(m)\cdot w]mod\ q,\ u_2\equiv \ r*w\ mod\ q\)
  3. 计算 \(v\equiv [(g^{u_1}\cdot y^{u_2})mod\ p]mod \ q\)
  4. 验证:\(Ver_{pk}(m,(r,s))=True \Leftrightarrow v=r\)

正确性证明:

\[\begin{align}v&\equiv [g^{u_1}\cdot y^{u_2}\ mod \ p] \ mod\ q \\ &\equiv [g^{H(m)\cdot w}\cdot y^{r\cdot w}\ mod\ p]\ mod \ q \\ &\equiv [g^{H(m)\cdot w}\cdot g^{x\cdot r\cdot w}\ mod\ p]\ mod \ q \\ &\equiv [g^{[H(m)+xr]\cdot w}\ mod\ p]\ mod \ q \\ &\equiv [g^{[H(m)+xr]\cdot s^{-1}}\ mod\ p]\ mod \ q \\ &\equiv (g^k\ mod\ p)\ mod\ q \\ &\equiv r\ mod\ q\end{align}\]

DSA 具体框图如下:

DSA 的框图
DSA 的框图

其中,四个函数分别为:

  • \(f_1= [k^{-1}\cdot (H(m)+xr)]\ mod\ q\)
  • \(f_2=(g^k\ mod \ p)\ mod\ q\)
  • \(f_3= s^{-1}mod\ q\)
  • \(f_4=[(g^{[H(m)\cdot w]mod\ q}\cdot y^{r*w\ mod\ q})\ mod\ p]mod \ q\)

其他数字签名体制

盲签名

需要某人对一个文件签名,又不让他知道文件的内容。盲签名必须使用分割-选择原则

所谓盲签名,就是先将隐蔽的文件放进信封里,而除去盲因子的过程就是打开这个信封,当文件在一个信封中时,任何人不能读它。对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。

应用:选举投票、数字货币协议、电子商务系统等

群签名

只有群中的成员才能代表该全体进行数字签名。公钥构成公钥验证群。

应用:项目投标等

不可否认签名

只有在签名合作下才能验证签名。

应用:知识产权保护等

防失败签名

签名难以抵赖和被伪造。强安全性的数字签名。

代理签名

某人课授权其代理进行签名。在委托签名时,签名密钥不交给代理人。具有以下特性:

不可区分性、不可为造性、可证实性、可识别性、不可抵赖性。

指定证实人签名

一个机构中,指定一个人负责证实所有人的签名。任何成员的签名都具有不可否认性,但证实工作均有指定人完成。证实人充当了仲裁角色,使用证实人的公钥验证所有人的签名。

一次性签名

签名者至多只能对一个消息进行签名。每个签名都要采用一个新的公钥作为验证参数。其签名和验证速度非常快。

应用方案

在实际运用中,往往是多种加密、认证算法的结合使用。在如下加密方案中,由加密函数提供保密性、签名算法提供可认证性。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×