IPSec(IP Security)是IETF制定的为保证在Internet上传送数据的安全保密性能的三层隧道加密协议。IPSec在网络层对IP报文提供安全服务。IPSec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、 私有性和真实性,以及如何加密数据包。使用IPsec,数据就可以安全地在公网上传输。IPSec技术也可以实现数据传输双方的身份验证,避免黑客伪装成网络中的合法用户攻击网络资源。IPSec只能在IP网络中使用。
1.IPSEC 特性
IPSec通过以下技术实现在机密性、完整性、抗抵赖和身份鉴别方面提高端到端的安全性:
1)通过使用加密技术防止数据被窃听。 对称+非对称 数字信封 ,非对称使用DH
2)通过数据完整性验证防止数据被破坏、篡改。 HMAC 哈希算法
3)通过认证机制实现通信双方身份确认,来防止通信数据被截获和回放。 随机数+IV+数字信封
IPSec技术还定义了:
- 何种流量需要被保护。 使用ACL
- 数据被保护的机制。 使用AH、ESP协议
- 数据的封装过程。 使用DH 算法进行交换
2.IPSEC和IKE的关系
IKE(Internet Key Exchange)为IPSec提供了自动协商交换密钥、建立安全联盟的服务, 能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。
IKE是UDP之上的一个应用层协议,端口号500,是IPSEC的信令协议。
IKE为IPSEC协商建立安全联盟,并把建立的参数及生成的密钥交给IPSEC。
IPSEC使用IKE建立的安全联盟对IP报文加密或验证处理。
IPSEC处理做为IP层的一部分,在IP层对报文进行处理。AH协议和ESP协议有自己的协议号,分别是51和50。
3.IPSec两种工作模式
3.1.传输模式
传输(transport):只是传输层数据被用来计算AH或ESP头,AH或ESP头和被加密的传输层数据被放置在原IP包头后面。(数据包,根据OSI七层模型,一层层封装,从最外层依次为MAC-IP-TCP/UDP-数据)
传输模式一个最显著的特点就是:在整个IPSec的传输过程中,IP包头并没有被封装进去,这就意味着从源端到目的端数据始终使用原有的IP地址进行通信。而传输的实际数据载荷被封装在IPSec报文中。对于大多数IPSec传输而言, IPSec的报文封装过程就是数据的加密过程,因此,攻击者截获数据后将无法破解数据内容,但却可以清晰地知道通信双方的地址信息。
由于传输模式封装结构相对简单(每个数据报文较隧道模式封装结构节省20字节),因此传输效率较高,多用于通信双方在同一个局域网内的情况。例如:网络管理员通过网管主机登录公司内网的服务器进行维护管理,就可以选用传输模式IPSec对其管理流量进行加密。
总结:对传输层数据进行处理(不对IP包头处理),IP包头暴露在外,存在一定风险。适合主机对主机的访问。
3.2.隧道模式
隧道(tunnel):用户的整个IP数据包被用来计算AH或ESP头,且被加密,对整个网络层数据包进行处理。AH或ESP头和加密用户数据被封装在一个新的IP数据包中。
隧道模式中, 将整个三层数据报文封装在IPSec数据内,再为封装后的数据报文添加新的IP包头。在AH、ESP处理之后再封装了一个外网IP头,主要用于Site-to-Site的应用场景
总结:对网络层整个包进行处理,添加新的IP包头。适合站点对站点。
4.IPSec的组成
IPSec包括AH(协议号51)和ESP(协议号50)两个协议。
1)AH(Authentication Header)报文验证头协议
主要提供的功能有数据源验证、数据完整性校验和防报文重放功能,可选择的散列算法有MD5、SHA1等。AH插到标准IP包头后面,它保证数据包的完整性和真实性,防止黑客截断数据包或向网络中插入伪造的数据包。AH采用了hash算法来对数据包进行保护。AH没有对用户数据进行加密。
在传输模式下,AH协议验证IP报文的数据部分和IP头中的不变部分。
在隧道模式下, AH协议验证全部的内部IP报文和外部IP头中的不变部分。
AH(认证头协议)在RFC 2402中有明确定义,包括数据完整性、验证和保护数据回放攻击。
AH协议保护整个数据报文,但易变的字段除外,如IP包头中的TTL和TOS字段。
AH协议只能实现验证功能,而并未提供任何形式的数据加密。
AH模式无法与NAT一起运行,因为AH对包括IP地址在内的整个IP包进行hash运算,而NAT会改变IP地址,从而破坏AH的hash值。
2)ESP(Encapsulating Security Payload)报文安全封装协议
ESP协议将用户数据进行加密后封装到IP包中,以保证数据的私有性。同时作为可选项,用户可以选择使用带密钥的哈希算法保证报文的完整性和真实性。ESP的隧道模式提供了对于报文路径信息的隐藏。
在ESP协议方式下,可以通过散列算法获得验证数据字段,可选的算法同样是MD5和SHA1。与AH协议不同的是,在ESP协议中还可以选择加密算法,一般常见的是DES、3DES等加密算法。
ESP协议使用32比特序列号结合防重放窗口和报文验证,防御重放攻击。
在传输模式下,ESP协议对IP报文的有效数据进行加密(可附加验证)。
在隧道模式下,ESP协议对整个内部IP报文进行加密(可附加验证)。
另外,ESP协议加密功能的实现与采用何种连接模式相关。
ESP(Encapsulating Security Payload)是报文安全封装协议
ESP将需要保护的用户数据进行加密后再封装到IP包中,保证数据的完整性、真实性和私有性。 可选择的加密算法有DES,3DES等。
3)AH和ESP可协同工作
AH(Authentication Header)协议是认证头协议,AH协议通过使用带密钥的验证算法,对受保护的数据计算摘要。通过使用数据完整性检查,可判定数据包在传输过程中是否被修改;通过使用认证机制,终端系统或网络设备可对用户或应用进行认证,过滤通信流;认证机制还可防止地址欺骗攻击及重放攻击。
在使用AH协议时,AH协议首先在原数据前生成一个AH报文头,报文头中包括一个递增的序列号(Sequence number)与验证字段(空)、安全参数索引(SPI)等。AH协议将对新的数据包进行离散运算,生成一个验证字段(authentication data),填入AH头的验证字段。
5.IPSEC使用的算法
DH算法的使用:
使用公钥和私钥两个不同的秘钥进行加密和解密。用一个秘钥加密的数据仅能被另一个秘钥解密,且不能从一个秘钥推出另一个秘钥。常用的非对称加密算法有:RSA(使用三位数学家名字的首字母来命名)、DSA(digital signature algorithm,数字签名算法)、DH(diffie-hellman,迪菲赫尔曼)。前两种常用于验证功能,而DH一般被用来实现ipsec中的internet秘钥交换(IKE)协议。
DH(diffie-hellman,迪菲赫尔曼)算法的原理与传统意义上的非对称加密算法的区别:通信双方交换公钥后,会用自己的秘钥和对方的公钥通过DH算法计算出一个共享秘钥,然后双方会使用这个共享秘钥加密传输数据。从算法原理看,可以说DH算法已经将对称加密算法和非对称加密算法综合在一起。
DH算法支持可变的秘钥长度,由于公钥和私钥的长度不同,因此通过DH算法计算出的共享密钥的有效长度也就不同。这些都是通过DH算法的密钥组定义的。Cisco的路由器只支持DH组1、2和5。其中DH组1的有效秘钥长度为768,DH组2的有效密钥长度为1024,DH组5的有效密钥长度为1536。密钥的有效长度越长,安全性也就越强。同时CPU的资源占用率也就越高。因此,选择合适的DH组要从网络的安全需求和设备本身的性能两个方面考虑。
密钥的产生是通过DH交换技术,DH交换(Diffie-Hellman Exchange)过程如下:
(1) 须进行DH交换的双方各自产生一个随机数,如a和b;
(2) 使用双方确认的共享的公开的两个参数:底数g和模数p各自用随机数a,b进行幂模运算,得到结果c和d,计算公式如下:
c =g a mod p, d=g b modp;
(3) 双方进行交换下图所示的信息;
(4) 进一步计算,得到DH公有值:
da mod p = c b mod p = g a b mod p
此公式可以从数学上证明。
若网络上的第三方截获了双方的模c和d,那么要计算出DH公有值gab mod p 还需要获得a或b,a和b始终没有直接在网络上传输过,如果想由模c和d计算a或b就需要进行离散对数运算,而p为素数,当p足够大时(一般为768位以上的二进制数),数学上已经证明,其计算复杂度非常高从而认为是不可实现的。所以,DH交换技术可以保证双方能够安全地获得公有信息。
6.IKE协议
IKE(Internet Key Exchange)因特网密钥交换协议是IPSEC的信令协议,为IPSec提供了自动协商交换密钥、建立安全联盟的服务,能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。
使用UDP的500端口。
IKE是非常通用的协议,不仅可为IPsec协商安全关联,而且可以为SNMPv3、RIPv2、OSPFv2等任何要求保密的协议协商安全参数。
IKE属于一种混合型协议,由Internet安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议OAKLEY与SKEME组成。IKE创建在由ISAKMP定义的框架上,沿用了OAKLEY的密钥交换模式以及SKEME的共享和密钥更新技术,还定义了它自己的两种密钥交换方式。
IKE不是在网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥,并且即使第三者截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。IKE具有一套自保护机制,可以在不安全的网络上安全的分发密钥,验证身份,建立IPSEC安全联盟。
1)IKE的组件
ISAKMP:定义了信息交换的体系结构,也就是格式SKEME:实现公钥加密认证的机制
Oakley:提供在两个IPsec对等体间达成相同加密密钥的基本模式的机制
安全联盟(SecurityAssociation,简称SA)是两个通信实体经协商建立起来的一种协定,它们决定了用来保护数据包安全的IPsec协议、转码方式、密钥、以及密钥的有效存在时间等等。
2)IKE建立的两个阶段
IKE使用了两个阶段的ISAKMP
第一阶段,协商创建一个通信信道(IKE SA),并对该信道进行验证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源验证服务;
第二阶段:使用已建立的IKE SA建立IPSec SA
第一个隧道ISAKMP SA是用于保护后续的再次协商,第二次隧道协商的参数是在完全加密的环境下进行的,之后得到的IPsecSA才真正为数据做加密!第一阶段策略集面向对象是第二阶段的协商包,第二阶段的转换集面向对象是最终的数据包。
IKE会构建一个SA数据库(SADB),由它来维护IPsec协议,用来保障数据包安全。
SA是单向的:如果两个主机(比如A和B)正在通过ESP进行安全通信,那么主机A就需要有一个SA,即SA(OUT),用来处理外发的数据包,另外还需要有一个不同的SA,即SA(IN)用来处理进入的数据包。主机A的SA(OUT)和主机B的SA(IN)将共享相同的加密参数(比如密钥)。
SA要根据协议来区分:如果两个主机间同时使用ESP和AH,对于ESP和AH会生成不同的SA。 SA分为两种:IKE(ISAKMP)SA 协商对IKE数据流进行加密以及对对等体进行验证的算法(对密钥的加密和peer的认证)IPsec SA 协商对对等体之间的IP数据流进行加密的算法。
SA分为两种:
IKE(ISAKMP)SA:协商对IKE数据流进行加密以及对对等体进行验证的算法(对密钥的加密和peer的认证)
IPsec SA 协商对对等体之间的IP数据流进行加密的算法
对等体之间的IKE SA只能有一个,对等体之间的IPsec SA可以有多个
7.IPSEC建立过程
1)第一阶段:建立ISAKMPSA协商
交换信息包括:
- 对等体之间采用何种方式做认证,是预共享密钥还是数字证书。
- 双方使用哪种加密算法(DES、3DES)
- 双方使用哪种HMAC方式,是MD5还是SHA
- 双方使用哪种Diffie-Hellman密钥组
- 使用哪种协商模式(主模式或主动模式)
- 协商SA的生存期。
IKE协商(第一阶段)过程中包含三对消息:
a)SA交换,是协商确认有关安全策略的过程;
b)密钥交换,交换Diffie-Hellman公共值和辅助数据(如:随机数),加密物在这个阶段产生;
c)ID信息和验证数据交换,进行身份验证和对整个SA交换进行验证。
主模式交换提供身份保护机制,经过三个步骤,共交换六条信息。三个步骤分布是策略协商交换、Diffie-Hellman共享值、nonce交换以及身份验证交换。
在主模式中,这三个任务是通过六个数据报文完成的:前两个数据包用于协商对等体间的管理连接使用何种安全策略(交换ISAKMP/IKEc传输集);中间的两个数据包通过DH算法产生并交换加密算法和HMAC功能所需的秘钥,最后两个数据包使用预共享秘钥等方式执行对等体间的身份验证。这里需要注意的是,前四个报文为明文传输,从第5个数据报文开始为密文传输,而前四个数据包通过各种算法最终产生的秘钥用于第5、地6个数据包及后续数据的加密。
野蛮模式交换分为三个步骤,但只交换三条信息,头两条消息协商策略、交换Diffile-Hellman公开值表要的辅助信息以及身份信息;第二条消息认证响应方;第三条消息认证发起,并为发起方提供在场的证据。
a)交换ISAKMP/IKE传输集
* ISAKMP/IKE传输集就是一组用来保护管理连接的安全措施,有些书籍称之为IKE策略或ISAKMP策略,它主要包括以下几个方面。
* 加密算法:DES,3DES或AES。
* HMAC功能:MD5或SHA-1。
* 设备验证的类型:预共享秘钥(也可以使用RSA签名等方法)。
* Diffie-Hellman秘钥组:cisco支持1、2、5、7(cisco的路由器不支持秘钥组7)。
* 管理连接的生存周期。
设备可能会有不止一个传输集,如果设备发起来接,它会将传输集列表(包括所有传输集)发送到远端对等体设备进行依次对比,直到找到匹配的结果。如果对比所有传输集后没有发现匹配的传输集,管理连接将无法建立,ipsec连接失败。例如,两端设备都只有一个传输集,且一端配置DES加密算法,另一端配置了3DES加密算法,就会导致IPSEC建立失败。如果给其另一端多配置一个传输集使用DES算法,对等体会自动找到与之匹配的传输集,管理连接便会建立起来。
b)通过DH算法实现秘钥交换
第一步只是协商管理连接的安全策略,而共享秘钥的产生与交换就要通过Diffie-Hellman来实现。
DH算法属于非对称加密算法,因此它将产生公钥和私钥对的组合,且彼此共享公钥。对等体用对方的公钥和自己的私钥通过一种功能运算产生一个安全的共享秘钥,即使有人截获数据,也会因为没有私钥而无法对出共享秘钥。
c)实现设备之间的身份验证
设备身份验证时最常使用的方法就是预共享秘钥,即在对等体之间通过带外的方式共享秘钥,并存储在设备的本地。设备验证的过程可以通过加密算法或HMAC功能两种方法实现,而加密算法很少用于身份验证,多数情况都会通过HMAC功能实现。
ISA/KMP/IKE阶段1相关配置命令
a)配置安全策略
ISAKMP/IKE策略包含以下参数:策略的序列号、加密算法、验证方法、DH组、生存周期。配置命令如下。(用于加密和验证阶段1第5、6个数据包)
Router(config)# crypto isakmp policy { 1-10000 } #建立ISAKMP/IKE管理连接策略,序列号越低,优先级越高
Router(config-isakmp)# encryption { des | 3des | aes } #指定加密算法
Router(config-isakmp)# hash { sha | md5 } #指定验证过程采用HMAC的验证功能
Router(config-isakmp)# authentication pre-share #采用预共享密钥方式进行身份验证
Router(config-isakmp)# group { 1 | 2 | 5 } #指定DH算法的密钥长度,默认为1,组号越大,算法越安全,占用设备资源越多
Router(config-isakmp)# lifetime 86400 #指定管理连接的生存周期,默认86400s(24小时)
Router# show crypto isakmp policy #查看上述配置
b)配置预共享秘钥
Router(config)# crypto isakmp key { 0 | 6 } keystring address peer-address {subnet_mask}
参数解释:
0表示秘钥为明文,6表示秘钥被加密
Keystring表示秘钥的具体内容
Peer-address表示对端与之共享秘钥的对等体设备地址
Subnet_mask:这里为可选命令,如果没有指定,默认将使用255.255.255.255作为掩码
Router# show crypto isakmp key #查看密钥,秘钥处于明文和密文时,命令显示内容的差异
为了增强安全性,在IOS12.3(2)T版本中,增加选项来加密秘钥,但要求设备的IOS镜像必须支持AES加密:
Router(config)#key config-key password-encrypt
New key: #输入的秘钥至少为8个字母
Confirm key: #确认密钥
Router(config)#password encryption aes
2)建立IPsecSA协商
具体协商内容包括:
- 双方使用哪种封装技术,AH还是ESP
- 双方使用哪种加密算法
- 双方使用哪种HMAC方式,是MD5还是SHA
- 使用哪种传输模式,是隧道模式还是传输模式
通过三条消息建立IPSec SA:
- 头两条消息协商IPSec SA的各项参数值,并生成IPSec使用的密钥;
- 第二条消息为响应方提供在场的证据;
- 第三条消息为发现方提供在场的证据。
ISAKMP/IKE阶段2主要是在两个ipsec对等体间建立数据连接,其主要完成以下任务:
- 定义对等体间需要保护何种流量。
- 定义用来保护数据的安全协议。
- 定义传输模式。
- 定义数据连接的生存周期及秘钥刷新的方式。
其中,ipsec对等体一般是通过ACL来匹配那些需要加密传输的流量。
ISAKMP/IKE阶段2的建立程过
a)安全关联(sa)
Ipsec需要在两个对等体之间建立一条逻辑连接,这就要使用一个被称为安全关联的信令协议,这是因为ipsec需要无连接的IP协议在安全运行之前要成为面向连接的协议。SA的连接是在源点和终点之间的单向连接,如果需要双向连接,就需要两个SA连接,每个方向一个。SA连接由三个要素定义。
- 安全参数索引(SPI):用于唯一表示每条SA连接。
- 安全协议的类型:IPSEC定义了两种安全协议,即AH和ESP。
- 目的IP地址。
ISAKMP/IKE阶段2具有这种特性,即ISAKMP/IKE的数据连接实际是通过两个单向连接建立的,而两个连接采用的加密或者认证方式都是相同的。这就使ISAKMP/IKE阶段2的这个特性不易被观察到。
ISAKMP/IKE阶段2的配置命令
ISAKMP/IKE阶段2的配置过程有三个部分组成。
a)配置Crypto ACL
定义何种流量需要被保护的一种方法就是建立一个crypto ACL,通过ACL匹配ipsec ***流量,其中,permit语句指定了需要被保护的流量,而deny语句定义了不需要保护的流量。通常情况,两端对等体设备上的crypto ACL互为镜像,否则阶段2的连接建立就会失败。配置命令如下:
Router(config)# access-list number{ deny | permit } protocol source mac destination mac
b)配置阶段2的传输集
在ipsec对等体之间可以配置多个数据连接的传输集,必须保证两端至少有一对匹配的传输集,这样ISAKMP/IKE阶段2的数据SA连接才能协商成功。设备的传输集由设备性能决定,如果所有对等体设备的性能相近,则共同使用一种传输集即可,如果设备间性能差异较为明显,通常就需要多个传输集了。配置如下。
Router(config)# crypto ipsec transform-set transform_set_name transform1[transform2[transform3]
参数解释:
Transform_set_name:为传输集名称,该名称具有唯一性,不能与任何其他传输集相同
Transform1:传输集选项,参考下表:
Router(cfg-crypto-tran)# mode { tunnel | transport } #定义传输模式,默认为隧道模式
如果在数据连接建立之后修改传输集的配置,并不会影响现有的SA设置,只有连接的生存周期到期,SA才会重新建立连接或者SA被手动清除(通过clear crypto sa或clear crypto ipsec sa命令)。
c)配置crypto map
Crypto map的功能就是将所有的信息组织在一起构建ipsec会话。通常路由器的接口上只对应一个crypto map,一台路由器可以在多个接口上实现流量保护,这时可能就需要多个crypto map了。
Crypto map有两种类型:静态的crypto map和动态的crypto。在构建L2L会话时通常会使用静态的。
Router(config)# crypto map map_name seq_num ipsec-isakmp #seq_num为map序列号,范围1-65535,值越小,优先级越高
Router(config-crypto-m)# match address ACL_name_or_num #调用ACL的名字或编号
Router(config-crypto-m)# set peer { hostname| IP_address} #指定对等体设备,即配置的设备与谁建立连接
Router(config-crypto-m)# set transform-set transform_set_name1 #指定传输集的名称,最多可以列出六个传输集的名称
Router(config-crypto-m)# set pfs [ group1 | group2 | group5 ]
Router(config-crypto-m)# set security-association lifetime {seconds seconds| kilobytes kilobytes}
Router(config-crypto-m)# set security-association idle-time seconds
命令解释:
* Set PFS:(PFS:perfect forward secrecy,完美转发保密)保证两个阶段中的秘钥只能使用一次,进一步增强了安全性,但使用PFS可能占用设备更多的资源。Set pfs命令用于启用这项功能并指定使用哪个DH秘钥组,这是一条可选命令。
* Set security-association lifetime:用于指定SA的生存周期。默认情况下,cisco的设备已经设定数据连接的生存周期为3600s或4608000KB,相当于一小时内以10Mb/s速率传输的流量。生存周期的阈值是由时间和流量两个方面的因素决定的。且相当于任何一项到达阈值的限制时,SA就会被重新协商建立。
如果在IPSEC对等体之间只设置lifetime,即使没有ipsec流量传递,SA也始终处于激活状态,如果在×××设备上配置了很多ipsec连接,这些暂时没有实际意义的SA就会占用设备的内存和CPU资源。从IOS12.2(15)T开始,cisco为数据SA引入空闲超时计时器,如果没有流量通过SA传输,SA就会被设备自动删除。
* Set security-association idle-time命令用于设定空闲超时计数器,范围为60-86400s。默认情况下,空闲超时计时器是关闭的。