在 WebRTC 中,为了保证媒体传输的安全性,引入了 DTLS 来对通信过程进行加密。DTLS 的作用、原理与 SSL/TLS 类似,都是为了使得原本不安全的通信过程变得安全。它们的区别点是 DTLS 适用于加密 UDP 通信过程,SSL/TLS 适用于加密 TCP 通信过程,正是由于使用的传输层协议不同,造成了它们实现上面的一些差异。
基本概念
对称密钥加密技术
对称密钥加密的含义是加密过程和解密过程使用的是同一个密钥。常见的对称加密算法有 DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
非对称加密密钥加密技术
非对称密钥加密的含义是加密过程和解密过程使用了不同的密钥,分别称为公开密钥和私有密钥。公钥是众所周知的,但是密钥只能为报文的目标主机所持有。相比对称加密技术,它的优点是不用担心密钥在通信过程中被他人窃取;缺点是解密速度慢,消耗更多的 CPU 资源。常见的非对称加密算法有 RSA、DSA、DH 等。
数字签名
数字签名是附加在报文上的特殊加密校验码,即所谓的校验和,其中利用了非对称加密密钥加密技术。数字签名的主要作用是防止报文被篡改,一旦报文被攻击者篡改,通过将其与校验和进行匹配,可以立刻被接收者发现。数字签名的过程如下图所示:
发送者 A 将报文摘要(报文通过 SHA-1 等哈希算法生成摘要)通过私有密钥加密生成签名,与明文报文一起发给接收者 B,接收者 B 可以通过对收到的信息进行计算后得到两份报文摘要,比较这两份报文摘要是否相等可以验证报文是否被篡改:
- 明文报文通过使用与发送端相同的哈希算法生成摘要 1;
- 签名通过公开密钥解密后生成摘要 2。
数字证书
数字证书是由一些公认可信的证书颁发机构签发的,不易伪造。包括如下内容:
- 证书序列号
- 证书签名算法
- 证书颁发者
- 有效期
- 公开密钥
- 证书签发机构的数字签名
数字证书可以用于接收者验证对端的身份。接收者(例如浏览器)收到某个对端(例如 Web 服务器)的证书时,会对签名颁发机构的数字签名进行检查,一般来说,接收者事先就会预先安装很多常用的签名颁发机构的证书(含有公开密钥),利用预先的公开密钥可以对签名进行验证。以 Google 为例,在浏览器中访问 Google 首页,点击左上角的感叹号就可以看到 Google 证书的完整信息,包括以上提到的所有内容:
SSL/TLS 协议
简介
要了解 DTLS,首先从我们比较熟悉的 SSL/TLS 开始讲起。SSL(Secure Socket Layer) 和 TLS(Transport Layer Security) 简单理解就是同一件东西的两个演进阶段,同样都是在应用层和传输层之间加入的安全层,最早的时候这个安全层叫做 SSL,由 Netscape 公司推出,后来被 IETF 组织标准化并称之为 TLS。SSL/TLS 的作用是为了解决互联网通信中存在的三种风险:
- 窃听风险:第三方可以获知通信内容;
- 篡改风险:第三方可以修改通信内容;
- 冒充风险:第三方可以冒充他人身份参与通信。
SSL/TLS 协议能够做到以下这几点,从而解决上述的三种风险:
- 所有信息通过加密传播,第三方无法窃听;
- 具有数据签名及校验机制,一旦被篡改,通信双方立刻可以发现;
- 具有身份证书,防止其他人冒充。
协议栈
SSL/TLS 建立在 TCP 传输层上,最常使用 SSL/TLS 的场景是在 HTTPS 中,通过在 HTTP 和 TCP 中加了一层 SSL/TLS,使得不安全的 HTTP 成为了安全的 HTTPS。协议栈如下图所示:
SSL/TLS 加密是通过动态密钥对数据进行对称加密实现的,而动态密钥通过握手流程协商制定。在 SSL/TLS 握手过程中需要协商的信息包括:
- 协议版本号;
- 加密算法,包括非对称加密算法、动态密钥算法;
- 数字证书,传输双方通过交换证书及签名校验来验证对方身份;
- 动态密钥,由于非对称加密对性能消耗较大,因此主要的通信过程都是使用动态密钥进行对称加密的;对称加密使用的动态密钥则在握手过程中通过非对称加密来传输。
握手过程
以 TLS 1.2 为例:
握手过程如上图所示,大体来说分成三个过程:明文通信过程、非对称加