这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
当我们的浏览器显示网址Https:// 的时候,我们总会有一种安全感和踏实,这是因为我们知道这个网站是真实的,和它的通信是安全的。这种安全感来自于TLS加密传输与SSL证书。
在本系列上一篇,我们介绍了HTTPS的意义,协议栈和整体信令流程,今天我们要谈谈HTTPS的核心——TLS/SSL
什么是TLS/SSL
SSL(Secure Sockets Layer)是传输层的套接字安全协议,简单说,是保证在两个网络实体间传输数据的安全性,防止信息被窃取,篡改,这个实体可以是客户端,也可以是服务器,它是由网景公司NETSCAPE发明的。SSL一直更新在2015年才退出历史舞台,由TLS协议代替,我们用到的SSL加密证书,也称为数字证书,实际上现在也是TLS协议的一部分。
TLS(Transport Layer Security)处于HTTP与TCP之间,通过TLS握手来为网络实体间的通信提供加密与完整性保护,目前的最新版本是2018年TLS1.3。
TLS组合拳
TLS使用了对称加密,非对称加密,密钥协商和HASH加密一套组合拳,我们拿一个实际的TLS报文中使用的密码组合来看一下:
服务器选取的是 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,翻译一下:
TLS:协议名
ECDHE:密钥交换方法,Elliptic Curve Diffie-Hellman Ephemeral基于椭圆曲线的DH短时加密算法。我看很多人都把ECDHE看作是非对称加密,因为它会生成的“public key"和"private key",但它更多的意义体现在是密钥协商。
RSA:身份认证方式,用来做服务器的签名,RSA使用非对称加密,一套公钥和私钥,服务器用私钥加密的数据,客户端只能用服务器公钥才能解开,确认签名真伪。
AES_128_GCM:数据加密方式,握手后采用这种方法来生成对称加密的密钥,AES 对称算法,密钥长度 128 位,分组模式是 GCM;
SHA256: 使用哈希算法256bit保证数据完整性
一套组合拳下来,TLS实现了3个目的:
- 数据加密
- 身份认证
- 完整性保护
完整性保护
TLS使用HASH进行完整性保护,那么什么是hash?
-
HASH称为散列函数,它是一种将任意长度的输入,通过hash函数进行压缩形成摘要,并打乱顺序,形成唯一对应的固定长度的散列值HASH value。
-
相同的输入采用相同的hash function,一定得到相同的输出;不同的输入采用相同的hash function,大概率得到不同的输出;如果源数据哪怕只有1bit数据的改动,反映在HASH值上会被无限放大,这就防止了被篡改;
-
结果不可逆,当源数据和HASH值长度足够时,几乎不可能从hash值反推出源数据。可以有效地防止逆向破解
-
HASH的保密程度与它的长度正相关,目前流行的是SHA256和SHA384,比特币加密使用的就是SHA256.
-
抗碰撞,对于任意两个不同的源数据,其hash值相同的可能性极小,这就防止了暴力破解的可能。当然这还是和你的源数据有关,比如说,你的密码是123456,这个HASH值是固定的,非常容易就被破解了。
Hash工作原理非常直接:
- 发送者将源数据和HASH value一起发送给接收方
- 接收方对源数据进行hash运算,将运算结果与收到的hash value进行比对,如果一致则认为数据未被篡改。
HASH应用场景
结合HASH的特性,可以看到它非常适合加密大型数据,因为它的固定长度可以大幅减小存储空间需求,而且源数据的长度越长,保密性越好!
同时,它也适合用来保存密码等敏感信息,服务器数据库中的密码不能使用明文保存,我们可以让程序在发送密码时,自动通过hash加密,然后只发送hash value给服务器,服务器再与数据库中的hash value进行比对,从而验证客户端身份。
但Hash有它的局限性,就是无法防止"中间人"攻击
如果发送方的源码和hash同时被“中间人”截获,“中间人”篡改原文并生成新的hash发送给接收方,就完全失去了保护意义,所以Hash如果想要生效,必须配合身份认证机制。
通过hash达到完整性保护只是TLS组合拳中的第一招,下一篇,我们看看TLS如何做到身份验证。
感谢阅读,如有不准确或错误请留言指正,我会及时修正
总结不易,请勿私自转载,否则别怪老大爷不客气
欢迎喜欢技术的小伙伴和我交流,微信1296386616
参考资料:
Wikipedia www.wikipedia.org
TLS Cipher Suite Search ciphersuite.info/cs/
Cryptographic Hashes and Bitcoin by Kalle Rosenbaum freecontent.manning.com/cryptograph…