大家好,今天小乐给大家介绍一下区块链中用到的密码学中的一个伟大发明:非对称加密,也叫作公钥加密。
非对称加密中的秘钥分为私钥和公钥,私钥是私密的,由自己保管。使用非对称加密算法可以得到对应的公钥,公钥是公开的,可以让别人知道。这里由私钥到公钥的算法是单向的,从公钥是无法倒推出私钥的。常用的非对称加密算法有RSA(基于大整数因式分解的困难)和ECC(椭圆加密算法) 。
下面是比特币中的地址生成算法,可以看到从私钥出发,用了多种加密算法最后得到比特币的地址。比特币中,谁拥有这个私钥,谁就拥有这个地址上的所有比特币!
有了私钥和公钥对后,用其中一个加密,就可以用另一个解密(要注意不能用自己解密,只能用另一个)。比如,用公钥加密的消息,可以用私钥解密;用私钥加密的消息,可以用公钥解密。这分别对应非对称加密的两种应用:加密传输和电子签名。
加密传输
A要给B发消息,用B的公钥对消息进行加密。这样加密后的消息只有B的私钥能解密。因为B的公钥是公开的,而B的私钥只有B自己保存,不需要在网络上传输,所以使用非对称加密时,双方通信的所有消息都被第三方获得,第三方也不能破解。
实际应用中,由于非对称加密和解密的速度比较慢,一般用非对称加密的方式传输一个对称加密的秘钥。在这之后的通信中,就使用对称加密来加快速度。这也就解决了对称加密中如何安全地约定双方秘钥的问题。
电子签名
电子签名用来证明身份,这里的身份其实指的是私钥的拥有者。例如A发送一条消息,别人怎么知道这个消息是A发的,而不是B发的呢?A就可以发消息的时候,使用自己的私钥把消息加密,然后把原始消息和加密后的密文一起发送出去。
这样别人收到的消息就包含了原始消息和加密后的密文。别人使用A的公钥对密文解密,如果解密后的消息和原始消息相同,则说明密文是由A的私钥加密的,也就是这个消息确实是A发出来的。
区块链中的交易就使用了电子签名来证明,一条交易确实是私钥的拥有者发出的。
下次,小乐会跟大家分享区块链的数据结构,也就是一个区块到底保存了什么,又是怎么组织成为一条链的。