Android开发之网络框架——SSL握手与加密(对称+非对称+单向加密)解析

1,014 阅读11分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

SSL定义

SSL其实就是Secure Scoket Layer安全套接层,提供了一种为网络通信提供安全以及数据完整性的安全协议,再传输层对网络进行加密。

  • SSL记录协议: 为高层协议提供安全封装,压缩,加密等基本功能
  • SSL握手协议:用与再数据传输开始前进行通信双方的身份验证、加密算法协商、交换秘钥

SSL工作原理

SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议(HTTP)使用 SSL 来实现安全的通信。

在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 RC4)进行加密的。公用密钥算法(通常为 RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。SSL 协议的版本 1 和 2 只提供服务器认证。版本 3 添加了客户端认证,此认证同时需要客户端和服务器的数字证书。

SSL加密方式

对称加密与非对称加密

在开始之前首先得对理解对称加密与非对称加密这两种加密方式。其中加密过程是

信息+密钥+算法=密文

单项加密:

单向加密就是用来计算一段数据的特征码的,为了防止用户通过“暴力破解”的方式解密,所以单向加密一般具有“雪崩效应”就是说:只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。单项加密还有一个特点就是无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的,用途:用于验证数据的完整性,常用的单项加密算法

  • MD5:这种加密算法固定长度为128位
  • SHA1:这种加密算法固定长度是160位

SSL 握手

SSL 连接总是由客户端启动的。在SSL 会话开始时执行 SSL 握手。此握手产生会话的密码参数。关于如何处理 SSL 握手的简单概述,如下图所示。此示例假设已在 Web 浏览器 和 Web 服务器间建立了 SSL 连接。

SSL工作原理

(1) 客户端发送列出客户端密码能力的客户端“您好”消息(以客户端首选项顺序排序),如 SSL 的版本、客户端支持的密码对(加密套件)和客户端支持的数据压缩方法(哈希函数)。消息也包含 28 字节的随机数。

(2) 服务器以服务器“您好”消息响应,此消息包含密码方法(密码对)和由服务器选择的数据压缩方法,以及会话标识和另一个随机数。

注意:客户端和服务器至少必须支持一个公共密码对,否则握手失败。服务器一般选择最大的公共密码对。

(3) 服务器发送其SSL数字证书。(服务器使用带有 SSL 的 X.509 V3 数字证书。)

如果服务器使用 SSL V3,而服务器应用程序(如 Web 服务器)需要数字证书进行客户端认证,则客户端会发出“数字证书请求”消息。在 “数字证书请求”消息中,服务器发出支持的客户端数字证书类型的列表和可接受的CA的名称。

(4) 服务器发出服务器“您好完成”消息并等待客户端响应。

(5) 一接到服务器“您好完成”消息,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“你好”消息参数是否可以接受。

如果服务器请求客户端数字证书,客户端将发送其数字证书;或者,如果没有合适的数字证书是可用的,客户端将发送“没有数字证书”警告。此警告仅仅是警告而已,但如果客户端数字证书认证是强制性的话,服务器应用程序将会使会话失败。

(6) 客户端发送“客户端密钥交换”消息。此消息包含 pre-master secret(一个用在对称加密密钥生成中的 46 字节的随机数字),和 消息认证代码( MAC )密钥(用服务器的公用密钥加密的)。

如果客户端发送客户端数字证书给服务器,客户端将发出签有客户端的专用密钥的“数字证书验证”消息。通过验证此消息的签名,服务器可以显示验证客户端数字证书的所有权。

注意: 如果服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 密码,也无法创建对称加密算法的正确密钥,且握手将失败。

(7) 客户端使用一系列加密运算将 pre-master secret 转化为 master secret,其中将派生出所有用于加密和消息认证的密钥。然后,客户端发出“更改密码规范” 消息将服务器转换为新协商的密码对。客户端发出的下一个消息(“未完成”的消息)为用此密码方法和密钥加密的第一条消息。

(8) 服务器以自己的“更改密码规范”和“已完成”消息响应。

(9) SSL 握手结束,且可以发送加密的应用程序数据。

对称加密

对称加密是指服务器和客户端都使用相同的秘钥加密和解密数据,当用户和服务器建立加密连接时,用户会得到服务器唯一的数据加密的秘钥,所有的用户,包括服务器,都是使用这个唯一的秘钥加密自己的信息的。

如:客户A在使用秘钥K加密传输,被加密的密文被发送到服务器上后,服务器使用相同的秘钥K便可以解密出A发送的密文。 在这里插入图片描述 此时假如用户B也和服务器建立加密连接,这里用户B使用的秘钥也是K,也就是说用B的秘钥是可以解密A的加密信息的。这就体现出了对称加密的一个巨大的漏洞:秘钥的唯一性

在对称加密算法中,所有的加密报文都可以被同一个开放的秘钥K加解密。那么,当用户B在与服务器请求到秘钥K后,在通过对A的抓包后,便可使用秘钥K解密A的所有加密报文,从而获取A的隐私信息。

图解如下: 在这里插入图片描述 所以,对称加密由于秘钥K的唯一性,几乎等于明文传输,所以不可用。

非对称加密

因对称加密的不安全性不可用,所以有出现的新的加密方式:非对称加密。

首先,对称加密的两大缺点是,秘钥的唯一性秘钥的公开性。但是在非对称加密中,这两个缺点都得到了较好的解决。

非对称加密,顾名思义,客户与服务器双方使用的加密的秘钥是不同的。在非对称加密中,原来唯一的秘钥K,被拆分为了两个不同的秘钥。分别为服务器的私钥SK,和发给客户机的公钥PK。其中,公钥PK是公开给用户获取的,而私钥SK是一直保存在服务器端的,不向外开放的。

非对称的加密解密流程为:被私钥SK加密的报文只能被公钥PK解密,反之,被公钥PK加密的报文只能被私钥SK解密。即在非对称加密中公钥加密的密文是无法被公钥解密的!

#私钥:SK
#公钥:PK
#客户机数据:A Data
#服务器数据:S Data
#客户加密报文:Y
#服务器加密报文:Y`
(A Data+PK)=Y
(Y+SK)=A Data
(S Data+SK)=Y`
(Y`+PK)=S Data
12345678910

