安全性和保密性设计---安全协议

安全协议

    Internet 是 IT 领域中发展的重大成就,它的迅速发展和全面普及给人们的生产、生活带来了很大的帮助。

    但是,Internet 在当初是为了让更多的人来使用网络、共享资源,并且容易扩充、容易治理等而设计的,因此它是一个全面开放的系统,而没有在安全方面作充分的考虑。加上日益增加的庞大的用户、各种不同的动机等因素,使得 Internet 上的安全事件层出不穷。

    在 Internet 安全中,网络通信的安全是一个非常重要的环节,因此有必要研究在网络上安全传输数据的方法。

1 IPSec 协议简述

    在 TCP/IP 协议中,对 IP 数据包没有提供任何安全保护,攻击者可以通过网络嗅探、 IP 欺骗、连接截获等方法来攻击正常的 TCP/IP 通信。因此,通信过程中会存在以下危险:数据并非来自合法的发送者、数据在传输过程中被非法篡改、信息内容已被人窃取等。

    为了确保在 IP 网络上进行安全保密的通信,IETF 制定了一套开放标准的网络安全协议 IPSec(IP Security)。该协议把密码技术应用在网络层,以向信息的发送方和接收方提供源地址验证、数据传输的完整性、存取控制、保密性等安全服务,保护通信免遭窃听、抵御网络攻击,而且更高层的应用层协议也可以直接或间接地使用这些安全服务,为其上层协议如 TCP、UDP 等提供透明的安全保护服务,在 Internet 这样不安全的网络中为通信提供安全保证。

    在 IPv6 中,IPSec 协议是一个必备的组成部分,被强制实施;在 IPv4 中,它是一个可选的扩展协议。

    由于 Internet 等网络具有公共特性,因此在通信过程中难以确认传输媒介是安全的,所以要进行安全的通信,则通信数据必须经过加密。IPSec 协议对数据的加密以数据包而不是整个数据流为单位,这不仅非常灵活,也有助于进一步提高 IP 数据包的安全性。

    IPSec 协议的基本工作原理是:发送方在发送数据前对数据实施加密,然后把密文数据发送到网络中去,开始传输。在整个传输过程中,数据都是以密文方式传输的,直到数据到达目的节点,才由接收方对密文进行解密,提取明文信息。

    IPSec 协议对网络层的通信使用了加密技术,它不是加密数据包的头部和尾部信息(如源地址、目的地址、端口号、CRC 校验值等),而是对数据包中的数据进行加密。由于加密过程发生在 IP 层,因此可在不改变 HTTP 等上层应用协议的情况下进行网络协议的安全加密,为通信提供透明的安全传输服务。

    IPSec  协议中使用端到端的工作模式,掌握加密、解密方法的只有数据的发送方和接收方,两者各自负责相应的数据加密、解密处理,而网络中其他节点只负责转发数据,无须支持 IPSec,从而可以实现加密通信与传输媒介无关,保证机密数据在公共网络环境下的适应性和安全性。因此,IPSec 可以应用到非常广泛的环境中,能为局域网、拨号用户、远程站点、Internet 之上的通信提供强有力的保护,而且还能用来筛选特定数据流,还可以用于不同局域网之间通过互联网的安全互联。

    IPSec 协议不是一个单独的协议,它包括应用于 IP 层上网络数据安全的一整套协议,主要包括 AH(Authentication Header,IP 认证头部协议)、ESP(Encapsulating Security Payload,封装安全负载协议)、IKE(Internet Key Exchange,Internet 密钥交换协议)和用于网络认证及加密的一些算法等。

   AH 提供数据的完整性和认证,但不包括保密性;而 ESP 原则上只提供保密性,但也可在 ESP Header 中选择适当的算法及模式来实现数据的完整性和认证。AH 和 ESP 可分开使用也可一起使用。IKE 则提供加密算法、密钥等的协商。

    1.安全关联和安全策略

    安全关联(Security Association,SA)是指提供通信安全服务的发送方和接收方之间的一种单向关系。安全关联是构成 IPSec 的基础,它是进行通信的双方经协商建立起来的一种协定。安全关联可以用一个 32 位的安全参数索引(Security Parameter Index,SPI)来唯一标识,一个 SPI 值决定一个特定的 SA,它通常放在 AH 或 ESP 头中;安全关联是单向的,如果要对两台主机 A 与 B 实现双向安全,则需要两个安全关联,每个方向一个:(A, B)、(B,A)。安全关联的内容包含了 IP 数据包是否加密、认证,以及加密、认证采用的算法、密钥等相关信息。所有的 SA 记录都存放在安全关联数据库中,按散列方式存取。

    安全策略(Security Policy)定义了两个 IPSec 系统之间的安全通信特征,并决定在该通信中为数据包提供的安全服务。一个 IPSec 系统的所有安全策略都存放在安全策略数据库中,根据选择符(包括源地址、目的地址、协议、端口等)进行检索。安全策略通常与 SA 合作,共同作用于通信的数据包。 

    2.AH 

    AH 协议先将数据进行校验和加密,然后封装为 IP 包,从而实现无连接通信的数据完整性、数据源认证和防止重放攻击。AH 能完成除数据加密外的所有的 ESP 所能提供的功能。在认证机制上,它所覆盖的范围比 ESP 的广,包括对 IP 头中一些选项的认证。

   为了应用 IPSec 协议,IP 数据包的格式要有所改变,即在 IP 头和被保护的数据之间插入一个 AH 头,如图所示。

    AH 头的格式如图所示,包括:下一报头、有效载荷长度、保留位、安全参数索引、序列号、认证数据。

    AH 使用的典型的认证算法是一种迭代型的消息摘要算法。AH 中采用 MD5 算法,可以提供完整性服务。从前面的讲述可以知道 MD5 可以对任意长度的信息进行散列运算产生一个唯一的 128 位消息摘要。由于消息摘要是唯一的,所以对信息的任何修改都将得到另一个不同的消息摘要,因此能防止消息被篡改,从而保证了数据的完整性。AH 也可以采用 SHA 算法提供更强的抗攻击能力,SHA 是在 MD5 的基础上,增加了分组处理的迭代次数和复杂性,产生一个 160 位的消息摘要。接收者在收到数据后可以通过检验数据包中的单向递增的序列号来确定数据包的合法性,防止重放攻击。

    3.ESP 

    ESP 通过对数据包的数据进行加密来提供传输信息的保密性,从而实现了数据完整性、数据源认证、数据保密性的安全服务。ESP 是一个通用的、可扩展的安全机制,其加密认证算法主要由 SA 的相应数据项决定。接收者也可以通过在收到数据后检验数据包中的单向递增的序列号来确定数据包的合法性,防止重放攻击。

    在应用中,需要在 IP 数据包的头和被保护的数据之间插入一个 ESP 头,在被保护的数据后附加一个 ESP 尾,如图所示。

    ESP 头的格式如图所示,包括:安全参数索引(标识用于处理数据包的安全关联)、序列号(用于防止重放攻击)、有效荷载数据。ESP头的所有字段都是不加密的,因为在解密数据包时需要先读取头部字段。

    ESP 尾的格式如图 所示,包括:填充项(某些加密算法要求被加密数据的长度是密钥长度的整数倍,若受保护的数据的长度不满足这个要求,就需要在后面追加一些填充项)、填充项长度(指明填充项的长度)、下一个头部、认证数据(数据完整性的检验结果)。

    ESP 在提供加密功能的同时,还可以提供认证功能。对于发出的数据包,首先进行加密处理;而对于收到的数据包,则先进行认证处理。

    ESP 支持多种加密算法。DES 是 ESP 中默认的加密算法,它采用 64 位的密钥,对明文进行加密,加密、解密使用同一个密钥,该算法简单高效。此外还可以选择采用 3DES、 AES、RC5、RC6、Blowfish 等算法。

    4.IP 密钥交换

    IKE 是一个混合协议,它使用了 Internet安全关联和密钥管理协议(Internet Security Association and Key Management Protocol,ISAKMP)、密钥确定协议 Oakley 和描述支持匿名和快速密钥刷新的密钥交换的 SKEME 协议。IKE 除了实现通信双方的密钥交换,还使用 ISAKMP 实现 IPSec 的安全关联。

   ISAKMP 协议是 IKE 的核心组成部分,它定义了包括协商、建立、修改、删除安全关联的过程和数据格式。ISAKMP 的工作分为两个阶段:第一阶段,通信双方协商并建立一个安全的通道,并对该通道进行验证,为第二阶段的进一步通信提供安全服务;第二阶段,为 IPSec 建立起具体的 IPSec 安全关联,用于保护通信双方的数据传输安全。在 IKE 的协商过程中,使用了 Diffie-Hellman 机制、Oakley 的密钥交换模式和 SKEME 的共享和密钥更新技术。

    5.IPSec 的工作模式

    IPSec 的工作模式有两种:传输模式和隧道模式。

   传输模式首先将要传送的数据使用 IPSec 加密封装起来,再把相关的 IPSec 头插入 IP 头和被保护的数据之间封装起来。因为 IP 头没有加密,接收端收到封装的数据包时直接处理 IP 头,然后从 IPSec 头读取 SPI 值得到相对的 SA,再利用 SA 所定的解密参数解出所加密的数据。

    传输模式的 IPSec 头直接加在欲传送的数据前,由于加密的部分较少,没有额外的处理,因此比较节省带宽和 CPU 负载,通信和处理效率较高。

    在传输模式中,解密者就是目的地址端的使用者。

    隧道模式首先使用 SA 的相关信息将 IP 的数据包全部加密,接下来在前面加上 ESP Header,然后把它们作为数据为它们再加上一个新的 IP 头。接收端收到 ESP 封包后,使用 ESP Header 内容中的 SPI 值提供的 SA,然后解出 ESP Header 后的装载数据,就可以取回原始的 IP 头与封包。

    隧道模式可以在两个终端之间建立一个安全的隧道,经由这两个终端之间的通信均在这个隧道中进行,因此安全性较高。

    两种模式的 IP 数据包的格式如图所示。

