对hash签名失败_基础密码学入门:数字签名算法

往期回顾:

  • 基础密码学入门: 随机数、hash算法、对称加密算法
  • 基础密码学入门: MAC算法、公开密钥算法
  • 基础密码学入门: 密钥
  • 基础密码学入门: 密钥协商算法

数字签名

公开密钥算法的另外一种用途就是数字签名技术。提到签名,大家可能会联想到现实世界中的合同签名,按照这个思路理解就对了。数字签名技术有多种解决方案,RSA签名算法和DSA签名算法都可以实现数字签名。

在最开始学习密码学时候,我们讲述了密码学在互联网应用的四个目标:机密性、完整性、身份验证、防抵赖。 现在就只有防抵赖这个点没有提及到。

防抵赖

在讲述防抵赖性之前,我们先铺垫下,消息是如何被篡改的。

假设A、B、C三个人共享一个对称加密算法密钥,现在A和B互相通信,A和B一直认为是双方在发送消息。由于C也有同样的密钥,它可以拦截A发往B的消息,然后篡改消息并用同样的密钥加密后发送给B, B能够正确解密,但是该消息其实已经被篡改。

接下来解释为什么不能防止抵赖,还是用同样的例子说明,A、B、C三个人共享一个对称加密算法密钥,A向B发送了一条消息,但是A可以抵赖说这条消息并不是他发送的,理由就是C也有同样的密钥,这条加密消息可能是C发送给B的,B无法向第三方证明是A给他发送了消息。

在公开密钥算法中,如果算法用于加密解密,也同样不能防止抵赖,以RSA加密算法举例,由于RSA的公钥是完全公开的,RSA私钥拥有者虽然能够解密,但是并不能确认是哪个客户端发送的消息,同理任何人都可以抵赖。

抵赖出现的根本原因就在于通信双方无法确认对方的身份,也就是不能进行身份验证,那么在密码学中有没有对应的解决方案呢?可以使用数字签名技术防抵赖。

在现实世界中,有哪些行为或者约定可以防止人抵赖呢?最明显的就是合同,合同一般需要人签字或者按指纹,考虑签字可以模仿伪造,这里重点用指纹签署的合同来解释。合同一旦由指纹签署了,就可以被复印多份。有了合同,合同签署人就无法否认合同的合法性,原因就在于法律规定,指纹具备唯一性,每个人的指纹是不同的,或者说指纹就代表了一个人。

回到密码学中,如果一个消息也含有特殊的指纹,那么它是否就不能抵赖呢?仔细回忆RSA密钥对,私钥只有密钥对的生成者持有,如果不考虑密钥泄露的问题,私钥拥有者使用密钥(注意不是加密操作)签署一条消息,然后发送给任意的接收方,接收方只要拥有私钥对应的公钥,就能成功反解签署消息,由于只有私钥持有者才能“签署”消息,不能抵赖说这条签署消息不是他发送的,这就是数字签名技术的全部。

数字签名特点

  • 防篡改:数据不会被修改,MAC算法也有这个特点。
  • 防抵赖:消息签署者不能抵赖。
  • 防伪造:发送的消息不能够伪造,MAC算法也有这个特点。

数字签名技术能够进行身份验证,而MAC算法,它只能保证传递的消息是经过验证的,但不能对消息发送者的身份进行验证,原因就在于消息发送方和接收方拥有同样的密钥,所以双方可以抵赖,否认消息是他发送的,因此在理解的时候一定要区分消息验证和身份验证。

数字签名的流程

不管是RSA数字签名算法还是DSA数字签名算法,数字签名处理流程是差不多的,主要分为签名生成和签名验证,接下来分别描述这两个过程。

签名生成流程

c9b67305a8667b66cde2956f6d63da15.png
  1. 发送者对消息计算摘要值。
  2. 发送者用私钥对摘要值进行签名得到签名值。
  3. 发送者将原始消息和签名值一同发给接收者。

数字签名技术的本质不是为了加密,所以和签名值一同传递的消息是不用加密的,当然也可以对消息加密后再计算签名值。

签名验证流程

86e1f7f9928982103115423cf22d9290.png
  1. 接收者接收到消息后,拆分出消息和消息签名值A。
  2. 接收者使用公钥对消息进行运算得到摘要值B。
  3. 接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就是验证失败。

签名生成和签名验证流程很简单,大家看了上述流程可能会思考一个问题,为什么不直接对消息进行签名,而是对消息的摘要值进行签名?

签名值除了比较之外并没有其他用途,那么基于消息生成签名和基于消息摘要值生成签名并无区别,考虑到公开密钥算法运行是相对缓慢的,数字签名算法建议对消息摘要值进行签名,因为摘要值的长度是固定的,运算的时候速度会比较快。

RSA数字签名算法

RSA算法的用途非常广泛,可以进行数字签名。和RSA加密算法相似,不同的是,RSA加密算法是公钥加密,私钥解密;RSA签名算法是私钥签名,公钥验证签名。

DSA数字签名算法

对称加密算法有很多算法,标准算法是RSA机密算法,数字签名技术也有一个标准DSS(Digital Signature Standard),其标准算法就是DSA签名算法(DigitalSignature Algorithm),它是美国国家标准技术研究所(NIST)在1991年提出的签名算法,只能进行签名,不能进行加密解密。

DSA数字签名算法生成签名、验证签名的机制和RSA数字签名算法是一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值