网络安全的基本属性
- 机密性:发送方加密,预定接收方解密
- 身份认证:发送方与预定接收方能确定彼此身份
- 完整性:信息不会被篡改,即使被篡改了也可以被检测出来
常见攻击手段
- 映射(Mapping):利用 ping 确定网络上运行主机的地址,再通过端口扫描依次尝试与每个端口建立 TCP 连接,找出主机在运行的服务
- 嗅探(sniffing):在共享介质网络中,攻击方接收所有经过它的分组,层层解析后得到数据
- IP 欺骗:修改分组的源 IP 地址,冒充发送方
- 拒绝服务(DoS):向接收方恶意泛洪分组,淹没接收方(带宽耗尽、资源耗尽)
- 中间人攻击:对源主机伪装成目的主机,对目的主机伪装成源主机
密码学基础
术语
- 明文:没有进过加密的数据
- 密文:进过加密算法加密的数据
- 加密、解密密钥:用于辅助加密、解密的参数
按加密密钥与解密密钥是否相同,将加密算法分为两大类:对称加密(加解密钥相同)与非对称加密(每方有公开、私有两个密钥)
传统加密方法
- 替代密码:用一种东西替代另一种东西(单码替代、多字母替代等)
- 换位密码:重新排列明文中的字母(置换法等)
现代加密方法
现代技术不再针对字母,而是针对二进制位进行操作,其原理既包括替代,又包括换位:
- 对称加密
- 流密码:密钥产生密钥流,由密钥流对数据流进行加解密
-
- 分组密码:将明文序列划分为若干长为 M 的明文组,各明文组利用长为 i 的密钥组变换得到若干长度为 N 的密文组。通常分组长度取 64 bits
- 非对称加密
对称加密
分组密码例子:DES
DES:数据加密标准(Data Encryption Standand),本质是 16 轮的 Feistel 分组密码,分组长度为 64 bits,密钥长度为 56 bits,每轮产生一个 48 bits 的子密钥:
IP 置换:把输入数据的排列顺序打乱
分组密码例子:AES
AES:高级加密标准(Advanced Encryption Standand),分组长度 128/192/256 bits,可提供 128/192/256 bits 密钥,循环次数在一定范围内可变,与 DES 相比安全得多。
非对称加密
公钥加密算法的需求:
- 公钥加密 KB+ 和私钥解密 KB- 要满足:KB-(KB+(m)) = m
- 给定公钥 KB+,不可能计算得到 KB-
非对称加密例子:RSA
任何信息在计算机中都以比特流的形式表示,每个比特流可以表示为一个唯一的整数,因此加密一个报文就等于加密一个整数。
RSA 公钥/私钥生成过程:
- 选择 2 个大质数 p 和 q
- 计算 n = pq,z = (p-1)(q-1)
- 选择 e(e < n),使 e 与 z 互质
- 选择 d 使 ed mod z = 1
- 得到公钥 (n,e),私钥(n,d)
给定公钥 (n,e)和私钥(n,d),RSA 加密过程:
- 加密报文 m 时,计算 c = me mod n
- 解密报文 c 时,计算 m = cd mod n
总结:m = (me mod n)d mod n = med mod n = med mod z mod n
RSA 的公钥密钥是相对的,即可以用公钥加密私钥解密,也可以用私钥加密公钥解密:KB-(KB+(m)) = m = KB+(KB-(m))
由于 RSA 运算强度超高,实际应用中几乎不可能用于加密大报文,所以常常与对称加密结合使用。即用 RSA 解决对称加密中密钥分发问题,再利用对称加密算法对数据进行加密。这种方式分发的密钥称为会话密钥。
报文完整性
报文完整性也称为报文认证,目标有:
- 证明报文确实来自声称的发送方
- 验证报文没有被篡改
- 预防报文的时间、顺讯、持有期被修改
对报文应用散列函数 H 得到一个固定长度的散列码。这个散列码称为报文摘要,相当于源报文的数字指纹,可以用于报文认证。
散列函数算法例子:
- MD5:对任意长度的报文输入,计算输出 128 bits 散列值
- SHA-1(Secure Hash Algorithm):要求输入长度 < 264,计算输出 160 bits 散列值。速度较慢但是安全性高于 MD5
这种报文认证方法虽然能验证报文完整性,但是无法解决否认(发送方不承认自己发送过某一报文)、伪造(接收方伪造一份报文并声称来自发送方)、篡改(接收方对收到的信息进行修改)等问题,由此衍生了现实中广泛使用的数字签名(Digital Signatures)技术
数字签名
数字签名是实现安全电子交易的核心技术之一,特点是:
- 可验证性:可以验证发送方身份、报文是否被篡改
- 不可伪造性:接收方无法伪造报文
- 不可抵赖性:发送方无法否认曾经发送过这样一个报文
要实现数字签名,必须依赖于加密技术。但是为了确保接收方不可能伪造报文,无法使用对称加密技术。
签名过程举例:Bob 作为发送方给 Alice 发消息
经过加密的报文摘要称为报文认证码(MAC),是基于密钥和消息摘要所获得的一个值,可用于数据源认证和完整性校验。
密钥分发中心(KDC)
解决两个实体在网上共享对称密钥的问题,由此引入“可信任的密钥分发中心(Key Distribution Center)”作为两实体间的中介。
KDC 本质上是一个服务器,每个使用共享密钥服务的用户都要在此注册一个专属密钥。
密钥分发举例:Alice 与 Bob 使用 KDC 为中介共享密钥,R 即是 Alice 与 Bob 间的会话密钥
认证中心(CA)
CA 负责公钥分发(保证公钥的来源可信),实现特定实体与其公钥的绑定:
假设 Bob 在 CA 注册他的公钥信息:
- Bob 向 CA 提供身份证明
- CA 创建绑定 Bob 身份及其公钥的证书
- 证书包含 CA 签名的 Bob 的公钥
Alice 想要得到 Bob 的公钥:
- 获得 Bob 的公钥证书
- 应用 CA 的公钥解密,获得 Bob 的公钥
一张公钥证书包含的要素有:
- 序列号:唯一发行号
- 持有人信息:机构名,机构公钥,签名算法
- 发行者信息
- 有效期:保证在这个时间内从 CA 获得的公钥是有效的
- 发行者数字签名
SSL
安全套接字层(SSL)或传输层安全(TLS) 可作为基础协议栈的组成部分,对应用透明。使用 SSL 后,传送 的应用层数据会被加密:
所谓 HTTPS 就是套了一层 SSL 的 HTTP 协议,保证信息的机密性和完整性,提供服务器认证功能。
SSL 通信概览
以 Alice 向 Bob 建立一个 SSL 连接为例:
TCP 连接建立完成后,就要开始建立 SSL 连接
- Alice 向 Bob 发送请求
- Bob 回应他的公钥证书
- Alice 获得 Bob 的公钥,利用这个公钥加密一个随机产生的主密钥 MS 表示为 EMS(加密过的主密钥)
不同的加密操作使用不同的密钥会更安全(如:报文认证码 MAC 密钥与数据加密密钥),所以 SSL 会通过主密钥 MS 派生出一组密钥:
- Kc:加密客户端向服务器发送数据的密钥
- Mc:加密客户端向服务器发送数据的 MAC 密钥
- Ks:加密服务器向客户端发送数据的密钥
- Ms:加密服务器向客户端发送数据的 MAC 密钥
SSL 将字节流分割为一系列记录,每个记录携带自己的 MAC。在 MAC 中有记录的序列号和一次性随机数,防止攻击者重排或重放记录。同时还要添加记录类型,防止攻击者伪造 TCP 断连,type=0 用于数据记录,type=1 用于断连。即:MAC = MAC(key, sequence||type||digest)
一次简化的 SSL 通信过程如下:
现实中的 SSL 协议栈
SSL 支持客户与服务器商定各自使用的密码组(加密算法及密钥),通常是客户端提供选项,服务器从中挑选。
SSL 不是一个单独的协议,而是两层共四个协议:
- 更改密码规格协议:负责更改当前连接的密码组,标志着当前加密策略的改变。ContentType = 20
- 警告协议:加密出错或握手失败时,为对方发送警告或直接中止当前连接。ContentType = 21
- 握手协议:确定 SSL 握手过程(商定加密算法,建立密钥,提供服务器证书认证)。ContentType = 22
- 记录协议:描述 SSL 记录格式,封装数据
SSL 握手过程
- 客户端发送其支持的算法列表及客户端一次性随机数(nonce)
- 服务器选择算法并发回给客户:选择 + 证书 + 服务器一次性随机数
- 客户端验证证书提取服务器公钥,生成预主密钥,并利用服务器公钥加密预主密钥,发送给服务器
- 客户端与服务器基于预主密钥和一次性随机数分别独立计算加密密钥和 MAC 密钥(两方使用相同的算法,得到相同的密钥)
- 客户端发送一个针对所有握手过程的 MAC
- 服务器发送一个针对所有握手过程的 MAC
SSL 完全建立之前所有信息都是明文传输的,这就很容易被有心人篡改其中内容,最后两步可以作为握手信息完整性认证。
IPsec
IPsec 负责网络层安全,提供机密性,完整性,源认证,防重放攻击服务。IPsec 在网络层中的传输有两种模式:
- 传输模式:IPsec 数据报的发送与接收都在端系统完成
- 隧道模式:边缘路由器是 IPsec 感知的,IPsec 数据报进入局域网前还原为普通 IP 数据报
有两个协议提供 IPsec 服务:
- 数据认证头协议(AH, Authentication Header):提供源认证,完整性
- 传输模式:
下一个头:指向源 IP 数据报载荷中的头部信息,如 TCP 头、UDP 头
-
- 隧道模式:
- 封装安全协议(ESP, Encapsulation Security Protocol):提供源认证,完整性,机密性。实际应用中最为广泛,我们常用的 VPN 就是基于这种协议
- 传输模式:
-
- 隧道模式:最重要最常见的 IPsec 实现
安全关联
发送数据前,发送端到接收端之间需要建立安全关联 SA(Security Association)以定义对数据报的加密算法与密钥。两方均要维护 SA 的连接状态信息。换言之,IPsec 并不是简单的对 IP 的封装,IP 是无连接的,IPsec 是面向连接的:
安全策略
安全策略 SP(Security Policy) 定义了对什么样的数据流应用 IPsec。多条安全策略记录组成了安全策略数据库 SPD。服务器提取数据报关键信息填充到一个称为“选择符”(目标IP,源IP,传输层协议,源端口,目标端口)的结构中,利用选择符去搜索 SPD,检索匹配的 SP。
虚拟专用网(VPN)
专用网络:基于专属的网络设备、链路或协议建设的专门用途的网络。最大的好处就是安全,但是成本很高。
虚拟专用网络:通过建立在公共网络上的安全隧道,实现总部与分部的安全连接,在逻辑上建立一个专用网络,大大降低了费用。由隧道模式 ESP 实现的 IPsec 是 VPN 最常见的实现方法。
隧道:通过 Internet 提供安全的端到端的数据传输,本质上是一种加密与封装。数据进入隧道时经 VPN 封装在 Internet 中传输。
实现过程
- R1 将 IP 数据报转换为 IPsec 数据报
- 检索 SPD,确定 SP
- 检索 SAD,确定 SA
- 在源 IP 数据报后面附加 ESP 尾部
- 利用 SA 的加密算法与密钥加密数据报
- 在加密结果前面附加 ESP 头
- 利用 SA 的加密算法与密钥创建报文认证码 MAC
- 构造新 IP 头,发到 R2 去
- R2 解封 IPsec 数据报
- 提取 SPI 去检索 SAD,确定 SA
- 利用共享密钥解出原始 IP 数据报
防火墙
防火墙是隔离内网与公共互联网,阻止某些分组进入 or 离开内网的软硬件设施。可分为三类:
- 无状态分组过滤:位于网络边缘路由器,根据 IP 地址、端口号、协议类型等信息逐个过滤分组决定是否转发。
- 有状态组过滤:跟踪每个 TCP 连接,根据 SYN、FIN 等状态决定是否放行分组。
- 应用网关:基于应用层数据过滤分组
好了,本篇文章就和大家分享到这。更多内容欢迎查看我的博客。