2 SSL 协议

    SSL 是用于安全传输数据的一种通信协议。它采用公钥加密技术、对称密钥加密技术等保护两个应用之间的信息传输的机密性和完整性。但是,SSL 也有一个不足,就是它本身不能保证传输信息的不可否认性。

    SSL 协议包括服务器认证、客户认证、SSL 链路上的数据完整性、SSL 链路上的数据保密性等几个方面,通过在浏览器和 Web 服务器之间建立一条安全的通道来保证 Internet 数据传递的安全性。目前,利用公钥加密的 SSL 技术,已经成为 Internet 上进行保密通信的工业标准。SSL 协议常常用于增强 Web 服务的安全性。

    在 TCP/IP 协议中,SSL 协议建立在传输层即 TCP 之上、应用层之下。SSL 协议有一个突出的优点,就是它与应用层协议相独立,高层的应用层协议如 HTTP 等可以透明地建立在 SSL 协议之上进行工作。

    通过 SSL 协议建立的传输通道具有如下的基本安全性:

    (1)通道是保密的,经过握手确定密钥之后,所有的消息被加密。SSL 协议在应用层协议工作之前就已经完成了加密算法、密钥的协商、服务器认证等工作,而此后的所有应用层所传送的数据都是经过加密的,因此 SSL 协议具有很好的保密性。

    (2)通道是被认证的,通信中的服务器端总是被认证,客户端可选认证。在基于 SSL 协议的通信过程中,服务器端认证是必须进行的,所以,即使在一次会话过程中不进行客户端认证,该会话的确认性也能够有很好的保证。

    (3)通道是可靠的,用 MAC 对传送的消息进行完整性检查,保证通道上数据的完整性。基于 SSL 协议的通信过程,因为传递的消息中包括消息完整性检查数据(即 MAC 数据),因此,可以保证该通信是可靠的。

    SSL 协议由 SSL 记录协议、SSL 握手协议、SSL 密码变更说明协议、SSL 警告协议等组成。其架构如图所示。

    1.SSL 记录协议

   在 SSL 记录协议中,所有要传输的数据都被封装在记录中,记录是由纪录头和长度不为 0 的记录数据组成的。所有的 SSL 通信,包括握手消息、安全空白记录、应用数据等都需要使用 SSL 记录。

    2.SSL 协议记录头格式

    SSL 协议记录头格式如图所示。

    SSL 协议记录头包括的数据有记录头长度、记录数据长度、记录数据中是否有粘贴数据等。SSL 协议记录头长度既可以是 2 字节、也可以是 3 字节长。当记录头的最高位为1时,表示不含有粘贴数据,记录头长度为 2 字节,记录数据最大长度为 32 767 字节;当记录头的最高位为 0 时,则含有粘贴数据,记录头长度为 3 字节,记录数据最大长度为 16 383字节。当记录头的最高位为 0 时,次高位有特殊的含义。当次高位为 1 时,表示所传输的记录是普通记录;当次高位为 0 时,表示所传输的记录是安全空白记录。

    记录头中数据长度编码不包括数据头所占用的字节长度。记录头长度为 2 字节时记录长度的计算方法为:

    记录长度=(( byte[0]&0x7f) <<8))|byte[1]

    记录头长度为 3 字节时记录长度的计算方法为:

    记录长度=(( byte[0]&0x3f) <<8))|byte[1] 

    以上计算式中,byte[0]、byte[1]也分别表示所传输的第一、二个字节。

    另外,粘贴数据的长度为传输的第三个字节。

    3.SSL 记录数据的格式

    SSL 记录数据包含三个部分:MAC数据和实际数据和粘贴数据。

   MAC 数据用于数据完整性检查。计算 MAC 所用的散列函数由握手协议中的消息确定。若使用 MD5 算法,则 MAC 数据长度是 16 字节。MAC 数据的产生方式为:

