数字签名 —— 消息到底是谁写的

介绍:

数字签名(Digital signature)是一种将相当于现实世界中的签字的功能在计算机世界中实现的技术。使用数字签名可以识别篡改和伪装,还可以防止否认。接下来我们可以简单对比一下两者的区别。

现实世界中的签名
实际世界中的签名通常是由个人手写的姓名或符号,用于验证文件的真实性和认可。手写签名通常是通过比对签名本或纸质文件上的签名和原始文档上的签名来验证完整性。简单来讲,就是我们在认可了某份文件 后通过签上自己的名字来表示我们确认了这份文件的内容准确无误且接受了这份文件的具体内容,而别人通过验证该签名的字迹来确认我们是否有对这份文件的认可。

计算机世界中的数字签名
在计算机世界中,被签署的文件变成了二进制的数据,为了保证数据的完整性,通常我们会采用摘要算法将其进行压缩,然后对压缩后的Summery Data私钥进行加密得到数字签名。然 后将原始数据和数字签名合并成新的数据包。接收方在拿到这个新的数据包后会将其拆分成原始数据和数字签名,用公钥对数字签名进行解密,以及采用同样的摘要算法对原始数据进行压缩。得到 两个Summery Data,最后对它们进行简单的对比,如果两者一致那么就证明了数据是完整的没有被篡改过,同时也证明了该数据是来自于所期望的源头,且数据内容被源头所认可

我们假设一下,数据的内容是一个具体的软件,那么在发布软件的时候,通常会附上软件的签名,同时给出所采用的摘要算法和公钥。用户在下载该软件的时候会将其数字签名一并下载下来,用户将软件的内容用摘要算 法得到一个散列值也就是Summery Data,然后使用软件厂商提供的公钥对数字签名进行解密,用软件厂商采用的同样的摘要算法对软件进行压缩,对比得到的两个Summery Data以确认软件的来源和完整性。


数字签名与公钥密码的区别

公钥密码(非对称密码)和数字签名的结构非常相似。在公钥密码中,密钥分为加密密钥和解密密钥,用加密密钥无法进行解密。此外,解密密钥只能由需要解密的人持有,而加密密钥则是任何需要加密的 人都可以持有。实际上,数字签名就是通过将公钥密码“反过来用”而实现的。下面我们将密钥的使用方式总结成一张表。
公钥密码包括一个由公钥和私钥组成的密钥对,其中公钥用于加密,私钥用于解密。
数字签名中也同样会使用公钥和私钥组成的密钥对,不过这两个密钥的用法和公钥密码是相反的,即用私钥加密相当于生成签名,而用公钥解密则相当于验证签名
+