区块链100篇之第三篇--数字签名

数字签名类似于我们现实世界中的文件签名,我们把名字写在一个文件上,就代表了我们认可了这份文件,并且说明了这份文件是真是可靠的,那么问题是如果文件的署名被伪造了怎么办?在现实世界中,我们一般会找当事人直接验证这份文件是否是亲自签署的而不是被人假冒的,而在计算机世界中,保证数字签名不被伪造是通过数字摘要和非对称加密实现的,举个比特币中交易的例子:假如现在Alice发起一笔比特币转账,需要先将该交易进行数字摘要,缩短成一段字符串,然后用自己的私钥对摘要进行加密,形成数字签名。完成后,需要将交易信息(包括收款方的地址)和数字签名一起广播给记录“账本的人”也就是矿工。矿工用Alice的公钥进行验证,如果验证成功,说明该笔交易确实是Alice发出的,且信息未被更改,是完整的。 
下面就来详细讲解这数字摘要和非对称加密技术,讲完之后再回过头来看这个例子就明白了。

数字摘要

数字摘要技术用于对所要传输的数据进行运算生成信息摘要,它并不是一种加密机制,但却能产生信息的数字”指纹”,它的目的是为了确保数据没有被修改或变化,保证信息的完整性不被破坏。说直白点就是将数据进行hash编码。它在数字签名中的作用就是增加被伪造的难度,就好比有些人故意把字要写的龙凤凤舞,目的就是很难让他人伪造。

非对称加密

讲到非对称加密我们需要了解一下什么是对称加密,举个例子:现在你(未成年)跟你朋友想聊一个比较敏感的话题(比如…),但是你怕你老妈会翻看你手机,要是让她知道你跟别人聊这种话题肯定会挨骂,于是你就跟你的朋友约定好你将中文先翻译成英文再发过去,然后他那边可以使用微信翻译将英文翻译成中文,这样即使老妈看到了也无所谓,因为她根本看不懂英语,于是你跟你的朋友便聊了起来:

  • 你:The XiaoHua in the class are so beautiful that I want to chase her.(班里的小花好漂亮,我想追她)
  • 你朋友:I also think she’s pretty.(我也觉得她好漂亮)
  • ……

这里的“班里的小花好漂亮,我想追她”就是明文,而“The XiaoHua in the class are so beautiful that I want to chase her.”就是密文,而密钥就是将“班里的小花好漂亮,我想追她”转化成“The XiaoHua in the class are so beautiful that I want to chase her.”这么一个规则,讲到这大概就清楚了什么是对称加密了吧,可以这么理解:

  • 一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。他们之间的关系: 明文 <-> 密钥 <-> 密文

理解了什么是对称加密后你可能有一个疑问,那如果老妈使用了微信翻译将发送出去的英文翻译成中文她不就看懂了吗?对的,这就是对称加密的缺陷,一旦被人拿到了密钥(在对称加密中,密钥就是加解密的规则),那么你发送出去的密文将轻而易举被人破解,那么有什么方法做到即使一个人的密钥被盗窃了,最起码保证你给其他人发送密文不被破解?就是说即使你老妈获取到了你的密钥,但她仍然无法破解你发送出去的信息,只有你的朋友才能查看你发送给他的信息。这个就是我们要讲的非对称加密。

在非对称加密中,不管是信息的发送方还是信息的接收方都有一对属于自己的公钥和密钥,公钥顾名思义就是可以公开,而私钥就是只能自己看,不能给别人拿到。接着发送方会将信息进行数字摘要并使用接收方的公钥进行加密,然后再使用自己的私钥对数字摘要进行加密,接收方收到加密后的信息跟加密串,用 发送方的公钥(因为公钥是公开的)来解密加密串,得到原始的数字摘要,然后对使用自己的私钥进行解密的信息进行摘要后的结果进行比对。如果一致,说明该文件确实是该发送方发过来的,并且文件内容没有被修改过。

还是上面那个例子,你使用你朋友(暂且称为A)的公钥对你的信息进行加密,并且对信息进行数字摘要,然后使用你自己的私钥对摘要进行加密,即数字签名,然后将数字签名和加密后的信息一起发送给A,A接收到信息后,先使用你的公钥对数字签名进行解密,证明该信息确实是你发送过来的而不是别人发送过来的,然后再使用自己的私钥对加密后的信息进行解密(注意这里只有A的私钥才能解密信息,其他人都不可以,即使是你本人也不能解密,所以就算是你老妈拿到了你的私钥也没办法破解该信息),然后对该信息使用同样的算法进行数字摘要,如果得到的摘要跟你发送过来的摘要一致,则说明信息在传递的过程中没有被修改过。

好了,到这里基本上是讲完了,其他的如果有兴趣自行上网搜集材料学习。

原文地址:https://www.cnblogs.com/wangsea/p/9429171.html