1. 概述
1.1 网络安全需求
五种需求:
-
机密性:防止数据未授权公开,让消息对无关听众保密
-
完整性:防止数据被篡改
-
可控性:限制对网络资源(硬件和软件)和数据(存储和通信)的访问
-
目的:阻止未授权使用资源,未授权公开或修改数据
-
要素:标识、鉴别、授权、决策、执行
-
-
不可否认性:通信实体对自己的行为需要负责,不可抵赖。两层含义:
-
发送者不能否认自己发送数据的行为
-
接收者不能否认接受数据的行为
-
-
可用性:合法用户在需要使用网络资源时能够获取正常的服务
注:可用性的实现往往依赖于其余四种特性的实现
1.2 网络安全协议的定义
网络安全协议可定义为基于密码学的通信协议,包含两层含义:
-
网络安全协议以密码学为基础
-
网络安全协议也是通信协议
第一层含义体现了网络安全协议与普通协议间的差异,使用密码技术时,算法和密钥两个要素都不可或缺。
第二层含义体现了网络安全协议与普通协议之间的共性
1.3 构建网络安全协议所需的组件
1.3.1 加密和解密
加密是保障数据机密性的手段,解密是其逆过程
加密解密过程示意图
未知密钥的情况下,最直观的攻击方式是穷举攻击,密文被破解的可能性与算法的安全性与密钥长度密切相关
密钥范围足够大与保证安全时间以及资源配备有关
密钥是保障安全性的核心
公钥密码和对称密码的对比
-
密钥交互和保密的角度:公钥密码优于对称密码。但保障数据机密性时对称密码的到广泛应用,原因之一是对称密码算法效率高
-
应用的角度:公钥密码主要用于:
-
计算数字签名确保不可否认性
-
用于密钥交换
-
-
密钥的实用角度:
-
保障机密性,使用接收方的公钥加密
-
用于数字签名,使用发送方的私钥加密
-
1.3.2 信息摘要
表征该数据特征的字符串
获取数据 摘要功能由散列函数完成,散列函数接受任意长度的数据,产生定长的值,数学表达式:
其中M是任意长度的铭文,H是散列函数,h是散列值
散列函数是一种压缩映射的过程,输入空间远大于散列值的空间,不同的输入可能产生相同的输出,故不可能从散列值唯一确定输入值
TCP和UDP都包含的”校验和“字段就是摘要信息,字段都是定长的2B
信息摘要验证数据完整性
摘要是验证完整性的基础,发送数据时可以加上数据摘要,接收方验证摘要值和数据经计算后的摘要值是否相等,判断数据完整性。
此过程用于检测由于硬件失效或软件错误所产生的传输错误时有效,但无法应对恶意攻击
用于信息安全领域信息摘要需满足的特性
-
映射分布均匀性和差分分布均匀性:散列值0和1总数应大致相等。雪崩效应:输入中一个bit的变化,散列结果中将有一半以上的bit发生变化
-
单向性:不能由散列值得到输入
-
抗冲突性:统计上无法产生两个散列值相同的预映射(能用于完整性校验的基本要求)
选择摘要值
-
选择摘要值的限定因素通常是抵御冲突的强度,而不是满足单向性的强度
-
选择摘要长度时还要考虑计算效率
1.3.3 消息验证码(MAC)
与完整性校验含义相同,它基于密钥和消息摘要获得的一个值,可用于数据源发认证和完整性校验(认证功能)
利用消息验证码验证消息完整性原理
消息验证码 = 信息摘要 + 加密算法
验证通过,得到:
-
数据确实用会话密钥加密
-
消息验证码是消息摘要经过密钥处理后所得,被更改后仍可用密钥还原得到原始摘要的概率很低
消息验证码的计算方式
-
利用已有加密算法对消息摘要进行加密
-
使用专门的MAC算法,普遍认同的算法哈希运算消息验证码,计算方法如下:
K:密钥,长度为哈希函数所处理的分组尺寸
M:消息
H:散列函数
opad和ipad:分别是0x5c和0x36组成的字符串
1.3.4 数字签名
确保不可否认性,原理与消息验证码类似,具备认证功能
使用发送方的私钥加密摘要,验证发使用发送方的公钥验证
消息验证码和数字签名的区别
-
消息验证码使用通信双方共享的会话密钥处理摘要
-
数字签名使用发送方的私钥加密摘要,验证发使用发送方的公钥验证
1.3.5 密钥管理
密钥管理是密码系统的核心,密钥管理涉及:密钥生成,分配,传递,保存,备份和销毁
1.3.5.1 建立共享密钥
-
基于可信的第三方
指通过密钥分发中心(KDC)
-
密钥协商方式
思想:通信双方交换生成密钥的素材,并各自利用这些素材在本地生成共享密钥
D-H交换
-
发送方计算:
-
接收方计算:
通信双方共享g和 p
-
-
密钥传输方式
核心思想:
由通信一方生成共享密钥,并通过某种途径将该密钥传递到通信对等端.碧玺保证通信安全.
利用公钥密码体制保护共享密钥
1.3.5.2 公钥管理
直接通过网络发送公钥可能遭受中间人攻击
公钥的分发和传递使用证书
证书系统
构建:基于证书授权中心,可信的第三方,负责证书的颁发,管理归档和撤销
数字证书是一段数据,包含两个关键字段:
-
证书所有者的公钥
-
颁发该证书的CA用自己的私钥对证书所做的签名(防止中间人攻击)
实施完整性验证时必须要获取该颁发者的公钥
证书除了包括公钥和签名两个关键字段还包括:版本,序列号,签名算法,颁发者名称,主体名称和有效期
证书撤销
CRL是一个经过签名的,标有日期的,包含所有已撤销证书的列表,表中的证书表示已失效
验证证书的有效性
-
验证证书的签名
-
查看证书是否在CRL中
1.4 构建一个简单的安全消息系统
提高交互效率
核心:证书和密钥的传递步骤从整个通信过程中独立开来
独立出来的过程叫:握手或协商,在数据交互之前,包含三大功能:
-
身份认证
-
算法协商
-
密钥生成
2. 链路层扩展
2.1 PPP的协议流程
PPP规定了以下内容:
-
帧格式和成帧方式
-
用于建立、配置、和测试PPP链路的链路控制协议
-
用于建立和配置网络层协议的网络控制协议
协议流程
发送方 | 回应方 |
---|---|
发送LCP配置请求报文(各项参数:认证协议,最大接收单元,压缩协议) | 返回确认报文 |
提供口令和账号(以便验证身份) | 验证身份成功后返回 |
发出IPCP配置请求 | 返回确认 + 分配IP |
发出LCP终止链路请求 | 返回确认链路终止 |
PPP链路转换过程
五个阶段:
-
链路不可用阶段(Dead):链路状态的起始和终止点
-
链路建立阶段(Establish):通信双方用LCP配置PPP链路
-
认证阶段(Authenticate):回应方认发起方的身份
-
网络层协议阶段(Network):回应方给发起方分配IP
-
链路终止阶段(Terminate):PPP链路终止,但物理层链路仍可用
帧格式
说明:
-
首尾两个F(Flag)为帧定界标志,固定值7E
-
A(Address)为地址字段,设置为FF(点到点链路的端点唯一)
-
C(Control)是控制字段,包含帧类型和序号
-
协议字段指明了封装的协议数据类型
-
数据字段的取值与协议类型相关
PPP帧有三种类型,信息帧(Information)、监督帧(Supervisory)、无编号帧(Unnumbered)
2.2 认证协议PAP和CHAP原理
2.2.1 PAP
PAP是基于口令的认证方法。
-
被认证方:发送报文(账号和口令信息)
-
认证方:接收报文,通过返回Authenticate-Ack,不通过返回Authenticate-Nak
PAP包含的账号 和口令信息明文传输,无法防止窃听、重放和穷举攻击
PPP在建立链路阶段使用
Authenticate-Ack报文格式
Authenticate-Nak报文格式
2.2.2 CHAP
CHAP是基于挑战的认证协议
认证方 | 被认证方 |
---|---|
发出Challenge报文,包含随机数c | 将双方共享秘密值s和c作为输入,计算hash值A1,通过Response报文返回 |
将本地的s和c作为输入,计算hash值A2。若A1 = A2,返回Success,否则返回Failure |
Challenge报文格式
Response报文格式
2.3 L2TP概念和安全性分析
2.3.1 概念
L2TP是对PPP的扩展,它允许链路端点跨越多个网络
关键组件
-
L2TP接入集中器(LAC)
-
L2TP网络服务器(LNS)
他们之间通过协商建立隧道,用以转发PPP报文
L2TP应用场景
远程系统与家乡局域网建立连接
-
通过公共电话网络(PSTN)与LAC建立PPP链路。这段链路和隧道构成虚拟的PPP链路
-
远程系统的PPP帧发送给LAC
-
LAC用L2TP封装,且发送给LNS
-
LNS解封,发送给家乡局域网主机
远程系统和家乡局域网主机就是L2TP的对等端
某些情况下,主机可以不依赖LAC,而是独立运行L2TP,并与LNS建立隧道
除了IP网络,L2TP也支持ATM和帧中继等网络类型,L2TP是一个应用层协议,使用知名端口1071
L2TP包含两种消息:数据消息和控制消息,分别通过L2TP数据通道和控制通道传输。L2TP不保证数据消息的可靠传输,保证控制消息的可靠传输。
一条隧道对应一个控制连接,可承载多个会话
2.3.2 协议流程
-
建立控制连接SCC
-
SCCRQ(SCC请求,类型编号“1”)
-
SCCRP(SCC响应,类型编号“2”)
-
SCCCN(SCC已建立,类型编号“3”)
-
确认,完成控制连接建立
-
-
建立会话
-
呼入会话
-
呼出会话
-
-
数据传输
-
终止会话
-
终止控制连接
说明:
-
实际中LNS和LAC都可发起建立控制连接的协商
-
建立呼入会话和呼出会话是建立会话的两种可能
-
建立控制连接阶段的每个报文类型后用括号包含的两个数字分别是发送序号和接受序号
-
L2TP每个步骤中都可能使用ZLB ACK报文,表示实体长度为0的确认报文
2.3.3 安全性分析
-
L2TP不提供对PPP数据的机密性和完整性保护。
-
若使用CHAP,则可体现端点身份认证功能
-
不提供对每个报文的认证功能,无法抵抗插入攻击和地址欺骗
-
不提供对报文的完整性保护,造成拒绝服务器攻击
-
没有密钥更新机制,密钥被攻破的风险增大
3. IP层安全IPsec
Internet Protocol Security
3.1 IPsec的基本概念
IP的安全性
-
IP可能遭受欺骗
-
IP数据报被经过的所有网络都可看到,甚至篡改其中的信息
IPsec相关概念
-
IPsec是一个协议族,包含多个RFC
-
IPsec是通过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议族
3.2 IPsec提供的安全服务
-
身份认证
-
机密性(数据源发认证)
-
完整性(完整性校验)
-
抗重放保护
-
有限的通信流机密性保护
通信流是指报文的通联要素,包括最初的源发地(IP地址、协议端口)和报文长度等。
协议的互操作性也是考虑的重要因素
IPsec在通用性、部署灵活性、安全策略统一性占优势,在使用简便性、通信效率和应用 开发支持不占优势
3.3 IPsec的协议组成
3.3.1 协议组成
把IP通信过程分为协商和数据交互两部分
协商阶段:
-
通信双方互相认证身份
-
根据安全策略协商使用的加密认证算法
-
生成共享会话密钥
数据交互阶段
-
利用协商好的算法和密钥对数据进行安全处理以实现IPsec的各种安全功能
使用的协议:
-
互联网密钥交换协议 IKE ,对应协商阶段
-
认证首部AH,对应数据交互阶段,规定报文格式以及对报文的处理方式和处理过程。AH只提供认证功能,仅计算消息验证码(ICV,完整性校验值)
-
封装安全载荷ESP,对应数据交互阶段。提供机密性和完整性保护,加密报文,计算ICV
IPsec标准中,互联网安全关联与密钥管理协议(ISAKMP)、Oakley和IKE密切相关,他们都是协商协议
3.3.2 标准组成
按照描述的内容区分
-
IPsec体系结构 描述IPsec的基本概念、安全需求以及IPsec的应用模式
-
ESP协议 规定了ESP的语义、语法和时序
-
AH协议 规定了AH的语义、语法和时序
-
加密算法 描述了各种算法如何应用于ESP
-
认证算法 描述了各种认证算法如何应用于AH金额ESP
-
组合算法 描述了如何将加密和认证算法组合以提供服务
-
IKE 规定了协商协议的语义、语法和时序
IPsec RFC之间的关系
3.4 安全策略与安全关联的概念和用途
3.4.1 安全策略的含义
-
安全策略位于安全规范的最高一级,是决定系统安全的关键要素。
-
安全策略定义了系统中哪些行为是允许的,哪些是不允许的
3.4.2 安全策略的作用
-
安全策略决定了一个组织怎样保护自己
-
一般来说,安全策略包含两个部分:总体策略和具体规则
3.4.3 安全策略的要素
IPsec本身没有为策略定义标准,只规定了两个策略组件:SPD(安全策略库)和安全关联库(SAD)
外出的数据报,检索SPD,决定提供给它的安全服务
进入的数据报,查阅SPD。判断其提供的安全保护是否与策略规定的安全保护相符
策略描述主要包括:对通信特征的描述,对保护方法的描述
对通信特征的描述
-
目的IP地址
-
源IP地址
-
名字
-
传输层协议
-
源和目标端口
-
数据敏感等级
对保护方法的描述
对于进入或外出的数据包,都可能有三种处理方式:
-
丢弃
-
绕过
-
绕过或应用IPsec
若应用IPsec,策略要包含使用的:
-
安全协议(AH或ESP)
-
模式
-
算法
3.4.4 安全关联SA
安全策略与安全关联的关系
-
安全关联用于实现安全策略,是安全策略的具体化和实例化
-
定义了如何对一个具体的数据报进行处理
-
对于SPD中的一条记录,若使用IPsec进行保护,它必定要指向一个SA或SA束
-
一个SA对IP数据报只提供AH或ESP保护,要提供多种保护,则需使用多个SA
安全关联的定义
安全关联是两个IPsec实体(主机、路由器)间的一个单工连接,决定保护什么,如何保护以及谁来保护通信数据
SA是单向的,要么对数据提供进入保护,要么提供外出保护
安全关联库SAD
SAD为进入和外出维护一个活动的SA列表,其中记录是无序的,外出的SA保障外出数据报的安全,进入SA保障进入数据报的安全
字段包括:
-
目的IP地址
-
IPsec协议
-
序号计数器
-
序号计数器溢出标志
-
抗重放窗口
-
密码算法及密钥
-
安全关联的生存期
-
IPsec协议模式:传输或隧道模式
-
路径MTU
3.5 IPsec的协议流程
IPsec协议流程就是依托安全策略对数据报进行安全处理和验证的过程
外出处理
处理方式可能有三种:
-
丢弃数据报
-
绕过IPsec给数据报添加IP头,然后发送
-
应用IPsec查询SAD,确定是否存在有效的SA,此时按如下步骤处理:
-
存在有效的SA,取出相应的参数,,将数据报封装(包括加密、验证、添加IPsec头和IP头),然后发送
-
尚未建立SA,启动或触发IKE协商,协商成功后,按如上步骤处理,不成功则将数据报丢弃
-
存在SA但无效,请求协商新的SA,成功按照步骤1处理,不成功将数据报丢弃
-
进入处理
收到数据报
-
查询SAD
-
得到有效SA,查询为该数据报提供的安全保护是否与策略要求相符
-
相符,将还原后的数据报交给相应高层协议模块或转发
-
不相符,将数据报丢弃
3.6 IKE定义的4种认证方法
IKE的功能包括:
-
SA协商
-
密钥生成
-
身份认证
是一个应用层协议,基于UDP
SA协商:规定的SA属性包括加密算法、散列算法、认证方法、D-H群信息、伪随机函数、群描述、群类型、生命期类型、生命期以及密钥长度
IKE定义的4种认证方法
-
基于数字签名的方法
-
通信双方互相交互证书和签名信息,签名认证通过,确认对方身份
-
-
基于公钥加密的方法
-
通信双方用对方的公钥对身份、随机数等加密处理好后,发送给对等端
-
通信双方将身份、随机数等信息作为输入,生成认证信息
-
如果认证信息正确,验证了对方的身份
-
-
改进的基于公钥加密的方法
-
对某些信息采用公钥加密,对其他信息采用对称加密,提高效率
-
-
基于预共享密钥的方法
-
通信双方预先共享一个密钥。
-
通信双方在生成人生信息时,预共享密钥作为输入之一
-
如果认证信息正确,身份得以验证
-
3.7 IKE使用数字签名的主模式流程
IKE 主模式是ISAKMP身份保护交换实例,使用不同的认证方法,主模式的报文结构和验证信息都不相同
3.7.1 使用数字签名认证方法的主模式流程
-
NI和Nr:发送方和回应方的NONCE
-
SIC_I和SIC_R:发送方和回应方的签名
-
[ ] :其中内容表示可选内容
-
*:标识内容是经过安全处理的
流程:
-
前两个报文协商SA
-
3,4个报文交换信息和随机数,此时,双方都可在本地生成用于保护数据的秘密信息
-
最后两个报文交换身份和认证信息,完成对等端认证
3.7.2 使用公钥加密认证方法
-
HASH_I和HASH_R:发起方和回应方的散列值
-
PubKey_i 和 PubKey_r:表示发起方和 回应方的公钥
-
<a>b:表示用b加密a
流程:
-
前两个报文协商SA
-
3,4个报文包含了密钥交换信息以及用对等端公钥加密的身份信息和NONCE,第3个报文还包含了可选的散列值
该散列值用途:如果回应方有多个公钥,发起方要向回应方通过使用那个公钥,该信息以该公钥对应的证书的散列值形式发出
-
完成报文交换和认证信息
3.7.3 使用改进的公钥加密认证方法
-
Ke_i 和 Ke_r:发起方和回应方用于加密身份和密钥交换信息的临时密钥
3.7.4 使用预共享密钥认证方法
4. 传输层安全SSL和TLS
4.1 SSLv3的协议组成
SSL标准定义了:
-
握手协议
用于安全机制的协商功能:
-
客户端认证服务器身份(*)
-
可选的客户端认证,服务器可以选择认证客户端身份
-
算法协商(压缩算法【加密之前压缩】、加密算法、消息验证码算法)
-
密钥生成,生成客户端和服务端的共享密钥
-
-
更改密码规范协议
-
安全协商后互相交换一条消息,互相通告协商好的参数
-
-
警告协议
-
报错机制
-
安全断连机制
-
-
记录协议
-
规定了SSLv3的报文格式和处理过程
-
SSL满足:机密性,完整性,实现服务器身份认证以及可选的客户端认证
4.2 SSLv3基本协议流程
SSL位于应用层和传输层之间
握手 —-> 密钥导出 —-> 数据传输 —->关闭连接
基本流程
-
协商握手阶段:客户端验证服务器身份,与服务器就算法和密钥达成共识
-
客户端向服务器发送ClientHello消息,包含:客户端所支持的各种算法和一个随机数(随机数用于密钥推导,阻止重放攻击)
-
服务器返回ServerHello消息,包含:服务器选中的算法和另一个随机数
-
服务器返回Certificate消息,包含:服务器证书(以便客户端认证服务器,并获得其公钥)
-
服务器发送ServerHelloDone【可选】,告诉客户端本阶段消息发送完毕
-
客户端发送ClientKeyExchange消息,包含:客户端生成的预主密钥(使用服务器公钥加密)
-
客户端和服务器,各自以预主密钥和随机数作为输入,在本地计算会话密钥
-
客户端发送ChangeCipherSpec消息,通告启用协商好的各项参数
-
服务器发送ChangeCipherSpec消息
-
服务器发送Finished消息
-
-
数据传输阶段:利用协商好的算法和密钥处理数据
-
客户端和服务器之间交互应用数据,使用协商好的参数进行安全处理
-
-
通过可认证的方式断开连接
-
客户端发送Close_notify消息,以一种可认证的方式通告服务器断开连接
-
服务器发送Close_notify消息
-
4.3 使用客户端认证时的SSL流程
-
服务器发送 CertificateRequest消息,通告客户端需验证其身份
-
作为相应,客户端发送Certificate消息,将自己的证书发送给服务器
-
客户端发送CertificateVerify消息,其中包含了客户端利用与 证书对应的 私钥 对之前的握手消息进行签名
4.4 基于DH交换生成预共享密钥的SSL流程
相较于基于密钥交换生成预共享密钥的SSL流程,基于D-H交换生成预共享密钥在握手阶段多了两条消息:
-
ServerKeyExchange
-
ClientKeyExchange
这两条消息用于交换生成共享密钥的素材或者包含D-H密钥的证书
ServerKeyExchange除了交换密钥素材外还有的用途:
-
当服务器没有证书时,或仅有用于签名的证书时,可用这个报文向客户端提供口令
-
临时RSA应用
-
Fortezaa应用
4.5 SSLv3密钥导出过程
-
输入:包括ClientHello和Server Hello中包含的随机数,以及预主密钥
输出:主密钥
-
输入:包括两个随机数和主密钥
输出:密钥分组
被分为6段:M~cs, M~sc, E~cs, E~sc, IV~cs, IV~sc
IV~cs, IV~sc是客户端和服务器使用的初始化量
4.6 常用的协议端口
普通协议 | 普通端口 | 安全协议 | 安全端口 | 备注 |
---|---|---|---|---|
HTTP | 80 | HTTPS | 443 | 超文本传输协议 |
FTP | 21 | FTPS | 990 | 文件传输协议控制连接 |
FTP-data | 20 | FTPs-data | 989 | FTP数据连接 |
NNTP | 119 | NNTPS | 563 | 网络新闻传输协议 |
Telnet | 23 | Telnets | 992 | 远程登录协议 |
IMAP | 143 | IMAPS | 993 | Internet邮件访问协议 |
SMTP | 25 | SMTPS | 465 | 简单右间传输协议 |
POP3 | 110 | POP3S | 995 | 邮局协议3 |
IRC | 194 | TRCS | 994 | Internet中继聊天协议 |
LDAP | 389 | LDAPS | 636 | 轻目录访问协议 |
4.7 HTTP和HTTPS的对比
4.8 SSL典型函数调用对照
5. 认证协议Kerberos
5.1 网络安全协议中的“认证”包含的范围
-
实体身份认证
-
数据源发认证
-
数据完整性校验
5.2 Kerberos协议的工作原理
-
基于对称密码体制,授予实体的身份凭证是票据
-
特点:用户只需输入一次身份认证信息就可以凭借此验证获得的票据访问多个服务
流程
-
用户初次登录或票据过时,客户端向可信第三方第三方发出消息,请求获取票据
-
用户请求某个新的应用服务或用于访问某个应用服务的票据过期,客户端向票据许可服务器发送包含票据和认证符的消息
-
用户请求应用服务时,客户端向应用服务器发送包含票据和认证符的消息
5.3 Kerberos协议应对的安全威胁
-
同一工作站的某个用户可能冒充另一个用户操作该机器
-
用户可更改工作站的IP地址冒充另一台工作站
-
攻击者可能实施重放攻击
-
攻击者可能操纵某台机器冒充服务器
5.4 重放攻击、中间人攻击与认证协议的设计
防止重放攻击
-
引入时间参数
-
两个参数:生命期(有效时间),时间戳(办法时间)
防止中间人攻击
-
引入会话密钥和认证符
-
可信第三方在为用户颁发票据的同时,还将为用户和服务器生成共享的会话密钥。
-
用户访问时需通过认证符证明自己拥有会话密钥
5.5 Kerberos协议的跨域认证
什么是域?
每个组织或单位都可能建立一个Kerberos认证系统,该系统称为Kerberos域(Realm)
5.5.1 跨越单个域
-
客户端访问ASa获取访问TGSa的票据TGTtgsa
-
访问TGSa获得访问TGSb的票据TGTtgsb
-
访问TGSb获取访问服务器的Ticket~b
-
访问域b的服务器S
TGTtgsb使用A和B之间的域间密钥加密,TGSb收到使用域间密钥解密还原确保该票据是由TGSa颁发
5.5.2 跨越多个域
每两个直接跨域认证的域之间都共享域间密钥
若两个域之间没有共享域间密钥,则可通过该树建立一条认证路径,它由跨越的中间域构成