网络安全——概述

网络安全问题概述

计算机网络面临的安全性威胁

计算机网络上的通信面临两大类威胁:被动攻击和主动攻击。

被动攻击是指攻击者从网络上窃听他人的通信内容。通常把这类攻击称为截获。在被动攻击中,攻击者只是观察和分析某一个协议数据单元 PDU,以便了解所交换的数据的某种性质。但不干扰信息流。这种被动攻击又称为流量分析(traffic analysis)。

主动攻击主要有:

  • 篡改:故意篡改网络上传送的报文。这种攻击方式有时也称为更改报文流。
  • 恶意程序:种类繁多,对网络安全威胁较大的主要包括:计算机病毒、计算机蠕虫、特洛伊木马、逻辑炸弹、后门入侵、流氓软件等。
  • 拒绝服务DoS(Denial of Service):指攻击者向互联网上的某个服务器不停地发送大量分组,使该服务器无法提供正常服务,甚至完全瘫痪。

若从互联网上的成百上千的网站集中攻击一个网站,则称为分布式拒绝服务 DDoS(Distributed Denial of Service)。有时也把这种攻击称为网络带宽攻击或连通性攻击。

计算机网络通信安全的目标

对于主动攻击,可以采取适当措施加以检测。对于被动攻击,通常却是检测不出来的。

根据这些特点,可得出计算机网络通信安全的目标:

  • 防止分析出报文内容和流量分析。
  • 防止恶意程序。
  • 检测更改报文流和拒绝服务。

对付被动攻击可采用各种数据加密技术。对付主动攻击则需将加密技术与适当的鉴别技术相结合。

安全的计算机网络

网络的安全性是不可判定的。一个安全的计算机网络应达到四个目标:

  • 保密性:只有信息的发送方和接收方才能懂得所发送信息的内容。是网络安全通信的最基本的内容,也是对付被动攻击必须具备的功能。为了使网络具有保密性,需要使用各种密码技术。
  • 端点鉴别:鉴别信息的发送方和接收方的真实身份。 在对付主动攻击中是非常重要的。
  • 信息的完整性:信息的内容未被篡改过。在应对主动攻击中是必不可少的。信息的完整性与端点鉴别往往是不可分割的。在谈到“鉴别”时,也同时包含了端点鉴别和报文完整性。
  • 运行的安全性:系统能正常运行并提供服务。访问控制对计算机系统的安全性是非常重要的。必须对访问网络的权限加以控制,并规定每个用户的访问权限。

数据加密模型

加密和解密用的密钥K(key)是一串秘密的字符串(即比特串)。

明文通过加密算法 E 和加密密钥 K 变成密文:Y = Ek(X)。

接收端利用解密算法 D 运算和解密密钥 K 解出明文 X。解密算法是加密算法的逆运算。

Dk(Y) = Dk(Ek(X)) = X

加密密钥和解密密钥可以一样,也可以不一样。密钥通常由密钥中心提供。当密钥需要向远地传送时,一定要通过另一个安全信道。

两类密码体制

对称密钥密码体制

所谓对称密钥密码体制,即加密密钥与解密密钥是相同的密码体制。这种加密系统又称为对称密钥系统。

数据加密标准 DES

数据加密标准 DES 属于对称密钥密码体制,是一种分组密码。

在加密前,先对整个明文进行分组。每一个组长为 64 位。然后对每一个 64 位二进制数据进行加密处理,产生一组 64 位密文数据。最后将各组密文串接起来,即得出整个的密文。

使用的密钥为 64 位(实际密钥长度为 56 位,有 8 位用于奇偶校验)。

DES 的保密性仅取决于对密钥的保密,其算法是公开的。

目前较为严重的问题是 DES 的密钥的长度。56 位长的密钥意味着共有256种可能的密钥。现在已经设计出搜索 DES 密钥的专用芯片。56位 DES 已不再认为是安全的了。

三重 DES

使用两个 56 位的密钥。把一个 64 位明文用一个密钥加密,再用另一个密钥解密,然后再使用第一个密钥加密,即:

Y = DESK1(DES-1K2(DESK1(X)))

公钥密码体制

公钥密码体制(又称为公开密钥密码体制)使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

公钥密码体制产生的主要原因:

  • 常规密钥密码体制的密钥分配问题。
  • 对数字签名的需求。

在公钥密码体制中,加密密钥 PK(public key,即公钥)是向公众公开的,而解密密钥 SK(secret key,即私钥或秘钥)则是需要保密的。

