精读《图解密码技术》——第九章 数字签名

本文详细介绍了数字签名的概念、生成与验证过程,以及其在安全信息公告、软件下载和公钥证书等场景中的应用。通过RSA算法展示了如何实现数字签名,并讨论了可能的攻击方式,如中间人攻击。同时,指出数字签名主要用于验证消息的完整性和来源,而非保护消息的机密性。
摘要由CSDN通过智能技术生成

一、数字签名

1.从消息认证码到数字签名

(1)消息认证码的局限性
  消息认证码可以用于验证消息的完整性,还可以对消息进行认证。在消息认证码中,需要发送者和接收者之间共享一个密钥,无法向第三方证明消息到底由谁生成,所以存在事后否认的可能。
(2)通过数字签名解决问题
  假设发送者有一个只有自己知道的私钥,当发送者发送消息时,她用私钥生成一个“签名”。相对地,接收者则使用一个和发送者不同的密钥对签名进行验证。使用接收者的密钥无法根据消息生成签名,但是用接收者的密钥却可以对发送者所计算的签名进行验证,也就是说可以知道这个签名是否是通过发送者的密钥计算出来的。这就是数字签名。

2.签名的生成的验证

  在数字签名中,通常存在两种行为:生成数字签名的行为和验证数字签名的行为。生成数字签名这一行为通常由发送者完成,这一行为也称为“对消息签名”。验证数字签名这一行为通常由接收者完成,但也可以由验证消息的第三方验证者Victor完成,验证签名也就是验证生成数字签名的是否真的为发送者,如果验证结果为真,则表明验证通过,数字签名生效。在数字签名中,生成签名和验证签名这两个行为需要使用各自专用的密钥来完成。发送者使用“签名密钥”来生成消息的签名,而接收者和 验证者则使用“验证密钥”来验证消息的签名。数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法生成签名的。此外,签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。公钥密码和上面讲的数字签名的结构非常相似,实际上,数字签名就是通过公钥密码反过来使用而实现的,具体密钥使用方式如下表所示。

私钥公钥
公钥密码接收者解密时使用发送者加密时使用
数字签名签名者生成签名时使用验证者验证签名时使用
谁持有密钥?个人持有只要需要,任何人都可以持有

二、数字签名的方法

1.直接对消息签名的方法

  发送者要对消息进行签名,则需要发送者事先生成一对包含公钥和私钥密钥对,而需要验证签名的接收者则只需要拥有公钥即可。这种方法的签名和验证的过程如下图所示。

(1)发送者使用自己的私钥对消息进行加密操作;
(2)发送者将消息和数字签名发送给接收者;
(3)接收者使用发送者的公钥对收到的签名解密;
(4)接收者将签名解密后得到的消息与发送者直接发送的消息进行对比,如果二者一致,则签名验证成功。

2.对消息的散列值签名的方法

(1)发送者使用单项散列函数计算出消息的散列值;
(2)发送者使用自己的私钥对消息进行加密操作;
(3)发送者将消息和数字签名发送给接收者;
(4)接收者使用发送者的公钥对收到的签名解密;
(5)接收者将签名解密后得到的消息与发送者直接发送的消息进行对比,如果二者一致,则签名验证成功。

三、数字签名的应用实例

1.安全信息公告

  信息发布的目的是尽量让更多的人知道,因此我们没有必要对消息进行加密,但是必须排除有人恶意伪装成该组织来发布假消息的风险。因此,我们不加密消息,而只是对消息加上数字签名,这种对明文消息所施加的签名、一般称为明文签名

2.软件下载

  日常生活中,我们需要判断所下载的软件是否可以安全运行,因为下载的软件有可能被主动攻击者Mallory篡改,从而执行一些恶意的操作。为了防止出现这样的问题,软件的作者可以对软件加上数字签名,而我们只要在下载之后验证数字签名,就可以识别出软件是否遭到了主动攻击者Mallory的篡改。

3.公钥证书

  为确认公钥合法性,我们可以将公钥当作消息,对它加上数字签名,像这样对公钥施加数字签名所得到的就是公钥证书。

四、通过RSA实现数字签名

  在RSA中,被签名的消息、密钥以及最终生成的签名都是以数字形式表示的。在对文本进行签名时,需要事先将文本编码成数字。用RSA生成签名的过程和验证过程整理如下表所示。

私钥数D和数N
公钥数E和数N
生成签名签名 = 消息D mod N
验证签名消息 = 签名E mod N

五、对数字签名的攻击

1.中间人攻击

  对数字签名的中间人攻击,具体来说就是主动攻击者Mallory介入发送者和接收者的中间,对发送者伪装成接收者,对接收者伪装成发送者,从而能够在无需破解数字签名算法的前提下完成攻击。

2.对单向散列函数的攻击

3.利用数字签名攻击公钥密码

  绝不能对意思不清楚的消息进行数字签名。

4.潜在伪造

5.其他攻击

  暴力破解找出私钥或者尝试对RSA的N进行质因数分解等。

小测验

1.公钥与私钥的作用

(1)Alice要生成一段消息的数字签名,需要使用Alice的公钥还是私钥呢?
(2)如果要验证Alice的签名,需要使用Alice的公钥还是私钥呢?

我的回答:(1)Alice要生成一段消息的数字签名,需要使用Alice的私钥;
     (2)如果要验证Alice的签名,需要使用Alice的公钥。

2.数字签名的基础知识

下列说法中,请在正确的旁边画○,错误的旁边画×。
(1)要验证数字签名,需要使用签名者的私钥。
(2) RSA 可以用作数字签名算法。
(3)使用数字签名可以保护消息的机密性,不用担心被窃听。

我的回答:(1)×;(2)○;(3)×;
(1)要验证数字签名,需要使用签名者的公钥,私钥由签名者自行保管;
(3)使用数字签名不可以保护消息的机密性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值