《这就是区块链》之区块链基础(2)–数字签名


在上一节中,我们谈到了最基础的加密技术--哈希算法,在区块链中,有两个地方可以运用哈希算法:

1.发送交易/转移信息等运作信息。

2.区块链中的哈希指针。

为了防止发送节点的信息被恶意伪造和篡改,我们需要引入数字签名方案。

 

如果您还是没有理解上面略微抽象的描述,那可以先看完后面的解释,再回头看上面这一段。

数字签名并不是一个新的概念,我们知道有些网址是http开头的,有些是https开头,https其实就是运用了数字签名,对网络传输的数据进行了加密,具体的加密过程如下:

1.运用某个算法自动生成一对公钥和私钥,公钥可以给所有人,私钥自己留着。

2.信息发送者用私钥对信息进行加密,将信息发送出去

3.信息接受者把收到的信息用公钥进行解密,得到真正的信息。

举个例子:松子和小明是经常约去喝酒,为了不让媳妇知道,所以他们先各自生成一对公钥和私钥,把公钥给对方,在约的时候,用私钥把自己的信息进行加密,对方收到后,用公钥对信息进行解密,就可以避免被媳妇发现聊天内容。

同样,数字签名也可以运用到信息的验证中。

4.信息接受者把得到的信息解密后和真正的信息进行比对,以验证加密者的身份,同时验证信息没有被篡改。

继续上面的例子:有一天,松子觉得这种方式也不完善,万一信息在发送过程中被篡改怎么办,他便和小明约定,“以后我给你发消息的时候,会先发一个“我是松子”,如果你公钥解密出来是这句,那就是我发的,否则就不是我。”,这样,小明就可以识别松子发送的信息了,同时这个信息也没有被篡改。

数字签名有两个基本要求:

1.可用性:私钥加密之后的信息可以被公钥解密,并且得到正确的结果。

2.不可逆向性:即使拿到无数的密文,也无法获取到私钥的内容,更无法伪造私钥对其他信息进行加密。

回到区块链中,节点中的接受者在接到发送者的信息的时候,首先需要验证其身份,同时需要验证信息是否被篡改。

加密者先对信息进行哈希运算,得到256位的哈希结果(摘要),同时对摘要进行私钥加密,将信息附带摘要密文广播给所有节点,其他节点收到信息之后,拆分为信息和摘要密文,同样对信息进行哈希运算得到结果1,用公钥对摘要密文进行解密得到结果2,如果结果1 和结果2相同,那么发送者发出的信息没有被篡改。

这里,验证了两个东西:

1.信息是发送者发出来的,不是伪造的信息;

2.信息在发送过程中没有被篡改。

以上简单介绍了区块链中引入数字签名的意义。

分享到