本文由融云技术团队分享,原题“互联网通信安全之端到端加密技术”,内容有订正和改变。
1、引言
随着挪动互联网的遍及,IM 即时通讯类利用简直代替了传统运营商的电话、短信等性能。得益于即时通讯技术的实时性劣势,使得人与人之间的沟通和交换冲破了空间、工夫等等限度,让信息的传递变的无处不在。
但互联网为咱们的生存带来极大便当的同时,用户的隐衷和通信安全问题也随之而来。对于 IM 利用开发者来说,信息沟通的开放性也意味着风险性,用户与网络和挪动设施的高度依赖,也为不法之徒提供了可乘之机。因而,晋升即时通讯利用的安全性尤其重要。
本篇文章将围绕 IM 通信连贯层的平安问题及实现计划,聚焦 IM 网络“链路平安”,心愿能带给你启发。
学习交换:
- 挪动端 IM 开发入门文章:《新手入门一篇就够:从零开发挪动端 IM》
- 开源 IM 框架源码:https://github.com/JackJiang2…(备用地址点此)
(本文已同步公布于:http://www.52im.net/thread-40…)
2、系列文章
本文是 IM 通信平安常识系列文章中的第 10 篇,此系列总目录如下:
《即时通讯平安篇(一):正确地了解和应用 Android 端加密算法》
《即时通讯平安篇(二):探讨组合加密算法在 IM 中的利用》
《即时通讯平安篇(三):罕用加解密算法与通信平安解说》
《即时通讯平安篇(四):实例剖析 Android 中密钥硬编码的危险》
《即时通讯平安篇(五):对称加密技术在 Android 平台上的利用实际》
《即时通讯平安篇(六):非对称加密技术的原理与利用实际》
《即时通讯平安篇(七):如果这样来了解 HTTPS 原理,一篇就够了》
《即时通讯平安篇(八):你晓得,HTTPS 用的是对称加密还是非对称加密?》
《即时通讯平安篇(九):为什么要用 HTTPS?深入浅出,探密短连贯的安全性》
《即时通讯平安篇(十):IM 聊天系统安全伎俩之通信连贯层加密技术》(* 本文)
《即时通讯平安篇(十一):IM 聊天系统安全伎俩之传输内容端到端加密技术》(稍后公布 …)
3、即时通讯面临的平安问题
1)窃取内容:如果在整个即时通讯的通信过程中,其数据内容是未加密或弱加密的,那么其信息被截获后就能够间接被读取进去。那么,这就会导致用户数据(包含个人隐私数据)的泄露,甚至可能危害用户的财产平安(比方微信这类 IM 中,红包、钱包都会波及财产平安)。如果在办公场景下,被窃取的还可能是公司商业秘密,那势必将会造成更大的经济损失。
2)篡改内容:如果通信内容被截获后,对其进行批改再发送,会毁坏信息的正确性和完整性(此音讯已非彼音讯)。
3)伪造内容:如果用户通信凭证(比方 token)被窃取或在通信过程中交叉其余信息,就可能为冒用用户身份骗取与之通信者的信赖发明可能,埋下更大的安全隐患。
4)流传不法内容:基于即时通讯零碎的音讯推送能力,不法分子除了可能流传涉黄、涉赌、暴恐或危害国家平安的信息外,还可能流传计算机木马病毒等,可能带来的危害范畴将进一步扩充。
4、罕用的互联网攻打伎俩
网络通信过程中常见的攻打伎俩:
1)移植木马:过在终端移植木马,截获或篡改信息。
2)伪造利用:通过伪造 APP 或在 APP 中增加后门等形式,使终端用户误以为是失常利用进行应用,从而达到其不法目标。
3)网络抓包:通过在网络设备上进行抓包,获取用户通信内容。
4)中间人攻打:通过劫持 DNS 等伎俩,使用户通信连贯通过攻击者的设施,从而达到窃取、篡改等目标。
5)破绽开掘:服务端或终端除了自有的程序以外还蕴含了各种三方组件或中间件,通过开掘其上的破绽,达到不法目标。从上图和伎俩可知,聊天信息从利用通过网络达到服务端,这期间的任何一个环节都有可能被人利用。所以,在“危机四伏”的互联网络通信中,“平安”必须器重。
5、密码学在即时通讯零碎中的利用
5.1 基本常识针对前述的平安问题和攻打伎俩,将密码学利用在即时通讯零碎连贯上,对通信数据进行加密就变得尤为重要。
密码学解决信息安全的三要素(CIA)即:
1)机密性(Confidentiality):保障信息不泄露给未经受权的用户;
2)完整性(Integrity):保障信息从实在的发信者传送到实在的收信者手中,传送过程中没有被非法用户增加、删除、替换等;
3)可用性(Availability):保障受权用户能对数据进行及时牢靠的拜访。
以上表述,如同有点绕口,咱们换个艰深一点的表述。。。
密码学在网络通信中的三大作用就是:
1)加密:避免好人获取你的数据;
2)认证:避免好人批改了你的数据而你却并没有发现;
3)鉴权:避免好人混充你的身份。
除 CIA 外,还有一些属性也是要求达到的,如可控性(Controllability)和不可否认性(Non-Repudiation)。
5.2 在即时通讯中的利用作为即时通讯中的要害组成,IM 即时通讯零碎为了实现音讯的疾速、实时送达,个别须要客户端与服务器端建设一条 socket 长连贯,用以疾速地将音讯送达到客户端。通常即时通讯客户端会以 TCP 或 UDP 的形式与服务器建设连贯,同时某些场景下也会应用 HTTP 的形式从服务器获取或提交一些信息。整个过程中所有的数据都需进行加密解决,简略的数据加密和解密过程能够演绎为:发送方输出明文 -> 加密 -> 生成密文 -> 传输密文 -> 接管方解密 -> 失去明文。
这其中,会波及:
1)对称加密算法(详见《对称加密技术在 Android 平台上的利用实际》)
2)非对称加密算法(详见《非对称加密技术的原理与利用实际》);
3)信息摘要算法(详见《罕用加解密算法与通信平安解说》)。
这其中,我国也有一套自有的明码算法(国密算法):国密算法,即国家商用明码算法,是由国家明码管理局认定和颁布的明码算法规范及其利用标准,其中局部明码算法曾经成为国际标准。如 SM 商用系列明码:对称加密算法 SM4、非对称加密算法 SM2、信息摘要算法 SM3。
6、通信连贯层的会话加密
对于连贯层面(链路层面)面的加密,应最先思考的是基于 SSL/TLS 协定进行链路加密(比方微信的作法:《微信新一代通信安全解决方案:基于 TLS1.3 的 MMTLS 详解》),这是古代网络通信平安的基石。很多人认为 SSL/TLS 协定是附加在 HTTP 协定上的,是 HTTPS 的一部分(详见《为什么要用 HTTPS?深入浅出,探密短连贯的安全性》)。其实这种了解不完全正确,SSL/TLS 是独立于应用层协定的,高层协定能够通明地散布在 SSL/TLS 协定下面。因而基于 socket 长连贯的 IM 即时消息通信协定也能够构建在 SSL/TLS 协定下面。
SSL/TLS 是独立于应用层协定:
SSL/TLS 能够被简略地演绎为:利用基于公私钥体系的非对称加密算法,传输对称加解密算法的密钥,并将后续通信的数据包基于单方雷同的对称加解密算法和密钥进行加密并传输,从而达到保障数据安全通信的目标。非对称加密算法外面的公钥和私钥在数学上是相干的,这样能力用一个加密、用另一个解密。不过,只管是相干的,但以现有的数学算法,是没有方法从一个密钥算出另一个密钥。另外须要着重强调的是:在零碎中不要应用自签证书,而要应用具备 CA 认证的证书,这样能够无效的避免中间人攻打。
7、基于 SSL/TLS 的通信连贯层如何实现会话的疾速复原
7.1 概述客户端和服务器端建设 SSL/TLS 握手时,须要实现很多步骤:密钥协商出会话密钥、数字签名身份验证、音讯验证码 MAC 等。整个握手阶段比拟耗时的是密钥协商,须要密集的 CPU 解决。当客户端和服务器断开了本次会话连贯,那么它们之前连贯时协商好的会话密钥就隐没了。在下一次客户端连贯服务器时,便要进行一次新的残缺的握手阶段。这仿佛没什么问题,然而当零碎中某一时间段里有大量的连贯申请提交时,就会占用大量服务器资源,导致网络提早减少。为了解决下面的问题,TLS/SSL 协定中提供了会话复原的形式,容许客户端和服务器端在某次敞开连贯后,下一次客户端拜访时复原上一次的会话连贯。
会话复原有两种:
1)一种是基于 Session ID 的复原;
2)一种是应用 Session Ticket TLS 扩大。上面来看看两种形式的优劣。
7.2 基于 Session ID 的 SSL/TLS 长连贯会话复原
一次残缺的握手阶段完结后,客户端和服务器端都保留有这个 Session ID。在本次会话敞开,下一次再次连贯时:客户端在 Client Hello 子音讯中附带这个 Session ID 值,服务器端接管到申请后,将 Session ID 与本人在 Server Cache 中保留的 Session ID 进行匹配。如果匹配胜利:服务器端就会复原上一次的 TLS 连贯,应用之前协商过的密钥,不从新进行密钥协商,服务器收到带 Session ID 的 Client Hello 且匹配胜利后,间接发送 ChangeCipherSpec 子协定,通知 TLS 记录层将连贯状态切换成可读和可写,就实现会话的复原。
基于 Session ID 会话复原原理:
尽管应用 Session ID 进行会话复原能够缩小耗时的步骤,但因为 Session ID 次要保留在服务器 Server Cache 中,若再次连贯申请时因为负载平衡设定将申请重定位到了其余服务器上,此时新的服务器 Server Cache 中没有缓存与客户端匹配的 Session ID,会导致会话无奈复原无奈进行,因而不倡议选用 Session ID 形式进行会话复原。
7.3 基于 SessionTicket 的 SSL/TLS 长连贯会话复原
一次残缺的握手过程后,服务器端将本次的会话数据(会话标识符、证书、明码套件和主密钥等)进行加密,加密后生成一个 ticket,并将 ticket 通过 NewSessionTicket 子音讯发送给客户端,由客户端来保留,下一次连贯时客户端就将 ticket 一起发送给服务器端,待服务器端解密校验无误后,就能够复原上一次会话。
基于 SessionTicket 会话复原原理:
因为加解密都是在服务端闭环进行,多服务只须要共享密钥就能够实现此过程,相较于 Session ID 的形式,能够不依赖 Server Cache,因而 SessionTicket 会话复原形式更有利于大型分布式系统应用。
8、本文小结
本文分享了 IM 即时通讯的通信连贯层平安常识和加密技术等。并着重强调了两方面内容。首先,在 IM 即时通讯零碎中应用具备 CA 认证的 SSL/TLS 证书能够保障传输平安,避免传输过程被监听、避免数据被窃取,确认连贯的真实性。其次,利用 SessionTicket 疾速地进行会话复原能够进步整体零碎性能,升高连贯延时。本文的下篇《即时通讯平安篇(十一):IM 聊天系统安全伎俩之传输内容端到端加密技术》,将持续分享基于 IM 传输内容的端到端加密技术,敬请关注。
9、参考资料
[1] TCP/IP 详解 – 第 11 章·UDP:用户数据报协定
[2] TCP/IP 详解 – 第 17 章·TCP:传输控制协议
[3] 网络编程懒人入门(三):疾速了解 TCP 协定一篇就够
[4] 网络编程懒人入门(四):疾速了解 TCP 和 UDP 的差别
[5] 零根底 IM 开发入门(二):什么是 IM 零碎的实时性?
[6] 对称加密技术在 Android 平台上的利用实际
[7] 非对称加密技术的原理与利用实际
[8] 罕用加解密算法与通信平安解说
[9] 微信新一代通信安全解决方案:基于 TLS1.3 的 MMTLS 详解
[10] 为什么要用 HTTPS?深入浅出,探密短连贯的安全性
[11] 探讨组合加密算法在 IM 中的利用
(本文已同步公布于:http://www.52im.net/thread-40…)