第7章 网络安全
文章目录
- 第7章 网络安全
- 7.1 网络安全问题概述
- 7.1.1 计算机网络面临的安全性威胁
- 7.1.2 安全的计算机网络
- 7.1.3 数据加密模型
- 7.2 两类密码体制
- 7.2.1 对称密钥密码体制
- 7.2.2 公钥密码体制
- 7.3 鉴别
- 7.3.1 报文鉴别
- 7.3.2 实体鉴别
- 7.4 密钥分配
- 7.4.1 对称密钥的分配
- 7.4.2 公钥的分配
- 7.5 互联网使用的安全协议
- 7.5.1 网络层安全协议
- 7.5.2 运输层安全协议
- 7.5.3 应用层安全协议
- 7.6 系统安全:防火墙与入侵检测
- 7.6.1 防火墙(firewall)
- 7.6.2 入侵检测系统
- 7.7 一些未来的发展方向
7.1 网络安全问题概述
7.1.1 计算机网络面临的安全性威胁
计算机网络的通信面临两大类威胁:
被动攻击 / 截获 / 流量分析(traffic analysis)
:是指攻击者从网络上窃听他人的通信内容。攻击者只是观察和分析某一个协议数据单元PDU而不干扰信息流。主动攻击
:篡改/更改报文流
: 攻击者故意篡改网络上传送的报文。这里也包括彻底中断传送的报文,甚至是把完全伪造的报文传送给接收方。恶意程序(rogue program)
:计算机病毒(computer virus)
,一种会“传染”其他程序的程序,“传染”是通过修改其他程序来把自身或自己的变种复制进去而完成的。计算机蠕虫(computer worm)
,一种通过网络的通信功能将自身从一个节点发送到另一个节点并自动启动运行的程序。
通过网络从一个电脑 “爬” 到另一个电脑,一到了新电脑,它就会 自动启动 ,然后继续寻找下一台电脑去感染。特洛伊木马(Trojan horse)
,一种程序,它执行的功能并非所声称的功能而是某种恶意功能。不会自己复制,它靠 伪装和诱骗 让你主动去安装它。例如:下载了一个 “免费电影播放器”,结果发现它根本不能播电影,反而让电脑变得很卡逻辑炸弹(logic bomb)
,一种当运行环境满足某种特定条件时执行其他特殊功能的程序。如一个编辑程序,平时运行得很好,但当系统时间为13日又为星期五时,它会删去系统中所有的文件,这种程序就是一种逻辑炸弹。后门入侵(backdoor knocking)
,是指利用系统实现中的漏洞通过网络入侵系统。流氓软件
,一种未经用户允许就在用户计算机上安装运行并损害用户利益的软件,其典型特征是:强制安装、难以卸载、浏览器劫持、广告弹出、恶意收集用户信息、恶意卸载、恶意捆绑等。
拒绝服务DoS(Denial of Service)
,指攻击者向互联网上的某个服务器不停地发送大量分组,使该服务器无法提供正常服务,甚至完全瘫痪。若从互联网上的成百上千个网站集中攻击一个网站,则称为分布式拒绝服务DDoS(Distributed Denial of Service)
。有时也把这种攻击称为网络带宽攻击
或连通性攻击
。交换机中毒
:攻击者向某个以太网交换机发送大量的伪造源 MAC 地址的帧。以太网交换机收到这样的帧,就把这个假的源MAC地址写入交换表中(因为交换表中没有这个地址)。由于这种伪造的地址数量太大,因此很快就把交换表填满了,导致以太网交换机无法正常工作。
计算机网络通信安全的目标
- 防止析出报文内容和流量分析。
- 防止恶意程序。
- 检测更改报文流和拒绝服务。
7.1.2 安全的计算机网络
一个安全的计算机网络应设法达到以下四个目标:
机密性
只有信息的发送方和接收方才能懂得所发送信息的内容,而信息的截获者则看不懂所截获的信息。通常可简称为保密。需要使用各种密码技术。端点鉴别
安全的计算机网络必须能够鉴别信息的发送方和接收方的真实身份。信息的完整性
必须确认所收到的信息都是完整的,也就是信息的内容没有被人篡改过。信息的完整性与端点鉴别往往是不可分割的。在谈到“鉴别”时,有时是同时包含了端点鉴别和报文的完整性。也就是说,既鉴别发送方的身份,又鉴别报文的完整性。运行的安全性
确保计算机系统运行的安全性。访问控制(access control)
: 对访问网络的权限加以控制,并规定每个用户的访问权限。
7.1.3 数据加密模型
一般的数据加密模型
加密和解密用的密钥K(key)
是一串秘密的字符串(即比特串)。
密钥通常由密钥中心提供,需要事先约定好。
密码编码学(cryptography)
是密码体制的设计学,而密码分析学(cryptanalysis)
则是在未知密钥的情况下从密文推演出明文或密钥的技术。密码编码学与密码分析学合起来即为密码学(cryptology)
。
7.2 两类密码体制
7.2.1 对称密钥密码体制
对称密钥密码体制:
加密密钥与解密密钥都使用相同密钥的密码体制
数据加密标准DES: 是一种分组密码,属于对称密钥密码体制。由IBM公司研制出。
- 核心思想:DES 的机密性仅取决于对密钥的保密,而算法是公开的。
- 步骤:
- 在加密前,先对整个的明文进行分组。每一个组为64位长的二进制数据。
- 然后对每一个64位二进制数据进行加密处理,产生一组64位密文数据。
- 最后将各组密文串接起来,即得出整个的密文。
- 使用的密钥占有64位(实际密钥长度为56位,外加8位用于奇偶校验)。
三重DES(Triple DES 或记为 3DES): 把一个64位明文用一个密钥加密,再用另一个密钥解密,然后再使用第一个密钥加密
Y
=
D
E
S
K
1
(
D
E
S
K
2
−
1
(
D
E
S
K
1
(
X
)
)
)
Y = DES_{K1}(DES^{-1}_{K2}(DES_{K1}(X)))
Y=DESK1(DESK2−1(DESK1(X)))
X是明文,Y是密文,K1和K2分别是第一个和第二个密钥,DESk1(·)表示用密钥 K1 进行 DES 加密,而 DES-1k2(·)表示用密钥 K2 进行 DES 解密。
高级加密标准AES(Advanced Encryption Standard)
Rijndael 算法: AES是一种分组密码,分组长度为128位。AES有三种加密标准,其密钥分别为128位、192位和256位。
7.2.2 公钥密码体制
公钥密码体制: 使用不同的加密密钥与解密密钥。
-
核心思想:
加密密钥PK(Public Key,即公钥)
是向公众公开的,而解密密钥SK(Secret Key,即私钥或密钥)
则是需要保密的。加密算法E
和解密算法D
也都是公开的。 -
加密和解密过程有如下特点:
-
密钥对
产生器产生出接收者B的一对密钥: 加密密钥PKB,和解密密钥SKB。发送者A所用的加密密钥
PKB,就是接收者B的公钥
,它向公众公开。而B所用的解密密钥
SKB就是接收者B的私钥
,对其他人都保密。 -
公钥可用来加密,但却不能用来解密,先后对X进行D运算和E运算或进行E运算和D运算,结果都是一样的。
-
发送者A用B的公钥PKB通过E运算对明文X加密,得出密文,发送给B。
Y = E P K B ( X ) Y = E_{PK_B}(X) Y=EPKB(X) -
B用自己的私钥SKB通过D运算进行解密,恢复出明文
D S K B ( Y ) = D S K B ( E P K B ( X ) ) = X D_{SK_B}(Y) = D_{SK_B}(E_{PK_B}(X)) = X DSKB(Y)=DSKB(EPKB(X))=X
-
公开密钥与对称密钥在使用通信信道方面有很大的不同:
在使用
对称密钥
时,由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信
,每一方既可用此密钥加密明文,并发送给对方,也可接收密文,用同一密钥对密文解密。这种保密通信仅限于持有此密钥的双方(如再有第三方就不保密了)。在使用
公钥密码体制
时,在通信信道上可以是多对一的单向保密通信
。可以有很多人同时持有B的公钥,并各自用此公钥对自己的报文加密后发送给B。只有B才能够用其私钥对收到的多个密文一一进行解密。
7.3 鉴别
鉴别的内容:
- 一是要
鉴别发信者
,即验证通信的对方的确是自己所要通信的对象,而不是其他的冒充者。这就是实体鉴别。实体可以是发信的人,也可以是一个进程(客户或服务器)。因此这也常称为端点鉴别。 - 二是要
鉴别报文的完整性
,即对方所传送的报文没有被他人篡改过。
授权涉及的问题是: 所进行的过程是否被允许(如是否可以对某文件进行读或写)。
7.3.1 报文鉴别
数字签名(原理)
-
数字签名
-
原理:A 用其私钥 SKA 对报文X进行 D运算得到的密文传送给B。B为了核实名,用A的公钥进行E运算,还原出明文X。
-
目的:并非是为了保密,而是为了进行签名和核实签名,即确认此明文的确是A发送的。【
数字签名仅对报文进行了签名,对报文本身却未保密。
】 -
没有其他人能够持有A的私钥 SKA,发送者事后不能抵赖对报文的签名——不可否认。。
-
-
可保证机密性的数字签名:
-
在理论上是正确的,但很难用于现实生活中
-
原理:
- 用A的私钥对明文X进行签名,再用B的公钥对此签名进行加密 => 密文;
- 用B的私钥对此密文进行解密,再用A的公钥对解密后的内容进行核实签名 => 明文
-
密码散列函数
散列函数
: 又称为杂凑函数,或哈希函数密码散列函数H(X)
:- 特点:
- 散列函数的输出 H(X)又称为散列值 / 散列。散列函数的输入报文X的长度不受限制,但计算出的结果 H(X)的长度则应是较短的和固定的。相同的输入必定得出相同的输出
- 散列函数的输入和输出的关系是多对一的,必然会出现不同输入却产生相同输出的碰撞现象。精心挑选的密码散列函数应当非常不易发生碰撞,即应具有很好的抗碰撞性。
- 若给出散列值H(X),则无人能找出输入报文X。也就是说,散列函数是一种单向函数(one-way function),即逆向变换是不可能的
- 散列函数输出的每一个比特,都与输入的每一个比特有关:哪怕仅改动输入的一个比特,输出也会相差极大。
- MD5
- MD就是Message Digest 的缩写,意思是报文摘要
- MD5 算法的大致过程如下:
- 先把任意长的报文按模 264计算其余数(64位),追加在报文的后面。
- 在报文和余数之间填充1~512位,使得填充后的总长度是512的整数倍。填充的首位是1,后面都是0。
- 把追加和填充后的报文分割为许多512位的数据块,每个512位的报文数据再分成4个128位的数据块依次送到不同的散列函数进行4轮计算。每一轮又都按32位的小数据块进行复杂的运算。一直到最后计算出MD5报文摘要代码。
- MD5被SHA所取代
- SHA-1
- 安全散列算法 SHA(Secure Hash Algorithm)
- 算法:
- 和 MD5 相似,但其散列值的长度为160位(比MD5的128位多了25%)。
- 现在SHA-1已被另外的两个版本 SHA-2 和 SHA-3 所替代。
- 特点:
报文鉴别码 / 数字签名 / 数字指纹
报文鉴别码MAC(Message Authentication Code)
:A把双方共享的密钥K(K就是一串不太长的字符串)拼接到报文X后,进行散列运算。散列运算得出的结果为固定长度的H(X+K)即为MAC。
-
原理 - 双方共享的密钥K:
-
发送端
:- A把双方共享的密钥K(K就是一串不太长的字符串)拼接到报文X后,进行散列运算得到MAC,
- A把MAC拼接在报文X后面,得到扩展的报文发送给B。【共享密钥K并没有出现在网上传送的扩展的报文中。】
-
接收端
:- B收到扩展的报文后,把报文鉴别码MAC与报文X进行分离。
- B再用同样的密钥K与报文X拼接,进行散列运算,把得出的结果 H(X+K)与分离出的报文鉴别码 MAC进行比较。
相等,就可确认收到的报文X的确是A发送的。
-
-
原理 - 采用公钥系统:
发送端
- A对报文X进行散列运算,得出固定长度的散列H(X)。
- 用自己的私钥对 H(X)进行D运算(也可以说成是用私钥进行加密),得出已签名的但非固定长度的报文鉴别码MAC。
- A 把MAC拼接在报文X后面,构成扩展的报文发送给 B。
接收端
- B收到扩展的报文后,先进行报文分离。
- 分离后,B对报文X进行散列函数运算,
- 同时用A的公钥对分离出的已签名的报文鉴别码MAC进行E运算(也可以说成是用公钥进行解密)。
最后对这两个运算结果H(X)进行比较。如相等,就说明一切正确。
7.3.2 实体鉴别
实体鉴别和报文鉴别区别:
- 报文鉴别是对每一个收到的报文都要鉴别报文的发送者,
- 实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次。
简单实体鉴别过程
- 步骤:
- A向B发送报文,包含自己的身份(A)和口令,并用双方共享的对称密钥KAB加密。
- B收到报文后,用KAB解密,确认A的身份。
- 问题:
重放攻击(Replay Attack)
:入侵者C截获A的加密报文并直接发送给B,冒充A。IP欺骗
:C还可能截获A的IP地址,把A的IP地址冒充为自己的IP地址。
使用不重数解决重放攻击
不重数(Nonce)
:一个不重复使用的大随机数,用于区分新请求和重放请求。- 优点:每次会话使用不同的不重数,防止C重放攻击。
公钥密码体制中的实体鉴别
可以对不重数进行签名鉴别
。
-
步骤:
- B用自己的私钥对不重数RA签名,并发送给A。
- A用B的公钥核实签名,确认通信对方是B。
- A用自己的私钥对不重数RB签名,发送给B。
- B用A的公钥核实签名,确认A的身份。
-
问题:
公钥欺骗
:C可能冒充A的公钥,欺骗B。中间人攻击(Man-in-the-Middle Attack)
—— A和B以为在进行保密通信,但C已截获并解密数据。
7.4 密钥分配
密钥管理
包括:密钥的产生、分配、注入、验证和使用。本节只讨论密钥的分配。
现采用网内分配方式
,即对密钥自动分配。
7.4.1 对称密钥的分配
密钥分配中心KDC(Key Distribution Center)分配密钥
对称密钥分配协议 - Kerberos V5
Kerberos使用比 DES更加安全的高级加密标准 AES 进行加密
Kerberos要求所有使用Kerberos的主机必须在时钟上进行“松散的”同步。【所谓“松散的”同步是要求所有主机的时钟误差不能太大
7.4.2 公钥的分配
数字证书
- 定义:数字证书(Digital Certificate)是对公钥与其对应实体(人或机器)进行绑定的证明,也称公钥证书。
- 作用:
- 确保公钥的真实性。
- 证明公钥与实体的对应关系。
- 签发机构:认证中心 CA(Certification Authority),由政府或知名公司建立,具有公信力。
数字证书的构成
- 主要内容:
- 公钥及其拥有者的标识信息(如姓名、地址、电子邮件、IP地址等)。
- CA的数字签名:CA对证书进行散列运算,再用CA的私钥对散列值签名。
- 已签名的数字证书的产生过程
- 认证中心CA把B的未签名的证书进行散列函数运算,
- 再用CA的私钥对散列值进行D运算(也就是对散列值进行签名)。这样就得到了CA的数字签名。
- 把CA的数字签名和未签名的B的证书放在一起,就最后构成了已签名的B的数字证书
- 特点:
- 公开、不需要加密。
- 无法伪造,可通过CA的公钥验证真伪。
数字证书的验证过程
- 使用CA的公钥对证书中CA的签名进行解密,得到一个数值。
- 对证书内容(除去CA签名的部分)进行散列运算,得到另一个数值。
- 比较两个数值,若一致,证书为真。
X.509 标准规定了一个数字证书必须包括以下这些重要字段:
- X.509的版本
- 数字证书名称及序列号
- 本数字证书所使用的签名算法
- 数字证书签发者的唯一标识符
- 数字证书的有效期(有效期开始到结束的日期范围)
- 主体名(或主题名,公钥和数字证书拥有者的唯一标识符)
- 公钥(数字证书拥有者的公钥和使用算法的标识符,对应的私钥由证书拥有者保存)
多级认证系统
- 树状结构:
根CA(Root CA)
:最高级别的认证中心,公钥公开,无条件信任。中间CA(Intermediate CA)
:由根CA签发证书,负责为用户签发证书。用户
:证书链的末端。
- 信任链与证书链:
信任链
:从根CA到用户的链接,表示认证路径上的所有CA均可信。证书链
:通过证书中的签发者信息,逐级验证证书的真实性。
- 证书链验证举例:
- 根CA签发中间CA证书,用根CA的私钥签名。
- 中间CA签发用户证书,用中间CA的私钥签名。
- 用户使用中间CA的公钥验证证书。
证书撤销
- 原因:私钥被盗或遗失。
- 处理措施:
- 用户及时报告上级CA。
- CA发布 证书撤销名单(CRL),并用CA的私钥签名,定期更新。
7.5 互联网使用的安全协议
7.5.1 网络层安全协议
IPsec 协议族(IP security)
定义:不是单一的协议,而是包含了一个通用框架和若干加密算法的协议族。IPsec支持IPv4和IPv6
组成:
-
IP安全数据报格式的两个协议
:鉴别首部 AH
(Authentication Header)协议封装安全有效载荷 ESP
(Encapsulation Security Payload)协议。
AH 协议提供源点鉴别和数据完整性,但不能保密。
ESP协议提供源点鉴别、数据完整性和保密。
AH协议的功能都已包含在ESP协议中,因此使用ESP协议就可以不使用 AH 协议。
IP安全数据报
:使用 ESP 或 AH 协议的 IP 数据报称为 IP 安全数据报(或IPsec 数据报)“安全数据报”
:数据报的数据部分是经过加密的,并能够被鉴别的。通常把数据报的数据部分称为数据报的有效载荷(payload)。IP安全数据报工作方式:
运输方式(transport mode)
。在整个运输层报文段
的前后分别添加若干控制信息,再加上IP 首部,构成IP 安全数据报。隧道方式(tunnel mode)
。在原始的IP 数据报
的前后分别添加若干控制信息,再加上新的IP 首部,构成IP 安全数据报。
-
有关
加密算法的三个协议
。 -
互联网密钥交换 IKE
(Internet Key Exchange)协议 —— 为IP安全数据报创建安全关联SA。
安全关联SA (Security Association)
定义:在源实体和目的实体之间必须创建一条网络层的逻辑连接——单向连接。
SA 的状态信息应包括的项目
:
- 一个32位的连接标识符,称为
安全参数索引SPI(Security Parameter Index)
。 - 安全关联 SA 的源点和终点的 IP 地址(路由器 R1 和 R2 的 IP 地址 / 路由器 R1 和 H2 的 IP 地址)。
- 所使用的加密类型(例如,DES或AES)。
- 加密的密钥。
- 完整性检查的类型(例如,使用报文摘要 MDS或SHA-1的报文鉴别码 MAC)。
- 鉴别使用的密钥。
IP 安全数据报的格式
“原始的IP 首部”:
是用**主机 H1 和 主机H2**的IP 地址分别作为源地址和目的地址,
IP 安全数据报的“新的 IP 首部”:
- 是使用 路由器 R1和 路由器R2 的 IP 地址分别作为IP安全数据报的源地址和目的地址
- 或者是使用 路由器R1 和 主机H2 的IP地址分别作为IP安全数据报的源地址和目的地址。
IPsec 的其他构件
安全关联数据库SAD(Security Association Database)
:所有需要运行IPsec 的站点都必须有 SAD。
- 当主机要发送 IP安全数据报时,就要在SAD中查找相应的SA,以便获得必要的信息,来对该IP安全数据报实施安全保护。
- 当主机要接收IP安全数据报时,也要在SAD中查找相应的SA,以便获得信息来检查该分组的安全性。
安全策略数据库 SPD(Security Policy Database)
:SPD 指明什么样的数据报需要进行 IPsec 处理。
SPD 指出应当做什么(使用IP安全数据报还是不使用),而 SAD 则指出,如果需要使用IP安全数据报,应当怎样做(使用哪一个SA)。
互联网密钥交换IKE
:创建SAD,需要使用自动生成的机制,即使用互联网密钥交换IKE(Internet Key Exchange)协议。IKE 的用途就是为IP 安全数据报创建安全关联SA。IKEv2是新的版本。
IKEv2 以另外三个协议为基础:
Oakley
–是个密钥生成协议。安全密钥交换机制 SKEME(Secure Key Exchange MEchanism)
– 是用于密钥交换的协议。它利用公钥加密来实现密钥交换协议中的实体鉴别。互联网安全关联和密钥管理协议 ISAKMP (Internet Secure Association and Key Management Protocol)
– 用于实现IKE中定义的密钥交换,使IKE的交换能够以标准化、格式化的报文创建安全关联 SA。
7.5.2 运输层安全协议
曾经广泛使用的运输层安全协议有两个,即:(1)安全套接字层 SSL
(Secure Socket Layer)。(2)运输层安全 TLS
(Transport Layer Security)。
协议 SSL 2.0/3.0均已被废弃不用了,但经常把“SSL/TLS”视为TLS的同义词。因为协议TLS 本来就源于SSL(但并不兼容),而现在旧协议 SSL 被更新为新协议 TLS。
特点:
- 作用在端系统
应用层
和运输层
之间
,在TCP之上建立起一个安全通道,为通过 TCP 传输的应用层数据提供安全保障。 - 应用层使用协议TLS最多的就是HTTP,但并非仅限于HTTP。因为协议TLS是对TCP加密,因此任何在 TCP之上运行的应用程序都可以使用协议TLS。
- 当不需要运输层安全协议时,HTTP 就直接使用 TCP连接,这时协议 TLS 不起作用。
提供安全服务的 HTTP 协议
在 http 后面加上的s代表security,表明是使用 HTTPS
TCP的HTTPS端口号是443,而不是HTTP 使用的端口号80
TLS鉴别功能:
-
TLS 的双向鉴别 vs 单向鉴别
- 双向鉴别:客户端(浏览器)和服务器相互验证身份(需双方持有证书,如企业内网)。
- 单向鉴别:仅客户端验证服务器身份(普遍用于互联网,如 HTTPS)。
- 目标:确保浏览器访问的服务器是安全和可信的(例如防止钓鱼网站)。
-
单向鉴别的两个前提
- 服务器需证明自身可信:持有有效的 CA 颁发的证书。
- 客户端需具备验证能力:操作系统或浏览器内置可信 CA 的根证书。
-
关键流程详解
-
服务器证书的信任链
- 服务器 B 的证书由 CA 颁发,形式可能是:
- 直接由根 CA 签发(如
B.crt
←RootCA.crt
)。 - 由中间 CA 签发(如
B.crt
←IntermediateCA.crt
←RootCA.crt
)。
- 直接由根 CA 签发(如
- 证书验证逻辑:
- 浏览器验证服务器证书的签名链,直到找到信任的根证书。
- 服务器 B 的证书由 CA 颁发,形式可能是:
-
CA 根证书的存储与管理
- 预置根证书:操作系统(如 Windows、macOS)或浏览器(如 Chrome、Firefox)内置主流 CA(如 DigiCert、Let’s Encrypt)的根证书。
- 根证书包含:
- CA 的公钥(
PK_CA
)。 - CA 的自签名(用
SK_CA
私钥签名,防篡改)。
- CA 的公钥(
- 根证书包含:
- 自动验证:浏览器通过根证书的公钥逐级验证服务器证书的签名。
- 预置根证书:操作系统(如 Windows、macOS)或浏览器(如 Chrome、Firefox)内置主流 CA(如 DigiCert、Let’s Encrypt)的根证书。
实际验证步骤(以访问
https://example.com
为例)- Step 1:服务器 B 发送证书
example.com.crt
给浏览器 A。 - Step 2:浏览器检查证书的签发者(如
IntermediateCA
)。 - Step 3:浏览器在操作系统的根证书库中找到对应的根 CA 证书(如
RootCA.crt
)。 - Step 4:
- 浏览器先检查“网站的证书”是不是由“中间CA”签发的:
- 用
IntermediateCA
的公钥(PK_ICA)解密example.com.crt
的签名,如果能解开,说明证书确实是IntermediateCA
发的。
- 用
- 浏览器再检查“中间CA”的证书是不是由“根CA”签发的:
- 用
RootCA
的公钥(PK_CA)解密IntermediateCA.crt
的签名,如果能解开,说明IntermediateCA
是合法的。
- 用
- 浏览器先检查“网站的证书”是不是由“中间CA”签发的:
- Step 5:若所有签名验证通过,且证书未过期/未吊销,则判定服务器可信。
浏览器信任链验证过程: +-------------------+ +-----------------------------+ +---------------------------------------------------------+ | Root CA Cert | ←-----| Intermediate CA | ←-----| Server B Cert | | (预置在系统中) | | Cert | | (example.com) - example.com.crt | | PK_CA + 自签名 | | PK_ICA + RootCA签 | | 网站的公钥--PK_B + 证书的签发者--ICA签 | +-------------------+ +-----------------------------+ +-----------------------------------------------------------+
-
TLS 建立安全会话的工作原理
在客户与服务器双方已经建立了TCP连接后,就可开始执行协议TLS。主要有两个阶段,即握手阶段
和会话阶段
-
握手阶段 - 使用握手协议
目的:
- 验证服务器是安全可信的
- 生成在会话阶段所需的共享密钥
步骤:
-
协商加密算法
- ① 客户A向服务器B发送自己选定的加密算法(包括密钥交换算法)。
- ② 服务器 B从中确认自己所支持的算法,同时把自己的CA 数字证书发送给 A。
最新的 TLS 1.3 版本把陈旧的很多种算法统统取消,只留下几种最安全的算法。
客户猜测服务器可能愿意使用什么加密算法,把自己选定的加密算法直接发送给服务器,让服务器来确认。缩短“协商”时间
在 TLS 1.3 中使用了更加安全的
椭圆曲线密码 ECC(Elliptic Curve Cryptography)
与AES。 -
服务器鉴别
- ③客户A用数字证书中CA的公钥对数字证书进行验证鉴别。
-
生成主密钥
- ④客户 A按照双方确定的密钥交换算法生成主密钥 MS(Master Secret)。
- ⑤客户 A 用 B的公钥 PKB对主密钥 MS 加密,得出加密的主密钥 PKB(MS),发送给服务器B。
-
⑥ 服务器B用自己的私钥把主密钥解密出来: SKB(PKB(MS))= MS。客户 A 和服务器 B都有了为数据传输的共同的主密钥 MS。
-
⑦+⑧:主密钥被分割成4个不同的密钥——生成会话密钥。
在这以后,每一方都拥有这样4个密钥(这些都是对称密钥,即加密和解密用的是同一个密钥):
- 客户A发送数据时使用的会话密钥KA
- 客户A发送数据时使用的MAC密钥MA
- 服务器B发送数据时使用的会话密钥KB
- 服务器B发送数据时使用的MAC密钥MB
-
会话阶段 - 使用记录协议
客户或服务器在发送数据时,都把长的数据划分为较小的数据块,叫作
记录(record)
。然后对每一个记录进行鉴别运算和加密运算。AEAD(Authenticated Encryption with Associated Data,带关联数据的鉴别加密):
客户A:
-
当客户A向服务器B发送一个明文记录时,客户A先把
MAC密钥
MA和该记录当前的序号
一起拼接在明文记录之后
,然后进行散列运算
,得出MAC
。MAC = 散列运算(明文 + MA + 序号)
TLS的记录协议对每一个记录按发送顺序赋予序号,把每一方发送的第个记录作为0号记录。发送下一个记录时序号就加1,但序号最大值不得超过264-1,且不允许序号绕回。 -
再把
得出的 MAC
和明文记录
拼接
起来,用会话密钥
KA进行加密
,发送给服务器B。KA(明文 + MAC)服务器B:
-
B使用
同样的会话密钥
KA进行解密
,然后分离出明文记录和 MAC。 -
B再把
同样的MAC 密钥
MA 和该记录应有的序号
一起拼接在明文记录之后
,进行散列运算
,看得出的结果与前面得出的 MAC值是否一致,以鉴别收到的明文记录的完整性(内容和顺序均无误)。
客户A所发送的加密的记录的前面,还必须添加三个不加密的字段:
类型 Content Type:指明所传送的记录出握手阶段的报文,还是应用程序传送的报文,或最后要关闭 TLS 连接的报文
版本 Protocol Version :TLS版本
长度 Length:2 字节,16 位——明确告诉接收方当前 TLS 记录的实际数据载荷(Payload)有多长。
--------------------------以上不加密,以下加密--------------------------
明文记录 Payload(数据载荷):加密
报文鉴别码 MAC:加密
-
握手阶段,需要补充一些措施
-
在客户A向服务器B
发送加密算法时,
还要向服务器 B
发送客户的不重数。服务器B从中确认自己所支持的算法,同时把自己的
CA数字证书和服务器的不重数
发送给客户A。一个仅使用一次的不重数,其目的是为了防止“重放攻击”
-
生成预主密钥
:- 客户A验证了服务器B的数字证书后,生成为下一步生成主密钥使用的预主密钥PMS(Pre-Master Secret),并用B的公钥PKB 对预主密钥PMS 加密,把加密的预主密钥 PKB(PMS)发送给服务器 B。
- 服务器B用其私钥 SKB进行解密,得出预主密钥 PMS。客户A和服务器B都拥有了为后面的数据传输使用的共同的预主密钥PMS。
-
生成主密钥
:- 客户A和服务器B各自使用同样的(已商定的)算法,使用
预主密钥PMS
以及客户的不重数
和服务器的不重数
,生成主密钥MS
。然后再将其划分为4个密钥
。
- 客户A和服务器B各自使用同样的(已商定的)算法,使用
-
客户A向服务器B发送的全部握手阶段报文的MAC ➕ 服务器B向客户A发送的全部握手阶段报文的MAC
全部握手阶段报文的MAC:
在A向B发送加密的预主密钥之前的握手信息是没有加密的明文,因此可能受到入侵者的篡改
客户
和服务器
各自独立 把【处于握手阶段的
】【客户发送加密的预主密钥给服务器之前的
】【所有
】报文,拼接计算出来一个散列值MAC , 然后进行比较,相同则没有受到入侵者的篡改,否则A或B就可以立即中止当前的连接。
TLS的截断攻击(truncation attack)
截断攻击: 在A和B正在进行会话时,入侵者突然发送 TCP 的 FIN 报文段来关闭 TCP 连接。
TLS的解决办法:在关闭 TLS 连接之前,A或B应当先发送关闭 TLS 的记录(close_notify
)
版本 | 行为要求 | 安全风险 | 最佳实践建议 |
---|---|---|---|
TLS 1.2 | 必须双向发送 | 若跳过 close_notify ,可能被中间人截断数据包 | 严格双向关闭(先发 close_notify ,再关 TCP) |
TLS 1.3 | 允许单方关闭 | 因密钥独立和1-RTT优化,截断风险降低但仍存在 | 高安全场景建议双向关闭(兼容性更强) |
7.5.3 应用层安全协议
1. 电子邮件安全的特殊性
- 无会话连接:邮件发送是单向、异步的,无持续会话建立(对比IPSec/SSL的双向会话)。
- 隐私风险:邮件经多跳路由器中转,任意中间节点可读取明文(隐私性依赖加密协议)。
2.电子邮件安全协议 PGP (Pretty Good Privacy)
工作流程:
-
发件人A:
-
用
A的私钥
SKA对明文邮件X
进行签名
。把签名拼接在明文邮件X后面
。 -
利用
随机数
生成一次性密钥K
(共享的对称密钥)。 -
用A生成的
一次性密钥K
对已签名的邮件加密
。 -
用
B的公钥
PKB对A生成的一次性密钥K进行加密
-
把
已加密的一次性密钥
和已加密的签名邮件
,拼接
在一起发送
给B。
-
-
收件人B:
- 把已加密的一次性密钥和已加密的签名报文分离开。
- 用
B私钥
SKB解出一次性密钥K
(这是对称密钥,加密和解密都需要各使用一次)。 - 用导出的
一次性密钥K
对加密的签名邮件
进行解密
,分离出明文邮件X和A的数字签名。 - 用B手中的
A的公钥
PKA对A的数字签名
进行解密
。然后即可接着验证邮件的完整性。
A有三个密钥:自己的私钥SKA,B的公钥 PKB和自己生成的一次性密钥K。
B有两个密钥:自己的私钥SKB和A的公钥 PKA。
7.6 系统安全:防火墙与入侵检测
7.6.1 防火墙(firewall)
防火墙(firewall) 作为一种访问控制技术,通过严格控制进出网络边界的分组,禁止任何不必要的通信,从而减少潜在入侵的发生,尽可能降低这类安全威胁所带来的安全风险。
- 本质:一种特殊编程的路由器/硬件/软件,
部署在网络边界
(如内部网络与互联网之间)。 - 核心功能:通过**
访问控制策略
**(ACL)严格过滤进出网络的数据包,阻止非授权通信。 - 设计原则:
- 默认拒绝(Deny-by-default):仅允许显式定义的流量通过。
- 最小权限原则:只开放必要的端口和服务。
- 防火墙的信任模型
可信网络(Trusted Network)
:防火墙内部的网络(如企业内网),默认受保护。不可信网络(Untrusted Network)
:防火墙外部的网络(如互联网),默认不可信。
-
防火墙技术一般分为以下两类:
-
分组过滤路由器(Packet Filtering Router
)-
工作原理
-
基于网络层(IP地址)和传输层(端口、协议类型)首部信息过滤数据包。
-
规则示例:
- 拦截端口 23(TELNET) 的==入分组== → 禁止外部登录。
- 拦截端口 119(USENET 新闻) 的==出分组== → 限制内部访问互联网。
-
分类
- 无状态分组过滤:独立处理每个分组,不考虑连接状态。
- 有状态分组过滤:跟踪连接状态(如TCP会话),动态允许响应流量(如临时端口响应)。
-
-
优缺点
- 优点:简单高效,对用户透明。
- 缺点:无法过滤应用层内容(如HTTP请求内容)。不支持基于用户身份的高级控制。
- 优点:简单高效,对用户透明。
-
-
应用网关(Application Gateway / Proxy Server)
-
工作原理
- 在应用层中继报文,深度检查应用数据(如HTTP头、邮件内容)。
- 流程:
- 客户端向应用网关发送请求。
- 网关拆解报文并验证合法性(如用户ID、关键词过滤)。
- 合法则转发至服务器,否则丢弃。
-
特点
- 专用性:每种应用需独立网关(如HTTP代理、SMTP代理)。
- 高开销:应用层解析和处理导致性能负担。
- 非透明:需客户端配置网关地址。
-
-
7.6.2 入侵检测系统
入侵检测系统IDS(Intrusion Detection System) 系统防御的第二道防线,监测并报警潜在入侵行为。
作用:防火墙无法完全阻止入侵,IDS(入侵检测系统)用于在入侵发生但未造成重大危害前检测并响应。
工作原理:对网络分组进行深度检查,发现可疑行为时告警或阻断(通常不自动阻断,因误报率高)。
检测场景:网络映射、端口扫描、DoS 攻击、蠕虫和病毒、系统漏洞攻击等
入侵检测方法分类:一般可以分为基于特征的入侵检测
和基于异常的入侵检测
两种
基于特征的IDS
维护一个所有已知攻击标志性特征的数据库。当发现有与某种攻击特征匹配的分组或分组序列时,则认为可能检测到某种入侵行为。这些特征和规则通常由网络安全专家生成,机构的网络管理员定制并将其加入到数据库中。基于异常的IDS
通过观察正常运行的网络流量,学习正常流量的统计特性和规律,当检测到网络中流量的某种统计规律不符合正常情况时,则认为可能发生了入侵行为。
IDS的局限性
漏报(False Negative)
- 未检测到真实攻击,导致安全假象。
- 改进方式:调低检测阈值,但会增加误报。
误报(False Positive)
- 将正常流量误判为攻击,产生大量无效警报,可能使管理员忽视真实威胁。
IDS(入侵检测系统)和 防火墙(Firewall)的主要对比对比
对比项 | 入侵检测系统 (IDS) | 防火墙 (Firewall) |
---|---|---|
主要功能 | ✅ 检测攻击行为(如恶意流量、漏洞利用) ⚠ 被动告警,不直接阻止流量 | ✅ 阻止未经授权的访问 ⚠ 主动过滤(允许/拒绝流量) |
工作方式 | 监控 & 分析(基于协议分析、签名检测、异常行为) | 访问控制(基于规则:IP、端口、协议) |
部署位置 | 💡 旁路部署(镜像端口或网络 TAP) 💡 不干扰网络流量 | 💡 串接部署(网关、网络边界) 💡 直接影响流量 |
响应方式 | 🚨 告警(日志、邮件、SIEM 集成) | ⛔ 直接拦截(丢弃/拒绝数据包) |
防御层次 | 第二道防线(检测已进入网络的攻击) | 第一道防线(防止未授权访问) |
检测能力 | 基于签名 + 异常检测(如 0-day 攻击检测) | 基于静态规则(仅阻止已知威胁) |
延迟影响 | ❌ 无延迟(旁路模式) | ⚡ 可能增加延迟(需实时过滤) |
适用场景 | 高级威胁检测(APT、内部攻击) | 边界防护(DDoS、端口扫描、未经授权访问) |
联动 | 🔄 可发送告警给防火墙(如自动封锁 IP) | 🏗️ 依赖 IDS 提供高级威胁情报 |
7.7 一些未来的发展方向
- 椭圆曲线密码ECC
- 移动安全(Mobile Security) 移动通信带来的广泛应用(如移动支付,Mobile Payment)
- 量子密码(Quantum Cryptography)
- 商密九号算法SM9
参考教材:
计算机网络(第8版) (谢希仁) (Z-Library).pdf