非对称加密(详解)

在上篇文章中:详解比特币的交易流程

其中我们在交易验证那一部分讲解网络中的节点是如何验证这笔交易,但是有个知识点我没怎么说清楚,就是非对称加密,所以借此就说说非对称加密的一些知识点帮助大家更好的理解交易验证过程中使用到的加密算法。

1.非对称加密是什么?

   非对称加密(asymmetric cryptography),也称为公开密钥加密(Public-key cryptography),是密码学的一种算法,它需要两       个密钥,一个是公开密钥,另一个是私有密钥。顾名思义,公钥可以任意对外发布;而私钥必须由用户自行严格秘密保管,绝不      透过任何途径向任何人提供,也不会透露给要通信的另一方,即使他被信任。

2.非对称加密的重要性质

2.1 加密的双向性

      所谓加密双向性,即公钥和私钥中的任一个均可用作加密,此时另一个则用作解密。 

如图所示,使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文,甚至连最初用来加密的密钥也不能用作解密,这是非对称加密最重要的性质或者说特点。

2.2 公钥无法推出私钥

必须确保使用公钥无法推导出私钥,至少妄想使用公钥推导私钥必须在计算上是不可行的,否则安全性将不复存在。

虽然两个密钥在数学上相关,但如果知道了公钥,并不能凭此计算出私钥;因此公钥可以公开,任意向外发布;而私钥不公开,绝不透过任何途径向任何人提供。

3.非对称加密的应用 

3.1 加密通信

这种加密路径用于和他人进行加密通信,作用等同于对称加密

我们回到Alice和Bob的例子来看下。

如果Bob想利用非对称加密算法私密的接收他人向他发送的信息,步骤是这样的。

1.首先Bob需要使用具体约定的算法(例如RSA)生成密钥和公钥,密钥自己保留,公钥对外公布。

2.Alice拿到Bob的公钥后,便可以对想要发送的消息   “Alice已向Bob转账1BTC,请查收。” 进行加密。

3.然后Alice将密文(例如是“FH39ggJ+shi3djifg35”)发送给Bob。

4.Bob收到消息后,用自己的私钥进行解密,还原出消息原文  “Alice已向Bob转账1BTC,请查收。”

用图来表示便是下面的过程:

由于使用Bob公钥加密的消息只能用Bob的私钥解密(Bob的公钥也是不行的),而私钥只有Bob拥有,因此即使消息被第三方劫持,他也无法还原出消息明文。

3.2 数字签名

     根据3.1的加密方式,我们试想下,如果反过来,先用私钥加密呢?

     这便诞生了非对称加密的另一个重要应用:数字签名

我们回到Alice和Bob的例子来看:

在比特币系统中,类似  “Alice已向Bob转账1BTC,请查收。”  这样的消息最终会被矿工记录在账本上,是与转账双方利益相关的。这样一条消息的受益方是Bob,我们腹黑一点想,如果Bob一直向网络中广播Alice给他转账的消息呢?

Bob:“Alice已向Bob转账1BTC”

Bob:“Alice已向Bob转账2BTC”

Bob:“Alice已向Bob转账3BTC”

因此,我们需要一种机制来证明Alice是“自愿”的,也就是消息是Alice亲自发出的。步骤是这样的:

① Alice需要使用特定的算法(例如RSA)生成密钥和公钥,密钥自己保留,公钥对外公布。

② 当Alice想要发送消息 :Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”。

Alice使用自己的私钥对消息进行加密,假设加密后的密文是 SHG356g3T4+dh4fh,现在这个密文可以看作Alice的数字签名

③ Alice将消息明文和数字签名放到一起并发送到网络中,发送的消息类似这样的形式 如下:

 Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”。| 签名:“SHG356g3T4+dh4fh”

④ 网络中的所有人接收到消息后,都可以进行如下操作完成验证:

收到消息 Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”。| 签名:“SHG356g3T4+dh4fh”

然后使用Alice在消息中提供的公钥 gh3giPGFN2jgh3sF以及 对私钥签署的数字签名SHG356g3T4+dh4fh 进行解密

将解密结果与消息明文: Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF” 进行对比

如果一致,说明消息是Alice亲自发送的,因为只有Alice本人拥有Alice的密钥

如果不一致,则说明消息不是Alice发送的,或者虽然消息是Alice发送的但已遭到他人篡改

⑤  通过④ 的方法验证通过后,Bob确认了Alice给他了一笔价值1BTC的转账。网络中其他人(矿工)均成功验证了这条消息的真实性,并为Bob作证他的账户新增了1个BTC,Alice的账户减少了1个BTC。

我们也可以通过下面的图示更清晰的了解具体过程:

注释:

在过程②中,由于非对称加密算法一般一次加密的数据长度有限制(一般是1024字节), 所以在签名之前先会使用 hash 计算得到交易的摘要,然后再对交易摘要进行签名,这样也可以节约计算资源。

3.3 数字证书

数字证书是非对称加密的又一个重要应用,由于与区块链的学习的关系相对不那么密切,这里就先放一边了。

有兴趣的可以参考这篇文章:数字证书原理

猜你喜欢

转载自blog.csdn.net/wyf2017/article/details/108279749