加密算法 E 和解密算法 D 也都是公开的。

虽然私钥 SK 是由公钥 PK 决定的,但却不能根据 PK 计算出 SK。

任何加密方法的安全性取决于密钥的长度,以及攻破密文所需的计算量。在这方面,公钥密码体制并不具有比传统加密体制更加优越之处。

公钥还需要密钥分配协议,具体的分配过程并不比采用传统加密方法时更简单。

公钥算法的特点

  1. 密钥对产生器产生出接收者 B 的一对密钥:加密密钥 PKB 和解密密钥 SKB
    加密密钥 PKB 就是接收者B的公钥,它向公众公开。解密密钥 SKB 就是接收者B的私钥,对其他人都保密。
  2. 发送者 A 用 B 的公钥 PKB 对明文 X 加密(E 运算)后,接收者 B 用自己的私钥 SKB 解密(D 运算),即可恢复出明文:
    DSKB(Y) = DSKB(EPKB(X)) = X

加密密钥是公开的,但不能用它来解密,即:

DPKB(EPKB(X)) ≠ X

加密和解密运算可以对调,即加密和解密是互逆的:

EPKB(DSKB(X)) = DSKB(EPKB(X)) = X

公钥密码体制

公开密钥与对称密钥的区别

在使用对称密钥时,由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信,每一方既可用此密钥加密明文,并发送给对方,也可接收密文,用同一密钥对密文解密。这种保密通信仅限于持有此密钥的双方(如再有第三方就不保密了)。

在使用公开密钥时,在通信信道上可以是多对一的单向保密通信。

公钥密码体制

如果某一信息用公开密钥加密,则必须用私有密钥解密,这就是实现保密的方法。

如果某一信息用私有密钥加密,那么,它必须用公开密钥解密。这就是实现数字签名的方法。

数字签名

用于证明真实性。

数字签名必须保证以下三点:

  • 报文鉴别——接收者能够核实发送者对报文的签名(证明来源);
  • 报文的完整性——发送者事后不能抵赖对报文的签名(防否认);
  • 不可否认——接收者不能伪造对报文的签名(防伪造)。

现在已有多种实现各种数字签名的方法。但采用公钥算法更容易实现。

基于公钥的数字签名的实现

因为除 A 外没有别人能具有 A 的私钥,所以除 A 外没有别人能产生这个密文。因此 B 相信报文 X 是 A 签名发送的。

若 A 要抵赖曾发送报文给 B,B 可将明文和对应的密文出示给第三者。第三者很容易用 A 的公钥去证实 A 确实发送 X 给 B。

反之,若 B 将 X 伪造成 X’,则 B 不能在第三者前出示对应的密文。这样就证明了 B 伪造了报文。

具有保密性的数字签名

鉴别

在信息的安全领域中,对付被动攻击的重要措施是加密,而对付主动攻击中的篡改和伪造则要用鉴别(authentication)。

报文鉴别使得通信的接收方能够验证所收到的报文(发送者和报文内容、发送时间、序列等)的真伪。

使用加密就可达到报文鉴别的目的。但在网络的应用中,许多报文并不需要加密。应当使接收者能用很简单的方法鉴别报文的真伪。

鉴别与授权(authorization)是不同的概念。授权涉及到的问题是:所进行的过程是否被允许(如是否可以对某文件进行读或写)。

鉴别分类

可再把鉴别细分为两种。

  • 报文鉴别:即鉴别所收到的报文的确是报文的发送者所发送的,而不是其他人伪造的或篡改的。这就包含了端点鉴别和报文完整性的鉴别。
  • 实体鉴别:仅仅鉴别发送报文的实体。实体可以是一个人,也可以是一个进程(客户或服务器)。这就是端点鉴别。

报文鉴别

许多报文并不需要加密,但却需要数字签名,以便让报文的接收者能够鉴别报文的真伪。

然而对很长的报文进行数字签名会使计算机增加很大的负担(需要进行很长时间的运算)。

当我们传送不需要加密的报文时,应当使接收者能用很简单的方法鉴别报文的真伪。

密码散列函数

数字签名就能够实现对报文的鉴别。但这种方法有一个很大的缺点:对较长的报文(这是很常见的)进行数字签名会使计算机增加非常大的负担,因为这需要较多的时间来进行运算。

密码散列函数(cryptographic hash function)是一种相对简单的对报文进行鉴别的方法。

