标题：ipsec
简介
IPSec 是安全联网的长期方向。它通过端对端的安全性来提供主动的保护以防止专用网络与 Internet 的攻击。在通信中，只有发送方和接收方才是唯一必须了解 IPSec 保护的计算机。在 Windows 2000、Windows XP 和 Windows Server 2003 家族中，IPSec 提供了一种能力，以保护工作组、局域网计算机、域客户端和服务器、分支机构（物理上为远程机构）、Extranet 以及漫游客户端之间的通信。
作用目标
1、保护 IP 数据包的内容。2、通过数据包筛选及受信任通讯的实施来防御网络攻击。 
这两个目标都是通过使用基于加密的保护服务、安全协议与动态密钥管理来实现的。这个基础为专用网络计算机、域、站点、远程站点、Extranet 和拨号用户之间的通信提供了既有力又灵活的保护。它甚至可以用来阻碍特定通讯类型的接收和发送。3、其中以接收和发送最为重要。
安全结构
安全协议(1)AH(AuthenticationHeader) 协议。
它用来向 IP通信提供数据完整性和身份验证,同时可以提供抗重播服务。  AH帧格式
在 IPv6 中协议采用 AH 后, 因为在主机端设置了一个基于算法独立交换的秘密钥匙, 非法潜入的现象可得到有效防止, 秘密钥匙由客户和服务商共同设置。在传送每个数据包时,IPv6 认证根据这个秘密钥匙和数据包产生一个检验项。在数据接收端重新运行该检验项并进行比较,从而保证了对数据包来源的确认以及数据包不被非法修改。
(2)ESP(EncapsulatedSecurityPayload) 协议。
它提供 IP层加密保证和验证数据源以对付网络上的监听。因为 AH虽然可以保护通信免受窜改, 但并不对数据进行变形转换, 数据对于黑客而言仍然是清晰的。为了有效地保证数据传输安全, 在IPv6 中有另外一个报头 ESP,进一步提供数据保密性并防止窜改。  ESP帧格式[1]2.安全联盟 SA安全联盟 SA,记录每条 IP安全通路的策略和策略参数。安全联盟是 IPSec 的基础, 是通信双方建立的一种协定,决定了用来保护数据包的协议、转码方式、密钥以及密钥有效期等。AH和 ESP都要用到安全联盟,IKE的一个主要功能就是建立和维护安全联盟。  IPSec安全机制结构[1]密钥管理协议密钥管理协议 ISAKMP, 提供共享安全信息。Internet密钥管理协议被定义在应用层,IETF规定了 Internet安全协议和 ISAKMP(Internet Security Association and Key Management Protocol) 来实现 IPSec 的密钥管理,为身份认证的 SA 设置以及密钥交换技术　
传输模式
隧道（tunnel）模式：用户的整个IP数据包被用来计算AH或ESP头，AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中。通常，隧道模式应用在两个安全网关之间的通讯。
传输（transport）模式：只是传输层数据被用来计算AH或ESP头，AH或ESP头以及ESP加密的用户数据被放置在原IP包头后面。通常，传输模式应用在两台主机之间的通讯，或一台主机和一个安全网关之间的通讯。定义了一个通用格式。
常见问题
IPSec 基于端对端的安全模式，在源 IP 和目标 IP 地址之间建立信任和安全性。考虑认为 IP 地址本身没有必要具有标识，但 IP 地址后面的系统必须有一个通过身份验证程序验证过的标识。只有发送和接收的计算机需要知道通讯是安全的。每台计算机都假定进行通讯的媒体不安全，因此在各自的终端上实施安全设置。除非两台计算机之间正在进行防火墙类型的数据包筛选或网络地址转换，否则仅从源向目标路由数据的计算机不要求支持 IPSec。该模式允许为下列企业方案成功部署 IPSec：
局域网 (LAN)：客户端/服务器和对等网络
广域网 (WAN)：路由器到路由器和网关到网关 
远程访问：拨号客户机和从专用网络访问 Internet 
通常，两端都需要 IPSec 配置（称为 IPSec 策略）来设置选项与安全设置，以允许两个系统对如何保护它们之间的通讯达成协议。Windows 2000、Windows XP 和 Windows Server 2003 家族实施 IPSec 是基于“Internet 工程任务组 (IETF)”IPSec 工作组开发的业界标准。IPSec 相关服务部分是由 Microsoft 与 Cisco Systems, Inc. 共同开发的。
IPSec 协议不是一个单独的协议，它给出了应用于IP层上网络数据安全的一整套体系结构，包括网络认证协议 Authentication Header（AH）、封装安全载荷协议Encapsulating Security Payload（ESP）、密钥管理协议Internet Key Exchange （IKE）和用于网络认证及加密的一些算法等。这些协议用于提供数据认证、数据完整性和加密性三种保护形式。AH和ESP都可以提供认证服务，但AH提供的认证服务要强于ESP。而IKE主要是对密钥进行交换管理，对算法、协议和密钥3个方面进行协商。
IPSec 规定了如何在对等层之间选择安全协议、确定安全算法和密钥交换，向上提供了访问控制、数据源认证、数据加密等网络安全服务。一、安全特性IPSec的安全特性主要有：
·不可否认性
"不可否认性"可以证实消息发送方是唯一可能的发送者，发送者不能否认发送过消息。"不可否认性"是采用公钥技术的一个特征，当使用公钥技术时，发送方用私钥产生一个数字签名随消息一起发送，接收方用发送者的公钥来验证数字签名。由于在理论上只有发送者才唯一拥有私钥，也只有发送者才可能产生该数字签名，所以只要数字签名通过验证，发送者就不能否认曾发送过该消息。但"不可否认性"不是基于认证的共享密钥技术的特征，因为在基于认证的共享密钥技术中，发送方和接收方掌握相同的密钥。
·反重播性
"反重播"确保每个IP包的唯一性，保证信息万一被截取复制后，不能再被重新利用、重新传输回目的地址。该特性可以防止攻击者截取破译信息后，再用相同的信息包冒取非法访问权（即使这种冒取行为发生在数月之后）。
·数据完整性
防止传输过程中数据被篡改，确保发出数据和接收数据的一致性。IPSec利用Hash函数为每个数据包产生一个加密检查和，接收方在打开包前先计算检查和，若包遭篡改导致检查和不相符，数据包即被丢弃。
·数据可靠性（加密）
在传输前，对数据进行加密，可以保证在传输过程中，即使数据包遭截取，信息也无法被读。该特性在IPSec中为可选项，与IPSec策略的具体设置相关。
·认证
数据源发送信任状，由接收方验证信任状的合法性，只有通过认证的系统才可以建立通信连接。公钥认证一个架构良好的公钥体系，在信任状的传递中不造成任何信息外泄，能解决很多安全问题。IPSec与特定的公钥体系相结合，可以提供基于电子证书的认证。公钥证书认证在Windows 2000中，适用于对非Windows 2000主机、独立主机，非信任域成员的客户机、或者不运行Kerberos v5认证协议的主机进行身份认证。预置共享密钥IPSec也可以使用预置共享密钥进行认证。预共享意味着通信双方必须在IPSec策略设置中就共享的密钥达成一致。之后在安全协商过程中，信息在传输前使用共享密钥加密，接收端使用同样的密钥解密，如果接收方能够解密，即被认为可以通过认证。但在Windows 2000 IPSec策略中，这种认证方式被认为不够安全而一般不推荐使用。四、公钥加密IPSec的公钥加密用于身份认证和密钥交换。公钥加密，也被称为"不对称加密法"，即加解密过程需要两把不同的密钥，一把用来产生数字签名和加密数据，另一把用来验证数字签名和对数据进行解密。
使用公钥加密法，每个用户拥有一个密钥对，其中私钥仅为其个人所知，公钥则可分发给任意需要与之进行加密通信的人。例如：A想要发送加密信息给B，则A需要用B的公钥加密信息，之后只有B才能用他的私钥对该加密信息进行解密。虽然密钥对中两把钥匙彼此相关，但要想从其中一把来推导出另一把，以目前计算机的运算能力来看，这种做法几乎完全不现实。因此，在这种加密法中，公钥可以广为分发，而私钥则需要仔细地妥善保管。Hash函数Hash信息验证码HMAC（Hash message authentication codes）验证接收消息和发送消息的完全一致性（完整性）。这在数据交换中非常关键，尤其当传输媒介如公共网络中不提供安全保证时更显其重要性。
HMAC结合hash算法和共享密钥提供完整性。Hash散列通常也被当成是数字签名，但这种说法不够准确，两者的区别在于：Hash散列使用共享密钥，而数字签名基于公钥技术。hash算法也称为消息摘要或单向转换。称它为单向转换是因为：
1）双方必须在通信的两个端头处各自执行Hash函数计算；
2）使用Hash函数很容易从消息计算出消息摘要，但其逆向反演过程以目前计算机的运算能力几乎不可实现。
Hash散列本身就是所谓加密检查和或消息完整性编码MIC（Message Integrity Code），通信双方必须各自执行函数计算来验证消息。举例来说，发送方首先使用HMAC算法和共享密钥计算消息检查和，然后将计算结果A封装进数据包中一起发送；接收方再对所接收的消息执行HMAC计算得出结果B，并将B与A进行比较。如果消息在传输中遭篡改致使B与A不一致，接收方丢弃该数据包。
有两种最常用的hash函数：
·HMAC-MD5 MD5（消息摘要5）基于RFC1321。MD5对MD4做了改进，计算速度比MD4稍慢，但安全性能得到了进一步改善。MD5在计算中使用了64个32位常数，最终生成一个128位的完整性检查和。 
·HMAC-SHA 安全Hash算法定义在NIST FIPS 180-1，其算法以MD5为原型。 SHA在计算中使用了79个32位常数，最终产生一个160位完整性检查和。SHA检查和长度比MD5更长，因此安全性也更高。数据可靠性IPSec使用的数据加密算法是DES--Data Encryption Standard（数据加密标准）。DES密钥长度为56位，在形式上是一个64位数。DES以64位（8字节）为分组对数据加密，每64位明文，经过16轮置换生成64位密文，其中每字节有1位用于奇偶校验，所以实际有效密钥长度是56位。 IPSec还支持3DES算法，3DES可提供更高的安全性，但相应地，计算速度更慢。七、密钥管理·动态密钥更新
IPSec策略使用"动态密钥更新"法来决定在一次通信中，新密钥产生的频率。动态密钥指在通信过程中，数据流被划分成一个个"数据块"，每一个"数据块"都使用不同的密钥加密，这可以保证万一攻击者中途截取了部分通信数据流和相应的密钥后，也不会危及到所有其余的通信信息的安全。动态密钥更新服务由Internet密钥交换IKE（Internet Key Exchange）提供，详见IKE介绍部分。
IPSec策略允许专家级用户自定义密钥生命周期。如果该值没有设置，则按缺省时间间隔自动生成新密钥。
·密钥长度
密钥长度每增加一位，可能的密钥数就会增加一倍，相应地，破解密钥的难度也会随之成指数级加大。IPSec策略提供多种加密算法，可生成多种长度不等的密钥，用户可根据不同的安全需求加以选择。
·Diffie-Hellman算法
要启动安全通讯，通信两端必须首先得到相同的共享密钥（主密钥），但共享密钥不能通过网络相互发送，因为这种做法极易泄密。
Diffie-Hellman算法是用于密钥交换的最早最安全的算法之一。DH算法的基本工作原理是：通信双方公开或半公开交换一些准备用来生成密钥的"材料数据"，在彼此交换过密钥生成"材料"后，两端可以各自生成出完全一样的共享密钥。在任何时候，双方都绝不交换真正的密钥。
通信双方交换的密钥生成"材料"，长度不等，"材料"长度越长，所生成的密钥强度也就越高，密钥破译就越困难。 除进行密钥交换外，IPSec还使用DH算法生成所有其他加密密钥。
AH报头字段包括： 
·Next Header（下一个报头）： 识别下一个使用IP协议号的报头，例如，Next Header值等于"6"，表示紧接其后的是TCP报头。 
·Length（长度）： AH报头长度。 
·Security Parameters Index (SPI，安全参数索引)： 这是一个为数据报识别安全关联的 32 位伪随机值。SPI 值 0 被保留来表明"没有安全关联存在"。 
·Sequence Number（序列号）：从1开始的32位单增序列号，不允许重复，唯一地标识了每一个发送数据包，为安全关联提供反重播保护。接收端校验序列号为该字段值的数据包是否已经被接收过，若是，则拒收该数据包。 
·Authentication Data（AD，认证数据）： 包含完整性检查和。接收端接收数据包后，首先执行hash计算，再与发送端所计算的该字段值比较，若两者相等，表示数据完整，若在传输过程中数据遭修改，两个计算结果不一致，则丢弃该数据包。
数据包
如图二所示，AH报头插在IP报头之后，TCP，UDP，或者ICMP等上层协议报头之前。一般AH为整个数据包提供完整性检查，但如果IP报头中包含"生存期（Time To Live）"或"服务类型（Type of Service）"等值可变字段，则在进行完整性检查时应将这些值可变字段去除。 
图2 AH为整个数据包提供完整性检查协议结构ESP（Encapsulating Security Payload）为IP数据包提供完整性检查、认证和加密，可以看作是"超级 AH"， 因为它提供机密性并可防止篡改。ESP服务依据建立的安全关联（SA）是可选的。然而，也有一些限制： 
·完整性检查和认证一起进行。 
·仅当与完整性检查和认证一起时，"重播（Replay）"保护才是可选的。 
·"重播"保护只能由接收方选择。 
ESP的加密服务是可选的，但如果启用加密，则也就同时选择了完整性检查和认证。因为如果仅使用加密，入侵者就可能伪造包以发动密码分析攻击。 
ESP可以单独使用，也可以和AH结合使用。一般ESP不对整个数据包加密，而是只加密IP包的有效载荷部分，不包括IP头。但在端对端的隧道通信中，ESP需要对整个数据包加密。 
如图三所示，ESP报头插在IP报头之后，TCP或UDP等传输层协议报头之前。ESP由IP协议号"50"标识。 
图3 ESP报头、报尾和认证报尾 
ESP报头字段包括： 
·Security Parameters Index (SPI，安全参数索引)：为数据包识别安全关联。 
·Sequence Number（序列号）：从1开始的32位单增序列号，不允许重复，唯一地标识了每一个发送数据包，为安全关联提供反重播保护。接收端校验序列号为该字段值的数据包是否已经被接收过，若是，则拒收该数据包。 ESP报尾字段包括：
·Padding（扩展位）：0-255个字节。DH算法要求数据长度（以位为单位）模512为448，若应用数据长度不足，则用扩展位填充。 
·Padding Length（扩展位长度）：接收端根据该字段长度去除数据中扩展位。
·Next Header（下一个报头）：识别下一个使用IP协议号的报头，如TCP或UDP。 
ESP认证报尾字段： 
·Authentication Data（AD，认证数据）： 包含完整性检查和。完整性检查部分包括ESP报头、有效载荷（应用程序数据）和ESP报尾。见图四。
图4 ESP的加密部分和完整性检查部分 
如上图所示，ESP报头的位置在IP报头之后，TCP，UDP，或者ICMP等传输层协议报头之前。如果已经有其他IPSec协议使用，则ESP报头应插在其他任何IPSec协议报头之前。ESP认证报尾的完整性检查部分包括ESP报头、传输层协议报头，应用数据和ESP报尾，但不包括IP报头，因此ESP不能保证IP报头不被篡改。ESP加密部分包括上层传输协议信息、数据和ESP报尾。ESP和AH以上介绍的是传输模式下的AH协议和ESP协议，ESP隧道模式和AH隧道模式与传输模式略有不同。 
在隧道模式下，整个原数据包被当作有效载荷封装了起来，外面附上新的IP报头。其中"内部"IP报头（原IP报头）指定最终的信源和信宿地址，而"外部"IP报头（新IP报头）中包含的常常是做中间处理的安全网关地址。 
与传输模式不同，在隧道模式中，原IP地址被当作有效载荷的一部分受到IPSec的安全保护，另外，通过对数据加密，还可以将数据包目的地址隐藏起来，这样更有助于保护端对端隧道通信中数据的安全性。 
ESP隧道模式中签名部分（完整性检查和认证部分）和加密部分分别如图所示。ESP的签名不包括新IP头。 
图5 ESP隧道模式
下图标示出了AH隧道模式中的签名部分。AH隧道模式为整个数据包提供完整性检查和认证，认证功能优于ESP。但在隧道技术中，AH协议很少单独实现，通常与ESP协议组合使用。
图6 AH隧道模式
攻击防御
IPv6提供了更广阔的地址空间，但就安全性而言，IPv6并不比IPv4安全，甚至是某些攻击手段的天然土壤，比如DDos。攻击方式IPsec是IPv6引以为傲的安全策略，下面我们说下这种策略带来的问题。最直接的，IPsec是端到端的加密，中间传输过程是透明的，如果窃听者没有对应密钥，那么就无法解开数据内容；所以像路由防火墙等基于内容过滤的安全策略将无法存在；而如果通过某种方式，使得路由和防火墙能够解开数据包，那么IPsec的安全性也就不存在了。
更广阔的地址空间导致更容易伪造源地址，也就更难以追踪。
利用IPv6的自定义扩展头，自定义路由路径，就可以定义复杂的路由路径，比如环路径等，进一步增加追踪难度并消耗更多路由资源。自定义扩展头，也导致更复杂的安全过滤。还可以使用极大的扩展头进行称为畸形炸弹的DDos攻击。防御策略目前主要防御思路有基于统计特征的防御、基于Netfilter的防御等。