[计网面试]关于网络安全

355 阅读22分钟

网络安全

1.安全威胁

网络安全面临的两大威胁:主动攻击 和 被动攻击

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

主动攻击】主要有:

篡改

(1) 故意篡改网络上传送的报文。这种攻击方式有时也称为更改报文流。

(2) 恶意程序——种类繁多,对网络安全威胁较大的主要包括:计算机病毒、计算机蠕虫、特洛伊木马、逻辑炸弹、后门入侵、流氓软件等。

(3) 拒绝服务——指攻击者向互联网上的某个服务器不停地发送大量分组,使该服务器无法提供正常服务,甚至完全瘫痪。

分布式拒绝服务 DDoS

若从互联网上的成百上千的网站集中攻击一个网站,则称为分布式拒绝服务 DDoS (Distributed Denial of Service)。

有时也把这种攻击称为网络带宽攻击或连通性攻击。

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

对于主动攻击,可以采取适当措施加以检测。

对于被动攻击,通常却是检测不出来的。

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

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

对付被动攻击可采用各种数据加密技术。

对付主动攻击则需将加密技术与适当的「 鉴 别 」技术相结合

2.网络安全考虑四因素

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

  1. 保密性
  2. 端点鉴别
  3. 信息的完整性
  4. 运行的安全性

保密性:

只有信息的发送方和接收方才能懂得所发送信息的内容。
是网络安全通信的最基本的内容,也是对付被动攻击必须具备的功能。
为了使网络具有保密性,需要使用各种密码技术。

端点鉴别:

鉴别信息的发送方和接收方的真实身份。 
在对付主动攻击中是非常重要的。

信息完整性:

信息的内容未被篡改过。
在应对主动攻击中是必不可少的。
信息的完整性与端点鉴别往往是不可分割的。
在谈到“鉴别”时,也同时包含了端点鉴别和报文完整性。

运动的安全性:

系统能正常运行并提供服务。
访问控制 (access control) 对计算机系统的安全性是非常重要的。必须对访问网络的权限加以控制,并规定每个用户的访问权限。

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

3.两类密码体制

  • 密钥系统

所谓常规密钥密码体制,即加密密钥与解密密钥是相同的密码体制。

这种加密系统又称为对称密钥系统

  • 公钥系统

(1) 公钥密码体制与对称密钥的区别

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

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

(2)公钥密码体制

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

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

3.数字签名

用于证明请求主体真实性

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

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

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

(1)基于公钥的数字签名的实现

image-20210605234635410

(2)具有保密性的数字签名

同时实现秘密通信和数字签名

image-20210605234656743

4.鉴别

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

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

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

(1)鉴别与授权不同

鉴别与授权 (authorization)是不同的概念。

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

(2)鉴别分类

可再把鉴别细分为两种。

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

数字签名就能够实现对报文的鉴别。

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

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

  • 散列函数的两个特点

(1) 散列函数的输入长度可以很长,但其输出长度则是固定的,并且较短。散列函数的输出叫做散列值,或更简单些,称为散列。

