什么是数字签名(digital signatures)?

数字签名,顾名思义也是一种签名。只不过传统用笔在纸上签字,现在用数学算法来签名。

那签名的作用是什么,为什么要签名呢?现实生活中,我们在合同上、支票上、各种票据上签字,是为了确认身份,确认我做过了什么事情。

数字签名在区块链网络中,也是用来确认身份。用来证明付款人和收款人之间的身份。在比特币白皮书中,中本聪也给了数字签名一个解释。

We define an electronic coin as a chain of digital signatures.

中本聪将电子现金定义为一连串的数字签名。

了解数字签名,必须先从加密算法开始,因为现在的数字签名都是基于数学加密原理的。

对称加密

最早最原始的通讯手段用的是对称加密的方法,什么是对称加密呢?就是加密和解密用的是一样的方法和原理。只有一套密码,既可以加密,也可以解密。

比如A要把”world cup at Russia in 2018“这个信息传给B,国际足联还没有公开这个消息的时候,这就是个秘密。

加密密码是所有的字母或者数字取往后顺移一位。明文是”world cup at Russia in 2018“,经过加密之后的密文是”xpsme dvq bu Svttjb jo 3129“.

对称加密

A就会将密码和密文发给B, B在收到密文之后,看似一堆乱码,但是根据密码解密之后,只要把字母和数字往前顺移一位,就能很顺利的得到明文。这个加密过程就是对称加密。

这个加密过程虽然简单,但是缺陷非常明显,就是太不安全了。一般信息在传输过程中被窃听或者截取,密文和密码都泄露了,窃听者很容易就知道了明文的内容。

后来人们为了加强信息传输过程中的安全性,发明了非对称加密算法。

非对称加密

所谓非对称加密,就是加密和解密的方法是两套体系,即使被窃听到密文,也无法破解得到明文。

在非对称加密算法中,需要两个秘钥,公钥(public key)和私钥(private key)。

非对称加密算法有几种,比如银行普遍采用的RSA加密算法,是以欧拉函数和大数质因数分解难度极大为原理来设计的。

在区块链的网络中,非对称加密算法是怎样的呢?

私钥根据椭圆曲线运算得到公钥,公钥经过哈希算法得到地址。并且这个过程不可逆。

私钥就是一切.png

所以在区块链世界里,私钥就是一切,必须妥善保管私钥。

这套非对称机制是怎么传输信息的呢?

比如A要把”helloworld“这个信息传给B,A会利用B的公钥加密得到一个密文,然后B收到之后,用自己的私钥来解密,得到明文helloworld。

非对称加密

这个过程中,即使密文被窃听,窃听者没有B的私钥,无法解密。所以信息还是安全的。

因为私钥只有B知道,所以只有B能解密。不过由于B的公钥是公开的,任何人都可以用B的公钥加密,并且向B传输信息,那么B怎么确定信息是A传输的,不是坏人在捣乱呢?

这个时候数字签名就派上用场了,A在传输信息的同时会把明文进行哈希运算,并将这个哈希值用自己的私钥来进行加密,B在收到信息之后利用A的公钥来解密得到哈希值,然后把收到的明文也进行哈希运算得到一个哈希值,验证这两个哈希值是否一致,如果一致就说明的确是A传输的信息了。这个过程描述起来麻烦,但是对于电脑来说都是一瞬间的事情。

接收者公钥加密内容,发送者私钥验证身份

在验证过程中,即使有人窃听到了A用私钥加密给B的信息,利用A的公钥能够解密得到一串哈希值,但是由于哈希算法的不可逆性,单纯得到这一串哈希值是毫无意义的,无法倒推出”helloworld“。依然安全。

如果有坏人捣乱,传输了HelloKitty给B,B用HelloKitty进行哈希运算后,得出的哈希值肯定和A给的不一致,所以也排除了坏人捣乱的情况。

这就是非对称算法和数字签名在区块链网络中的应用,既可以保证安全性,也能验证身份。

比特币白皮书交易篇

在比特币交易中,也是通过付款人私钥签名的方式来确认付款人身份的。

推荐阅读更多精彩内容