0%

密码学 | 加密通信「转载」

现在密码学的公私钥的应用方向之一。

  • 加密通信

每个人都有自己私密的信息,如何进行私密的沟通是人类一直以来的需求。古装片里面,动不动就会有你我入密室详谈这样的情节,密室保证的就是私密性。那我们这节内容,瞄准的就是如何在网络上进行私密的沟通,或者说的正式点,就是来聊加密通信问题。早期人们的解决方案其实跟密室是一个道理,就是通过私有网络,也就是从物理上隔绝其他人。但是私有网络衰落,互联网兴起后,客观条件就不同了,互联网是一个公开场合,数据在通信过程中默认是能够被别人获取到的,那么这个时候保证私密的策略就从“不让你看见”变成“看见你也看不懂”了。具体做法就是:首先把信息加密成密文,到达接收方之后,再把密文解密成信息了,这个过程就是加密通信。


对称加密和非对称加密


先说加密通信的一种最简单的方式,就是对称加密。这个是人类用了几千年的方式,凯撒密码就属于这种。所谓对称,意思就是发送方和接收方使用的是同一个钥匙,或者英文叫 key 。但是互联网上的加密通信,也使用了另外一种形式,也就是非对称加密,或者叫公开密钥加密。

说说类似于凯撒密码的对称加密的基本工作原理。发送方会按照一定规则,把信息变成密文,密文说白了就是谁也看不懂的东西。等密文到了接收方手里,接收者需要按照同样的规则,也就是同一个 key ,把密文翻译成信息。加密通信过程就完成了。

但是对称加密的问题就在于如何安全的传递 key 本身。没有 key ,就不能建立安全的通信通道,没有安全的通信通道,就无法安全的把 key 传递给接收方,所以这就是一个鸡生蛋蛋生鸡的问题了。于是,互联网上做加密通信就用到了非对称加密。非对称加密,也叫做公开密钥加密,特点是发送方和接收方使用的不是同一个 key 。这种方式略微有点反直觉了吧,具体原理稍候会讲到。

总之,加密通信可以采用的方式有两种,一种是对称加密,一种是非对称或者叫公开密钥加密。对称加密的特点是发送方和接收方采用相同的 key ,非对称加密发送方和接收方采用的是不同的 key 。


公开密钥加密基本原理


下面来详细说说用公开密钥加密的基本原理。主要是要理解公钥和私钥的关系。

首先,可以在自己的机器上安装类似 ssh-keygen 这样的软件来生成公钥和私钥。注意,每次生成的时候,就会同时生成一对,一个是公钥,也就是 Public Key ,另外一个是私钥,也就是 Private Key 。公钥是可以公开的,分享给任何人的都没问题,私钥一定要保密。公钥和私钥之所以是一对,是因为二者有天然的数学联系,但是同时要保证给定公钥不能够算出私钥,不然就相当于加密方法被破解了。密码学领域不存在完全不能破解的密码,但是如果一个密码需要很久很久,例如一万年才能破解,就认为这个密码是安全的了。同时多扯一句,公钥和私钥的联系一般就是通过一些无解的数学问题来确定的,这类问题只能正向运算,不能反向运算。比如 8616460799 这个数是两个数相乘得到的,但是要从结果反推出这两个数,是基本不可能的。实际中 RSA 和 ECC 算法,都是基于这一类的数学问题。

好,有了公钥和私钥这一对儿有天然联系的秘钥。那么加密通信过程是怎么样的呢?首先,如果 Alice 想让 Bob 给她发信息,注意这里 Bob 是发送方,而 Alice 是接收方。首先 Alice 要把自己的公钥传递给 Bob ,然后 Bob 用 Alice 的公钥去加密信息,Alice 收到密文之后可以用私钥进行解密。这就是非对称加密的基本逻辑了,公钥用于加密,私钥用于解密。这个过程好比就是 Alice 想安全的从 Bob 那里获得一些机密信息,所以 Alice 首先给 Bob 邮寄过去了一个带锁的箱子,注意这个锁就相当于公钥,是用来加密的。Bob 把信息放到箱子里锁好,然后邮寄给 Alice ,这样 Alice 就可以用这把锁的钥匙,也就是私钥,去开启箱子了。

当然,上面所说的过程还只是单向通信,要实现双向通信,就需要双方把各自的公钥传递给对方了。


公开密钥加密的更多技术细节


公开密钥加密的基本思路是比较简单的,就是用公钥去加密,用私钥去解密。不过,最后我们再稍微深入一点,聊聊相关的一些技术细节。

如果公钥就是用来加密信息的,那为啥不叫 lock 也就是锁,而要叫 key ,钥匙呢?所以说既然公钥也是钥匙,那么它就是一定也有解密功能。公钥加密技术其实有两个重大应用,

  • 一个就是我们本文所述的加密通信。

  • 第二个,就是数字签名。

加密通信是用来保证机密性的,而数字签名是用来认证的。数字签名不是咱们本节的重点,它的基本原理是用私钥去加密,而用公钥去解密。也就是我用私钥签名一份文件,而全世界的人都可以用我的公钥去解密数字签名,如果解密成功,就可以认定,这个文件的确是我签署的。所以说,加密通信条件下,私钥可以叫做“解密 key”,而在数字签名条件下,公钥可以叫做“验证 key”。这样,我们就理解了为啥公钥也是 key 了。

另外一个问题是,公开密钥加密都有哪些实际应用呢?首先就是加密通信,银行政府传递数据也是用这个思路的,所以加密通信还真是关系重大。如果你是程序员,可能会经常用 ssh 登录服务器,这个背后也是用公开密钥加密技术来实现安全通信的。另外网站现在都流行使用 HTTPS 协议,也就是安全的 HTTP ,来达成浏览器跟服务器之间的加密通信,这个背后也是公开密钥加密技术。另外,比特币等加密货币,背后也都是公开密钥加密技术。

最后一个问题会引发我们进一步的学习,那就是如何解决公钥加密过程中的一些具体问题,例如,如何安全的把公钥发送给对方,保证公钥没有被篡改过。实际上这个问题还真的是非常困难的,所以会涉及到发证机构( CA )这样的概念。后面我们专门有一节介绍 CA 。

更多的技术细节,咱们还是需要去进行更为深入的学习才行。这里就不展开了。

看到这里,我相信很多人对为什么私钥可以解密密文感到奇怪,这是正常的现象,请继续看下去,保证你会有更大的收获。

你也可以直接跳到下面的博文观看。

请我喝杯咖啡吧~