TLS
介绍:传输层安全性协议,可以为应用层协议Http 或 Websocket等进行加密,加密后为HTTPS, WSS。
作用:保证了 客户端 - 服务端之间的加密传输。
原理: 可以理解为2个过程,握手过程 和 传输过程,
- 握手过程 :服务器 和 客户端 协商出来一个
session key
,协商过程中关键信息传递,使用服务器公钥
进行RSA非对称加密
,然后 服务器和客户端同时持有这个session key
。 - 传输过程 :服务器 和 客户端 传输过程,用这个
session key
进行消息内容的对称加密
。
具体细节 和 这么做的原因 可以参考下面文章,感兴趣的朋友可以看下:
https://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
E2EE
介绍:发送者是对话的一个“端”,而接收者是另一个“端”;因此得名“端到端”。
end to end encryption
,端到端加密,发送端发出的消息对所有人保持私密,包括经过的中间服务,只有最终的接收端可以看到。
作用:保证了 客户端 - 客户端(端到端)之间的加密传输。
原理:
发送端
会使用
接收端的公钥
对要发送的信息进行
RSA加密
,这样只有接收端可以通过
接收端私钥
看到消息内容。
TLS 和 E2EE 的对比
- 场景模型: - TLS: 客户端 - 服务端- E2EE:客户端 - 客户端 , 或存在中间通信转发服务 , 客户端 - 服务端 - 客户端
- 加密阶段: - TLS:用户和服务器之间实行的,客户端 - 服务端之间传输加密。- E2EE:发送端发送数据时,会使用接收端的公钥进行加密。
如何保护用户隐私
通常来讲,只用TLS,可以保障客户端和服务端之间的安全传输。但是,从隐私的角度来看,这并不适用于所有情况。
这里我们主要说下,对于
客户端a -> 服务端 -> 客户端b
的场景,有时用户不希望中间的服务端提供商能够看到他们的消息。
如何避免客户端a 发给 客户端b的消息被中间服务端看到,该怎么处理呢?
答案:TLS + E2EE ,下面我们对照着图示具体看下过程。
图例表示
对于
客户端a -> 服务端 -> 客户端b
的场景,如果只用TLS,由于 客户端a - 服务端之间是TLS加密的形式,所以服务端可以看到客户端a的发送内容,这样对于用户隐私不太好。
此时,如果我们再加上E2EE加密方式。如下图:
这里我们看到,Alice 与 Bob之间的通信,用到了2次加密,1次E2EE,1次TLS 。
Alice私下先拿到Bob的公钥,给 Bob发信息时,先进行E2EE - RSA加密,这样只有Bob的私钥可以解密 查看信息内容。经过中间服务器,即使密文被服务器获取后,由于没有Bob私钥,也无法查看其中内容。
这样确保了 Alice 发给 Bob的消息隐私,除了Bob,没人能看到消息内容。
综上,如果只做TLS,虽然保障了客户端与服务端间的安全传输,但服务端还是可以看到用户信息,用户隐私不好。保护用户隐私,需再配合使用E2EE。
题外话,什么服务用了端到端加密?
几个典型的app,
telegram: 默认不是,但是可以开启。
whatsApp: 是,用户发的信息 ,whatsApp的服务器上也看不到 。
wechat:不是,所以我们的信息会在微信服务器上留存,发信息时也会有敏感词过滤。
Refs
什么是端到端加密:https://www.cloudflare.com/zh-cn/learning/privacy/what-is-end-to-end-encryption/
端到端加密是一种生活方式:https://zhuanlan.zhihu.com/p/50629940
十大端对端加密聊天软件:https://zhuanlan.zhihu.com/p/640415942
版权归原作者 wn531 所有, 如有侵权,请联系我们删除。