第7章 网络安全
7.1 网络安全问题概述
7.1.1 计算机网络面临的安全性威胁
计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。
-
被动攻击
- 指攻击者从网络上窃听他人的通信内容。
- 通常把这类攻击成为截获。
- 在被动攻击中,攻击者只是观察和分析某一个协议数据单元 PDU,以便了解所交换的数据的某种性质。但不干扰信息流。
- 这种被动攻击又称为流量分析 (traffic analysis)。
-
主动攻击主要有:
- (1) 篡改——故意篡改网络上传送的报文。这种攻击方式有时也称为更改报文流。
- (2) 恶意程序——种类繁多,对网络安全威胁较大的主要包括:计算机病毒、计算机蠕虫、特洛伊木马、逻辑炸弹、后门入侵、流氓软件等。
- (3) 拒绝服务——指攻击者向互联网上的某个服务器不停地发送大量分组,使该服务器无法提供正常服务,甚至完全瘫痪。
若从互联网上的成百上千的网站集中攻击一个网站,则称为分布式拒绝服务 DDoS 。有时也把这种攻击称为网络带宽攻击或连通性攻击。
7.1.2 安全的计算机网络
- 计算机网络通信安全的目标
- 对于主动攻击,可以采取适当措施加以检测。
- 对于被动攻击,通常却是检测不出来的。
- 根据这些特点,可得出计算机网络通信安全的目标:
- (1) 防止析出报文内容和流量分析。
- (2) 防止恶意程序。
- (3) 检测更改报文流和拒绝服务。
- 对付被动攻击可采用各种数据加密技术。
- 对付主动攻击则需将加密技术与适当的鉴别技术相结合。
- 网络的安全性是不可判定的。
- 一个安全的计算机网络应达到四个目标:
-
保密性
- 只有信息的发送方和接收方才能懂得所发送信息的内容。
- 是网络安全通信的最基本的内容,也是对付被动攻击必须具备的功能。
- 为了使网络具有保密性,需要使用各种密码技术。
-
端点鉴别
- 鉴别信息的发送方和接收方的真实身份。
- 在对付主动攻击中是非常重要的。
-
信息的完整性
- 信息的内容未被篡改过。
- 在应对主动攻击中是必不可少的。
- 信息的完整性与端点鉴别往往是不可分割的。
- 在谈到“鉴别”时,也同时包含了端点鉴别和报文完整性。
-
运行的安全性
- 系统能正常运行并提供服务。
- 访问控制 (access control) 对计算机系统的安全性是非常重要的。必须对访问网络的权限加以控制,并规定每个用户的访问权限。
-
7.1.3 数据加密模型
-
用户 A 向 B 发送明文 X,通过加密算法 E 运算后,就得出密文 Y。
image.png
- 加密密钥和解密密钥可以一样,也可以不一样。
- 密钥通常是由密钥中心提供。当密钥需要向远地传送时,一定要通过另一个安全信道。
- 密码安全的不同层次
- 如果不论截取者获得了多少密文,但在密文中都没有足够的信息来唯一地确定出对应的明文,则这一密码体制称为无条件安全的,或称为理论上是不可破的。
- 如果密码体制中的密码不能被可使用的计算资源破译,则这一密码体制称为在计算上是安全的。
7.2 两类密码体制
7.2.1 对称密钥密码体制
- 加密密钥与解密密钥是相同的密码体制。
- 数据加密标准 DES 属于对称密钥密码体制,是一种分组密码。
- 在加密前,先对整个明文进行分组。每一个组长为 64 位。
- 然后对每一个 64 位 二进制数据进行加密处理,产生一组 64 位密文数据。
- 最后将各组密文串接起来,即得出整个的密文。
- 使用的密钥为 64 位(实际密钥长度为 56 位,有 8 位用于奇偶校验)。
- DES 的保密性仅取决于对密钥的保密,其算法是公开的。目前较为严重的问题是 DES 的密钥的长度。现在已经设计出搜索 DES 密钥的专用芯片。56位 DES 已不再认为是安全的了。
- 三重 DES
- 使用两个 56 位的密钥。
-
把一个 64 位明文用一个密钥加密,再用另一个密钥解密,然后再使用第一个密钥加密,即image.png
7.2.2 公钥密码体制
使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
-
公钥密码体制产生的主要原因:
- 常规密钥密码体制的密钥分配问题。
- 对数字签名的需求。
任何加密方法的安全性取决于密钥的长度,以及攻破密文所需的计算量。在这方面,公钥密码体制并不具有比传统加密体制更加优越之处。
公钥还需要密钥分配协议,具体的分配过程并不比采用传统加密方法时更简单。
-
加密和解密运算可以对调,即加密和解密是互逆的:image.png
在使用对称密钥时,由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信。
在使用公开密钥时,在通信信道上可以是多对一的单向保密通信。
如果某一信息用私有密钥加密,那么,它必须用公开密钥解密。这就是实现数字签名的方法
7.3 数字签名
- 用于证明真实性。
- 数字签名必须保证以下三点:
- (1) 报文鉴别——接收者能够核实发送者对报文的签名(证明来源);
- (2) 报文的完整性——发送者事后不能抵赖对报文的签名(防否认);
- (3) 不可否认——接收者不能伪造对报文的签名(防伪造)。
- 现在已有多种实现各种数字签名的方法。但采用公钥算法更容易实现。
-
同时实现秘密通信和数字签名image.png
7.4 鉴别
- 对付主动攻击中的篡改和伪造则要用鉴别
- 鉴别与授权 (authorization)是不同的概念。授权涉及到的问题是:所进行的过程是否被允许(如是否可以对某文件进行读或写)。
- 可再把鉴别细分为两种。
- 报文鉴别:即鉴别所收到的报文的确是报文的发送者所发送的,而不是其他人伪造的或篡改的。这就包含了端点鉴别和报文完整性的鉴别。
- 实体鉴别:仅仅鉴别发送报文的实体。实体可以是一个人,也可以是一个进程(客户或服务器)。这就是端点鉴别。
7.4.1 报文鉴别
- 使用加密就可达到报文鉴别的目的。但在网络的应用中,许多报文并不需要加密。应当使接收者能用很简单的方法鉴别报文的真伪。
1. 密码散列函数
数字签名就能够实现对报文的鉴别。但这种方法有一个很大的缺点:对较长的报文(这是很常见的)进行数字签名会使计算机增加非常大的负担,因为这需要进行较多的时间来进行运算。
密码散列函数 (cryptographic hash function)是一种相对简单的对报文进行鉴别的方法。
(1) 散列函数的输入长度可以很长,但其输出长度则是固定的,并且较短。散列函数的输出叫做散列值,或更简单些,称为散列。
(2) 不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。这就是说,散列函数的输入和输出并非一一对应的,而是多对一的。-
在密码学中使用的散列函数称为密码散列函数。特点:单向性。
- 要找到两个不同的报文,它们具有同样的密码散列函数输出,在计算上是不可行的。
- 也就是说,密码散列函数实际上是一种单向函数 (one-way function)。
- 散列 H(X) 可用来保护明文X的完整性,防篡改和伪造。
2. 实用的密码散列函数MD5和SHA-1
-
MD5 算法
MD5是报文摘要 MD (Message Digest) 的第5个版本。报文摘要算法MD5公布于RFC 1321 (1991年),并获得了非常广泛的应用。
MD5 的设计者 Rivest曾提出一个猜想,即根据给定的 MD5 报文摘要代码,要找出一个与原来报文有相同报文摘要的另一报文,其难度在计算上几乎是不可能的。
基本思想:用足够复杂的方法将报文的数据位充分“弄乱”,报文摘要代码中的每一位都与原来报文中的每一位有关。
-
计算步骤:
2,填充:在报文和长度项之间填充 1~512 位,使得填充后的总长度是 512 的整数倍。填充的首位是 1,后面都是 0。
1,附加:把任意长的报文按模 2^64 计算其余数(64位),追加在报文的后面(长度项)。
image.png3,分组:把追加和填充后的报文分割为一个个 512 位的数据块,每个 512 位的报文数据再分成 4 个 128 位的数据块
4,计算:将 4 个 128 位的数据块依次送到不同的散列函数进行4轮计算。每一轮又都按 32 位的小数据块进行复杂的运算。一直到最后计算出 MD5 报文摘要代码(128位)。
- 安全散列算法(SHA-1)
- 安全散列算法 SHA (Secure Hash Algorithm)是由美国标准与技术协会 NIST 提出一个散列算法系列。
- SHA 比 MD5 更安全,但计算起来却比 MD5 要慢些。
- 已制定 SHA-1、SHA-2、 SHA-3 等版本。
- 基本思想:
- 要求输入码长小于 264 位,输出码长为 160 位。
- 将明文分成若干 512 位的定长块,每一块与当前的报文摘要值结合,产生报文摘要的下一个中间结果,直到处理完毕
- 共扫描 5 遍,效率略低于 MD5,抗穷举性更高。
3. 报文鉴别码 MAC
MD5 实现的报文鉴别可以防篡改,但不能防伪造,因而不能真正实现报文鉴别。
为防范上述攻击,可以对散列进行一次加密。
散列加密后的结果叫做报文鉴别码 MAC (Message Authentication Code)。由于入侵者不掌握密钥 K,所以入侵者无法伪造 A 的报文鉴别码 MAC,因而无法伪造 A 发送的报文。这样就完成了对报文的鉴别。
注意到,现在整个的报文是不需要加密的。
虽然从散列H导出报文鉴别码 MAC 需要加密算法,但由于散列 H 的长度通常都远远小于报文 X 的长度,因此这种加密不会消耗很多的计算资源。
因此,使用鉴别码 MAC 就能够很方便地保护报文的完整性。
7.4.2 实体鉴别
- 报文鉴别是对每一个收到的报文都要鉴别报文的发送者。
- 实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次。
- 最简单的实体鉴别过程
- 可以使用共享的对称密钥实现实体鉴别。
- A 发送给 B 的报文的被加密,使用的是对称密钥 KAB。
- B 收到此报文后,用共享对称密钥 KAB 进行解密,因而鉴别了实体 A 的身份。 因为该密钥只有 A 和 B 知道。
- 入侵者 C 可以从网络上截获 A 发给 B 的报文。
- C 并不需要破译这个报文,而是直接把这个截获的、由A加密的报文发送给 B,使 B 误认为 C 就是 A。然后 B 就向伪装是 A 的 C 发送应发给 A 的报文。
- 这种攻击被称为重放攻击(replay attack)。C 甚至还可以截获 A 的 IP 地址,然后把 A 的 IP 地址冒充为自己的 IP 地址(这叫做 IP 欺骗),使 B 更加容易受骗。
- 使用不重数进行鉴别
7.5 密钥分配
7.6 互联网使用的安全协议
7.6.2 运输层安全协议
-
CA 证书
- CA 证书具有统一的格式,ITU-T 制定了 X.509 协议标准,用来描述证书的结构。
- 在 X.509 中规定要使用 ASN.1。
- IETF 接受了 X.509(仅有少量的改动),并在 RFC 5280(现在是建议标准)中给出了互联网 X.509 公钥基础结构 PKI (Public Key Infrastructure)。
-
现在广泛使用的有以下两个协议:
- 安全套接字层 SSL (Secure Socket Layer)
- 运输层安全 TLS (Transport Layer Security) 。
- 安全套接层 SSL 由Netscape于1994年开发,广泛应用于基于万维网的各种网络应用(但不限于万维网应用)。
- SSL 作用在端系统应用层的 HTTP 和运输层之间,在 TCP 之上建立起一个安全通道,为通过 TCP 传输的应用层数据提供安全保障。
- 1996年发布 SSL 3.0,成为 Web 安全的事实标准。
-
1999年,IETF 在 SSL 3.0 基础上推出了传输层安全标准 TLS,为所有基于 TCP 的网络应用提供安全数据传输服务。
image.png
应用层使用 SSL 最多的就是 HTTP,但 SSL 并非仅用于 HTTP,而是可用于任何应用层的协议。
应用程序 HTTP 调用 SSL 对整个网页进行加密时,网页上会提示用户,在网址栏原来显示 http 的地方,现在变成了 https。在 http 后面加上的s代表 security,表明现在使用的是提供安全服务的 HTTP 协议(TCP 的 HTTPS 端口号是 443,而不是平时使用的端口号 80)。
-
SSL 提供的安全服务
- (1) SSL 服务器鉴别,允许用户证实服务器的身份。支持 SSL 的客户端通过验证来自服务器的证书,来鉴别服务器的真实身份并获得服务器的公钥。
- (2) SSL 客户鉴别,SSL 的可选安全服务,允许服务器证实客户的身份。
-
(3) 加密的 SSL 会话,对客户和服务器间发送的所有报文进行加密,并检测报文是否被篡改。
image.png
7.7 系统安全:防火墙与入侵检测
- 防火墙是由软件、硬件构成的系统,是一种特殊编程的路由器,用来在两个网络之间实施访问控制策略。
- 访问控制策略是由使用防火墙的单位自行制订的,为的是可以最适合本单位的需要。
- 防火墙内的网络称为“可信的网络”(trusted network),而将外部的因特网称为“不可信的网络”(untrusted network)。
- 防火墙可用来解决内联网和外联网的安全问题。
- 防火墙的功能
- “阻止”就是阻止某种类型的通信量通过防火墙(从外部网络到内部网络,或反过来)。
- “允许”的功能与“阻止”恰好相反。
- 防火墙技术一般分为两类
- 分组过滤路由器
- 应用网关也称为代理服务器:在应用层通信中扮演报文中继的角色。应用层数据的过滤和高层用户鉴别。
- 缺点:每种应用都需要一个不同的应用网关。在应用层转发和处理报文,处理负担较重。对应用程序不透明,需要在应用程序客户端配置应用网关地址。