实际世界中的签名通常是由个人手写的姓名或符号,用于验证文件的真实性和认可。手写签名通常是通过比对签名本或纸质文件上的签名和原始文档上的签名来验证完整性。简单来讲,就是我们在认可了某份文件
后通过签上自己的名字来表示我们确认了这份文件的内容准确无误且接受了这份文件的具体内容,而别人通过验证该签名的字迹来确认我们是否有对这份文件的认可。
在计算机世界中,被签署的文件变成了二进制的数据,为了保证数据的完整性,通常我们会采用摘要算法将其进行压缩,然后对压缩后的Summery Data用私钥进行加密得到数字签名。然
后将原始数据和数字签名合并成新的数据包。接收方在拿到这个新的数据包后会将其拆分成原始数据和数字签名,用公钥对数字签名进行解密,以及采用同样的摘要算法对原始数据进行压缩。得到
两个Summery Data,最后对它们进行简单的对比,如果两者一致那么就证明了数据是完整的没有被篡改过,同时也证明了该数据是来自于所期望的源头,且数据内容被源头所认可。
公钥密码包括一个由公钥和私钥组成的密钥对,其中公钥用于加密,私钥用于解密。
数字签名中也同样会使用公钥和私钥组成的密钥对,不过这两个密钥的用法和公钥密码是相反的,即用私钥加密相当于生成签名,而用公钥解密则相当于验证签名。