一文读懂数字签名
一文读懂数字签名
本文来简单的聊一聊数字签名,先来看下面一个例子。
小明和小红是一对好朋友,然后呢,他们经常传小纸条进行聊天,为了确保这个小纸条的来源,他们需要在小纸条上签上自己的名字,这里假设他们能够互相认识对方的签名,并且其他人无法去模仿他们的签名,这样过了很久,他们这个方法确实也很有效,但是,思考一个问题,这是纸质的消息,可以在上面进行签名,但是如果是电子的信息呢,这总不能给信息用笔签上一个字吧,显然这也是不太现实的。
如果没有签名,那么消息发送者很有可能去抵赖,说自己没有发过这个消息,这便会产生一系列的问题,好在,这个对于信息的签名也是有方案的,被称之为数字签名,接下来,就来聊一聊数字签名是怎么工作的,本文并不会去介绍具体的签名算法,而是简单的聊一下什么是数字签名。
数字签名框架
数字签名框架
如上图所示,Bob有自己的私钥,然后用这个私钥对消息M进行签名得到S, 最终将M|S
发送给Alice,而Alice利用Bob的公钥,采用同样的方法对签名进行一个验证,如果验证通过,则说明消息确实是Bob发送的,否则不可确定消息是Bob发送的。
数字签名和消息验证码的区别
讲到了数字签名,这就顺带回顾一下之前讲过的消息认证码,也就是MAC
, 消息认证呢,这可以保证信息不受到第三方的攻击,但是不能够抵御来自通信双方自身发生的攻击,还是用小明和小红举例子吧,假设小明给小红发了一个消息,
明晚八点小树林见[MAC]
然后,明天小红就去小树林了,可是等了好久,也没看到小明过来,这时候小红气坏了,决定明天去找小明问个明白,为什么发了消息,却没有来。
到了第二天,小红问小明,昨天晚上为什么没有来,小明说,昨晚去哪?
小红说,你发的消息,明晚八点小树林见
, 看这不是,小明看了一眼,疑惑的说,我没发过这条消息啊,这时候,小红也没有啥办法证明这确实是小明发的。
从上面可以看出,消息认证码虽然说是可以保证消息的完整性不被破坏,但是无法抵御小明耍赖说没发过消息的这种情况。
因此,数字签名有如下三个特征:
- 它必须可以认证签名者,签名日期和时间
- 它必须能够认证被签名消息的内容
- 签名应该可以被第三方仲裁,解决争执
还是用上面这个例子,如果小明发送的消息带有小明个人的签名,如下:
明晚八点小树林见[SIGN]
由于这个签名是只有小明才能够产生的,因此小明无法抵赖自己发送过这条消息。
小结
本文简单介绍了一下数字签名的概念和数字签名的过程,但是没有给出具体的签名算法,在这里给自己挖一个坑,后面将挑几个签名算法进行一下描述,感觉自己之前文章中好像也留了不少的坑,哈哈,挖坑一时爽,填坑火葬场,溜了溜了。