MAC 数据= HASH(密钥、实际数据、粘贴数据、序号)

    其中,当会话的客户端发送数据时,密钥是客户的写密钥(服务器用读密钥来验证MAC 数据);而当会话的客户端接收数据时,密钥是客户的读密钥(服务器用写密钥来验证 MAC 数据)。序号是一个可以被发送和接收双方递增的计数器。每个通信方都会建立一个计数器,分别属于发送者和接收者。计数器有 32 位,计数值循环使用,每发送一个记录计数值递增一次,序号的初始值为 0。

    4.SSL 握手协议

    SSL 握手协议建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。SSL 握手的过程可以分为两个阶段,第一阶段用于建立秘密的通信信道,第二阶段用于客户验证。

    在 SSL 协议中,同时使用了对称密钥加密算法和公钥加密算法,这是为了综合利用对称密钥加密算法的高速度和公钥加密算法的安全性的优点。SSL 协议使用公钥加密算法使服务器端身份在客户端得到验证,并且传递用于会话中对数据加密的对称密钥。然后再利用对称密钥在通信过程中对收到和发送的数据进行比较快速的加密,从而减小系统开销,保证通信效率。

   SSL 支持各种加密算法。在“握手”过程中,使用 RSA 公开密钥系统。密钥交换后,可以使用多种密码,例如,RC2、RC4、IDEA、DES、3DES 及 MD5 信息摘要算法等。

    SSL 协议可以非常有效地保护通信过程。但是,如果某种攻击是利用 SSL 协议通信进行的,那么,这种攻击也会受到 SSL 协议的保护,从而使得攻击更加隐蔽,难于被发现。当然,这种攻击也能够很好地穿透防火墙、躲过入侵检测系统的检查。

    另外,SSL 在通信过程中,要进行许多加密、解密的操作,这些计算的复杂性随着密码的强度不同而不同,但是高强度的计算会增加服务器负载、增加网络带宽,从而使服务器性能下降,吞吐量也下降。

