第一回合:消息摘要 张三和李四是生意合作伙伴,张三发现李四发送的的电子文档,有很多东西不完整,于是两人商量,需要再设计一种机制,验证“李四”发过来的消息是完整的,于是两个人约定,对数据进行消息摘要,提取关键信息,一并发送。“张三”在接收到消息的时候,也进行消息摘要,与“李四”发过来的关键性信息进行对比,验证数据完整性。
image.png 第二回合:消息认证码 一天张三收到了一封诡异的转账邮件,内容啥的都是完整的,可打电话问李四,李四说没发过,于是他们自己被黑客攻击了。消息摘要可以验证“李四”发送消息的完整性,但是无法解决黑客伪造李四消息,因此“张三”和“李四”商量,两个人约定一个密钥,记录在自己的大脑中。发现消息时用密钥和消息内容一起进行消息摘要,这样就可以解决伪装消息问题。
image.png *第三回合:数字签名 最近两个人出现小矛盾,李四不承认“一笔转账”,说他没有发过这样的消息,李四还攻击到,密钥张三你也知道,你也可以生成同样的信息,为了合作大局,张三只好自认倒霉。于是张三想有没有一种技术,两个人可以使用不同的密钥,李四需要用自己的私钥进行签名,张三无法生成消息,张三可以使用李四的公钥进行验证, 这样可以解决完整性、伪造问题、否认问题,这种技术就是数字签名。
image.png
数字签名是一种将现实世界中的盖章、签字的功能,在计算机世界中进行实现的技术。使用数字签名可以识别篡改、伪造、防止抵赖否则。 主要三个要点: (1) 防止消息篡改,解决完整性问题 (2) 防止消息伪造,解决鉴权问题 (3) 防止抵赖否认,解决否认问题 数字签名也是一种可以证明我就是我的技术
一般来说,不直接对消息进行签名,而是对消息的哈希值进行签名。 生成步骤: (1)对消息进行哈希计算,得到哈希值 (2)利用私钥对哈希值进行加密,生成签名 (3)将签名附加在消息后面,一起发送过去
image.png
(1)收到消息后,提取消息中的签名 (2)用公钥对签名进行解密,得到哈希值1。 (3)对消息中的正文进行哈希计算,得到哈希值2。 (4)比较哈希值1和哈希值2,如果相同,则验证成功。
image.png
(1) RSA 数字签名 (2) DES数字签名 (3) ECDSA数字签名