以即时通讯和实时音视频为外围的互联网通信技术深刻倒退,使得人与人之间的交换冲破了空间、工夫等限度,让信息无远弗届,让连贯随时产生,让沟通丰盛多元。 关注【融云寰球互联网通信云】理解更多
但互联网为咱们的生存带来极大便当的同时,用户隐衷和通信安全问题也随之而来。
对于开发者来说,互联网的开放性也意味着风险性;用户应用网络和终端设备的高自由度,也为不法之徒提供了可乘之机。
因而,晋升互联网通信的安全性须要贯通零碎构建的始终。本系列文章次要围绕互联网通信的安全性进行探讨,首篇聚焦“链路平安”。
互联网通信零碎的平安问题及次要攻打伎俩
- 窃取内容
如果在整个互联网通信过程中,其通信内容是未加密或弱加密的,那么其信息被截获后就能够间接被读取进去。
这会导致个人隐私泄露,甚至可能危害用户的财产平安。如果在办公场景下,被窃取的可能是公司商业秘密,那将会造成更大的经济损失。
- 篡改内容
如果通信内容被截获后,对其进行批改再发送,会毁坏信息的正确性和完整性。
- 伪造内容
如果用户通信凭证被窃取或在通信过程中交叉其余信息,就可能为冒用用户身份骗取与之通信者的信赖发明可能,埋下隐患。
- 流传不法内容
基于即时通信零碎的音讯推送能力,不法分子除了可能流传涉黄、涉赌、暴恐或危害国家平安的信息外,还可能流传计算机木马病毒等。
罕用攻打伎俩
- 移植木马
通过在终端移植木马,截获或篡改信息。
- 伪造利用
通过伪造 APP 或在 APP 中增加后门等形式,使终端用户误以为是失常利用进行应用,从而达到其不法目标。
- 网络抓包
通过在网络设备上进行抓包,获取用户通信内容。
- 中间人攻打
通过劫持 DNS 等伎俩,使用户通信连贯通过攻击者的设施,从而达到窃取、篡改等目标。
- 破绽开掘
服务端或终端除了自有的程序以外还蕴含了各种三方组件或中间件,通过开掘其上的破绽,达到不法目标。
(罕用攻打伎俩)
从上图可知,信息从利用通过网络达到服务端,这期间任何一个环节都可能被人利用。所以,在“危机四伏”的互联网中,构建通信零碎须要将“平安”视为第一准则,通过多种手段保障通信安全。
密码学在互联网通信零碎连贯上的利用
针对以上的平安问题和攻打伎俩,将密码学利用在互联网通信零碎连贯上,对通信数据进行加密就变得尤为重要。
密码学解决信息安全的三要素(CIA)即:
机密性(Confidentiality)保障信息不泄露给未经受权的用户。
完整性(Integrity)保障信息从实在的发信者传送到实在的收信者手中,传送过程中没有被非法用户增加、删除、替换等。
可用性(Availability)保障受权用户能对数据进行及时牢靠的拜访。
除 CIA 外,还有一些属性也是要求达到的,如可控性(Controllability)和不可否认性(Non-Repudiation)。
作为互联网通信的要害组成,即时通信零碎为了实现音讯的疾速送达个别须要客户端与服务器端建设一条长连贯,用以疾速地将音讯送达到客户端。
常见的 C/S 模式下客户端会以 TCP 或 UDP 的形式与服务器建设连贯,同时某些场景下也会应用 HTTP 的形式从服务器获取或提交一些信息。
整个过程中所有的数据都须要进行加密解决,简略的数据加密能够演绎为:发送方输出明文,加密,生成密文,传输密文,接管方解密,失去明文。
其中会波及对称加密算法、非对称加密算法、信息摘要算法。我国也提出了一套自有的明码算法——国密算法。
国密算法,即国家商用明码算法,是由国家明码管理局认定和颁布的明码算法规范及其利用标准,其中局部明码算法曾经成为国际标准。如 SM 商用系列明码:对称加密算法 SM4、非对称加密算法 SM2、信息摘要算法 SM3。
连贯会话加密
对于链路层面的加密,应最先思考的是基于 SSL/TLS 协定进行链路加密,这是古代互联网通信安全的基石。
很多人认为 SSL/TLS 协定是附加在 HTTP 协定上的,是 HTTPS 的一部分。其实这种了解不完全正确,SSL/TLS 是独立于应用层协定,高层协定能够通明地散布在 SSL/TLS 协定下面。因而基于即时通信的长连贯的音讯通信协定也能够构建在 SSL/TLS 协定下面。
(SSL/TLS 是独立于应用层协定)
SSL/TLS 能够被简略地归结为:利用基于公私钥体系的非对称加密算法,传输对称加解密算法的密钥,并将后续通信的数据包基于单方雷同的对称加解密算法和密钥进行加密并传输,从而达到保障数据安全通信 的目标。
非对称加密算法外面的公钥和私钥在数学上是相干的,这样能力用一个加密,用另一个解密。不过,尽 管是相干的,但以现有的数学算法,又没有方法从一个密钥,算出另一个密钥。
另外须要着重强调的是,在零碎中不要应用自签证书,而要应用具备 CA 认证的证书,这样能够无效的避免中间人攻打。
会话疾速复原
客户端和服务器端建设 SSL/TLS 握手时,须要实现很多步骤:密钥协商出会话密钥,数字签名身份验证,音讯验证码 MAC 等。
整个握手阶段比拟耗时的是密钥协商,须要密集的 CPU 解决。当客户端和服务器断开了本次会话连贯,那么它们之前连贯时协商好的会话密钥就隐没了。在下一次客户端连贯服务器时,便要进行一次新的残缺的握手阶段,这仿佛没什么问题,然而当零碎中某一时间段里有大量的连贯申请提交时,就会占用大量服务器资源,导致网络提早减少。
为了解决下面的问题,TLS/SSL 协定中提供了会话复原的形式,容许客户端和服务器端在某次敞开连贯后,下一次客户端拜访时复原上一次的会话连贯。会话复原有两种,一种是基于 Session ID 的复原,一种是应用 Session Ticket TLS 扩大。
- Session ID 会话复原
一次残缺的握手阶段完结后,客户端和服务器端都保留有这个 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 形式进行会话复原。
- SessionTicket 会话复原
一次残缺的握手过程后,服务器端将本次的会话数据(会话标识符、证书、明码套件和主密钥等)进行加密,加密后生成一个 ticket,并将 ticket 通过 NewSessionTicket 子音讯发送给客户端,由客户端来保留,下一次连贯时客户端就将 ticket 一起发送给服务器端,待服务器端解密校验无误后,就能够复原上一次会话。
(SessionTicket 会话复原)
因为加解密都是在服务端闭环进行,多服务只须要共享密钥就能够实现此过程,相较于 Session ID 的形式,能够不依赖 Server Cache,因而 SessionTicket 会话复原形式更有利于大型分布式系统应用。
本文次要分享了两方面内容,首先,在互联网通信零碎中应用具备 CA 认证的 SSL/TLS 证书能够保障传输平安,避免传输过程被监听、避免数据被窃取,确认连贯的真实性;其次,利用 SessionTicket 疾速地进行会话复原能够进步整体零碎性能,升高连贯延时。
针对与开发者密切相关的互联网通信安全话题,本系列文章接下来还将从其余方面开展深度分享,请继续关注。