IPsec(ProtocolSecurity)是网络安全协议,运行在OSI模型的第三层(Protocol,IP层),在VPN(works)应用很广泛。
IPsec出现的原因是普通的IP层的报文并没有加密,存在安全上的隐患,所以在上世纪90年代提出了IPsec协议。
IPsec在IP层对报文提供安全服务。IPsec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、私有性和真实性,以及如何加密数据包。使用IPsec,数据就可以安全地在公网上传输,图1是IPsec的一个使用场景:
1.数据机密性(Confidentiality):IPsec发送方在通过网络传输包前对包进行加密。
2.数据完整性(DataIntegrity):IPsec接收方对发送方发送来的包进行认证,以确保数据在传输过程中没有被篡改。
3.数据来源认证(DataAuthentication):IPsec在接收端可以认证发送IPsec报文的发送端是否合法。
4.防重放(Anti-Replay):IPsec接收方可检测并拒绝接收过时或重复的报文。
IPsec提供了两种安全机制:认证和加密。认证机制使IP通信的数据接收方能够确认数据发送方的真实身份以及数据在传输过程中是否遭篡改。加密机制通过对数据进行加密运算来保证数据的机密性,以防数据在传输过程中被窃听。
IPsec的安全体系由验证头协议(AuthenticationHeader,AH)、安全封装协议(EncapsulatingSecurityPayload,ESP)及安全联盟(Securityassociation,SA)三部分组成。
AH(AuthenticationHeader)是认证头协议(IP协议号为51),主要提供的功能有数据源验证、数据完整性校验和防报文重放功能,可选择的散列算法有MD5(MessageDigest),SHA1(SecureHashAlgorithm)等。AH插到标准IP包头后面,它保证数据包的完整性和真实性,防止黑客截断数据包或向网络中插入伪造的数据包。AH采用了hash算法来对数据包进行保护。AH没有对用户数据进行加密。
其中,SPI(SecureParameterIndex,安全参数索引),是用于唯一标识SA的一个32比特数值。
当使用AH时,IP地址不能被NAT修改,否则hash值无效,进而不能满足数据来源确认的特性。
ESP(EncapsulatingSecurityPayload)是报文安全封装协议(IP协议号为50),,ESP将需要保护的用户数据进行加密后再封装到IP包中,验证数据的完整性、真实性和私有性。可选择的加密算法有DES,3DES,AES等。
ESP的工作原理是在每一个数据包的标准IP包头后面添加一个ESP报文头,并在数据包后面追加一个ESP尾。与AH协议不同的是,ESP将需要保护的用户数据进行加密后再封装到IP包中,以保证数据的机密性。
SA是IPsec的基础,也是IPsec的本质。IPsec对数据流提供的安全服务通过SA来实现,它包括协议、算法、密钥等内容,具体确定了如何对IP报文进行处理。一个SA就是两个IPsec系统之间的一个单向逻辑连接,输入数据流和输出数据流由输入SA与输出SA分别处理。
SA主要由KeyExchange(IKE及IKEv2)、NegotiationofKeys提供密钥协商。
IPsec有隧道(tunnel)和传输(transport)两种运行模式。运行模式和安全体系中的AH及ESP组合形成4种情况:隧道模式 AH,隧道模式 ESP以及传输模式 AH,传输模式 ESP。
在隧道模式中,用户的整个IP数据包被用来计算AH或ESP头,AH或ESP头和传输层数据被封装在一个新的IP数据包中;在传输方式中,只是传输层数据被用来计算AH或ESP头,AH或ESP头和传输层数据被放置在原IP包头后面。
1.传输模式在AH、ESP处理前后IP头部保持不变,主要用于End-to-End的应用场景(End-to-End(端到端或者PC到PC):两个PC之间的通信由两个PC之间的IPsec会话保护,而不是网关)
2.隧道模式则在AH、ESP处理之后再封装了一个外网IP头,主要用于Site-to-Site的应用场景(Site-to-Site(站点到站点或者网关到网关):如公司的3个机构分布在互联网的3个不同的地方,各使用一个商务领航网关相互建立VPN隧道,企业内网(若干PC)之间的数据通过这些网关建立的IPsec隧道实现安全互联)
传输模式中,只有传输层数据被用来计算AH或者ESP头,传输模式的数据交互过程如图9所示:
在传输模式中,原来的IP头不变,依然是原来的IP源地址、IP目的地址,变化的部分是原来的IP层负载。IP层负载变为了AH头(ESP头)及原IP负载(或加密后的密文)。
在隧道方式中,用户的整个IP数据包被用来计算AH或ESP头,且被加密。AH或ESP头和加密用户数据被封装在一个新的IP数据包中,隧道模式的数据交互如图12所示:
在隧道模式中,整个IP层数据都被改变:包括IP头部及IP负载。IP头部变为新的IP头,IP负载变为原IP包经过加密后的密文。
隧道模式隐藏了数据包的源地址和最终目的地址。ESP数据包进行填充,隐藏了数据包的真实大小,进而隐藏了其通信特征。
为正确封装及提取IPsec数据包,需要设计一套专门的方案,将安全服务/密钥与要保护的通信数据联系到一起;同时将远程通信实体与要交换密钥的IPsec数据传输联系到一起,这样的构建方案称为SA(SecurityAssociation,安全联盟)。
SA是两个应用IPsec实体间(主机、路由器)的一个单向逻辑连接,决定保护什么、如何保护以及谁来保护通信数据。它规定了用来保护数据包安全的IPsec协议、转换方式、密钥以及密钥的有效存在时间等等。SA是单向的,要么对数据包进行“进入”保护,要么进行“外出”保护。具体采用什么方式,要由三方面的因素决定:第一个是安全参数索引(SPI),该索引存在于IPsec协议头内,见图5及图7;第二个是IPsec协议值;第三个是要向其应用SA的目标地址。通常,SA是以成对的形式存在的,每个朝一个方向,既可人工创建它,亦可采用动态创建方式。
SA是单向的,在两个对等体之间的双向通信,最少需要两个SA来分别对两个方向的数据流进行安全保护。同时,如果两个对等体希望同时使用AH和ESP来进行安全通信,则每个对等体都会针对每一种协议来构建一个独立的SA。
SA由一个三元组(安全参数索引(SPI)、IP目的地址、安全协议号(AH或ESP))来唯一标识。SA可通过手工配置和自动协商两种方式建立:
1.手工建立SA的方式是指用户通过在两端手工设置一些参数,在两端参数匹配和协商通过后建立SA。
2.自动协商方式由IKE生成和维护,通信双方基于各自的安全策略库经过匹配和协商,最终建立SecurityAssociation而不需要用户的干预。
SPI是用于唯一标识SA的一个32比特数值,它在AH和ESP头中传输。在手工配置SA时,需要手工指定SPI的取值。使用IKE协商产生SA时,SPI将随机生成。
生存周期到达指定的时间或指定的流量,SA就会失效。SA失效前,IKE将为IPsec协商建立新的SA,这样,在旧的SA失效前新的SA就已经准备好。在新的SA开始协商而没有协商好之前,继续使用旧的SA保护通信。在新的SA协商好之后,则立即采用新的SA保护通信。
SA提供的安全服务取决于所选的安全协议(AH或ESP)、SA模式、SA作用的两端点和安全协议所要求的服务。
手工方式下,安全参数由管理员按安全策略手工指定、手工维护。但是,手工维护容易出错,而且手工建立的SA没有存活时间的说法,除非再用人工方式将其删除,否则便会一直存在下去。
若用动态方式创建,则SA有一个存活时间与其关联在一起。这个存活时间通常是由密钥管理协议在IPsec通信双方之间加以协商而确立下来的,存活时间非常重要。若超时使用一个密钥,会为攻击者侵入系统提供更多的机会。SA的自动建立和动态维护是通过IKE(KeyExchange)进行的。如果安全策略要求建立安全、保密的连接,但却不存在相应的SA,IPsec的内核则启动或触发IKE协商。
IKE(KeyExchange),因特网密钥交换协议是IPsec的信令协议,为IPsec提供了自动协商交换密钥、建立安全联盟的服务,能够简化IPsec的使用和管理,大大简化IPsec的配置和维护工作。IKE不是在网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥,并且即使第三者截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。IKE具有一套自保护机制,可以在不安全的网络上安全的分发密钥,验证身份,建立IPSEC安全联盟。
IKE具有完善的前向安全性(PFS:PerfectForwardSecurity)特征。前向安全是指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。
阶段一:在网络上建立IKESA,为其它协议的协商(阶段二)提供保护和快速协商。通过协商创建一个通信信道,并对该信道进行认证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源认证服务。第一阶段有主模式(MainMode)和野蛮模式(AggressiveMode)两种IKE交换方法;
阶段二:快速模式,用在第一阶段建立的安全隧道为IPsec协商安全服务,即为IPsec协商具体的SA,建立用于最终的IP数据安全传输的IPsecSA。
第二对消息叫密钥交换,交换Diffie-Hellman公共值和辅助数据(如:随机数),密钥在这个阶段产生;
3.发起方根据响应方的身份信息也进行hash计算,与响应方提供的hash进行比较,如果一致则身份确认通过,进行IKESA密钥种子确认,如果不一致则双方协商结束;
4.IKESA协商完毕之后,利用该SA协商IPsecSA,从第三条报文开始都是加密的,但双方身份信息都使用明文传送。
主模式(MainMode),正常情况下需要6条报文协商出IKESA;野蛮模式只需要3条报文就能实现。
IKE采用DH算法进行密钥的交换和分发,DH算法原理如图17所示。Diffie-Hellman算法是一种公共密钥算法。通信双方在不传送密钥的情况下通过交换一些数据,计算出共享的密钥(PFS特性是由DH算法保障的)。
第二次隧道协商的参数是在完全加密的环境下进行的,之后得到的IPsecSA才真正为数据做加密
1.因为有了IKE,IPsec很多参数(如:密钥)都可以自动建立,降低了手工配置的复杂度
2.IKE协议中的DH交换过程,每次的计算和产生的结果都是不相关的。每次SA的建立都运行DH交换过程,保证了每个SA所使用的密钥互不相关
3.IPsec使用AH或ESP报文头中的序列号实现防重放。此序列号是一个32比特的值,此数溢出后,为实现防重放,SA需要重新建立,这个过程需要IKE协议的配合
4.对安全通信的各方身份的认证和管理,将影响到IPsec的部署。IPsec的大规模使用,必须有CA(CertificateAuthority,认证中心)或其他集中管理身份数据的机构的参与