(2) 不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。这就是说,散列函数的输入和输出并非一一对应的,而是多对一的。

  • 密码散列函数的特点

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

    特点:单向性。

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

    • 也就是说,密码散列函数实际上是一种单向函数 (one-way function)。[

      散列 H(X) 可用来保护明文X的完整性,防篡改和伪造

2. 实用的密码散列函数MD5

MD5 算法

MD5是报文摘要 MD (Message Digest) 的第5个版本。报文摘要算法MD5公布于RFC 1321 (1991年),并获得了非常广泛的应用。

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

基本思想:

  • 用足够复杂的方法将报文的数据位充分“弄乱”,报文摘要代码中的每一位都与原来报文中的每一位有关。
3. 报文鉴别码 MAC(报文完整性)

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

  • 入侵者创建了一个伪造的报文M,然后计算出其散列 H(M),并把拼接有散列的扩展报文冒充 A 发送给 B。

  • B 收到扩展的报文 (M, H(M)) 后, 通过散列函数的运算,计算出收到的报文 MR 的散列 H(MR)。

  • 若 H(M) = H(MR),则 B 就会误认为所收到的伪造报文就是 A 发送的。

    为防范上述攻击,可以对散列进行一次加密。

    散列加密后的结果叫做报文鉴别码 MAC (Message Authentication Code)。

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

    注意到,现在整个的报文是不需要加密的。

    虽然从散列H导出报文鉴别码 MAC 需要加密算法,但由于散列 H 的长度通常都远远小于报文 X 的长度,因此这种加密不会消耗很多的计算资源。

    因此,使用鉴别码 MAC 就能够很方便地保护报文的完整性。

4.实体鉴别(对称密钥)

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

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

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

  • 最简单的实体鉴别过程

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

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

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

img

  • 存在明显漏洞

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

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

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

  • 使用不重数进行鉴别

不重数(nonce)就是一个不重复使用的大随机数,即“一次一数”。由于不重数不能重复使用,所以 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”的报文,并给出了自己的身份。此报文被“中间人” 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 却都不知道。

5.密钥分配

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

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

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

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

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

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

对称密钥分配

  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 。
  4. 此后,A 和 B 就可使用会话密钥 KAB 进行这次通信了。

(2)具有保密性的数字签名

同时实现秘密通信和数字签名

img

4.鉴别

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

[TOC]

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

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

(1)鉴别与授权不同

鉴别与授权 (authorization)是不同的概念。

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

(2)鉴别分类

可再把鉴别细分为两种。

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

数字签名就能够实现对报文的鉴别。

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

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

  • 散列函数的两个特点

(1) 散列函数的输入长度可以很长,但其输出长度则是固定的,并且较短。散列函数的输出叫做散列值,或更简单些,称为散列。

(2) 不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。这就是说,散列函数的输入和输出并非一一对应的,而是多对一的。

  • 密码散列函数的特点

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

    特点:单向性。

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

    • 也就是说,密码散列函数实际上是一种单向函数 (one-way function)。[

      散列 H(X) 可用来保护明文X的完整性,防篡改和伪造

2. 实用的密码散列函数MD5

MD5 算法

MD5是报文摘要 MD (Message Digest) 的第5个版本。报文摘要算法MD5公布于RFC 1321 (1991年),并获得了非常广泛的应用。

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

基本思想:

  • 用足够复杂的方法将报文的数据位充分“弄乱”,报文摘要代码中的每一位都与原来报文中的每一位有关。
3. 报文鉴别码 MAC(报文完整性)

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

  • 入侵者创建了一个伪造的报文M,然后计算出其散列 H(M),并把拼接有散列的扩展报文冒充 A 发送给 B。

  • B 收到扩展的报文 (M, H(M)) 后, 通过散列函数的运算,计算出收到的报文 MR 的散列 H(MR)。

  • 若 H(M) = H(MR),则 B 就会误认为所收到的伪造报文就是 A 发送的。

    为防范上述攻击,可以对散列进行一次加密。

    散列加密后的结果叫做报文鉴别码 MAC (Message Authentication Code)。

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

    注意到,现在整个的报文是不需要加密的。

    虽然从散列H导出报文鉴别码 MAC 需要加密算法,但由于散列 H 的长度通常都远远小于报文 X 的长度,因此这种加密不会消耗很多的计算资源。

    因此,使用鉴别码 MAC 就能够很方便地保护报文的完整性。

4.实体鉴别(对称密钥)

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

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

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

  • 最简单的实体鉴别过程

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

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

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

img

  • 存在明显漏洞

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

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

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

  • 使用不重数进行鉴别

不重数(nonce)就是一个不重复使用的大随机数,即“一次一数”。由于不重数不能重复使用,所以 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”的报文,并给出了自己的身份。此报文被“中间人” 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 却都不知道。

5.密钥分配

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

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

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

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

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

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

对称密钥分配

  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 。
  4. 此后,A 和 B 就可使用会话密钥 KAB 进行这次通信了。