非对称加密

浏览网页的时候经常会看到绿色的https和普通的http(有时候会省略),直觉告诉我们s代表security,因此往往会在输入密码的时候见到绿色的https。想知道它为什么是更安全的,就要理解非对称密码体系、数字签名和数字证书。

对称密钥体系

一个密钥,对明文加密得到密文,然后用同样的密钥对密文解密得到明文。加密解密使用同样的密钥,称为对称密钥体系。这样的体系在信息传递的过程中有一个大问题:密钥的安全传输。密钥必须要由通信双方都得知才能保证交流,所以需要额外的安全信道保证密钥传输的安全。长期以来人们的研究重点也就放在了如何安全传送密钥。

非对称密码体系

就在三十多年前,一些人提出了另一种加解密方式:加密用的密钥和解密用的密钥不一样,即非对称密钥体系。非对称加密算法会有两个密钥:公钥和私钥,公钥顾名思义就是公开的,所有人都知道,而私钥则保留在通信的一端,比如服务器和个人电脑。

这样就爽了,你想和服务器通信,就用公钥对你的信息加密,然后发出去;服务器收到密文之后,用自己的私钥对密文解密,看看你要表达什么。然后服务器用自己的私钥加密一份明文,把密文发给你,你收到之后用公钥解密,看看服务器的指示。不需要传递密钥,所有的过程又都是加密的。相当舒服的通信。

如果有人截获了你发给服务器的密文,因为没有私钥,所以无法获取有效信息。而对于服务器发给你的数据,更是别人无法伪造和篡改的。

其实非对称加密远比想象的要简单,但是也远没有那么容易描述。Differ-Hellman密钥交换机制使用非对称加密算法来产生一个对称加密密钥。解决了对称密码体系中的密钥传输问题。

非对称密钥体系的精华之处就在于居然可以做到加密解密不用同一密钥,真的是很神奇。

数字签名

数字签名用于验证数据的完整性以及对发送者的认证。

假设服务器要给你发送一份数据,服务器首先对这份数据做一次hash,得到hash值H1,然后用自己的私钥对其加密,得到M1,连同有效数据一起发送给你;你收到数据之后,取出有效数据,对其做同样的hash,得到H2,然后使用公钥对M1解密,得到H3。通过比较H2和H3,就可以知道数据是否完整,也可以知道数据是否来自服务器。

假如有一个恶意第三方,偷偷的把你的公钥换了,换成了和他的私钥对应的公钥。比如ta0bao是恶意第三方,把你机器上的taobao公钥换成了他的恶意的ta0bao公钥。这样当恶意ta0bao给你发送一个信息,你就会误以为是taobao发送来的,然后你就被钓鱼了。

数字证书

既然恶意的ta0bao替换了你的公钥,让你误以为恶意公钥是合法的taobao公钥,那么如果有一个机构,他可以正确的告诉你这个公钥是否是你想要的合法公钥,那就杜绝了恶意者替换公钥的丑陋行径。

这个机构就是certificate authority,简称CA,即证书中心。证书中心可以使用自己的私钥对taobao的公钥和其他信息进行加密,生成数字证书。

这样taobao给你发信息的时候,会附带他自己的数字证书。你可以先用证书中心的公钥解开数字证书,得到正确的taobao的公钥,然后再进行其他的验证。如果这个数字证书是未知的,那么就会出现相应的提示。比如chrome的大红框,提示你SSL啥啥啥的,大意就是这个证书不一定靠谱,你自己小心。

证书中心的公钥是公开且已知的,所以不易被伪造。好多大公司都会公开自己的公钥,防止被伪造。

最后

密码学是复杂而且有趣的学科,我现在很后悔自己没有好好学数学,遇到中国剩余定理这种近乎常识的知识都要查资料。本文提到的某些地方可能并准确,而且密码学中涉及到的其他众多关键概念也没有提,有兴趣的自己可以系统的去学习。我也要开始系统的好好学习密码学,坐等亚马逊降价。