从零搞懂区块链(10):非对称加密
区块链是一种分类帐本,节点之间通过共识机制形成共识。这套系统是基于密码学原理而不是基于信用,使得任何达成一致的双方能够直接进行支付,从而不需要第三方中介参与。标志着人类开始构建真正的信任互联网。
文 | 王映
图 | 闫燕
密码学的基本目的是保障不安全信道上的通信安全。基于一个重要事实:“许多聪明人都不能解决的问题,它可能不会很快得到解决”。上述事实暗示很多加密算法并没有在理论上得到严格证明,只是运行很久未发现明显弱点,没有找到攻击它的方法,从而认为它是安全的。
密码体制的设计原则:
密码算法安全强度高
密码体制安全性不依赖算法的保密性,而取决于可随时改变的密钥
密钥空间足够大。
即易于实现又便于使用。
从密码体制来说,密码加密分为对称加密和非对称加密两大类。
对称加密指用同样的密钥来进行加密和解密。或者由其中一个密钥很容易推算出另一个密钥。简单高效,但用户数量多时,难以管理。难以实现“不可否认”功能。
非对称加密指用一个密钥对来进行加密和解密。加密和解密使用不同的密钥,由加密密钥不能推算出解密密钥,反之亦然。非对称密码体制的安全性取决于私钥的保密性。
下图以某个明文为例,说明分别采用对称加密和非对称加密的信息传递过程。
以上的非加密过程,采用了两个不同的密钥。使用密钥A来加密,但使用密钥A不能用来解密,必须使用密钥B来解密,而密钥B只有B有,就可以保证信息的安全性。
在实际使用时,我们通常是把密钥A通过网络或资料附件的形式发送给对方,也可以理解为在网上公开,因为在传递过程中有可能被黑客破解,所以密钥A默认是置于公开场合的,称为“公钥”。而密钥B只保留在自己手中,任何时候都不可以出示给其他人,称为“私钥”。通过公钥加密的信息,在网上即使被截获,也无法解密,因为公钥加密后的信息,不能再通过公钥解密,而必须使用私钥来解密,所以可以保证信息的安全性。
非对称加密还被广泛地用于对信息进行数字签名,以确保消息的来源是可靠的。这个过程和上面类似,也会用到公钥和私钥。签名的过程如下图所示。只要接收人B使用发送人A的公钥,能够正确解密这个文件,则说明这个文件来源于A无疑,否则信息就是被他人篡改过的,是不可信的。
由上图我们可以看到,数字签名不能替代加密,因为签名时所使用的是私钥,需要对方使用公钥来解密,而公钥是不安全的。
说到这里,大家可能已经想到了,把上述加密和签名的过程二合一,不就完美了吗?即可以加密信息,还能确保信息来源可靠。的确,这就是区块链中使用的非对称加密措施。信息发送者用私钥对信息进行签名,使用信息接收方的公钥对信息加密。信息接收方用信息发送者的公钥验证信息发送者的身份,使用自己的私钥对加密信息进行解密。
这种场景需要用到4个密钥,分别是发送者A的私钥和公钥,以及接收者B的私钥和公钥。下面我们举例说明这项工作是如何进行的:
发送方A向接收方B发送一封机密信件消息,为了不让消息泄密,并对消息来源进行确认,需与A、B双方协商好,采用非对称加密措施。
第一步:A对写好的信息,用自己的私钥加密
第二步:第一步的基础上,A再对加密后的消息用B的公钥进行第二次加密。
第三步:A把两次加密的信息通过网络传送给B,在这一过程中,网络上的黑客有可能获取到所发送的消息,也可以获取到A和B的公钥,因为公钥是公开的。但是,上述第二步中使用了B的公钥加密,则必须使用B的私钥来解密。而私钥是不中网络中传送的,黑客无法获取私钥。所以黑客截取了消息也无法阅读信息内容,只能看到一堆乱码。
第四步:B接收到A发来的消息后,使用自己的私钥对消息进行解密,就可以看到消息正文了。但是如何知道看到的消息是来自于A而不是由其他人伪造的呢?
第五步:B使用A的公钥,对第四步解密出来的消息再次进行解密,如果解密成功,则证明消息的确来自于A,否则就是伪造的。因为A的公钥只能解密出经过A的私钥加密的信息,不能解密其它形式的信息。
最终,A和B之间成功完成了消息的加密传输,并且能够确认信息来源是可靠的。
上述过程中数字签名,其实和我们平时的手写签名的作用是一样的,都是用来对信息进行确认,防止信息篡改,使一个实体身份与某个信息捆绑在一起。一个消息的数字签名实际上是一串字符,它依赖于签名者的某个秘密,也依赖于被签名的信息本身。数字签名基于两条基本假设:
私钥是安全的
产生数字签名的唯一途径是使用私钥
知道了私钥、公钥的作用,好学的同学们肯定要问了,私钥和公钥是怎么来的?它和比特币中的地址又是什么关系?别急,下一次我们就来讨论这个问题,欢迎大家持续关注,谢谢!
(to be continued...)
系列文章: