1、第4章 密码技术应用,4.1 IPSec 4.2 SSL,IPSec产生的技术背景,4.1 IPSec,1. IPSec概述传统的TCP/IP协议,IP数据包在传输过程中并没有过多的安全需求,人们很容易伪造IP地址,篡改数据包内容,重放以前的包并在传输途中截获并查看包内信息。因此不能保证自己收到的数据包来自正确的发送端,不能肯定数据是发送端的原始数据,也不能防止原始数据在传输过程中未被窃听,所以本质上说这种协议是不安全的。为了有效保护IP数据包的安全,IPSec应运而生,它随着Ipv6的制定而产生,鉴于Ipv4应用的广泛性,IPSec也提供对Ipv4的支持,不过在Ipv6中它是必须支持的,而在
2、Ipv4中是可选的。,IPSec的含义及功能,4.1 IPSec,1. IPSec概述IPSec(Internet Protocol Security的缩写),以IP Packet(小包)为单位对信息进行暗号化的方式,来对传输途中的信息包进行加密或者防止遭到篡改的一种协议(Protocol)。是保护IP协议安全通信的标准,它主要对IP协议分组进行加密和认证。IPsec 在 IP 层提供安全服务,它使系统能按需选择安全协议,决定服务所使用的算法及放置需求服务所需密钥到相应位置。IPsec 能提供的安全服务包括访问控制、无连接的完整性、数据源认证、拒绝重发包(部分序列完整性形式)、保密性和有限传输
3、流保密性。,4.1 IPSec,2IPSec的结构IPsec作为一个协议族由以下部分组成:(1)保护分组流的协议,又分成两个部分:加密分组流的封装安全载荷(ESP)及较少使用的认证头(AH),认证头提供了对分组流的认证并保证其消息完整性,但不提供保密性;(2)用来建立这些安全分组流的密钥交换协议。目前为止,IKE协议是唯一已经制定的密钥交换协议。,图4-1 IPSec结构框架,4.1 IPSec,2IPSec的结构(1) AH为IP数据包提供3种服务,即无连接的数据完整性验证、数据源身份认证和防重放攻击。数据完整性验证通过哈希函数产生的校验来保证;数据源身份认证通过在计算验证码时加入一个共享密
4、钥来实现;AH报头中的序列号可以防止重放攻击。,4.1 IPSec,2IPSec的结构(2) ESP除了为IP数据包提供AH已有的3种服务外,还提供另外两种服务,即数据包加密、数据流加密。加密是ESP的基本功能,而数据源身份认证、数据完整性验证以及防重放攻击都是可选的。数据包加密是指对一个IP包进行加密,可以是对整个IP包,也可以只加密IP包的负荷部分,一般用于客户端计算机;数据源加密一般用于支持IPSec的路由器,源端路由器并不关心IP包的内容,对整个IP包进行加密后传输,目的端路由器将该包解密后把原始包继续转发。在实际进行IP通信中,可以根据实际安全需求同时使用这两种协议或选择其中的一种。
5、AH和ESP都可以提供验证服务,不过,AH提供的验证服务要强于ESP。,4.1 IPSec,2IPSec的结构(3) IKE协议负责密钥管理,定义了通信实体间进行身份认证、协商加密算法以及生成共享的会话密钥的方法。IKE将密钥协商的结果保留在安全联盟(SA)中,供AH和ESP以后通信时使用。最后,解释域(DOI, Domain of Interpretation)为使用IKE进行协商SA的协议统一分配标识符。共享一个DOI的协议从一个共同的命名空间中选择安全协议和变换、共享密码以及交互协议的标识等,DOI将IPSec的这些RFC文档联系到一起。,安全联盟是 IPSec 的基础, 是通信双方建立
6、的一种协定,决定了用来保护数据包的协议、转码方式、密钥以及密钥有效期等。AH和 ESP都要用到安全联盟, IKE的一个主要功能就是建立和维护安全联盟。,4.1 IPSec,3IPSec的运行模式IPSec有两种运行模式,即传输模式(Transport Mode)和隧道模式(Tunnel Mode)。这两种模式的主要区别是它们所保护的内容不同,传输模式保护的只是IP的有效负载,而隧道模式保护的是整个IP数据包。AH和ESP都支持这两种模式,共存在四种形式,下图分别是AH传输模式、AH隧道模式:,4.1 IPSec,3IPSec的运行模式IPSec有两种运行模式,即传输模式(Transport M
7、ode)和隧道模式(Tunnel Mode)。这两种模式的主要区别是它们所保护的内容不同,传输模式保护的只是IP的有效负载,而隧道模式保护的是整个IP数据包。AH和ESP都支持这两种模式,共存在四种形式,下图是ESP传输模式、ESP隧道模式:,4.1 IPSec,3IPSec的运行模式1) AH传输模式在该模式中,AH被插入到IP头部之后,在传输层协议(如TCP、UDP)或者其他IPSec协议之前。因为AH验证的区域覆盖整个IP包,包括IP包头部,所以源/目的IP地址是不能修改的,否则会被检测出来。如果数据包在传送过程中经过网络地址转换(NAT,Network Address Translat
8、ion)网关,其源/目的IP地址将发生改变,会造成到达目的地址后的完整性验证识别失败。因此,AH在传输模式下和NAT是冲突的,不能同时使用。或者说AH不能穿越NAT。,4.1 IPSec,3IPSec的运行模式2) AH隧道模式在该模式中,AH插入到原始IP头部字段之前,再在AH之前增加一个新的IP头部。在隧道模式下,AH验证的区域也将覆盖整个IP包,所以也存在AH与NAT的冲突。,SPI-“安全参数索引“字段,该字段连接明文IP报头中的目标IP地址和诸如ESP 或认证报头AH 等IPSec安全协议,以此来标识某个IPSec安全关联SA。,4.1 IPSec,3IPSec的运行模式3) ESP
9、传输模式在该模式中,ESP插入到IP头部之后, ESP头部包含SPI和序列号字段,ESP尾部包含填充、填充长度和下一个头字段。在接收端,SPI字段用于和源IP地址、IPSec协议一起组成一个三元组来惟一确定一个SA,并利用该SA进行验证、解密,然后等待后续处理,所以SPI不能被加密。其次,序列号字段用于判断包是否重复,从而防止重发攻击。序列号不会泄漏明文中的任何机密,所以也没有必要进行加密。其尾部使用了ESP验证,因为SA需要ESP的验证服务,接收端会在任何后续处理(如检查重放、解密)之前进行验证。数据包只有经过验证该包没有经过任何修改,才会被确认为可信任的,才会进行候选处理。,4.1 IPS
10、ec,3IPSec的运行模式4) ESP隧道模式在该模式中,ESP插入到IP头部之前,在ESP之前再插入新的IP头部。与传输模式一样,ESP头部含有SPI和序列号字段, ESP尾部包含填充、填充长度和下一个头字段。如果选用了验证,ESP的验证数据字段中包含了验证数据。同样ESP头部和ESP验证数据字段不会被加密。内部的IP头部被加密和验证,而外部的IP头部既没有被加密也没有被验证,不被加密是因为路由器需要这些信息为其寻找路由,不被验证是为了能适应NAT等情形。,4.2 SSL,1SSL概述SSL(Secure Socket Layer)是由Netscape公司开发的,用于提供Internet通
11、信的安全协议,目前已经广泛用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于网络层协议(如TCP/IP)与各种应用层协议(如HTTP等)之间,如图所示。在发送端,SSL层接收应用层的数据,然后将加了密的数据发往TCP端口。在接收端,SSL从TCP端口读取数据,解密后将数据交给应用层。所以它为客户端与服务器之间提供安全通信,允许双方相互认证、通过加密提供消息保密。,SSL在TCP/IP协议栈中的位置,为高层协议提供数据封装、压缩、加密等基本功能的支持。,4.2 SSL,2SSL的结构SSL被设计成使用TCP来提供一种可靠的端到端的安全服务。SSL由多个协议组成,并采用两层体系结
12、构,如图4-4所示。,图4-4 SSL协议体系结构,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等,4.2 SSL,2SSL的结构SSL中有两个重要的概念(SSL连接和SSL会话),具体定义如下:(1) SSL连接:连接是提供恰当类型服务的传输。SSL是一种点对点连接,每次连接与一个会话相联系。(2) SSL会话:SSL会话是客户与服务器之间的关联,会话通过握手协议来创建。会话定义了一组被多个连接共享的加密安全参数集。会话可以用来避免为每个连接进行昂贵的新安全参数的协商。,4.2 SSL,3SSL协议1) SSL记录协议SSL协议的底层是记录协议层,SSL记录协
13、议在客户机和服务器之间传输应用数据和SSL控制数据,期间有可能需要进行分段或把多个高层协议数据组合成单个数据单元。图4-5描述了SSL记录协议操作的整个过程。,图4-5 SSL记录协议,4.2 SSL,3SSL协议1) SSL记录协议(1) 分段:其中每个分片报文最大不能超过16 KB(2) 压缩:该操作是可选的。目前的版本还没有指定压缩算法,默认的缺省算法为空。压缩必须是无损的,而且增加的内容长度不会超过1024 B。,图4-5 SSL记录协议,4.2 SSL,3SSL协议1) SSL记录协议(3) 计算MAC码:这一步需要用到客户机与服务器共享的密钥。(4) 加密:使用加密算法对压缩报文和
14、MAC码进行加密。加密对内容长度的增加不可超过1024 B。,图4-5 SSL记录协议,(5) 增加记录协议头部,所含内容如图。,4.2 SSL,3SSL协议2) SSL修改密码规格协议SSL修改密码规格协议是SSL协议体系中最简单的一个,它由单个报文构成,该报文由值为1的单个字节组成。这个报文的惟一目的是使得未决状态被复制为当前状态,从而改变这个连接将要使用的密码规格。,4.2 SSL,3SSL协议3) SSL告警协议告警协议通过SSL记录协议把有关警告传送到各个实体。它由两个字节组成,分别表示告警级别和告警信息。其中告警级别有两个:第一是代表警告,表明是一个一般警告信息;第二是代表致命错误
15、,它将终止当前链接,同一个会话的其他链接也许可以继续,但肯定不会再生成新的连接。告警信息则相对较多,它用告警代码标识。例如,0代表close_notify,表示通知接收方发送方已经关闭本链接,不再发任何信息;10代表unexpected_message,表示接收到不合适的报文。,4.2 SSL,3SSL协议4) SSL握手协议握手协议是SSL中最复杂的部分。这个协议使得服务器与客户机能相互鉴别对方的身份、协商加密和MAC算法以及保护SSL记录中发送数据的加密密钥等。在传输任何应用数据前,都必须使用握手协议。握手协议由一系列在客户端与服务器之间交换的报文组成。所有这些报文具有三个字段:类型(指示
16、10种报文中的一个)、长度(以字节为单位的报文长度)、内容(和这个报文有关的参数)。SSL握手协议包含两个阶段:第一个阶段用于建立私密性通信信道;第二个阶段用于客户认证。,4.2 SSL,3SSL协议4) SSL握手协议第一阶段是通信的初始化阶段,通信双方都发出HELLO消息。当双方都接收到HELLO消息时,就有足够的信息确定是否需要一个新的密钥。若不需要新的密钥,双方立即进入握手协议的第二阶段。否则,此时服务器方的SERVER-HELLO消息将包含足够的信息使客户方产生一个新的密钥。这些信息包括服务器所持有的证书、加密规约和连接标识。若密钥产生成功,客户方发出CLIENT-MASTER-KE
17、Y消息,否则发出错误消息。最终当密钥确定以后,服务器方向客户方发出SERVER-VERIFY消息。注意:一个连接需要四个密钥,分别为客户方的读密钥、客户方的写密钥、服务器方的读密钥、服务器方的写密钥。,4.2 SSL,3SSL协议4) SSL握手协议第二阶段的主要任务是对客户进行认证,此时服务器已经被认证了。服务器方向客户发出认证请求消息:REQUEST-CERTIFICATE。当客户收到服务器方的认证请求消息时,发出自己的证书,并且监听对方回送的认证结果。而当服务器收到客户的认证时,若认证成功,则返回SERVER-FINISH消息,否则返回错误消息。到此为止,握手协议全部结束。,4.2 SS
18、L,4Open SSL的安装与应用1) Open SSL简介Open SSL是基于SSLeay库的软件包,它是由Eric A. Young和Tim J. Hudson于1995年共同开发成功的。它是一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。用户可以从http:/www.openssl.org免费下载Open SSL 1.0.1e及其补丁程序。,4.2 SSL,4Open SSL的安装与应用1) Open SSL简介Open SSL采用C语言作为开发语言,这使得
19、Open SSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。Open SSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得Open SSL具有广泛的适用性。Open SSL的算法已经非常完善,提供对SSL2.0、SSL3.0以及TLS1.0的支持。Open SSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。,4.2 SSL,4Open SSL的安装与应用2) Open SSL安装下载Open SSL免费软件经解压缩,安装方法可以参考INSTALL.*文件。Open SSL是支持跨
20、平台的,它支持UNIX、DOS、Windows、OpenVMS 和MacOS各类操作系统,具体安装手册可以分别查阅INSTALL、INSTALL.DJGPP、INSTALL.W32、INSTALL.VMS和INSTALL.MacOS文件。这里只讲述基于UNIX和Windows下的Open SSL安装工作。,4.2 SSL,4Open SSL的安装与应用2) Open SSL安装(1) 在UNIX平台安装Open SSL。在安装Open SSL前必须具备以下工具:make,Perl 5,ANSI C编译器,类库和C头文件开发环境,可支持UNIX操作系统。安装过程比较简单,可以在控制台输入以下命令
21、:$ ./config$ make$ make test$ make install,4.2 SSL,4Open SSL的安装与应用2) Open SSL安装前面的操作将在系统默认位置 /usr/local/ssl下创建并安装Open SSL。如果想指定安装位置,可以输入:$ ./config -prefix=/usr/local -openssldir=/usr/local/openssl更多有关 ./config(或 ./Configure)的配置可以查看相关帮助。,4.2 SSL,4Open SSL的安装与应用(2) 在Windows平台安装Open SSL。在安装Open SSL中,如
22、果你的系统是基于Win32的,你需要安装Perl工具;如果系统是基于Cygwin的,你需要安装ActiveState Perl。 另外,你必须具备一种C编译器(如Visual C+,Borland C或GNU C)。,4.2 SSL,4Open SSL的安装与应用下面给出安装过程:* 使用Visual C+编译器。创建一个Open SSL的FIPS-certified变量并添加到选项“fips”。* 运行Configure: perl Configure VC-WIN32* 组建Makefiles和可选的汇编语言文件;如果使用MASM,运行 msdo_masm;如果使用NASM,运行 msdo
23、_nasm;如果不使用任何汇编语言文件,运行 msdo_ms。,4.2 SSL,4Open SSL的安装与应用下面给出安装过程:* 最后运行 nmake -f msntdll.mak。如果所有操作都成功,你将获得一些DLL文件,它们可以在out32dll上运行。如果你想测试这些文件,可以输入 cd out32dll mstest* 使用Borland C+ builder 5编译器。* 配置Borland Builder: perl Configure BC-32,4.2 SSL,4Open SSL的安装与应用下面给出安装过程:* 创建合适的makefile: msdo_nasm* 运行: m
24、ake -f msbcb.mak* 使用GNU C (Cygwin)编译器。Cygwin提供了一种在NT 4.0,Windows 9x,Windows ME,Windows 2000,and Windows XP的bash shell和GNU工具环境。所以用Cygwin安装Open SSL与在GNU bash环境下(如Linux)接近。Cygwin执行一个Posix/Unix运行时系统(cygwin1.dll)。它也可以使用MinGW创建Win32类库(msvcrt.dll或crtdll.dll),或者使用下面的步骤安装。,4.2 SSL,4Open SSL的安装与应用下面给出安装过程:* 安
25、装Cygwin (详见 http:/ 安装Perl并确信Cygwin 与perl (5.6.1-2 或更高)和ActivePerl 工作在同个路径。* 运行Cygwin bash shell。* 在控制台输入:$ tar zxvf open ssl-x.x.x.tar.gz$ cd open ssl-x.x.x,4.2 SSL,4Open SSL的安装与应用下面给出安装过程:如果创建Cygwin版的Open SSL,运行: $ ./config . $ make . $ make test $ make install 如果在Cygwin上创建MinGW版(native Windows) Op
26、en SSL,运行:$ ./Configure mingw . $ make . $ make test $ make install,4.2 SSL,4Open SSL的安装与应用3) Open SSL应用Open SSL的应用一般可以分为两种不同的方式:基于Open SSL指令的应用和基于Open SSL加密库及协议库的应用。前者简单,而后者相对复杂。这两种应用不一定是截然分离的,可以相互结合使用,比如使用SSL协议的API,但是证书使用Open SSL的指令签发。基于Open SSL指令的应用很容易,只要安装好了Open SSL就可以开始使用。最简单的应用就是使用Req、CA以及X509
27、指令来签发一个证书,该证书可以用于各种目的,比如很多Apache服务器就是使用Open SSL的指令生成的证书作为服务器证书的。此外,作为测试目的,使用Open SSL指令生成一个证书也是不错的选择。,4.2 SSL,4Open SSL的安装与应用3) Open SSL应用单纯依靠Open SSL指令的成功应用要数Open CA,它是一个完全基于Open SSL指令开发的证书认证中心(CA)程序,没有使用任何Open SSL的API。当然,它不仅仅使用了Open SSL一个软件包,它还使用了诸如Open LDAP等软件包。Open CA从一个侧面证明了Open SSL指令的作用是很全面的。基于
28、Open SSL函数库的应用相对于基于Open SSL指令的应用开发的工作量会大很多,但这并不意味着其应用会更少。事实上,基于Open SSL的应用大部分是这种方式的,这种方式使得开发者能够根据自己的需求灵活地进行选择,而不必受Open SSL有限指令的限制。,4.2 SSL,4Open SSL的安装与应用3) Open SSL应用Mod_SSL是一个基于Open SSL指令应用的范例,Apache和Mod_SSL结合起来实现了HTTPS在Linux和Windows等平台的运行。Stunnel是另外一个成功应用Open SSL函数库的程序,该程序提供了一种包含客户端和服务器的安全代理服务器功能
29、,事实上就是在客户端和服务器使用Open SSL来建立一条安全的SSL通道。除了这些广为人知的项目外,有很多公司的商业密码产品都是基于Open SSL的函数库开发的,在Open SSL提供了Engine机制后,这种势头会更加明显。当然,出于各种目的,相当一部分公司在自己的产品中不会声明这一点。,4.2 SSL,4Open SSL的安装与应用3) Open SSL应用Mod_SSL是一个基于Open SSL指令应用的范例,Apache和Mod_SSL结合起来实现了HTTPS在Linux和Windows等平台的运行。Stunnel是另外一个成功应用Open SSL函数库的程序,该程序提供了一种包含客户端和服务器的安全代理服务器功能,事实上就是在客户端和服务器使用Open SSL来建立一条安全的SSL通道。除了这些广为人知的项目外,有很多公司的商业密码产品都是基于Open SSL的函数库开发的,在Open SSL提供了Engine机制后,这种势头会更加明显。当然,出于各种目的,相当一部分公司在自己的产品中不会声明这一点。,习 题,4.1 IPSec协议的隧道模式与传输模式有何区别?如何实现?4.2 简述ESP和AH在IPSec中的作用,它们能否同时使用?4.3 描述SSL结构,并介绍相关协议的功能。4.4 简述SSL记录协议操作的整个过程。,