谈谈数字签名

数字签名是什么

相信大家不会陌生,日常我们和公司签合同时会签名,刷信用卡支付时会签名;而数字签名就是将日常中这种签名功能在计算机中实现的一种技术;数字签名不仅能够识别篡改和伪装,还能防止否认等特性

举个例子,塔山攻坚战大家都听过,假设林彪向四纵将领发送一条消息 “守不住塔山我要你的脑袋”
那么塔山收到该消息如何知道该命令是不是真的是林彪发出的呢?有没有可能是敌人伪装的呢?而数字签名就是解决这个问题的,它能识别消息是否被篡改,是否是林彪发送的;

那么数字签名是如何做到的呢?

签名生成与校验

生成签名:一般是发送者对发送的消息进行签名,以表示我认可该消息
验证签名:接受者对发送者发送的签名进行验证,已确定该签名是否是发送者签署的,如果验签失败表示该签名不是发送者的或者发送的消息被人篡改了

无论是生成签名还是验证签名都需要密钥来完成;生成签名需要签名密钥来,验证签名动作需要验签密钥来完成,签名密钥只有签名者才能有,验证密钥则是任何验证签名的人都可以拥有;只有签名密钥才能生成签名,只有验证密钥才能验签;

上面说的是不是有点和公钥密钥算法类似?对,确实有很大关系,其实数字签名是将公钥密码算法反过来使用,我们先来简要回顾下公钥密码算法

公钥密码算法

  • 公钥加密后的密文只能用与公钥相匹配的私钥进行解密
  • 公钥顾名思义可以被公开
  • 私钥只能被需要解密方所拥有,只要私钥不泄漏,窃取者即使拦截到密文和公钥也无法破解到明文
  • 公钥密码解决了对称密码密钥配送的问题

数字签名

这里写图片描述


1. 数字签名是通过私钥对消息进行加密生成一段密文即数字签名,此处的加签动作目的并不是我们理解的加密,它的目的并不是为了保证数据的安全性,而是只有拥有私钥的人才能对消息加签
2. 利用公钥对数字签名进行解签以获取原始消息


对消息进行签名

假如林彪向四纵发”死守塔山”这条命令,其流程如下:

这里写图片描述

  1. 林彪在发送命令前,首先自己生成密钥对,自己保留私钥
  2. 将公钥发送给四纵将领,以用于后续解签操作
  3. 林彪通过私钥对要发送的消息进行加签,生成签名
  4. 将消息和签名一起发送给四纵将领
  5. 四纵收到签名后用林彪发送的公钥进行解签以获取消息原文
  6. 将解签后的消息和接收到的消息进行比较如果一致说明消息确实是林司令发送的,如果不一致说明消息,签名有可能被篡改

其实在实际生活中,我们考虑到消息有时很大,通常不直接对消息原文进行加签,而是先对消息原文进行单向序列化以生成一个消息摘要(可以理解为消息的指纹),我们对该消息摘要进行加签,这样就大大提高加签速度了,其他的和上面图一样,具体见下图就不解释了


对消息摘要进行加签

这里写图片描述

对签名的一些疑问

问题1:签名在计算机中只是一段字符串,那么签名不就可以复制了?如果我把签名放到别的消息中,是不是可以伪装呢?

确实在计算机中签名就是一段很短的字符串,可以复制,但是签名本身代表的我认可这条消息含义是无法改变的
如果把签名放到别的消息中,接受方在验签时会失败

问题2 上述图中消息在网络传输时是明文传输的,签名不就不能保证数据的安全性?
签名并不是为了保证数据安全性,它只是表示我对该消息认可的凭证

问题3上述图中公钥是通过网络传输的,那么接收方不就有可能收到的公钥其实不是发送方?
对,在网络过程中数据都有可能被中间人拦截,并篡改;如何保证公钥的合法性就需要用到数字证书

猜你喜欢

转载自blog.csdn.net/dbs1215/article/details/77607751