计算机网络原理:网络安全基础

在互联网的世界里,数据就像快递包裹一样需要从一个地方送到另一个地方。路由算法和路由协议就像是快递员的导航系统和交通规则,帮助数据找到最快的路,确保它们能够准确无误地到达目的地。没有它们,数据就会迷失方向,网络也就无法正常工作。

一、网络安全概述

网络安全是指网络系统的硬件、软件以及系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。

1.1、基本概念

在了解网络安全的具体内容前,先介绍网络安全领域的拟人模型,如下图所示。

Alice 作为数据报文的发送方,Bob 作为数据报文的接收方,Trudy 是企图破坏 Bob 和Alice 通信的入侵者(intruder),试图拦截、删除或添加信息到报文中,或者通过 Internet 向主机植入恶意软件,例如,病毒、蠕虫、间谍软件等。

Alice和Bob要进行数据通信,Alice希望能够实现即使在不安全的媒介上通信,所传输的报文也不会被除 Bob以外的人理解,于是Alice和Bob 需要协定一个安全通信,以防止入侵者 Trudy 截获甚至破解。

因此,可以总结出网络安全通信所需要的基本属性。

  • 机密性(confidentiality)。只有发送方与预定接收方能够理解报文内容。发送方发送前将报文加密,防止入侵者截获窃取,接收方接收到报文后对报文解密。机密性是网络信息不被泄露给非授权的用户、实体,或供其利用的特性,即防止信息泄漏给非授权个人或实体, 信息只为授权用户使用的特性。机密性是保障网络信息安全的重要手段。
  • 消息完整性(message integrity)。发送方与接收方希望确保消息未被篡改(传输途中或者后期),发生篡改一定会被检测到。考虑到即使接收方能够与发送方相互鉴别,还需要检测报文在传输过程中是否被篡改。完整性是网络信息未经授权不能进行改变的特性,即网络消息在存储或传输过程中保持不被偶然或蓄意地删除、修改、伪造、乱序、重放、插入等破坏和丢失的特性。完整性是一种面向消息的安全性,它要求保持消息的完全性,即消息的正确生成、存储和传输。
  • 可访问与可用性(access and availability)。可访问与可用性是网络信息可被授权实访问并按需求使用的特性,即网络信息服务在需要时,允许授权用户或实体使用的特性,或者是网络部分受损或需要降级使用时,仍能为授权用户提供有效服务的特性。可访问与可用性是网络信息系统面向用户的安全性能。网络信息系统最基本的功能是面向用户提供服务,而用户的需求是随机的、多方面的、有时还有时间要求。
  • 身份认证(authentication)。发送方与接收方希望确认彼此的真实身份。身份认证是对数据的来源进行确认,比如用户A和用户B通过网络传输数据,他们都希望自己收到的数据是来自B和A,而不是由其他人伪造的。某机构发布了一个文件,用户A从网上下载了该文件,他希望该文件确实是由该机构发布的,这些都可以通过身份认证来得到保证。

明确了网络安全通信的基本属性和含义后,可以总结出网络安全的基本特征,包括相对性、时效性、相关性、不确定性、复杂性以及重要性等。

  • 相对性指的是网络永远只有相对的安全,没有绝对的安全,要时刻注意网络安全防护。
  • 时效性能够反映出网络的不确定性和复杂性,新的漏洞和攻击方法层出不穷,攻击时间、攻击目标、攻击地点都不确定,需要做到随时随地的保护。

1.2、网络安全威胁

网络主要面临哪些安全威胁呢?

从报文传输方面,主要包括窃听、插入、假冒、劫持等。

  • 窃听是指在报文传输过程中窃听信息,获取报文信息。
  • 插入是指攻击者主动在连接中插入信息,混淆信息,让信息接收者收到虚假信息。
  • 假冒是指伪造分组中的源地址(或任意其他字段)。
  • 劫持是指通过移除(或取代)发送方或接收方“接管”连接。

从网络攻击方面,主要包括拒绝服务 (DoS)和分布式拒绝服务(DDoS )等。

  • 拒绝服务是指阻止服务器为其他用户提供服务,例如,通过向接收方恶意泛洪分组,淹没接收方,导致带宽耗尽,资源耗尽等资源过载情况。
  • 分布式拒绝服务是指利用多个源主机协同淹没接收方,DDoS 攻击过程是,首先选择目标,然后入侵网络中主机,构造僵尸网络,最后再控制僵尸主机向目标发送分组。由此引申出的还有反射式DDoS攻击,其过程是,首先选择攻击目标,然后入侵网络中的主机,构建出僵尸网络,再然后选择反射服务器,最后借助反射服务器向目标发起攻击。

此外,常见的网络安全威胁还包括映射、分组嗅探和IP欺骗。

  • 映射的攻击原理是,在发起攻击前,先“探路“,找出网络上在运行什么服务,然后利用 ping 命令确定网络上的主机的地址,最后使用端口扫描的方法,依次尝试与每个端口建立 TCP 连接。Nmap 就是国外广为使用的端口扫描工之一。
  • 分组嗅探通常发生在共享式以太网或者无线网络中,发起“嗅探”的主机通过混杂模式网络接口卡,可以接收或记录所有广播介质上的分组/帧,可以读到所有未加密数据,例如, 口令等。当然,“嗅探”也并非都是安全威胁,“嗅探”也是协议分析或网络管理等所采用的技术手段,例如,Wireshark 就是一个典型的分组嗅探软件。
  • IP欺骗是指直接由应用生成“原始”IP分组,设置分组的源 IP地址字段为任意值,接收方无法判断源地址是否被欺骗,可能导致错误数据的接收,或者隐藏网络安全攻击身份。

二、数据加密

密码技术是保障信息安全的核心基础,解决数据的机密性、完整性、不可否认性和身份识别等问题均需要以密码为基础。

简单来说,密码学(Cryptography)包括密码编码学和密码分析学两部分。

  • 密码编码学是指将密码变化的客观规律应用于编制密码来保守通信秘密。
  • 密码分析学是指研究密码变化客观规律中的固有缺陷,并应用于破译密码以获取通信情报。

如下图,是通信加密模型。一般来说,未加密消息在密码学中被称为明文,伪装消息以隐藏消息的过程称为加密,而被加密的消息称为密文,把密文转变为明文的过程称为解密。

根据密码学的定义,可以得到一套完整密码体制,其中包括 M、C、K、E、D共5个要素。

  • M是可能明文的有限集,称为明文空间。
  • C是可能密文的有限集,称为密文空间。
  • K是一切可能密钥构成的有限集,称为密钥空间。
  • E为加密算法,对于任一密钥,都能够有效地计算。
  • D为解密算法,对于任一密钥,都能够有效地计算。

该套密码体系必须满足如下特性:加密算法(EkMC)(E_k:M \longrightarrow C),解密算法(DkCM)(D_k:C \longrightarrow M)(xM)(x \in M),满足

Dk(Ek(x))=xD_k(E_k(x))=x

此外,还需要保证破译者不能在有效的时间内破解出密钥K或明文x。

