对称加密

A和B通信,为了保密,两人商定好,用每个字符向前推一位的加密方式传输,那么消息hello则被加密为ifmmp,B知道这个加密规则,收到后字母退一位,则解析出hello,这就是对称加密。

缺点也很明显:

  • 事先需要约定加密规则(秘钥),一旦被盗取,密文相当于明文
  • 但凡知道秘钥,给所有人的消息都统一破解了,影响整体

非对称加密算法RSA

非对称加密解决了上述两个问题。

  • 传消息之前先告知各自的公钥,然后用各自的私钥解密消息,公钥被盗取了也不怕
  • 哪怕破解了,也仅是一对一,不用影响别人

所以用非对称加密的传出方式是:

  • 1.因为公钥是公开的,任何人都能获取,所以通信前,先互换公钥
  • 2.信息用对方的公钥加密
  • 3.对方收到后,用自己私藏的私钥解密,也仅有私钥能(迅速)解密出信息

至于其中的算法,参考:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

如果没有私钥,也是能暴力破解的,时间以目前的计算机能力,花个几百上千年,收益明显小于成本,时间没有打不开的锁,打开成本很大的锁,我们就可以认为是安全的锁。

现在只有一个问题:
如果有C在最开始伪装成B,把自己的公钥发给A了,这个最初环节的冒充该怎么办?

数字证书

我们需要引入一个东西,来弥补目前的漏洞:证明你发出的公钥是你的。

怎么证明呢?引入一个第三方的信得过的机构来着认证。当然这个第三方公证处也有自己的公钥和私钥。首先,第三方公证处拿要认证的公钥和公钥归属人信息用自己的【私钥】加密,密文写在了证书上。注意:公证处的公钥也是公开的。

当通信时,对方不仅提供自己的公钥,还要提供公钥的证书,接收方收到后,用公证处的公钥解密证书上的密文,判断解密出公钥和一起收到的公钥是否一致,一致则说明可靠。(密文是公证处私钥加密的,所以之能用公证处的公钥解开)

公证处的公钥就是【根证书】,我们的电脑上已经预装了。

如何使用证书

先拿个人信息去公证处申请,把成功后得到的证书,放在自己的服务器上,公证处的公钥【根证书】已经预装在电脑本地了,所以服务器向浏览器通信时,向浏览器发出自己公钥和证书,浏览器拿根证书解密证书上的密文,发现与收到公钥一样,判断为信任,从而建立起https加密链接。