《图解密码技术》笔记9:数字签名-消息到底是谁写的

目录

9.3 数字签名

9.3.1 Alice的借条

9.3.2 从消息认证码到数字签名

9.3.3 签名的生成和验证

9.3.4 公钥密码与数字签名

9.4 数字签名的方法

9.4.1 直接对消息签名的方法

9.4.2 对消息的散列值签名的方法

9.5 对数字签名的疑问

9.5.2 数字签名不能保证机密性吗

9.6 数字签名的应用实例

9.7 通过RSA实现数字签名

9.8 其他的数字签名

9.8.1 ElGamal方式

9.8.2 DSA

9.8.3 ECDSA

9.8.3 Rabin方式

9.9 对数字签名的攻击

9.9.1 中间人攻击

9.9.2 对单向散列函数的攻击

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

9.9.4 潜在伪造

9.10 各种密码技术的对比

9.10.1 消息认证码与数字签名

9.10.2 混合密码系统与对散列值签名

9.11 数字签名无法解决的问题


9.3 数字签名

        数字签名可以识别篡改和伪装,还可以防止否认。

        Alice发送消息给Bob。Alice使用只有自己知道的密钥生成一个签名,接收者Bob使用一个和Alice不同的密钥对签名进行验证。

使用Bob的密钥无法根据消息生成签名,但是用Bob的密钥却可以对Alice生成的签名进行验证。

9.3.1 Alice的借条

        面临篡改、伪装、否认的问题。

9.3.2 从消息认证码到数字签名

  • 消息认证码的局限性:无法防止否认。(A、B双方都有相同密钥,无法判断是谁生成的)
  • 通过数字签名解决问题:(A、B双方各自使用不同的密钥)

9.3.3 签名的生成和验证

        在数字签名技术中,有下面两种行为:

  • 生成数字签名的行为:生成消息签名的行为由发送者Alice完成
  • 验证数字签名的行为:验证消息签名的行为由接收者Bob或者需要验证消息的第三方来完成

       签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。

        数字签名就是将公钥密码反过来用而实现的。用私钥加密生成签名,用公钥来解密来验证签名。使用私有加密的密文只能用公钥来解密。

9.3.4 公钥密码与数字签名

        数字签名和公钥密码对于公钥、私钥的用法完全相反。(严格来说,RSA算法是这样,其他的算法不一定这样)

  • 公钥密码加密:公钥加密,私钥解密。
  • 数字签名:私钥签名(加密),公钥解密(验证签名)。

9.4 数字签名的方法

  • 直接对消息签名的方法(实际上并不会使用)
  • 对消息的散列值进行签名

9.4.1 直接对消息签名的方法

        因为使用公钥密码加密的速度很慢,因此这种方式基本不使用。 

9.4.2 对消息的散列值签名的方法

9.5 对数字签名的疑问

9.5.2 数字签名不能保证机密性吗

        数字签名的作用本来就不是保证机密性的。如果要保证消息的机密性,则可以不直接发送消息,而是将消息加密之后再发送,关于密码和签名的组合方法,参考第十三章 PGP。

        比如一些世界组织经常会发布一些信息,这些信息的目的就是为了让尽可能多的人知道,因此没有必要对信息进行加密,但是必须要防止有人恶意伪装成组织来发布假消息。

9.6 数字签名的应用实例

  1. 安全信息公告

  2. 软件下载
  3. 公钥证书:在验证数字签名时需要合法的公钥,那么怎么知道得到的公钥是合法的呢?我们可以将公钥当做消息,对它加上数字签名,像这样对公钥施加数字签名所得到的就是公钥证书。
  4. SSL/TLS

9.7 通过RSA实现数字签名

        RSA的数字签名,和加密用法完全相反。

  • 用RSA生成签名:私钥签名

  • 用RSA验证签名:公钥验证

9.8 其他的数字签名

        除了RSA之外,还存在其它的数字签名算法。

9.8.1 ElGamal方式

        用于公钥密码和数字签名,两种用途。

9.8.2 DSA

        DSA是Schnorr算法与ElGammal方式的变体,只能用于数字签名。

9.8.3 ECDSA

        利用椭圆曲线密码来实现的数字签名算法。

9.8.3 Rabin方式

        用于公钥密码和数字签名,两种用途。

9.9 对数字签名的攻击

9.9.1 中间人攻击

对于公钥密码的中间人攻击对于数字签名也颇有威胁。

要防止中间人攻击:

  • 可以确认自己得到的公钥是否正确,比如打电话
  • 公钥证书

9.9.2 对单向散列函数的攻击

        必须具备抗碰撞性。

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

        例如:A向B发送一段密文(使用B的公钥加密的,解密则需要B的私钥),假设攻击者M截取到了密文,融合到一段请求中,发给A,请求A进行数字签名。实则是一个对密文解密的过程。

        面对这样的攻击,面对策略:

  • 不要直接对消息进行签名。对散列值进行签名比较安全。
  • 公钥密码和数字签名最好分别使用不同的密钥对。
  • 绝对不要对意思不清楚的消息进行签名。

9.9.4 潜在伪造

        一个没有私钥的攻击者能够对有意义的消息生成合法的数字签名。

        如RSA中,可以将随机比特序列S,用RSA的公钥加密生成密文M,那么S就是M的合法数字签名。 

9.10 各种密码技术的对比

9.10.1 消息认证码与数字签名

9.10.2 混合密码系统与对散列值签名

        对称密码的密钥是机密性的精华,单向散列函数的散列值是完整性的精华

9.11 数字签名无法解决的问题

        数字签名可以识别出篡改和伪装,还可以防止否认,也就是说,我们同时实现了确认消息的完整性,进行认证以及防止否认。

        但是使用数字签名有一个大前提,那就是用于验证签名的公钥必须属于真正的发送者

        这里形成了一个死循环,数字签名是用来识别消息篡改,伪装以及否认的,但是为此我们又必须从没有被伪装的发送者得到没有被篡改的公钥才行。

        为了能够确认自己得到的公钥是否合法,我们需要使用 证书,所谓证书,就是将公钥当做一条消息,由一个可信的第三方对其签名后所得到的公钥。

        公钥基础设施(Public Key Infrastructure),简称PKI。关于证书和PKI,将在第10章介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值