散列函数的两个特点:

  • 散列函数的输入长度可以很长,但其输出长度则是固定的,并且较短。散列函数的输出叫做散列值,或称为散列。
  • 不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。这就是说,散列函数的输入和输出并非一一对应,而是多对一的。

密码散列函数的特点

在密码学中使用的散列函数称为密码散列函数。

特点:单向性。

要找到两个不同的报文,它们具有同样的密码散列函数输出,在计算上是不可行的。

也就是说,密码散列函数实际上是一种单向函数。

实用的密码散列函数 MD5 和 SHA-1

MD5 算法

MD5 是报文摘要 MD(Message Digest) 的第 5 个版本。

根据给定的 MD5 报文摘要代码,要找出一个与原来报文有相同报文摘要的另一报文,其难度在计算上几乎是不可能的。

基本思想:用足够复杂的方法将报文的数据位充分“弄乱”,报文摘要代码中的每一位都与原来报文中的每一位有关。

计算步骤:

  • 附加:把任意长的报文按模 264 计算其余数(64位),追加在报文的后面(长度项)。
  • 填充:在报文和长度项之间填充 1~512 位,使得填充后的总长度是 512 的整数倍。填充的首位是 1,后面都是 0。
  • 分组:把追加和填充后的报文分割为一个个 512 位的数据块,每个 512 位的报文数据再分成 4 个 128 位的数据块。
  • 计算:将 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,抗穷举性更高。

报文鉴别码 MAC

MD5 实现的报文鉴别可以防篡改,但不能防伪造,因而不能真正实现报文鉴别。

例如:

  1. 入侵者创建了一个伪造的报文 M,然后计算出其散列 H(M),并把拼接有散列的扩展报文冒充 A 发送给 B。
  2. B 收到扩展的报文 (M, H(M)) 后, 通过散列函数的运算,计算出收到的报文 MR 的散列 H(MR)。
  3. 若 H(M) = H(MR),则 B 就会误认为所收到的伪造报文就是 A 发送的。

为防范上述攻击,可以对散列进行一次加密。散列加密后的结果叫做报文鉴别码 MAC(Message Authentication Code)。

由于入侵者不掌握密钥 K,所以入侵者无法伪造 A 的报文鉴别码 MAC,因而无法伪造 A 发送的报文。这样就完成了对报文的鉴别。

现在整个的报文是不需要加密的。

虽然从散列 H 导出报文鉴别码 MAC 需要加密算法,但由于散列 H 的长度通常都远远小于报文 X 的长度,因此这种加密不会消耗很多的计算资源。因此,使用鉴别码 MAC 就能够很方便地保护报文的完整性。

实体鉴别

实体鉴别与报文鉴别不同。

报文鉴别是对每一个收到的报文都要鉴别报文的发送者。

实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次。

最简单的实体鉴别过程

可以使用共享的对称密钥实现实体鉴别。

A 发送给 B 的报文加密,使用的是对称密钥 KAB

B 收到此报文后,用共享对称密钥 KAB 进行解密,因而鉴别了实体 A 的身份。 因为该密钥只有 A 和 B 知道。

存在明显漏洞

入侵者 C 可以从网络上截获 A 发给 B 的报文。

C 并不需要破译这个报文,而是直接把这个截获的、由 A 加密的报文发送给 B,使 B 误认为 C 就是 A。然后 B 就向伪装是 A 的 C 发送应发给 A 的报文。

这种攻击被称为重放攻击。C 甚至还可以截获 A 的 IP 地址,然后把 A 的 IP 地址冒充为自己的 IP 地址(这叫做 IP 欺骗),使 B 更加容易受骗。

为了对付重放攻击,可以使用不重数进行鉴别。

不重数就是一个不重复使用的大随机数,即“一次一数”。由于不重数不能重复使用,所以 C 在进行重放攻击时无法重复使用所截获的不重数。

在使用公钥密码体制时,可以对不重数进行签名鉴别。

B 用其私钥对不重数 RA 进行签名后发回给 A。A 用 B 的公钥核实签名。如能得出自己原来发送的不重数 RA,就核实了和自己通信的对方的确是 B。

同样,A 也用自己的私钥对不重数 RB 进行签名后发送给 B。B 用 A 的公钥核实签名,鉴别了 A 的身份。

公钥密码体制虽然不必在互相通信的用户之间秘密地分配共享密钥,但仍有受到攻击的可能。