非对称加密流程图解: 在这里插入图片描述 以上,就是非对称加密的基本原理。

如此一来,每一个客户都只有公钥,黑客便无法获得用户发送的隐私信息了(因为用户发送的数据也是公钥加密的,公钥无法解密)。但是,黑客仍然有公钥,所以他仍然能够解密服务器发送的信息(服务器发送的信息是私钥加密的,可以用公钥解密)。因此非对称加密仍然是不太安全的

单项加密:单向加密就是用来计算一段数据的特征码的,为了防止用户通过“暴力破解”的方式解密,所以单向加密一般具有“雪崩效应”就是说:只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。单项加密还有一个特点就是无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的,用途:用于验证数据的完整性,常用的单项加密算法 MD5:这种加密算法固定长度为128位 SHA1:这种加密算法固定长度是160位

加密解密的流程图:

在这里插入图片描述

私钥: 随机数+Key值+公钥
BOB和ALICE通信阶段:

黑框A:表示要传输的数据

黑框B:表示黑框A经过单向加密后的特征码,这段特征码同时运用了非对称加密,具体过程是用BOB的私钥加密,传输给ALICE,只要到达后ALICE能解密,表明对方确实是BOB。这一过程同时起到了用户认证和数据完整性的校验。黑框B又称为数字签名

红框A: 这一阶段会生成一段很长的随机数(密钥)然后配合对称加密算法对黑框A和黑框B加密

红框B:这一阶段是用ALICE的公钥加密这串随机数(对称加密阶段的密钥),ALICE接受到数据后如果能用自己私钥解密,那就证明接受者确实ALICE

加密过程:

第一步:用单向加密算法提取数据(黑框A)的特征值 第二步:用自己的私钥加密这段特征值形成黑框B 第三步:用对称加密算法,对黑框A和黑框B来加密,得到红框A 第四步:用ALICE的公钥来加密第三步所用的密钥,得到红框B

解密过程:

第一步:ALICE用自己的私钥解密红框B得到对称加密的密钥 第二步:用这个密钥解密红框A内容 第三步:用BOB的公钥解密黑框B,如果能成功,说明发送方确实是BOB,这就完成了身份验证(解密后会得到一串数据的特征值) 第四步:用同样的单项加密算法来对这段数据提取特征值,如果和第三步的特征值一样,说明这段数据是完整的,这就完成了数据完整性的校验

进行完上述内容厉害的读者会发现一个问题就是BOB和ALICE如何获得对方的公钥,或者说如何证明获得的公钥就是对方,这就需要引入另一方证书颁发机构CA,下面是对证书颁发机构跟BOB/ALICE之间的解释

黑框C:代表要颁发给BOB/ALICE的公钥,组织,地址等信息

黑框D:是对黑框C进行单向加密后得到的数字签名,然后用自己的公钥对其加密,传输给BOB和ALICE,拿着这个证书颁发机构的公钥(这些证书颁发机构的公钥一般已经被microsoft事先放在windows里面,当然其他操作系统也是一样的)的BOB和ALICE如果能对这个证书进行解密,说明这个证书颁发机构不是冒充的

红框E:表示颁发给BOB和ALICE的证书

文末

人们使用这个ssl证书,不一定会知道这个ssl加密原理。这和人们用的家常的一些东西是一样的。全文讲解了网络框架其中的一小块;还有更多>Android进阶资深架构师的技术学习。

ssl加密也有助于了解加密原理。主要是因为如果没有这个ssl加密的话就得到了机会你的电脑。得到一个可以进入你的网站肆意妄为的机会。还有就是窃取你的网站的基本的信息和你的客户的信息,同时你还难于发现。但是一旦是这个ssl进行了加密之后就得到了保障,因为证书加密是已经很好的保护你的网站的安全性的。

所以,为了保障网络的基本安全,安装SSL证书还是很有必要的。