3 PGP 协议

    在信息时代里,电子邮件已经成为人们生活中的一部分,同时电子邮件的安全问题也就日益显得突出。一般来说,电子邮件在网络上的传输是不加密的。这种不加保护的邮件在网络上传输,第三者就会轻易获得通信过程中传送的信息。此外,为了防止冒名顶替,收信人需要确认邮件没有被第三者篡改,确实是发送者本人发出的,这就需要使用数字签名的一些技术。从前面的讲述可以知道,RSA 公钥密码体系非常适合用来满足上述要求。但是要直接使用 RSA 加密电子邮件,还有一些不方便的地方。

    PGP(Pretty Good Privacy)是美国人 PhilZimmermann 于 1995 年提出的一套电子邮件加密方案。它可以用来对邮件加密以防止非授权者阅读,还能对邮件加上数字签名而使收信人可以确认邮件确实是由发送方发出的。

    PGP 并不是新的加密算法或协议,它综合采用了多种加密算法,例如,对邮件内容加密采用 IDEA 算法、对于加密信息采用 RSA 公钥加密算法,还采用了用于数字签名的消息摘要算法,加密前进行压缩处理等技术手段进行邮件加密的一套软件。通过组合使用这些加密方法,把 RSA 公钥加密体系的良好加密效果和对称密钥加密体系的高速度结合起来,并且通过在数字签名和密钥认证管理机制中的巧妙设计,使得 PGP 成为一个优秀的强有力的数据加密程序。

    由于 PGP 功能强大、处理迅速、使用简便,而且它的源代码是免费的,因此,PGP 在 IT 等多个行业得到了广泛的应用,迅速普及。如今,PGP 除了用于通常的电子邮件加密,还可以用来加密重要文件,用 PGP 代替 UUencode 生成 RADIX64 格式(就是 MIME 的 BASE64 格式)的编码文件,以保证它们在网络上的安全传输,或为文件做数字签名,以防止篡改和伪造。

    1.PGP 加密的原理

   假设一个用户 A 想要发送一个加密的邮件给另一个用户 B。那么加密的过原理如图所示。


    首先,用户 A 对要发送的邮件 P 运用 MD5 散列算法进行计算,生成一个 128 位的消息摘要,有了这个消息摘要就可以检验邮件信息是否完整、有没有被篡改。然后再通过 RSA 算法,运用 A 的私钥 SKA 对消息摘要进行加密,生成消息摘要的密文 H。邮件 P 与经过加密的邮件消息摘要 H 共同构成新的报文 P1,接着对 P1 进行 ZIP 压缩,成为压缩的报文 P1.Z。再对 P1.Z 采用 IDEA 算法加密,这次加密使用一个一次性的密钥 K,并且 K 必须经过 RSA 算法使用通信的另一方 B 的公开密钥 PKB 加密,与加密后的报文 P2 一起,再经过 BASE64 编码,得到一系列 ASCII 码,作为邮件内容发送到网络上。

    用户 B 接收到 A 发来的加密的邮件后,执行解密过程:与加密过程相反,首先对邮件内容进行 BASE64 解码,再利用自己的秘密密钥 SKB,通过 RSA 算法解出 IDEA 的密钥 K。再用此密钥恢复出 P1.Z,对 P1.Z 进行解压缩后还原出 P1。接着把明文 P 和邮件信息摘要的密文 H 分离开来,并用 A 的公开密钥 PKA 解密 H 得到真正的邮件消息摘要。然后 B 自己也运用 MD5 算法对邮件明文 P 进行运算,生成一个 128 位的消息摘要。比较这两个摘要是否一致,如果一致,则表明 P 是 A 发来的邮件。

    通过上述通信过程可以看出,PGP 既可以保证邮件不被第三方窃取,又可以防止发信人抵赖和信件被途中篡改。

   由于 RSA 算法的计算量太大、速度太慢,对邮件正文这种大量数据不适合用它来加密。所以 PGP 实际上用来加密邮件正文的不是 RSA 本身,而是采用的 IDEA 加密算法。 IDEA 的加密和解密使用同一个密钥,它的主要缺点就是在公共网络环境中很难进行安全的密钥的传递,不适合 Internet 上邮件加密的需要。但 IDEA 的加密、解密速度比 RSA 快得多,所以 PGP 使用一个随机生成的密钥(每次加密都不同)运用 IDEA 算法对明文加密,然后用 RSA 算法对 IDEA 密钥加密。这样收件人同样使用 RSA 算法解密出这个随机的 IDEA 密钥,再用 IDEA 算法解密邮件本身。这样的链式加密就做到了既具有 RSA 算法的保密效果,又具有 IDEA 算法的快捷方便。这里,PGP 在每次加密邮件时所使用的 IDEA 密钥是一个随机数,而且为了增强随机性,PGP 是从用户敲击键盘的时间间隔上取得随机数种子来产生密钥的,从而更加增强了它的加密效果。

    PGP 中使用 PKZIP 算法来压缩加密前的明文。这对电子邮件而言,一方面压缩后再加密得到的密文有可能比明文更短,这就节省了网络传输的时间;另一方面,明文经过压缩,实际上相当于多经过一次变换,信息更加杂乱无章,对非法攻击的抵御能力更强。

    PGP 还可以只签名而不加密,这可以用于公开发表声明。声明人为了证实自己的身份,可以用自己的私钥签名。这样就可以让公众用其公开的公钥来验证该签名,从而确认声明人的身份。 

    2.PGP 的密钥管理机制 

    在 PGP 加密通信过程中,密钥无疑起着最为关键的作用。一个成熟的加密体系必然要有一个成熟的密钥管理机制与之相配套。PGP 对于密钥管理也提出了一套分配、使用、管理的方案。

    公钥加密体制本身就是为了解决对称密钥加密体制中的密钥分配难以保密的问题而提出的。例如,攻击者常用的手段之一就是“监听”,如果密钥是通过网络传送就很容易被拦截。PGP 中采用公钥来加密,而公钥本来就要公开,所以不存在被监听的问题。但是公钥在发布过程中仍然存在安全隐患。例如,公钥被非法篡改,这就是公钥密码体系中的一大安全隐患,因为这很难被普通用户发现。

    举例来说,假如用户 A 要向用户 B 发一封加密的邮件,那么 A 必须拥有 B 的公钥。于是 A 从公共目录中查到了 B 的公钥,并用它加密了邮件然后发给了 B。这是一个正常的过程。

    但是,在这个过程中可能出现攻击:A 和 B 都不知道,另一个用户 C 用他自己假冒B的名字生成的密钥当中的公钥替换了 B 的公钥!

    那么 A 用来发信的公钥就不是 B 的而是 C 的公钥。然而一切看来都很正常,因为 A 拿到的公钥的用户名是 B。于是 C 就可以用他手中的私钥来解密 A 发给 B 的邮件,甚至他还可以用 B 真正的公钥来转发 A 发给 B 的信,这样 A 和 B 都不会发现什么异常,而他们的通信却全部泄漏了。甚至 C 如果想改动 A 发给 B 的邮件也毫无问题。

    而且,C 还可以伪造 B 的签名给 A 或其他人发送信息,因为 A 和其他人手中的公钥是 C 伪造的,A 和其他人可以正常解密这份伪造的签名,因而以为真是来自 B 的信息。

    要防止这种情况,必须防止任何人伪造其他人的公钥。例如,通信双方直接见面并交换密钥,就可以避免得到伪造的公钥。然而当双方相隔遥远或不方便直接见面时,就难以直接交换密钥。这种情况下,PGP 是通过一种公钥介绍机制来解决这个问题的。

    继续上面的例子:如果 A 和 B 有一个共同的朋友 D,而 D 知道他手中 B 的公钥是正确的(这里假设 D 已经认证过 B 的公钥)。这样 D 就可以用他自己的私钥在 B 的公钥上签名,表示他担保这个公钥是 B 的真正的公钥,并把它发送给 A。然后 A 用 D 的公钥来验证 D 发给 A 的 B 的公钥,同样 D 也可以向 B 担保 A 的公钥。这样 D 就成为了 A 和 B 之间的公钥介绍人。

    这样 B 或 D 就可以放心地把 D 签过名的 B 的公钥列示到公共目录中,供 A 读取,没有人能够伪造 B 的公钥而不被 A 发现。这就是 PGP 从不安全的 Internet 上传递公钥的安全手段。

    不过,如何确认 D 的公钥的安全可靠性呢?对这种情况 PGP 建议通过一个大家普遍信任的人或权威部门担当认证机构角色。每个由权威认证机构签字的公钥都被认为是真实的,这样大家只要有一份认证机构的公钥就行了。由于认证机构广泛提供公钥服务,因而其公钥流传广泛,假冒其公钥是很困难的,所以认证其公钥也非常方便。

    在 PGP 中使用密钥,要注意在使用任何一个公钥之前,一定要首先认证它。无论什么情况下,都不要直接信任一个从公共渠道得来的公钥。而要使用可信的人介绍的公钥,或者自己与对方亲自认证。

    由于 PGP 能够实现数字签名、不可否认、防止篡改、防止破译等功能,所以自从 PGP 推出以来,就受到人们的普遍欢迎。目前,PGP 几乎成为最流行的公钥加密软件。随着人们通信的增加和安全意识的增强,PGP 将会得到更加广泛的应用。

猜你喜欢

转载自blog.csdn.net/hu19930613/article/details/85128823
今日推荐