C 冒充是 A,发送报文给 B,说:“我是 A”。
B 选择一个不重数 RB,发送给 A,但被 C 截获了。
C 用自己的私钥 SKC 冒充是 A 的私钥,对 RB 加密,并发送给 B。
B 向 A 发送报文,要求对方把解密用的公钥发送过来,但这报文也被 C 截获了。
C 把自己的公钥 PKC 冒充是 A 的公钥发送给 B。
B 用收到的公钥 PKC 对收到的加密的 RB 进行解密,其结果当然正确。于是 B 相信通信的对方是 A,接着就向 A 发送许多敏感数据,但都被 C 截获了。

中间人攻击

A 想和 B 通信。A 向 B 发送“我是 A”的报文,并给出了自己的身份。此报文被 “中间人” C 截获,C 把此报文原封不动地转发给 B。B 选择一个不重数 RB 发送给 A,但同样被 C 截获后也照样转发给 A。

中间人 C 用自己的私钥 SKC 对 RB 加密后发回给 B,使 B 误以为是 A 发来的。A 收到 RB 后也用自己的私钥 SKA 对 RB 加密后发回给 B,中途被 C 截获并丢弃。B 向 A 索取其公钥,此报文被 C 截获后转发给 A。

C 把自己的公钥 PKC 冒充是 A 的发送给 B,而 C 也截获到 A 发送给 B 的公钥 PKA

B 用收到的公钥 PKC (以为是 A 的)对数据加密发送给 A。C 截获后用自己的私钥 SKC 解密,复制一份留下,再用 A 的公钥 PKA 对数据加密后发送给 A。

A 收到数据后,用自己的私钥 SKA 解密,以为和 B 进行了保密通信。其实,B 发送给 A 的加密数据已被中间人 C 截获并解密了一份。但 A 和 B 却都不知道。

由此可见,公钥的分配以及认证公钥的真实性也是一个非常重要的问题。

密钥分配

由于密码算法是公开的,网络的安全性就完全基于密钥的安全保护上。因此在密码学中出现了一个重要的分支——密钥管理。

密钥管理包括:密钥的产生、分配、注入、验证和使用。

密钥分配是密钥管理中最大的问题。密钥必须通过最安全的通路进行分配。

网外分配方式:派非常可靠的信使携带密钥分配给互相通信的各用户。

网内分配方式:密钥自动分配。

但随着用户的增多和网络流量的增大,密钥更换频繁(密钥必须定期更换才能做到可靠),派信使的办法已不再适用,而应采用网内分配方式。

对称密钥的分配

目前常用的密钥分配方式是设立密钥分配中心 KDC(Key Distribution Center)。

KDC 是大家都信任的机构,其任务就是给需要进行秘密通信的用户临时分配一个会话密钥(仅使用一次)。

密钥分配步骤

假设用户 A 和 B 都是 KDC 的登记用户,并已经在 KDC 的服务器上安装了各自和 KDC 进行通信的主密钥 KA 和 KB。 “主密钥”可简称为“密钥”。

密钥分配分的三个步骤:

  1. 用户 A 向 KDC 发送时用明文,说明想和 B 通信。在明文中给出 A 和 B 在 KDC 登记的身份。
  2. KDC 用随机数产生“一次一密”的会话秘钥 KAB 供 A 和 B 的这次会话使用,然后向 A 发送回答报文。这个回答报文用 A 的密钥 KA 加密。这个报文中包含这次会话使用的密钥 KAB 和请 A 转给 B 的一个票据(ticket),该票据包括 A 和 B 在 KDC 登记的身份,以及这次会话将要使用的密钥 KAB。票据用 B 的密钥 KB 加密,A 无法知道此票据的内容,因为 A 没有 B 的密钥 KB,当然 A 也不需要知道此票据的内容。
  3. 当 B 收到 A 转来的票据并使用自己的密钥 KB 解密后,就知道 A 要和它通信,同时也知道 KDC 为这次和 A 通信所分配的会话密钥KAB

此后,A 和 B 就可以使用会话秘钥 KAB 进行通信了。

对称密钥的分配说明

为防止重放攻击,KDC 还可在报文中加入时间戳。

会话密钥 KAB 是一次性的,因此保密性较高。

KDC 分配给用户的密钥 KA 和 KB,应定期更换,以减少攻击者破译密钥的机会。

Kerberos

目前最出名的密钥分配协议是 Kerberos V5。Kerberos 既是鉴别协议,同时也是 KDC,现在是互联网建议标准。

Kerberos 使用比 DES 更加安全的高级加密标准 AES 进行加密。

