如果网络中的两台计算机进行通信,通信安全是非常重要的问题,主要包含两个方面:
- 保证对方是想要通信的计算机,而不是“冒充者”。
- 保证通信过程中的数据不会被”第三者“窃听得到。
为了解决这两个问题,衍生出了很多网络通信安全相关的技术。
对于第一个问题比较常用的手段就是通过第三方权威机构签发的数字证书来验证对方的身份,对于第二个问题最常用的手段就是对通信过程中的数据进行加密传输。
对数据加密传输实际上涉及加密(encryption)和解密(decryption)两个过程,发送方在发送数据前对数据进行加密,接收方收到密文后需要对其解密得到真正的通信内容,这两个过程均需要加密钥匙(key)的参与(发送方用key加密数据,接收方用key来解密数据),否则接收方无论如何也无法解开密文。
根据加解密过程是否用到相同的key又可以将加密技术分为对称加密(Symmetric encryption)和非对称加密(Asymmetric encryption)。
对称加密
对称加密技术在加密和解密过程中使用同一把钥匙,叫做对称密钥(symmetric key),所以通信双方在开始加密通信之前首先需要交换对称密钥。下面这张图描述了使用对称加密通信的过程:
对称密钥的的长度一般为128位或者256位,长度越长自然越来破解,使用128位还是256位密钥取决于通信双方软件的加密能力。对称加密算法常用的有AES和DES等
非对称加密
非对称加密使用一对密钥,分别叫作公钥(public key)和私钥(private key),用公钥加密后的密文只有对应的私钥能对其解密,而用私钥加密的密文同样只有对应的公钥能解密。显然公钥是可以共享的,而私钥专属于通信一方,所以通信双方均有自己的一对密钥。一般地,发送方使用接收方的公钥对数据进行加密后发送,接收方收到密文后用自己的私钥对其解密得到数据,即使“窃听者”得到了传输中的密文,而没有对应的私钥,也无法正确地解密出数据。下面这张图描述了非对称加密通信的过程:
非对称加密常用RSA和ECC(Elliptic curve cryptography)等加密算法来创建公钥和密钥,这些算法是基于某些数学问题的难解性,也就是从数学理论上论证了计算机暴力破解的可能性微乎其微。使用非对称加密,在计算上很容易生成公钥和私钥,并且想要通过公钥来派生出私钥是几乎不可能的,因为公钥是共享的,这一点必须得到保证。
RSA算法基于很难对大整数做因式分解(整数分解)的理论,RSA密文的完全解密被认为是不可行的,因为没有整数分解算法存在。RSA的用户创建两个大的质数的乘积以及一个辅助值作为公钥发布,任何人都可以用这个公钥对数据加密,但是只有拥有私钥的人能对其解密。
RSA算法生成的key通常是1024位和2048位,但是1024位的不再被认为是安全的,长度大于2048的key也很少使用,因为计算开销太大,所以实际上最常用的就是2048位的key。
虽然对称加密和非对称加密都实现了数据加密传输,但是还有一个问题:通信双方如何交换对称密钥和公钥呢?如果通信对方被“第三者”冒充,拿到的是冒充者的公钥,冒充者就可以用自己的私钥来解密监听到的密文,那后续的加密传输也就没有任何安全意义了。这实际上又回到了文章开头的第一个问题:如何保证通信对方的身份合法(没有被冒充),看完下面的SSL通信过程就理解了。
SSL安全通信
对于需要建立加密传输通道的双方,尤其是server-client这种通信模型,SSL(Secure Sockets Layer)是标准的安全通信技术,SSL综合运用了数字证书、对称加密和非对称加密技术,下面这张图描述浏览器和web服务器通过SSL建立安全连接的过程:
- 浏览器通过SSL(https)向web服务器发起连接,并请求web服务器的证书。
- web服务器向浏览器发送SSL证书的副本,证书里包含了web服务器的公钥。
- 浏览器检查SSL证书是否在自己的Trusted Store(受信任证书列表),如果没有就需要用户亲自确认证书的内容是否属实并决定是否信任该证书。如果该证书被信任,浏览器就会生成一个对称会话密钥(symmetric session key),用web服务器的公钥加密后发送给web服务器。
- web服务器使用私钥对密文解密后得到对称会话秘钥,并发送确认以启动加密会话。
- 浏览器和web服务器现在就可以使用对称会话秘钥加密数据进行安全通信了。
注:
- SSL的通信过程可以总结为3步:1.用数字证书验证服务器身份并获取公钥。2.用非对称加密技术交换对称加密密钥。3.用对称加密传输数据。SSL在建立安全连接后,对称加密密钥的安全性得到了保证,所以使用对称加密就已经足够,不需要再对传输中数据继续使用非对称加密,因为相对于对称加密,非对称加密的计算开销更大。
- SSL证书并不规定使用密钥的长度,对称加密密钥的长度在SSL握手过程中是可以协商的。
- 实际应用中,web服务器一般并不需要验证客户端的证书。
References
https://www.digicert.com/ssl-cryptography.htm
https://hackernoon.com/symmetric-and-asymmetric-encryption-5122f9ec65b1
https://www.ssl2buy.com/wiki/symmetric-vs-asymmetric-encryption-what-are-differences