openssl 详解

来源:互联网 发布:mac samba 客户端 编辑:程序博客网 时间:2024/05/13 16:50

SSL记录协议中的MAC(摘要算法)

     MAC算法(MD5SHA-1
     `ssl的消息已经是加密的了,为何还要MAC,难道还有人会修改消息吗?如果怕有人修改消息,加一个摘要不就可以了吗?为何还要mac呢?这是怕有人离线攻击,我们可以信任协议本身,但是却不能信任加密算法,特别是ecb加密算法。
     MAC = HASH [shared-key,  serial-num,  data], mac可以防止重放攻击和保持数据的完整性,并且即使使用ecb加密算法导致被猜出了一部分内容,攻击者也无法重新计算mac值,因为她没有密钥,如果仅仅使用一个摘要是做不到的,特别在非分组加密算法比如序列加密算法中,攻击者有各种方式不必知道密钥而通过部分密文知道部分明文,如果她通过各种诡异的手段知道了一部分消息明文并且修改了它们,她就很可能有更诡异的方式计算出其摘要值,然后用更更诡异的方式替换掉原始包。然而使用mac的话,她只要不知道密钥就无法做到这一切,并且,mac的计算中有一个因子是序列号,这还可以防止重放攻击,因此ssl中的mac最大程度保护了数据记录的完整性,而使用密钥加密则保证了数据记录的保密性
     总之,MAC的安全性在于引入了保密的私钥来计算摘要,理论上只要对私钥的穷举攻击是可能的,那么对mac的攻击就是可能的,只是更慢些罢了,这种办法一般采用离线的方式进行,因此最好的保护措施就是不断的更新密码,在离线攻击成功之前把密码改掉,不给攻击者任何机会。另外,没有另外了...
  SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
   SSL协议可分为两层: 
         (1)SSL记录协议(SSL Record Protocol):
                    它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装压缩加密等基本功能的支持。 
            (2)SSL握手协议(SSL Handshake Protocol):
                它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 

SSL协议的概述

提供网络安全服务可以在不同层次提供。通用的解决方法是在网络层使用IPSecIPSec对于最终用户和应用程序是透明的。另一个比较通用的解决方法是在TCP上实现安全性,在这一级,有两种实现选择,一是SSL(或TLS)可以作为基本协议族的一个部分提供,因此对应用程序透明,二是将SSL嵌入到软件中,如嵌入到Web浏览器与Web服务器。与应用有关的安全服务也可以被嵌入到特定的应用程序中,如安全电子交易(SET)。

  

HTTP

FTP

SMTP

  

S/MIME

PGP

SET

HTTP

FTP

SMTP

SSL or TLS

Kerberos

SMTP

HTTP

TCP

TCP

UDP

TCP

IP/IPSec

IP

IP

图13.1 TCP/IP协议栈中安全机制的位置

Netscape公司推出Web浏览器时,提出了SSLSecure Socket Layer)安全通信协议 SSL协议目前已成为Internet上保密通讯的工业标准。现行Web浏览器普遍将HTTPSSL相结合,来实现安全通信。

IETFwww.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLSTransport Layer Security,从技术上讲,TLS1.0SSL3.0的差别非常微小。

WAP的环境下,由于手机及手持设备的处理和存储能力有限,wap论坛(www.wapforum.org)在TLS的基础上做了简化,提出了WTLS协议(Wireless Transport Layer Security,以适应无线的特殊环境。

SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器和客户机两端同时实现支持。它能使客户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对客户进行认证。SSL协议要求建立在可靠的传输层协议(例如:TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTPFTPTelnet)能透明的建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。

如果利用SSL协议来访问网页,其步骤如下:

1)用户:在浏览器的地址栏里输入https://www.sslserver.com

2HTTP层:将用户需求翻译成HTTP请求,如

GET /index.htm HTTP/1.1

Host http://www.sslserver.com

3SSL借助下层协议的的信道,安全的协商出一份加密密钥,并用此密钥来加密HTTP请求。

4TCP层:与web server443端口建立连接,传递SSL处理后的数据。

接收端与此过程相反。

SSL协议允许支持SSL协议的服务器与一个支持SSL协议的客户机相互认证,还允许这两个机器间建立加密连接,提供连接可靠性。

SSL服务器认证允许用户确认服务器身份。支持SSL协议的客户机软件能使用公钥密码标准技术(如用RSADSS等)检查服务器证书、公用ID是否有效和是否由在客户信任的认证机构CA列表内的认证机构发放。

SSL客户机认证允许服务器确认用户身份。使用应用于服务器认证同样的技术,支持SSL协议的服务器软件能检查客户证书、公用ID是否有效和是否由在服务器信任的认证机构列表内的认证机构发放。

一个加密的SSL连接要求所有在客户机与服务器之间发送的信息由发送方软件加密和由接受方软件解密,对称加密法用于数据加密(如用DESRC4等),从而连接是保密的。所有通过加密SSL连接发送的数据都被一种检测篡改的机制所保护,使用消息认证码(MAC)的消息完整性检查、安全散列函数(如SHAMD5等)用于消息认证码计算,这种机制自动地决定传输中的数据是否已经被更改,从而连接是可靠的。

SSL协议支持如下一些使用RSA密钥交换算法的密码组,它们的加密强度由强到弱排列:

SHA-1消息认证、支持168位加密的Triple-DES,速度不如RC4快。由于密码长度较大,大约有3.7 * 1050个密码可用。

MD5消息认证、支持128位加密的RC4RC4RC2都有128位的密码,它们的加密强度仅次于Triple-DESRC4RC2大约有3.4 * 1038 个密码可用,这使得它们很难被破解。RC4密码是SSL支持的密码中最快的。

MD5消息认证、支持128位加密的RC2RC2RC4速度慢(SSL3.0支持而SSL2.0不支持)。

SHA-1消息认证、支持56位加密的DES,大约有7.2 * 1016 个可用的密码(在SSL2.0中该密码使用的是MD5 消息认证)。

根据美国政府的规定,以上四种加密仅能在美国境内使用,以下加密技术是可以出口的。

MD5消息认证、支持40位加密的RC4,大约有个1.1 * 1012可用的密码。

     带MD5消息认证、支持40位加密的RC2,大约有个1.1 * 1012可用的密码。

注:对RC2RC4支持40位加密,其中密钥仍是128位的,但只有40位有加密意义。

不加密,只带MD5消息认证。这种方法使用MD5消息认证检测篡改(SSL3.0支持而SSL2.0不支持)。

SSL主要工作流程包括:网络连接建立;与该连接相关的加密方式和压缩方式选择;双方的身份识别;本次传输密钥的确定;加密的数据传输;网络连接的关闭。

应用数据的传输过程为:

1)应用程序把应用数据提交给本地的SSL

2)发送端根据需要,使用指定的压缩算法,压缩应用数据

3)发送端使用散列算法对压缩后的数据进行散列,得到数据的散列值

4)发送端散列值和压缩后的应用数据一起用加密算法加密

5)密文通过网络传给对方;

6)接收方用相同的加密算法对密文解密,得到明文;

7)接收方用相同的散列算法对明文中的应用数据散列;

8)计算得到的散列值与明文中的散列值比较;

如果一致,则明文有效,接收方的SSL把明文解压后得到应用数据上交给接收方的应用。否则就丢弃数据,并向发方发出告警信息。严重的错误有可能引起再次的协商或连接中断。

SSL协议建立在传输层和应用层之间,包括两个子协议:SSL记录协议和SSL握手协议,其中记录协议在握手协议下端。

SSL握手协议

SSL改变密码格式协议

SSL警告协议

HTTP,FTP,…

SSL 记录协议

TCP

IP

图13.2 SSL记录协议和SSL握手协议

     (1)SSL记录协议定义了要传输数据的格式,它位于一些可靠的的传输协议之上(如TCP),用于各种更高层协议的封装。
     (2)SSL握手协议就是这样一个被封装的协议。SSL握手协议允许服务器与客户机在应用程序传输和接收数据之前互相认证、协商加密算法和密钥

二、SSL记录协议

SSL记录协议为SSL连接提供两种服务:机密性和报文完整性。

SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的SSL通信都使用SSL记录层,记录协议封装上层的握手协议、警告协议、改变密码格式协议和应用数据协议SSL记录协议包括了记录头记录数据格式的规定

SSL记录协议定义了要传输数据的格式,它位于一些可靠的的传输协议之上(如TCP),用于各种更高层协议的封装,记录协议主要完成分组和组合,压缩和解压缩,以及消息认证和加密等功能。

主要的操作见图13.3


                                                                                          图13.3 SSL记录协议的操作

1)分段

每个上层应用数据被分成214字节或更小的数据块。记录中包含类型、版本号、长度和数据字段。

2)压缩

压缩是可选的,并且是无损压缩,压缩后内容长度的增加不能超过1024字节。

3)在压缩数据上计算消息认证MAC

4)对压缩数据及MAC进行加密。

5)增加SSL记录头。


记录协议字段包括:

内容类型(8位):封装的高层协议。

主要版本(8位):使用的SSL主要版本。对于SSLv3.0,值为3

次要版本(8位):使用的SSL次要版本。对于SSLv3.0,值为0

压缩长度(16位):明文数据(如果选用压缩则是压缩数据)以字节为单位的长度。

内容类型

主要版本

次要版本

压缩长度

明文(压缩可选)

MAC0,16 20位)

 

 

 



          图13.4 SSL记录协议字段

已经定义的内容类型是握手协议、警告协议、改变密码格式协议和应用数据协议。其中改变密码格式协议是最简单的协议,这个协议由值为1的单字节报文组成,用于改变连接使用的密文族。警告协议用来将SSL有关的警告传送给对方。警告协议的每个报文由两个字节组成,第一字节指明级别(1警告或2致命),第二字节指明特定警告的代码。


三、SSL握手协议

SSL握手协议被封装在记录协议中,该协议允许服务器与客户机在应用程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时服务器与客户机交换一系列消息。


这些消息交换能够实现如下操作:

1)客户机认证服务器;

2)允许客户机与服务器选择双方都支持的密码算法;

3)可选择的服务器认证客户;

4)使用公钥加密技术生成共享密钥;

5)建立加密SSL连接。

SSL握手协议报文头包括三个字段:

类型(1字节):该字段指明使用的SSL握手协议报文类型。SSL握手协议报文包括10种类型。报文类型见图13.5

长度(3字节):以字节为单位的报文长度。

内容(≥1字节):使用的报文的有关参数。

报文类型

参数

hello_request

client_hello

server_hello

certificate

server_key_exchange

certificate_request

server_done

certificate_verify

client_key_exchange

finished

版本、随机数、会话ID、密文族、压缩方法

版本、随机数、会话ID、密文族、压缩方法

X.509v3证书链

参数、签名

类型、授权

签名

参数、签名

Hash值

图13.5 SSL握手协议报文

SSL握手协议的过程如下:


注:带*的传输是可选的,或者与站点相关的,并不总是发送的报文。

图13.6 握手协议的过程

1)建立安全能力。
     客户机向服务器发送client_hello报文,服务器向客户机回应server_hello报文,建立如下的安全属性:协议版本,会话ID,密文族,压缩方法,同时生成并交换用于防止重放攻击的随机数。
     密文族参数包括密钥交换方法(Deffie-Hellman密钥交换算法、基于RSA的密钥交换和另一种实现在Fortezza chip上的密钥交换)、加密算法(DESRC4RC23DES等)MAC算法(MD5SHA-1加密类型(流或分组)等内容。
2)认证服务器和密钥交换。
     在hello报文之后,如果服务器需要被认证,服务器将发送其证书。如果需要,服务器还要发送server_key_exchange。然后,服务器可以向客户发送certificate_request请求证书。服务器总是发送server_hello_done报文,指示服务器的hello阶段结束。

3)认证客户和密钥交换。
     客户一旦收到服务器的server_hello_done报文,客户将检查服务器证书的合法性(如果服务器要求),如果服务器向客户请求了证书,客户必须发送客户证书,然后发送client_key_exchange报文,报文的内容依赖于client_helloserver_hello定义的密钥交换的类型。最后,客户可能发送client__verify 报文来校验客户发送的证书,这个报文只能在具有签名作用的客户证书之后发送。
4)结束。
     客户发送change_cipher_spec报文并将挂起的CipherSpec复制到当前的CipherSpec。这个报文使用的是改变密码格式协议。然后,客户在新的算法、对称密钥和MAC秘密之下立即发送finished报文。finished报文验证密钥交换和鉴别过程是成功的。服务器对这两个报文响应,发送自己的change_cipher_spec报文、finished报文。握手结束,客户与服务器可以发送应用层数据了。
   当客户从服务器端传送的证书中获得相关信息时,需要检查以下内容来完成对服务器的认证:时间是否在证书的合法期限内;签发证书的机关是否客户端信任的;签发证书的公钥是否符合签发者的数字签名;证书中的服务器域名是否符合服务器自己真正的域名。服务器被验证成功后,客户继续进行握手过程。
   同样的,服务器从客户传送的证书中获得相关信息认证客户的身份,需要检查:用户的公钥是否符合用户的数字签名;时间是否在证书的合法期限内;签发证书的机关是否服务器信任的;用户的证书是否被列在服务器的LDAP里用户的信息中;得到验证的用户是否仍然又权限访问请求的服务器资源。




0 0
原创粉丝点击