Kerberos 使用两个服务器:鉴别服务器 AS(Authentication Server)、票据授予服务器 TGS(Ticket-Granting Server)。

Kerberos 只用于客户与服务器之间的鉴别,而不用于人对人的鉴别。

下图中,A 是请求服务的客户,B 是被请求的服务器。A 通过 Kerberos 向 B 请求服务。Kerberos 需要经过 6 个步骤鉴别是 A 向 B 请求服务后,才向 A 和 B 分配会话使用的密钥。

Kerberos密钥分配步骤

  1. A 用明文(包括登记的身份)向鉴别服务器 AS 表明自己的身份。AS 就是 KDC,它掌握各实体登记的身份和相应的口令。
  2. AS 向 A 发送用 A 的对称密钥 KA 加密的报文,这个报文包含 A 和 TGS 通信的会话密钥 KS,以及 AS 要发送给 TGS 的票据(这个票据是用 TGS 的对称密钥 KTG 加密的)。
    A 并不保存密钥 KA。A 需键入正确口令,利用适当的算法生成密钥 KA,这个口令随即被销毁。
    密钥 KA 用来对 AS 发送过来的报文进行解密。
  3. A 向 TGS 发送三个项目:
  • 转发鉴别服务器 AS 发来的票据。
  • 服务器 B 的名字。这表明 A 请求 B 的服务。请注意,现在 A 向 TGS 证明自己的身份并非通过键入口令(因为入侵者能够从网上截获明文口令),而是通过转发 AS 发出的票据(只有 A 才能提取出)。票据是加密的,入侵者伪造不了。
  • 用 KS 加密的时间戳 T 。它用来防止入侵者的重放攻击。
  1. TGS 发送两个票据,每一个都包含 A 和 B 通信的会话密钥 KAB。给 A 的票据用 KS 加密;给 B 的票据用 B 的密钥 KB 加密。请注意,现在入侵者不能提取 KAB,因为不知道 KA 和 KB。入侵者也不能重放步骤 3,因为入侵者不能把时间戳更换为一个新的(因为不知道 KS)。
  2. A 向 B 转发 TGS 发来的票据,同时发送用 KAB 加密的时间戳 T。
  3. B 把时间戳 T 加 1 来证实收到了票据。B 向 A 发送的报文用密钥 KAB 加密。

以后,A 和 B 就使用 TGS 给出的会话密钥 KAB 进行通信。

Kerberos 要求所有使用 Kerberos 的主机必须在时钟上进行“松散的”同步。所谓“松散的”同步是要求所有主机的时钟误差不能太大,例如,不能超过 5 分钟的数量级。这个要求是为了防止重放攻击。

公钥的分配

在公钥密码体制中,如果每个用户都具有其他用户的公钥,就可实现安全通信。

但不能随意公布用户的公钥,因为无法防止假冒和欺骗。使用者也无法确定公钥的真正拥有者。

需要有一个值得信赖的机构,即认证中心 CA(Certification Authority),来将公钥与其对应的实体(人或机器)进行绑定。认证中心一般由政府出资建立。

每个实体都有 CA 发来的证书,里面有公钥及其拥有者的标识信息。此证书被 CA 进行了数字签名,是不可伪造的,可以信任。证书是一种身份证明,用于解决信任问题。

任何用户都可从可信的地方获得认证中心 CA 的公钥,此公钥用来验证某个公钥是否为某个实体所拥有(通过向 CA 查询)。有的大公司也提供认证中心服务。

CA 证书

CA 证书具有统一的格式,ITU-T 制定了 X.509 协议标准,用来描述证书的结构。

IETF 接受了 X.509,仅做了少量的改动,给出了互联网 X.509 公钥基础结构 PKI(Public Key Infrastructure)。

字段 含义
版本号 区分 X.509 不同版本
序列号 CA 发放,唯一
签名算法 签署证书所使用的算法和参数
发行者 CA 的 X.509 名字
有效期 包括起始时间和终止时间
主体名 证书持有者的名称及有关信息
公钥 有效的公钥及其使用方法
发行者 ID 任选,唯一,标识发行者
主体 ID 任选,唯一,标识证书持有者
扩展域 扩充信息
认证机构签名 用 CA 私钥对证书签名

CA 证书的吊销

证书不是永久有效,它可以过期,也可以被吊销。

有很多原因导致证书被吊销,例如:

  • 用户的私钥已被泄漏
  • 该用户不再被该 CA 认证
  • CA 签署用户证书的私钥已被泄漏

CA 建立并维护一个证书吊销列表。

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信