根据密码体制的特点以及出现的先后时间可以将加密方式分类为传统密码算法、对称密钥算法、公开密钥算法。同时,依据处理数据的类型可以划分为分组密码和序列密码。

  • 分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为 n 的组(可看成长度为 n 的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。

  • 序列密码又称流密码,是利用密钥产生一个密钥流,然后对明文串分别加密的过程。

2.1、传统加密方式

传统加密方法被分为替代密码和换位密码两大类。两种技术的核心都是将明文通过一些算法加密,保证明文的安全性。替代密码是将明文字母替换为其他字母、数字或符号的方法,而换位密码是通过置换而形成新的排列。

2.1.1、替代密码

替代密码是将明文字母表M中的每个字母用密文字母表 C 中的相应字母来代替,常见的加密模型有移位密码、乘数密码、仿射密码等。

移位密码是将字母表的字母右移k个位置,并对字母表长度作模运算,每一个字母具有两个属性,本身代表的含义和可计算的位置序列值。

加密函数:

Ek(M)=(M+k) mod qE_k(M)=(M+k) \ mod \ q

解密函数:

Dk(C)=(Kk) mod qD_k(C)=(K-k) \ mod \ q

式中,对于英文字母表,q=26

恺撒密码是移位密码的一个典型应用。据传恺撒密码是古罗马恺撒大帝用来保护重要军情的加密系统,通过将字母按顺序推后3位起到加密作用。改进版的恺撒密码可以将一个字母利用字母表中该字母后面的第k个字母替代,k有25种可能的密钥。

问:如果对明文"bob, i love you. Alice", 利用k=3的恺撒密码加密,得到的密文是什么?

对于k=3的恺撒密码,其字母替换关系是:明文的"abcdef…xyz“,替换"defghi…abc"。于是,明文"bob, i love you. Alice"加密后得到的密文是"ere, I oryh brx. Dolfh"。

恺撒密码是单字母密码,仅仅采用了简单的替代技术,优点是算法简单,便于记忆;缺点是结构过于简单,密码分析者只要通过很少的信息就可以破译密文。

2.1.2、换位密码

换位密码,又称置换密码,是根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。也就是说,只改变了明文的结构,没有改变明文的内容。

换位密码可分为列置换密码和周期置换密码,下面主要介绍列置换密码。

列置换密码是指明文按照密钥的规定,按列换位,并且按列读出新的序列得到密文的方法。置换密码的加密过程如下:首先,将明文P按密钥K的长度 n 进行分组,并且每组一行按行排列,即每行有n个字符。若明文长度不是n的整数倍,则不足部分用双方约定的方式填充,如双方约定用字母"x"替代空缺处字符。设最后得到的字符矩阵为MmnM_{mn}, m为明文划分的行数。然后,按照密钥规定的次序将MmnM_{mn}对应的列输出,便可得到密文序列C。密钥K通常用一个无重复字母的单词表示,而单词中每个字母在字母表中的相对次序,则规定了MmnM_{mn}的列输出次序。

问:假设采用密钥K=nice的列置换密码,对明文"bob i love you"进行加密,加密得到的密文是什么?

密钥K=nice,则密钥长度n=4,密钥的字母顺序为(4, 3, 1, 2),即密钥规定的输出顺序为第3列→第4列→第2列→第1列。因此将明文排列成M34M_{34}矩阵,每行分别为bobi、love、youx,其中最后的"x"为填充字母。依据密钥规定的列输出顺序输出各列,便得到密文为:bvu iex ooo bly。

2.2、对称密钥加密

无论是简单的替代密码还是换位密码,安全性都很低,很容易被攻破。现代密码学将替代密码和换位密码相结合,并利用复杂的加密过程,提高密码的安全性。现代密码又可以分为对称密钥密码和非对称密钥密码两大类,其中对称密钥密码的加密秘钥和解密秘钥是相同的,非对称密钥密码的加密秘钥与解密秘钥是不同的。

对称密钥加密系统又可以分为分组密码和流密码。

  • 流密码又称序列密码,是通过伪随机数发生器产生性能优良的伪随机序列(密钥流),用该密钥流加密明文消息流,得到密文消息序列。解密时使用相同的密钥流,按加密的逆过程进行解密。
  • 分组密码,又称块密码,是将明文消息分成若干固定长度的消息组,每组消息进行单独加密/解密。

计算机网络常用的对称密钥加密为分组密码,所以下面主要介绍分组密码。比较常见的分组密码有DES、AES 和 IDEA等。

2.2.1、DES加密算法

DES是典型的分组密码,使用56位的密钥,明文为64位分组序列,共进行16轮的加密,每轮加密都会进行复杂的替代和置换操作,并且每轮加密都会使用一个由56 位密钥导出的48位子密钥,最终输出与明文等长的64位密文。

2.2.2、三重DES

由于 DES密钥只有56位,易于遭受穷举式攻击。作为一种替代加密方案,Tuchman 提出使用两个密钥的三重DES加密方法,开在1985年成为美国的一个商用加密标准。

该方使用两个密钥,执行三次 DES 算法。加密的过程是加密—解密—加密,解密的过程是解密—加密—解密。具体步骤是,首先按照常规的方法用密钥K1K_1执行 DES 加密,然后按照 DES 解密方式,使用K2K_2作为密钥进行解密,最后,再次用K1K_1执行DES加密。

采用两个密钥进行三重加密的好处是,两个密钥合起来有效密钥长度达到112位,可以满足商业应用的需要,若采用总长为 168位的三个密钥,会产生不必要的开销。另外,加密采用加密—解密—加密,而不是加密—加密—加密的形式,这样有效地实现了与现有 DES 系统的向后兼容问题,因为当K1=K2K_1=K_2时,三重 DES的效果就和原来的 DES 一样,有助于逐渐推广三重DES。三重DES具有足够的安全性。

2.2.3、AES加密算法

随着 DES 逐渐不能适应现代密码安全性需求,就连三重DES 也无法适应,于是,美国家标准及技术委员会,提出美国政府需要一种新的密码标准。

比利时学者 Joan Daemen和Vincent Rijmen提出的Rijndael加密算法最终被选AES算法。如同DES一样,Rijndael算法也是使用置换和替代操作,同时也使用了多轮加密策略,具体的轮数取决于密钥的长度和序列的长度,对于128位密钥和128位序列长度,轮数为10。

AES加密过程涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。

AES 加密算法的特点如下。

  • 分组长度和密钥长度均可变。

  • 循环次数允许在一定范围内根据安全要求进行修正。

  • 汇聚了安全、效率、易用、灵活等优点。

  • 抗线性攻击和抗差分攻击的能力大大增加。

  • 如果1s暴力破解DES,则需要149万亿年破解 AES。

2.2.4、IDEA加密算法

国际数据加密算法(International Data Encryption Algorithm,IDEA)是1992年由Lai和Massey 提出的非常成功的分组密码,并且广泛应用在安全电子邮件PGP中。

IDEA 加密算法是一个分组长度为64位的分组密码算法,密钥长度为128位,同一个算法即可用于加密,也可用于解密。算法运用硬件与软件实现都很容易,而且比 DES算法在实现上快得多,IDEA 自问世以来,已经经历了大量的详细审查,对密码分析具有很强的抵抗能力,在多种商业产品中被使用。

2.3、公开密钥加密

对称密钥加密算法经过多年的发展与改进,在防止暴力破解上做得已经非常完美了,但是仍然面临着一个最大的问题,就是密钥分发问题。不管使用的密码系统有多强,如果密码分析者能直接偷取到密钥, 则整个系统将变得毫无价值。因此,想要解决这个问题,需要对密钥进行保护,以防被偷,但是密钥总需要发送给用户(需要解密密文的一方)。如何既方便密钥的分发,又确保密码体系的安全,是密码体系面临的一个重要问题。非对称密钥密码,或称公开密钥密码(简称公钥密码),则便于解决密钥分发问题。

公开密钥密码可以用下图所示的示例进行说明。

假设 Alice 要和 Bob 通信,这时Alice和Bob并未共享一个密钥(如同在对称密钥系统情况下),而Bob有两个密钥,一个是世上的任何人(包括入侵者 Trudy),都可得到的公钥(public key),另一个是只有Bob自己知道的私钥(private key),分别使用符号KB+K_B^+KBK_B^-表示。

为了与Bob通信,Alice 首先取得 Bob 的公钥KB+K_B^+,然后用这个公钥和一个众所周知的(即已标准化的)加密算法,加密她要发送给 Bob 的报文m;即 Alice 计算KB+(m)K_B^+(m),并发送给 Bob。

Bob 接收到Alice 的加密报文后,用其私钥KBK_B^-和一个众所周知解密算法解密 Alice 的加密报文,Bob 计算KB(KB+(m))K_B^-(K_B^+(m)) ,还原明文m。

简单来说就是, 用Bob 的公钥KB+K_B^+加密报文,然后再用 Bob 的私钥KBK_B^-解密报文的密文形式(即计算KB(KB+(m))K_B^-(K_B^+(m)) )就能得到最初的明文m。

由此可见,使用公开密钥加密算法,Alice和Bob双方都不需要分发密钥,Alice 可以使用 Bob 公开的密钥直接给 Bob 发送机密消息,既能够保证密文的安全性和正确性,又能保证密钥的安全性和可用性。

比较典型的公开密钥加密算法有 Diffie-Hellman 算法和 RSA 算法。RSA算法是目前应用比较广泛的公开密钥算法,算法安全性高,但是计算量非常大,因此通常RSA会与对称密钥密码(如 DES或AES)结合使用。例如,利用 DES 加密/解密报文,利用RSA分发DES 密钥。

公开密钥密码有一个重要特性:如果对报文 m 利用私钥加密,则可以利用其公钥进解密。也就是说,KB(KB+(m))=m=KB+(KB(m))K_B^-(K_B^+(m))=m=K_B^+(K_B^-(m))成立。

三、消息完整性与数字签名

消息完整性(message integrity)也称为消息认证(或消息鉴别),其主要目标是:

  • 证明报文确实来自声称的发送方;

  • 验证报文在传输过程中没有被篡改;

  • 预防报文的时间、顺序被篡改;

  • 预防报文持有期被篡改;

  • 预防抵赖(如发送方否认已发送的消息或接收否认已接收的消息)。

3.1、消息完整性的检测方法

为了实现消息完整性检测,需要用到密码散列函数(Cryptographic Hash Function) H (m),表示对报文m进行散列化。密码散列函数应具备的主要特性如下。

  • 一般的散列函数具有算法公开。

  • 能够快速计算。

  • 对任意长度报文进行多对一映射均能产生定长输出。

  • 对于任意报文无法预知其散列值。

  • 不同报文不能产生相同的散列值。

同时,密码散列函数还应该具有单向性、抗弱碰撞性、抗强碰撞性。

  • 单向性保证了散列值持有者,无法根据散列值逆推出报文,即对于给定散列值h,无法计算找到满足h=H(m)的报文m。

  • 抗弱碰撞性(Weak Collision Resistance, WCR),即对于给定报文x,计算上不可能找到y且y≠x,使得 H(x)=H(y)。

  • 抗强碰撞性(Strong Collision Resistance, SCR),表明了在计算上不可能找到任意两个不同报文x和y (x≠y),使得 H(x)=H(y)。

满足上述特性的典型散列函数有MD5和SHA-1。

3.1.1、MD5

MD5 (Message-Digest Algorithm 5)是在20世纪90年代初由 MIT 计算机科学实验写和RSA数据安全公司的Ronald L. Rivest开发出来。MD5 对报文散列后,得到128位的散列值。

1996年,Dobbertin找到了两个不同的512位块,在MD5 计算下产生了相同的散列值。2004年8月17日,在美国加州圣巴巴拉召开的国际密码学会议(Crypto 2004),来自山东大学的王小云教授,做了破译MD5 等算法的报告。不久,密码学家Lenstra 利用王小云提供的MD5 碰撞,伪造了符合X.509标准的数字证书,说明了MD5 的破译已经不仅仅是理论译的结果,而且可以导致实际的攻击,MD5 的撤出已迫在眉睫。

3.1.2、SHA-1

安全散列函数(SHA)是由 NIST 提出的,于 1993年作为美国联邦消息处理标准(FIPS PUB 180)公布,1995年NIST发布了修订版(FIPS 180-1),通常称为SHA-1。作为散列数据的标准,SHA-1可产生一个160位的散列值。SHA-1是典型的用于创建数字签名的单向散列算法。

3.2、报文认证

消息完整性检测的一个重要目的就是要完成报文认证的任务。如下图,对报文m应用散函数H,得到一个固定长度的散列码,称为报文摘要(message digest),记为 H (m)。报文摘要可以作为报文m的数字指纹(fingerprint)。

报文认证是使消息的接收者能够检验收到的消息是否是真实的认证方法。报文(消息)认证的目的有两个:一是消息源的认证,即验证消息的来源是真实的;另一个是消息的认证,即验证消息在传送过程中未被簒改。

3.2.1、简单报文认证

下图展示了简单报文验证的过程。

发送方对报文m应用散列函数H,得到一个固定长度的散列码,获得报文摘要h=H(m),将扩展报文(m, h)发送给接收方。接收方收到扩展报文(m, h)后,提取出报文 m 和报文摘要h,同样对报文m应用散列函数H获得新的报文摘要H(m),将H(m)与h作比较,若H(m)与h相等,则认为报文认证成功,否则报文认证失败。

但是该方案有一个明显的缺陷,密码散列函数是公开的,攻击者可以通过截获报文,用同样的散列函数H,获得报文摘要,然后组成扩展报文进行发送,接收方接收后能成功完成报文认证。虽然同样是完成了报文认证,但是第二次的认证显然是不安全的,因为它没有达到对消息来源认证的目标。

3.2.2、报文认证码

下图展示了应用报文认证码MAC进行报文认证的过程。

发送方和接收方共享一个认证密钥,发送方对报文m和认证密钥s应用散列函数H得到报文认证码H(m+s),将扩展报文(m, h )发送给接收方。接收方收到扩展报文(m, h)后,提取出报文m和报文认证码h,对报文m和认证密钥s应用散列函数H获得新的报文认证码H (m+s),将H (m+s)与h作比较,若H (m+s)与h相等,则认为报文认证成功,否则报文证失败。

同样的,该方法也存在着缺陷。比如,接收方自己写一份报文用同样的步骤生成一份扩展报文,并且说这份扩展报文就是发送方发来的,这时发送方就百口莫辩了。这说明了该方没有达到对消息认证的目标,即没法保证消息在接收方没有被篡改。

3.3、数字签名

前面介绍的两种报文认证方法均存在不足,没办法很好地完成报文认证的目标。在报文完整性认证的过程中,亟待解决的问题有:

  • 发送方不承认自己发送过某一报文。

  • 接收方自己伪造一份报文,并声称来自发送方。

  • 某个用户冒充另一个用户接收和发送报文。

  • 接收方对收到的信息进行篡改。

解决这些问题的有效技术手段是数字签名。

在公钥密码体制中,一个主体可以使用他自己的私钥“加密”消息,所得到的“密文”可以用该主体的公钥“解密”来恢复成原来的消息,如此生成的“密文”对该“消息”提认证服务。公钥密码提供的这种消息认证服务可以看成是对消息原作者的签名即数字签名。

数字签名在信息安全,包括身份认证、数据完整性、不可否认性以及匿名性等方面有重要应用,特别是在大型安全通信中的密钥分配、认证以及电子商务系统中具有重要作用。数字签名是实现认证的重要工具。

数字签名与消息认证的区别是,消息认证使接收方能验证发送方以及所发消息内容是否被篡改过。当收发者之间没有利害冲突时,这对于防止第三者的破坏来说是足够了。但当接收者和发送者之间有利害冲突,就无法解决他们之间的纠纷,此时须借助数字签名技术。

数字签名应满足以下要求。

  • 接收方能够确认或证实发送方的签名,但不能伪造。

  • 发送方发出签名的消息给接收方后,就不能再否认他所签发的消息。

  • 接收方对已收到的签名消息不能否认,即有收报认证。

  • 第三者可以确认收发双方之间的消息传送,但不能伪造这一过程。

3.3.1、简单数字签名

数字签名就是用私有密钥进行加密,而认证就是利用公开密钥进行正确的解密,所以报文加密技术是数字签名的基础。

下图展示了简单数字签名的实现过程。

Bob 通过利用其私钥KBK_B^-对报文m进行加密,创建签名报文KB(m)K_B^-(m),将扩展报文(m, KB(m)K_B^-(m))发送给Alice。

假设 Alice 收到报文m以及签名KB(m)K_B^-(m),再利用 Bob的公钥KB+K_B^+解密KB(m)K_B^-(m),并检验KB+(KB(m))=mK_B^+(K_B^-(m))=m来证实报文m是否是 Bob 签名的。

如果KB+(KB(m))=mK_B^+(K_B^-(m))=m成立,则签名m的一定是Bob的私钥。

通过数字签名进行消息认证 Alice 可以证实确实是Bob签名了m而不是其他人,并且确定Bob签名的是m而不是其他报文m’。

3.3.2、签名报文摘要

简单数字签名确实可以很好地达到信息验证的目的,但是由于数字签名利用私有密钥对整个报文m进行加密,造成加密算法在报文很大时计算量很大,运行效率很低,同时生成的扩展报文是原始报文数据量的两倍多,这样就造成了接收方流量的极大浪费。

下图展示了签名报文摘要的工作流程。

Bob对报文m应用散列函数H生成报文摘要H(m),然后Bob通过其私钥KBK_B^-对报文摘要进行加密,生成加密的报文摘要KB(H(m))K_B^-(H(m)),再将展报文(m, KB(H(m))K_B^-(H(m)) )发送给 Alice。

假设 Alice 收到报文m以及加密的报文摘要$$K_B^-(H(m))$$,Alice利用Bob的公钥KB+K_B^+解密KB(H(m))K_B^-(H(m)),并检验KB+(KB(H(m)))K_B^+(K_B^-(H(m)))来证实报文m是否是 BoB 签名的。

如果KB+(KB(H(m)))=H(m)K_B^+(K_B^-(H(m)))=H(m)成立,则签名报文m的一定是Bob的私钥。

四、身份认证

身份认证又称身份鉴别,是一个实体经过计算机网络向另个实体证明其身份的过程,例如,一个人向某个电子邮件服务器证明其身份。

人们可以通过多种方式互相鉴别:见面时通过识别对方的容貌进行身份认证,打电话时通过对方的声音进行身份认证等。在本节中主要讨论经由网络通信的双方如何能够鉴别彼此,尤其关注当通信实际发生时鉴别“活动的”实体。这与证明在过去的某点接收到的报文确实来自声称的发送方稍有不同。

当通过网络进行身份鉴别时,通信各方不能依靠生物信息,例如,外表、声音等,进行身份鉴别。鉴别应当在通信双方的报文和数据交换的基础上,作为某鉴别协议(authenticatior protocol)的一部分独立完成。鉴别协议通常在两个通信实体运行其他协议(例如,可靠数据传输协议、路由选择信息交换协议或电子邮件协议)之前运行。鉴别协议首先建立相互信任的各方的标识;仅当鉴别完成之后,各方才继续之后的工作。

假设 Alice 要向 Bob 鉴别她自己的身份,如果 Alice 直接发送给 Bob一条消息“我是Alice", Bob收到消息后不能确定消息确实就是 Alice发来的,因为在网络中Bob“看”不到Alice, Trudy(入侵者)也可以发送这样的报文。

如果 Alice 在自己发送的报文中加入个人标识呢?例如,Alice将自己的常用IP地址,加入到报文中发送给Bob, Bob收到消息后,通过验证 Alice 携带鉴别报文的IP数据报的源地址,是否与Alice的常用IP地址相匹配来进行鉴别。显然,这仍然不可靠,因为Trudy 以通过IP欺骗,生成一个IP数据报,在数据报中填入Alice的IP地址,再发送给Bob。

很自然地,会想到使用秘密口令的方式进行身份认证。事实上,很多网络应用都是用口令鉴别用户身份,例如,Gmail、Telnet、FTP等。如果 Alice 在之前报文的基础上添加一条秘密口令后,再发送给 Bob是否就能成功完成身份认证呢?

很遗憾,这种身份认证方式的安全性缺陷相当明显:如果 Trudy 窃听 Alice的通信,则可得到Alice的口令。Trudy 通过嗅探在局域网上传输的所有数据分组,就有可能窃取到口令。那么如果对口令进行加密是否可以防止攻击呢?

事实证明还是不行!虽然口令加密确实可以防止 Trudy 通过嗅探获得 Alice 的口令,但是,这种方法并不能解决身份认证问题,因为 Bob 依然可能遭受一种攻击,即回放攻击(playback attack)。Trudy 只需窃听Alice的通信,并记录下加密口令(可能并不知道口令内容),并向Bob回放该加密的口令,就可以假冒她就是Alice。

使用加密口令方式失败的情况,是因为 Bob 不能区分Alice的初始鉴别报文和后来入侵者回放的Alice的初始鉴别报文。也就是说,Bob无法判断Alice是否还活跃(即当前是否还在连接的一端),或接收到的报文是否就是前面鉴别 Alice 时录制的回放。

回顾 TCP 连接建立的三次握手过程,也需要处理类似的问题。如果服务器端的 TCP 接收到的 SYN报文段,是较早连接的一个 SYN报文段的旧副本(重传的结果),那么服务器端的 TCP 不会接受该连接请求。服务器端的 TCP 如何“判断客户是否真正还活跃”呢?TCP 的解决方案是,选择一个很长时间内都不会再次使用的初始序号,然后把这个序号发给客户,然后等待客户以包含这个序号的 ACK 报文段来响应。类似地,为了预防回放攻击,比较有效的解决方式是引一次性随机数(Nonce),该随机数在一个生命期内只使用一次。

下图所示为使用一次性随机数的基本过程。

Alice向Bob发送报文“我是 Alice’。

Bob选择个次性随机数R,然后把这个值发送给 Alice。

Alice 使用她与 Bob共享的对称密钥KABK_{A-B}来加密这个一次性随机数,然后把加密的一次性随机数KAB(R)K_{A-B}(R)发回给 Bob。由于Alice知道KABK_{A-B}并用它加密了R,就使得 Bob知道收到的报文是由 Alice产生的,于是,这个一次性随机数便可用于确定Alice是活跃的。

Bob解密接收到的报文。如果解密得到的一次性随机数等于他发送给Alice的那个一次性随机数,则可确认 Alice的身份。

一次性随机数的使用,可以避免被重放攻击,但是该方法的最大不足是需要通信双方享密钥。那么能否使用一次性随机数和公开密钥密码体制而不是对称密钥密码体制来解决身份认证问题呢?

答案是肯定的。一个改进的方法是在使用一次性随机数的基础上,再利用公钥加密技术,如下图所示。

Alice 向Bob发送报文“我是Alice"。

Bob选择一个一次性随机数R,然后把这个值发送给 Alice。

Alice 使用她的私钥来加密R,然后把加密结果发回给 Bob。

Bob向Alice索要她的公钥。

Alice向Bob发送自己的公钥。

Bob 用 Alice 的公钥解密收到的报文。如果解密得到的一次性随机数K (K (R 等于他发送给Alice的那个一次性随机数R, 则可确认Alice的身份。

但是该方法依然存在比较明显的安全漏洞,如下图所示。

Alice 向Bob 发送消息,但是发送的消息被中间人Trudy 劫持;

Trudy 劫持消息后将其转发给 Bob;

Bob 收到消息后向他认为的"Alice"发送一次性随机数 R,同样被 Trudy 劫持;

Trudy 将一次性随机数R转发给Alice;

Alice 收到后,向她认为的"Bob"发送用自己私钥加密的一次性随机数K, ®;

与此同时,Trudy也向Bob发送用自己私钥加密的一次性随机数K; ®,并向Alice索要 Alice 的公钥;

Bob 收到K ®后,向"Alice"索要公钥;

然后,Trudy 成功获取了Alice 发来的公钥K,并将自己的公钥发送给 Bob。

至此,Trudy 已经完全成为了“中间人”,Bob与Alice可以收到彼此发送的所有信息,但同时Trudy 也收到了所有信息。

之所以会存在中间人攻击的安全隐患,跟密钥的可信性有很大关系,Trudy 将自己的公钥发给 Bob并声称是Alice 的公钥,Bob 没有验证公钥的真实性,于是中间人攻击就成功了。解决问题的关键,是要解决(对称)密钥分发和(公开)密钥本身的认证问题。

五、密钥分发中心与证书认证机构

5.1、密钥分发中心

在身份鉴别过程中,为了证明是“真实的”Alice, Bob向Alice 发送一个随机数R, Alice必须返回R,并利用共享密钥进行加密,那么 Alice和Bob之间如何实现对称密的共享呢?

在对大量信息进行加密时,对称密钥密码因为其加解密效率高、速度快等特点,而比非对称密钥密码更为有效。然而对称密钥密码的应用,需要在通信方之间建立一个共享密钥。如果一方需要和 N 方进行保密通信,则需要建立 N对共享密钥。显然,解决对称密钥的安全可靠分发,是成功利用对称密钥密码的关键。

对称密钥分发的典型解决方案是,通信各方建立大家都信赖的密钥分发中心(Key Distribution Center, KDC),并且每一方和KDC之间都保持一个长期的共享密钥。通信双方借助 KDC,在通信双方之间创建一个临时的会话密钥(Session Key)。在会话密钥建立之前,通信双方与 KDC 之间的长期共享密钥,用于KDC对通信方进行验证以及双方之间的验证。

基于KDC的密钥生成和分发方法可以有很多种。例如,会话密钥可以由通信的发起方生成,也可以由 KDC生成。假设通信方 Alice与KDC 之间长期共享密钥为KAKDCK_{A-KDC},通信方Bob与KDC之间长期共享密钥为KBKDCK_{B-KDC}

方式一:通信发起方生成会话密钥,如下图所示。

具体过程如下:

  • 假设 Alice 要与 Bob 进行保密通信,Alice 随机选择一个会话密钥KSK_S;用KAKDCK_{A-KDC}加密会话密钥,即得到KAKDC(KS,B)K_{A-KDC}(K_S,B),并发送给KDC。

  • KDC收到后,用KAKDCK_{A-KDC}解密获得 Alice 所选择的会话密钥KSK_S,以及所希望的通信方 Bob。KDC将(KS,A)(K_S,A)用其和Bob共享的密钥KBKDCK_{B-KDC}加密,并将KBKDC(KS,A)K_{B-KDC}(K_S,A)发送给Bob。

  • 通信方 Bob 收到后,用与KDC的共享密钥解密,从而得知希望和自己通信的是Alice,并获得会话密钥KSK_S

这样Alice和Bob就可以利用会话密钥KSK_S进行双方之间的保密通信了,因为大家都信任KDC。

方式二:由KDC为Alice、Bob生成通信的会话密钥,如下图所示。

具体过程如下:

  • 通信方 Alice在希望与Bob通信时,首先向KDC发送请求消息。
  • KDC收到来自于Alice的消息后,随机选择一个会话密钥KSK_S, ,并将KBKDC(KS,A)K_{B-KDC}(K_S,A)送给Bob,将KAKDC(KS,B)K_{A-KDC}(K_S,B)发送给Alice。
  • Alice、Bob收到来自于KDC的密文消息后,分别用自己与KDC的共享密钥解密,获得会话密钥KSK_S

显然,通过该方式也可以在Alice、Bob之间建立会话密钥,以支持双方的保密通信。

5.2、证书认证机构

考虑一个因特网版的“比萨恶作剧”。假定 Alice 正在从事比萨派送业务,从因特网上接受订单。Bob 是一个爱吃比萨的人,他向 Alice 发送了一份包含其家庭地址和他希望的比萨类型的明文报文。Bob 在这个报文中也包含一个数字签名(即对原始明文报文的签名的散列),以向 Alice 证实他是该报文的真正来源。为了验证这个数字签名,Alice 获得了Bob 公钥(从公钥服务器或通过电子邮件)并核对该数字签名。通过这种方式,Alice 确信是 Bob 而不是某些青少年恶作剧者下的比萨订单。

在聪明的 Trudy 出现之前,这一切看起来进行得相当好。如下图所示,Trudy 向 Alice 发送一个报文,在这个报文中说她是 Bob,给出了 Bob 家的地址并订购了一个比萨。在这个报文中,也包括了她(Trudy)的公钥,Alice 自然地假定它就是 Bob 的公钥。Trudy也附加了一个签名,但是这是用她自己(Trudy)的私钥生成的。在收到该报文后,Alice 就会用 Trudy 的公钥(Alice 认为它是 Bob的公钥)来解密该数字签名,并得到结论:这个明文报文确实是由 Bob 生成的。然而,当外送人员带着腊肠比萨到达 Bob 家时,他会感到常惊讶,因为Bob根本就不喜欢腊肠。

从这个例子可以看到,要想使公钥密码有效,就需要能够证实你拥有的公钥,实际上就是要拥有与你通信的实体(人员、路由器、浏览器等)的公钥。例如,当Alice 与Bob 使用公钥密码通信时,她需要证实她认为是Bob的那个公钥确实就是Bob的公钥。

将公钥与特定实体绑定,通常是由认证中心(Certification Authority, CA)完成的。CA具有以下作用。

  • CA 可以证实一个实体(一个人、一台路由器等)的真实身份。当通信方与CA打交道时,需要信任这个 CA 能够执行严格的身份验证。例如,如果 Trudy 可以进入某证书权威机构,并宣称“我是 Alice",就可以得到该机构颁发的与 Alice 的身份相关联证书的话,则人们不会对该证书权威机构所签发的公钥证书有太多的信任。

  • 一旦CA验证了某个实体的身份,CA会生成一个把其身份和实体的公钥绑定起来的证书(Certificate),其中包含该实体的公钥及其全局唯一的身份识别信息(例如,人的姓名或IP地址)等,并由CA对证书进行数字签名。

如下图所示,是Bob获取个人数字证书的过程。

Bob向CA提供自己的身份证明,CA创建绑定 Bob 及其公钥的证书,证书包含由CA签名的Bob公钥并声明:“这是Bob的公钥”。

此时,当Alice想要 Bob的公钥时,首先获取 Bob的公钥证书,然后使用CA的公钥解密证书中签名的公钥从而获得 Bob的公钥。

有了CA便可以对抗披萨恶作剧了,也可以解决中间人攻击问题。

六、防火墙与入侵检测系统

因特网并不是一个安全的地方,隐藏着各种危险,可以说是机四伏。在众多网络安全防护措施里,防火墙(firewall)是比较有效并且被广泛部署使用的设施。

6.1、防火墙基本概念

防火墙是能够隔离组织内部网络与公共互联网,允许某些分组通过而阻止其他分组进入或离开内部网络的软件、硬件或者软件硬件结合的一种设施。

防火墙发挥作用的基本前提是,需要保证从外部到内部和从内部到外部的所有流量都经过防火墙,并且仅被授权的流量允许通过,防火墙能够限制对授权流量的访问。

6.2、防火墙分类

防火墙大致可以分为三类:无状态分组过滤器(stateless packet filters)、有状态分组过滤器(stateful packet filters)和应用网关(application gateway)。

6.2.1、无状态分组过滤器

无状态分组过滤器是典型的部署在内部网络和网络边缘路由器上的防火墙。

一个机构的网络通常都会有至少一个将其内部网络与外部 Internet 相连的网关路由器。所有进入和离开内部网络的流量都会经过网关路由器。分组过滤是网关路由器的重要功能之一,路由器逐个检查数据报,然后基于特定的规则对分组是通过还是丢弃进行决策。

分组过滤器,在进行过滤时,通常基于以参数进行决策。

  • IP数据报的源IP地址和目的IP地址。

  • TCP/UDP报文段的源端口号和目的端口。

  • ICMP报文类型。

  • TCP 报文段的SYN和ACK标志位等。

例如,如果分组过滤器设置成,阻止上层协议字段等于17的IP数据报,以及源或目的端号等于23的TCP报文段,进入与离开,其结果是所有进入或者离开的UDP 流量以及Telne 连接都会被阻止。而如果分组过滤器设置成,阻止进入的ACK等于0的TCP报文段,其结果是阻止外部客户与内部主机主动建立TCP 连接,但是允许内部客户与外部主机进行主动连接建立。下表展示了更多无状态分组过滤的例子。

策略 防火墙设置
不允许访问外部Web站点 丢弃所有目的端口号为80的外出分组
禁止进入的TCP连接,连接机构公共Web服务器除外 丢弃所有TCP SYN段,目的IP地址为机构IP,端口号为80的IP数据报除外
阻止Web电台应用,以防消耗可用带宽 丢弃所有进入的UDP分组,DNS分组和路由器广播分组除外
阻止网络被用于蓝精灵Dos攻击 丢弃所有发往广播地址的ICMP分组
阻止网络被路由跟踪 丢弃所有外出的TTL失效ICMP流量

在路由器中,通常使用访问控制列表(Acces Control Lists, ACL)实现防火墙规则,每个路由器接口都有它自己的规则列表,自顶向下应用于到达的分组。下表展示的是对于某机构172.212/16的访问控制列表。

动作 源地址 目的地址 协议 源端口 目的端口 目标位
允许 172.212/16 172.212/16外部 TCP > 1023 80 任意
允许 172.212/16外部 172.212/16 TCP 80 > 1023 ACK
拒绝 全部 全部 全部 全部 全部 全部

该访问控制列表适用于将路由器与机构外部ISP连接的某个接口。前两条规则结合在一起允许用户访问 Web,第一条允许目的端口号为80,即封装HTTP报文的TCP报文段离开该机构网络,第二条允许外部返回的源端口号为80且ACK置位的TCP报文段进入网络。

6.2.2、有状态分组过滤器

无状态分组过滤器存在一些弊端,例如,不加区分的放行所有满足条件的分组,假如某路由器中的访问控制列表允许来自外部的ACK=1且源端口为80的任何分组通过该过滤器到达内部网络。这样的分组能够被攻击者利用进行拒绝服务攻击或者绘制内部网络。

有状态分组过滤器使用连接表跟踪每个TCP连接,如下表所示。分组过滤器跟踪连接建立(SYN)、拆除(FIN),根据状态确定是否放行进入或者外出的分组。对于超时的非活动连接,则不再允许分组通过。

源地址 目的地址 源端口 目的端口
172.212.12.204 112.23.14.22 10231 80
172.212.12.117 152.43.61.73 10803 80
172.212.12.117 166.45.22.98 10223 80

在下表所示的有状态分组过滤器的访问控制表中,针对从外部返回的源端口号为80且ACK置位的TCP分组,会增加核对连接列,此时会核对连接表,以上表为例,如果分组源地址不是上表中的三个目的地址中的一个,该分组会被拒绝。而内部用户正常发送出去的访问Web的分组,Web 服务器接收后返回的分组在记录表中都是可以查询到,防火墙就会让这些分组通过。

动作 源地址 目的地址 协议 源端口 目的端口 目标位 核对连接
允许 172.212/16 172.212/16外部 TCP > 1023 80 任意
允许 172.212/16外部 172.212/16 TCP 80 > 1023 ACK \surd
拒绝 全部 全部 全部 全部 全部 全部

6.2.3、应用网关

分组过滤器可以实现根据IP的内容和 TCP/UDP首部信息执行粗粒度的过滤,但它们都无法鉴别用户身份或针对授权用户开放特定服务,因为有关用户身份的信息都是应用层数据,都不在TCP/UDP传输层数据头部中。

为了进一步提高防火墙的安全性,防火墙还必须把分组过滤器和应用程序网关合起来,下图所示的是应用网关实现授权用户通过网关访问外部网络的Telnet服务。

首先,所有用户必须通过应用网关才能访问外部网络的 Telnet 服务,应用网关会进行身份鉴别,只有授权用户,应用网关代理用户与目的主机建立 Telnet 连接,并且在两个连接之间进行数据中继,而路由器会阻止所有不是应用网关发起的Telnet连接。所以,该Telnet 应用网关不仅执行用户授权,而且也充当Telnet服务器和Telnet 客户。

6.2.4、小结

尽管这里介绍了多种安全措施,防火墙和应用网关依然存在许多局限性。

第一,路由器无法确定数据是否来自声称的源,攻击者会利用此进行IP欺骗。

第二,应用网关通用性不好,如果不同应用有不同需求,每个应用需要一个独立的应用网关。此外,客户软件需要知道如何连接网关。

第三,针对 UDP的流量经常全部通过或者全部不通过。

通常,网络中防火墙的设置会进行折中,确定安全级别,不同安全级别对内部网络与外部网络的通信影响程度不同。

6.3、入侵检测系统IDS

防火墙在决定让哪个分组经过防火墻时,分组过滤器检查IP、TCP、UDP、ICMP 首剖字段。为了检测多种攻击类型,则需要执行深度分组检查,查看首部字段之外的部分,深入查看分组携带的实际数据。

入侵检测系统(Intrusion Detection System, IDS)是当观察到潜在的恶意流量时,能够产生警告的设备或系统,IDS 不仅仅针对 TCP/IP 首部进行操作,而且会进行深度包检测,并检测多数据之间的相关性。IDS 能够检测多种攻击,例如,网络映射、端口扫描、TCP 栈扫描、DoS 拒绝服务攻击等。

一个机构可能在它的机构网络中部署一个或者多个 IDS 传感器,如下图所示。非军事区(DeMilitarized Zone, DMZ)代表安全度较低的区域。IDS不仅要进行深度分组检查,同时还要将每个过往的分组与大量特征进行比较,这可能会导致极大的数据处理量。

七、网络安全协议

在实际的安全实现方案中,在因特网的任意一层,提供安全性服务都是可能的。例如,通过加密网络层数据报中的所有数据,即传输层所有报文段,以及鉴别源和目的IP地址,在网络层能够提供“全覆盖”的安全性保障。但是仍然不能够提供用户级的安全性,例如,前面说到的有状态分组过滤器存在的缺陷,要提供更高层的安全性,就需要对应用层的数据进行加密、身份认证等。

下面从应用层开始,自顶向下介绍各层解决安全性的实例协议。

7.1、安全电子邮件

7.1.1、安全电子邮件基本原理

电子邮件是使用非常广泛的应用,在现代通信中的地位十分重要,电子邮件的出现在大程度上已经取代了传统的邮件通信。但是在最初设计电子邮件系统时,本身存在一些安全性问题。例如,常见的垃圾邮件,会增加网络负担,邮件到达接收的服务器,存储在邮箱中或者存储在用户客户端中,会占用空间。此外,不法分子会利用诈骗邮件让一些用户上当受骗,或者利用邮件进行欺骗、钓鱼式攻击,非法获取受害者密码、个人隐私等敏感信息。有的攻击者会使用邮件炸弹,类似拒绝服务攻击 DoS,冒充的邮件发送者短时间内向一个邮箱发送大量的电子邮件,接收方邮箱被充满,存储空间被消耗掉,导致用户无法接收邮件。另外,最早的网络蠕虫很多都是通过电子邮件传播,电子邮件中的网络蠕虫和病毒会对用户系统安全造成很大威胁。

作为一个网络应用,电子邮件对网络安全的需求主要有以下几个方面。

  • 机密性:传输过程中不被第三方阅读到邮件内容,只有真正的接收方才可以阅读邮件。

  • 完整性:支持在邮件传输过程中不被篡改,若发生篡改,通过完整性验证可以判断出该邮件被篡改过。

  • 身份认证性:电子邮件的发送方不能被假冒,接收方能够确认发送方的身份。

  • 抗抵赖性:发送方无法对发送的邮件进行抵赖。接收方能够预防发送方抵赖自己发送过的事实。

此外,电子邮件系统具有单向性和非实时性,发送方利用用户代理编写邮件,发送到注册的邮件服务器,邮件服务器将邮件放到外出队列中,在合适时期发送到接收方注册的服务器,最后由接收方服务器将邮件放到接收方邮箱中,接收用户在邮箱中读取信件。因此,电子邮件不适合采用如虚拟专用网 VPN等技术建立安全隧道,进行邮件加密传输,只能邮件本身进行加密。

7.1.2、安全电子邮件标准

目前,安全电子邮件标准是1991年提出的PGP (Pretty Good Privacy)标准。PGP可以免费运行在各种操作系统平台之上,可用于普通文件加密以及军事目的,所使用的算法,如,公钥加密算法(如RSA)、对称加密算法(如3DES)、散列算法(如SHA-1),都已被证明是安全可靠的。

PGP 能够提供诸如邮件加密、报文完整性等安全服务,满足电子邮件对网络安全的需求。PGP 标准会对邮件内容进行数字签名,保证信件内容不被篡改。同时会使用公钥和对称密钥加密,保证邮件内容机密且不可否认,公钥的权威性由收发双方所信任的第三方签名认证,并且事先不需要任何保密信道来传递对称的会话密钥。

以Alice向Bob发送保密邮件为例,PGP的加密过程如下图所示。

Alice 先对报文m,使用 SHA-1散列函数进行散列,采用 Alice的私钥KAK_A^-,通过公钥加密算法(如RSA)对摘要进行数字签名,得到KA(H(m))K_A^-(H(m));邮件报文m和数字签名在PGP中会进行压缩;再使用对称加密算法如3DES 进行对称加密,对称密钥为KSK_S;为了将对称密钥KSK_S安全分发到 Bob手中,使用 Bob 的公开密钥KB+K_B^+KSK_S进行加密;加密的密钥和加密的压缩报文会进行Base64的编码,把非7位ASCII 码内容编码为7位ASCII码,以便利用 SMTP进行传输。同时可能要进行分段,因为PGP报文有大小限制。

PGP的解密过程,如下图所示。

Bob 接收邮件后先利用 Base64 进行还原,再进行分离;然后先利用 Bob 的私钥KBK_B^-解密得到对称密钥KSK_S;利用KSK_S进行3DES解密,解压缩后进一步分离;对数字签名KA(H(m))K_A^-(H(m))使用 Alice 的公钥KB+K_B^+进行解密得到H(m) ;对原报文m利用相同的散列函数H进行散列,比较两个H(m)即可对报文完整性进行验证。

PGP 允许用户选择功能内容。例如,选择保密或身份认证等。安装PGP时,PGP 会为用户生成公用密钥对,公钥放置在用户网站或者某公共服务器。用户为随机生成的 RSA私钥生成一个口令,只有给出口令才能将私钥释放出来进行使用。

PGP公钥认证机制与传统认证中心CA差异比较大,可以通过可信的Web认证,或者用户可以自己认证任何其信任的“公钥/用户名”对。同时,用户还可以为其他公钥认证提供担保。Alice可以直接从Bob手中得到公钥,或者通过电话认证密钥,或者从双方信任的第三方那里获取Bob的公钥,或者通过认证中心CA来获得,防止公钥被篡改。

7.2、安全套接字SSL

Web 应用的安全性问题一直是网络安全关注的热点。一般来说,Web 服务器越强大,包含安全漏洞的概率越高,同时,Web 浏览器也会遇到各种各样的安全威胁,例如,活动 Web 页面可能隐藏恶意程序。因为活动 Web 页面内嵌了一些可执行代码或程序,这些代码或程序随着 Web 页面一起传输到客户端浏览器,由浏览器调用执行环境,如虚拟机或者一些程序来解释执行这些代码或程序,JavaScript 程序都是在客户端执行。此外,普通 Web 应用的应用层数据(即 HTTP 报文),在传输过程中都是以明文形式传输的,因此,在传输过中也可能受到攻击,例如,受到监听、伪造、篡改、回放或中间人攻击等威胁。

为了解决 Web 应用安全问题,可以从多个层次入手,例如,在电子商务背景下提出的HTTP安全电子交易协议,属于应用层解决方案。另一种Web 安全解决方案,是在传输层上构建个安全层,最典型的就是安全套接字层(Secure Socket Layer, SSL)或传输层安全(Transport Layer Security, TLS)。SSL/TLS介于应用层和传输层之间,类似于会话层,可为基础协议栈的一部分,也可直接嵌入到浏览器中使用。TLS是SSL的变体,差异不大,下面主要对SSL进行简单介绍。

7.2.1、SSL简介

安全套接字层 SSL是由 NetScape最先实现,并广泛部署的安全协议,几乎所有的浏览器和Web服务器都支持。SSL可以提供机密性、完整性、身份认证等安全服务。SSL最初提出的目标是面向 Web 电子商务交易,尤其是加密信用卡号,提供 Web 服务器的认证、可选的客户认证,方便用户和新商户进行商务活动。HTTP协议使用SSL进行安全通信时,称为安全HTTP,简记为HTTPS。

目前,所有基于 TCP 的网络都可以应用 SSL, SSL 提供了安全套接字接口,数据处理后再交付给 TCP 传输。可以说,SSL 可以为所有基于 TCP 的网络应用提供应用编程的接口,具有较好的通用性。SSL 可以提供类似 PGP 的安全功能,但是 SSL 需要发送字节流及交互数据,而电子邮件主要是单向传输。另外,SSL 需要一组密钥用于链接,并且需要在握手阶段进行证书交换并作为协议的一部分。

SSL 比较复杂,下面首先介绍一个简化的SSL,来展示SSL的核心功能。简化的SSL主要包含4个部分。

  • 发送方和接收方利用各自的证书、私钥认证、鉴别彼此,并交换共享密钥。

  • 密钥派生或密钥导出,发送方和接收方利用共享密钥派生出一组密钥。

  • 数据传输,将待传输数据分割成一系列记录,加密后传输。

  • 连接关闭,通过发送特殊消息,安全关闭连接,不能留有漏洞被攻击方利用。

简化的SSL的握手过程,如下图所示。Bob接收Alice给出的hello信息后,向Alice提供(发送)公共密钥证书,Alice 会对该证书进行鉴别,再利用Bob的公钥KB+K_B^+对主密钥MS进行加密,得到EMS后发送给Bob。

发送方和接收方利用不同的密钥,完成不同的操作会更加安全。例如,报文认证码 MAC 和数据加密密钥通常而言都是不一样的。因此,SSL 在密钥派生阶段,通过密钥派生函数(KеDerivation Function, KDF)可以实现密钥派生,提取主密钥和一些额外随机数,生成密钥。在SSL密钥派生过程中,会派生出4个密钥。

  • KCK_C:用于加密客户向服务器发送数据的密钥(对称密钥)。
  • MCM_C:用于客户向服务器发送数据的MAC密钥。
  • KSK_S:用于加密服务器向客户发送数据的密钥。
  • MSM_S:用于服务器向客户发送数据的MAC密钥。

SSL 在数据传输过程中,会将待传输数据分割为一系列记录,因为如果直接加密待发送的 TCP 字节流,则没有合适的位置放置报文认证码 MAC。一般来说,MAC 都会放在数据最后,这样,只有接收方接收了所有数据后,才能进行完整性验证。例如,基于 TCP的即时消息系统中,在显示一段消息之前,无法针对发送的所有字节进行完整性校验,而必须等待整个会话结束,才能进行完整性校验,显然这是不可行的。因此,SSL 的解决方案,是将字节流分割为一系列记录,每个记录携带一个MAC。

为了防止攻击者捕获和回放记录或者重新排序记录,SSL 会在报文认证码 MAC中,增加序列号以及使用一次性随机数nonce。在SSL纪录前增加序列号,使用MAC密钥进行散列得到MAC,但在SSL记录中没有序列号字段,序列号信息由接收方和发送方按照一定规律自己生成。

为了防止截断攻击,即攻击者伪造 TCP 的断连过程,使得通信的一方或者双方认为对方没有数据发送,连接被恶意断开。SSL 会使用一个类型的记录专门用于断连,例如 type=0的记录用于发送数据, type=1的记录用于断连,只有接收到 type=1 的记录时,SSL 才进行断连。

注:上述SSL是简化版本,可以看作 SSL 的基本原理,很多方面并不完整。例如,使用哪种加密协议和加密算法,4个密钥的协商细节等。

7.2.2、SSL协议栈

下图所示是SSL 协议栈,可以看出SSL是介于TCP和HTTP 等应用层协议之间的一个可选层,绝大多数应用层协议可以直接建立在SSL协议之上,SSL不是单独的协议,而两层协议。

在介绍 SS各个具体协议之前先介绍一下SSL 密码组。SSL在安全加解密过程中,涉及多种密码,例如已介绍的密钥派生过程中的4种密码。同时,SSL也会使用到多种加密算法,主要有以下几种。

  • 公开密钥加密算法:SSL主要使用RSA,其他多种公钥加密算法也支持。

  • 对称密钥加密算法:SSL支持DES分组密码、3DES分组密码等。

  • MAC算法:MD5或SHA-1。

密码组由客户和服务器协商确定,客户端提供支持的可选加密算法,服务器从中挑选构成密码组。

SSL 更改密码协议用于通信过程,通信双方修改密码组,标志着加密策略的改变。从上图中可以看出,SSL 更改密码协议运行在 SSL 记录协议之上,最后报文内容会封装到记录协议报文之中。

SSL 警告协议同样位于记录协议之上,用于在握手过程或者数据加密等过程中,出错或者发生异常时,为对等实体传递 SSL 警告或者终止当前连接。该协议包含两个字节:警告级别和警告代码。

SSL 握手协议在 SSL 协议栈中的地位十分重要,因为 SSL 需要握手协议交换许多重要信息。SSL 握手协议主要是协商密码组和建立密钥,在协商确认后,才能进行派生密钥的导出等操作,协商结果是SSL记录协议的基础。握手协议也会进行服务器认证与鉴别和客户认证与鉴别。在SSL3.0版本中,握手过程用到了3个协议:SSL握手协议、SSL更改密码协议、SSL警告协议。

SSL 记录协议描述了 SSL信息交换过程中的消息格式,前面的3个协议都需要记录协进行封装与传输。SSL 记录协议会将数据分段成可操作的数据块,如下图所示,将分块数据进行数据压缩,为了实现对每一个记录进行完整性认证,需要对每个记录计算 MAC 值,压缩后的数据进行连接,再进行加密,加入 SSL 记录头(Recorder Header)构成记录,放入TCP 报文段中传输。

SSL 记录头部由3部分组成:1字节的内容类型 Content Type、2字节的SSL版本号和3字节的数据长度。MAC中包括序列号以及MAC的密钥MxM_x

7.2.3、SSL的握手过程

SSL 协议的握手过程主要有以下几个步骤。

  • 客户发送其支持的算法列表,以及客户一次性随机数nonce,服务器从算法列表中选择算法,并发给客户自己的选择、公钥证书和服务器端一次性随机数nonce。

  • 客户验证证书,提取服务器公钥,生成预主密钥(pre_master_secret),并利用服务器的公钥加密预主密钥,发送给服务器,实现密钥的分发。

  • 客户与服务器基于预主密钥和一次性随机数,分别独立计算加密密钥和 MAC 密钥,包括前面提到的4个密钥。

  • 客户发送一个针对所有握手消息的MAC,并将此MAC发送给服务器。

  • 服务器发送一个针对所有握手消息的MAC,并将此MAC发送给客户。

最后两步是为了保护握手过程免遭簒改,因为在密钥分发和派生之前,所有的握手过程都是明文。例如,客户端提供的算法安全性有强有弱,明文传输中可能会被中间人攻击截获,把安全性强的算法删除,为后期的攻击埋下伏笔,而针对所有消息的MAC 能够预防类攻击事件的发生。

客户端和服务器各自都选择了一次性随机数,是为了确保在一定时间内加密密钥的不同,避免被回放攻击。例如,攻击者嗅探了 Alice 和 Bob 之间的所有报文,第二天攻击者向 Bob 建立了TCP连接,发送完全相同的报文序列,如果 Bob 是淘宝卖家的话,他可能会认为Alice 对同一产品下发两个分离的订单。如果 Bob 每次连接时发送完全不同的随机数,两次场景的加密密钥就会不同。攻击者的报文将无法通过Bob完整性检验。

SSL 密钥派生时,客户端的一次性随机数、服务器端的一次性随机数和预主密钥作随机数发生器的输入,产生主密钥MS。主密钥和新的一次性随机数输入到另一个随机数发生器,就会按照密钥派生函数,生成密钥块,之后的4个基本密钥都是由密钥块进行切片后得到,分别是客户端 MAC 密钥、服务器 MAC 密钥、客户加密密钥、服务器加密密钥。同时,密钥块切分后也会得到客户端初始向量和服务端初始向量,用于各自的 MAC 生成。

7.3、虚拟专用网VPN和IP安全协议IPSec

最典型的网络层安全协议,就是使用最广泛和最有代表性的IP安全协议,一般被称为 IPSec (IP Security),它为网络层的信息传输提供了安全性。

IPSec 能够为任意两个网络层实体之间IP数据报的传输提供安全,可以提供机密性、身份鉴别、数据完整性验证和防重放攻击保护等服务。许多机构组织会使用 IPSec 创建运行在公共网络之上的虚拟专用网络(Virtual Private Networks, VPN)。

7.3.1、VPN简介

在介绍VPN之前先了解一下专用网络(Private Networks, PN)。

PN是基于专属的网络设备、链路或协议等建立的专门服务于特定组织机构的网络,例如,民航网络、军事网络等,是不与公共网络互连,只在组织内部使用的网络。若要实现 PN, 可以自己构建专用物理链路,但是考虑到经济等因素,这种情况十分少见,更多的情况下,组织机构会向通信链路提供商租用链路,利用租用链路实现专用网络连接。可以看到,专用网络 PN 可以提供十分安全的服务,但是构建以及管理维护成本都十分昂贵。

虚拟专用网络 VPN通过建立在公共网络(例如 Internet)上的安全通道,实现远程用户、分支机构、业务伙伴等与机构总部网络的安全连接,从而构建针对特定组织机构的专用网络,如下图所示。VPN 通过隧道技术、加密技术、密钥管理、身份认证和访问控制等,实现与专用网类似的功能,可以达到 PN 安全性的目的,同时成本相对而言要低很多。VPN最重要的特点就是虚拟,连接总部网络和分支机构之间的安全通道实际上并不会独占网络资源,是条逻辑上穿过公共网络的安全、稳定的隧道。

VPN的实现涉及的技术有很多,关键技术有隧道技术、数据加密、身份认证、密钥管理、访问控制和网络管理等,其中相对核心的是隧道技术。隧道即通过 Internet 提供点对点的数据传输安全通道,实际是逻辑连接。通过数据加密保证安全,数据分组进入隧时,由 VPN封装成IP数据报,通过隧道在 Internet 上传输;离开隧道后,进行解封装,数据便不受 VPN保护。

隧道协议包括以下3种协议。

  • 乘客协议,被封装的对象属于哪个协议。

  • 封装协议,使用哪一种协议进行封装,需要加什么字段等。

  • 承载协议,被封装后的对象最后会放入哪类公共网络,如在 Internet 网络中传输。

常见的隧道协议有两个层次:首先是二层协议,有 PPTP、L2TP, 主要用于远程客机访问局域网方案;其次是三层协议,如IPSec,主要用于网关到网关,或者网关到主机的方案,但不支持远程拨号访问。

VPN的实现技术有很多,如IPSec,是最安全、使用最广的技术;同时 VPN也可以利用SSL协议(SSL具有高层安全协议的优势,使用常见的浏览器就可以部署);此外还L2TP等。在实际实现中,会将多种技术相结合,例如,IPSec和SSL, IPSec和L2TP等。

7.3.2、IPSec体系简介

IPSec 是网络层使用最广泛的安全协议,但IPSec并不是一个单一的协议,而是一个安全体系,IPSec体系结构如下图所示。

IPSec体系结构给出了一个整体性的对IPSec的描述,主要包括封装安全载荷协议(Encapsulation Security Protocol, ESP)、认证头(Authenti cation Header, AH)协议、安全关联(Security Association, SA)、密钥交换与管理(Internet Key Exchange, IKE)。IPSec 提供的安全服务包括机密性、数据完整性、源认证和防重放攻击等。提供不同服务模型的两个协议分别是ESP和AH协议。

IPSec 有两种典型的运行模式:传输模式和隧道模式。

  • 传输模式又称作主机模式,IPSec 数据报的发送和接收都是由端系统完成的,主机是 IPSec 感知的。

  • 隧道模式可以联想到VPN,将IPSec的功能部署在网络边缘的路由器上,边缘路由器是IPsec感知的,路由器和路由器之间构建起安全的隧道,数据报在隧道中进行安全封装,主机和边缘路由器之间的数据传输还是传统的IP数据报传输。

7.3.3、安全关联SA

IPSec的通信实体,可以是主机或者路由器。在发送数据之前,需要在发送实体和接收实体之间进行安全关联SA。SA是单工的,双向需要两个SA。发送实体和接收实体间都需要维护SA的状态信息,类似于TCP连接中的端点也需要维护状态信息。因此传统的IP是无连接的,但是IPSec是面向连接的。

在SA建立时需要维护很多参数,主要有以下几个。

  • 安全参数索引(Security Parameter Index, SPI),是32位SA唯一标识。

  • 序列号,用于抗重放攻击。

  • 抗重放窗口,接收方利用滑动窗口检测恶意主机重放数据报。

  • 生存周期,每个SA都有使用周期。

  • 运行模式,分为传输模式和隧道模。

  • IPSec隧道源和目的地址,只有隧道模式下才会有这两个参数。

例如,利用IPSec构建总部与分支机构的连接,网络结构如图8.26所示,路由器R1在创建SA时,首先需要存储32位SA标识ID、安全参数索引SPI,还需要记录隧道源接口地址200.168.1.100和目的接口地址193.68.2.23,此外还需要维护各种加密参数信息,如加密类型、加密密钥、完整性检验类型、认证/鉴别密钥等。

只要建立IPSec通信,就需要建立SA,随着双方 IPSec 连接数量的不同,SA需要存储的信息就会很多。一般来说,IPSec 端点会将SA状态保存在安全关联数据库(Securit Association Database, SAD)中,在处理 IPSec 数据报时,会定位这些信息。在图8.26的例子中,对于n个销售人员,1个分支机构 VPN,总部的路由器R1的SAD中存储 2+2n 条SA,因为需要建立双向的 SA。当发送 IPSec 数据报时,R1访问SAD,确定如何处理数报。当数据报到达R2, R2会检验 IPSec 数据报中的SPI,利用SPI检索SAD,对数据报进行处理。

但在实际应用中,并不是所有数据报都需要经 IPSec,例如,访问公共互联网服务。所以哪些应该按照 IPSec,哪些应该做其他处理和传输?安全策略数据库(Security Polic Database, SPD),定义了针对数据流实施怎样的安全处理,主要分为3类:应用 IPsec、普通IP数据报绕过IPSec、丢弃违背安全策略的数据报。安全策略组成了SPD,每个记录就是一条SP。在接收到新的数据报后,端点会提取关键信息填充到一个称为“选择符”的结构中,其中包括源和目标 IP 地址、传输层协议、源和目的端口号等。利用“选择符”去搜索SPD,检索匹配 SP,如果匹配不成功,会按照默认方式处理;如果匹配成功,会进行安全处理,安全处理需要的参数,存储在SP指向的SA结构中。

7.3.4、AH协议和ESP

AH协议和ESP是IPSec的核心。AH协议在IP数据报中,报头对应协议号为51,提供源认证和鉴别、数据完整性检验。ESP 在IP数据报中的协议号是50,提供源认证和鉴别、数据完整性检验以及机密性,比AH 协议应用更加广泛。

两种不同协议和两种模式(传输输式、隧道模式)结合起来共有4种组合:传输模式 AH、隧道模式 AH、传输模式 ESP、隧道模式 ESP。

传输模式AH数据报结构,是在原IP头和原IP数据报载荷之间加入AH头构成,如下图所示。AH头部前32位主要包括下一个头和载荷长度字段,例如,原IP数据字段载荷是 TCP 报文段,下一个头指向的就是TCP的头部。保留字段后面是安全参数索引SPI和序列号。认证数据根据认证算法不同,长度也不一样,如MD5是128位。传输模式AH是对原IP头不变字段、AH头、原IP数据报载荷所有内容进行认证,认证不包括原IP头部中可变字段,如选项字段。

隧道模式AH数据报结构如下图所示。可以看到,与传输模式AH的主要不同是构建了新的IP头部,认证时也包括新的IP头部。因为数据报被边缘路由器进行封装后,会放入到公共网络如Internet中传送,因此需要增加一个新的IP头部。

传输模式ESP数据报结构如下图所示。可以看出,首先在原IP数据报载荷后面添ESP尾部,尾部中会进行0~255字节的填充,填充是为了提供机密性,加密过程中一般用分组密码,加密过程中需要满足分组密码要求,例如,长度限定为64位等。ESP 头部中是安全参数索引 SPI和序列号。ESP头部加上原IP 数据报载荷以及 ESP 尾部,三部分在一起会进行认证计算 MAC,认证的结果加入尾部,为ESP认证数据。这4个部分构成新的IP数据报载荷,原IP头部信息依然保持不变。

隧道模式ESP是使用最广泛的,最重要的 IPSec 形式。其数据报结构如下图所示。ESP 头部、尾部以及ESP认证和传输模式 ESP 是一样的。ESP 头部、原IP 部、原IP 载荷、ESP 尾部、ESP 认证在一起会封装到新的 IP 数据报载荷中。与隧道模AH一样,在前面加入新的IP头部,因为隧道模式最终会把内容封装成普通的数据报内容进行传输。

对于新的SA,发送方将序列号初始化为0,每次通过 SA发送数据报,发送方会增加序列号计数,将序列号置于序列号字段。IPSec 序列号的使用可以预防分组嗅探和回放攻击,接收方能够依据序列号识别出接收重复、已认证的IP分组。但实际接收方无需记录所有已接收的分组,而是设置一合理的窗口,窗口内的序列号不重复,实际也就重复了。

7.3.5、IPSec密钥交换IKE

在IPSec通信之前需要进行安全关联SA。在SA协商建立过程中,需要彼此确认加密算法和认证密钥等—些信息。IPSec 能够支持手工建立和自动建立两种 SA的建立和密钥管方式。手工建立中,所有信息需要手动配置,SA 永远存在,但只适用于结构简单的网络。自动建立中,SA可以通过协商方式产生,SA过期之后可以重新协商,提高了安全性,适用于复杂拓扑和较高安全性要求的网络。IPSec 进行自动协商建立安全关联和交换密钥的方就是互联网密钥交换协议 IKE。

IKE 自动管理SA的建立、协商、修改和删除,是 IPsec 唯一的密钥管理协议。IKE包括3个主要部分。

  • 互联网安全关联与密钥管理协议(Internet Security Association and Key Managemen Protocol, ISAKMP),定义了协商、建立、修改和删除SA过程的通用框架。

  • 密钥交换协议OAKELY,允许认证过的双方通过不安全网络交换密钥草书。

  • 共享和密钥更新技术SKEME,提供了IKE交换密钥的算法。

可以看到,IKE是IPSec 运行必不可少的基础设施,IKE为 IPSec 提供了密钥交换管理、身份认证以及 SA的协商与管理。IKE在支持通信实体认证的过程中,有两种方式可供选择:预共享密钥PSK 和公钥基础设施 PKI。PSK 是基于共享的密钥,运行 IKE 认证彼此,并建一个IPsec SAs(每个方向一个),包括数据加密和数据认证的密钥。PKI是基于公开/私有密钥对以及公钥证书,运行IKE 认证彼此,并建立 IPSec SAs,类似于SSL握手过程。

IKE进行密钥交换和SA协商建立是一个比较复杂的过程。首先,建立双向IKE SA,也称为ISAKMP安全关联,保证双方进一步的IKE通信的机密性、数据完整性以及提供数据源认服务,后期的IPsec SA建立就可以通过这个通道建立。IKE 提供两种模式:野蛮模式,或称积极主动模式,只需要交换3个消息,使用较少信息;主模式,需要6个消息的交互,更力灵活,并且提供身份保护。注意,这里的 IKE SA不同于 IPSec, 之后基于ISAKMP协进行 IPSec协商。

八、参考

计算机网络教程(第6版·微课版)

计算机网络原理创新教程

计算机网络原理 自考04741


计算机网络原理:网络安全基础
https://kuberxy.github.io/2024/12/22/计算机网络原理08:网络安全基础/
作者
Mr.x
发布于
2024年12月22日
许可协议