传输层安全

在传输层之上实现数据的安全传输是另一种安全解决方案一般SSL都是可执行协议软件包的一部分,从而对应用是透明的,可以也。嵌入到特殊软件包中(IE浏览器都配置了SSL)

传输层安全---SSL

SSL / TLS协议

1994年Netscape开发了安全套接层协议SSL(安全套接字层),专门用于保护Web通讯

版本和历史

  • 1.0,不成熟
  • 2.0,基本上解决了网络通讯的安全问题

      Microsoft公司发布了PCT(私人通信技术),并在IE中支持

  • 3。0,1996年发布,增加了一些算法,修改了一些缺陷
  • IETF内部成立传输层安全(TLS)工作组制定通用标准时,达成一致选择SSL.TLS 1.0(传输层安全性,也被称为SSL 3.1),1997年IETF发布草案,同时,Microsoft宣布放弃PCT,与Netscape一起支持TLS 1.0。1999年正式发布RFC 2246(The TLS Protocol v1.0)。

协议的设计目标

  • 为两个通讯个体之间提供保密性和完整性(身份认证)
  • 考虑互操作性,可扩展性,相对效率等

SSL体系结构

SSL协议的目标就是在通信双方利用加密的SSL信道建立安全的连接。它不是一个单独的协议,而是两层协议

  • 一次会话从握手开始,协商双方**等参数信息;
  • 握手完成时用密码变更规则协议发送密码变更规格消息;
  • 利用开始记录协议封装应用数据进行通信;
  • 通信中出现错误时,利用报警协议进行协调。

SSL两个主要的协议

SSL记录协议

  • 建立在可靠的传输协议(如TCP)之上
  • 它提供连接安全性,有两个特点

      保密性,使用了对称加密算法

      完整性,使用HMAC算法

  • 用来封装高层的协议

SSL握手协议

  • 客户和服务器之间相互鉴别
  • 协商加密算法和**
  • 它提供连接安全性,有三个特点

      身份鉴别,至少对一方实现鉴别,也可以是双向鉴别

      协商得到的共享**是安全的,中间人不能够知道

      协商过程是可靠的

1)SSL记录协议

①fragmentation

- 上层消息的数据被分片成214字节大小的块,或者更小

②compression(可选) - 必须是无损压缩。有时候数据量很少,压缩反而会增加数据,则增加部分的长度不超过1024字节

③MAC计算:

④加密

可供选择的加密算法

IDEA 128 RC-40 40

RC2-40 40 RC4-128 128

DES-40 40

DES 56

3DES 168

福尔泰扎80

⑤最后添加SSL控制头

传输层安全---SSL

SSL记录格式

  1. ContentType-- 8位,上层协议类型【4种】:密码变更规格,报警,握手,应用数据
  2. 主要版本Minnor版本 - 16位,主次版本
  3. 压缩长度:16位 - 加密后数据的长度,不超过2 ^ 14 + 2048字节
  4. EncryptedData片段; - 密文数据

传输层安全---SSL

SSL的有效载荷 - 封装的数据

传输层安全---SSL

有效载荷-即SSL里记录封装的上层数据有【4种】

①ChangeCipherSpec

只有1字节,值为1.用以将握手时的延迟状态转至当前状态,更新了在当前连接上的密码机制。     

②Alert

2字节第一个字节表明报警的等级(1 - 警告; 2 - 致命的);第二个字节则是具体警告的编码。     

③handshake

1字节(握手消息的类型)3字节(握手消息的长度)+ N字节(本条握手消息的相关参数)     

④应用数据

上层应用数据

 

2)SSL握手协议

SSL握手协议在记录协议之上,记录协议是一种保密的数据封装,而记录协议加密用的**来自握手协议。

SSL握手消息是明文还是密文?

SSL握手消息前期是明文,握手协商过程中逐渐变为密文.SSL记录协议有了**后才能开始密文封装。

握手协议使用的消息

消息

参数

hello_request

空值

CLIENT_HELLO

版本,随机数,会话ID,密码参数,压缩方法

server_hello

证书

X.509 v3证书链

server_key_exchange

参数,签名

certificate_request

类型,CA的

server_done

空值

certificate_verify

签名

客户端**

参数,签名

哈希值

SSL握手协议的流程

第一阶段:建立起安全协商

①客户发送一个CLIENT_HELLO消息:

  • 版本(版本):客户端SSL最高版本
  • 随机数(随机):32位时间戳28字节随机序列
  • 会话ID(会话ID):一个会话状态对应一组参数
  • 密码构件(CipherSuite):客户支持的密码算法列表,包括**交换算法和密码算法等。以优先选用递减顺序给出。
  • 压缩方法(Compression Mehod):客户支持的压缩方法表然后,客户等待服务器的server_hello消息

②服务器发送server_hello消息:

包括客户建议的低版本以及服务器支持的最高版本,服务器产生的随机数,会话ID,**构件域,压缩域

  • **构建域(服务器从客户建议的密码算法中挑出一套,包括包以下内容)

①**交换方法:RSA,固定/暂态/匿名的Diffie-Hellman,以及福尔泰扎方法

②CipherSpec:密码算法,MAC算法,密码类型(流/分组),可否出口,散列码大小,**材料(用于产生写**的数据),IV大小

  • 压缩域包括

(服务器从客户建议的压缩方法中挑出一个)

第二阶段:服务器鉴别和**交换

  • 以服务器发送自己的证书为标志,开始第二阶段,该消息包含一个X.509证书,或者一条证书链(可选的,除匿名的Diffie-Hellman交换之外的**交换方法都需要证书
  • 服务器发送server_key_exchange消息消息包含签名,被签名的内容包括两个随机数以及服务器参数。可选的,只有当服务器的证书没有包含必需的数据的时候才发送此消息
  • 服务器发送certificate_request消息 - 可选的,非匿名服务器可以向客户请求一个证书 - 包含证书类型和Cas(可接收的认证机构名称列表)
  • 服务器发送server_hello_done,然后等待应答

传输层安全---SSL

第三阶段:客户鉴别和**交换

  • 客户收到server_done消息后,它根据需要检查服务器提供的证书,并判断server_hello的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器
  • 如果服务器请求证书的话,则客户首先发送一个证书消息,若客户没有证书,则发送一个no_certificate警告
  • 然后客户发送client_key_exchange消息,消息的内容取决于**交换的类型(若是RSA方式,客户端产生一个48字节的预备主**预先主**)
  • 最后,若客户端证书具有签名功能,发送一个certificate_verify消息,该消息是对客户端启动CLIENT_HELLO后发送或接收到的所有握手协议消息填充MAC处理后进行的签名。

传输层安全---SSL

第四阶段:结束

  • 第四阶段建立起一个安全的连接
  • 客户发送一个change_cipher_spec(密码变更规格)消息,并把协商得到的密文拷贝到当前连接的状态之中
  • 客户用新的算法,**参数发送一个完成消息,包括一个校验值,对所有握手以来的消息(不包括本消息)进行校验。该消息可以检查**交换和鉴别过程是否已经成功。
  • 服务器同样发送change_cipher_spec消息和完成消息。
  • 握手过程完成,客户和服务器可以交换应用层数据。

传输层安全---SSL

如何协商实现保密通信的

  • 第一阶段,设CLIENT_HELLO给服务器提供的**交换方法有RSA方式:即用接收者公钥加***服务器也选择并回送server_hello。
  • 第二阶段,服务器传递自己的证书(这以后就可以单方向加密了)
  • 第三阶段,客户端的**交换消息中就可以用服务器的公钥将生成的**(预备主**KPRE)加密后发给服务器。(至此,双方都掌握了一个密秘信息K.这以后就可双方加密)
  • 第四阶段,发送密码规格变更消息,双方确认一下。

传输层安全---SSL

 

关于双方共享的**

  • 加密,鉴别很多地方需要**和秘密初始向量等,一个秘密KPRE是不够的。
  • 第三阶段双方都知道KPRE后,各自会根据KPRE利用SSL设定的算法计算得到主**。然后按顺序从主**生成客户端写MAC**,服务器写MAC**,客户端写**,服务器端写**,客户端写初始向量IV,服务器端写初始向量IV。

 

思考整个过程

一次会话从握手开始,协商双方**等参数信息;

握手完成时用密码变更规则协议发送密码变更规格消息(双方都把会话,链接相关的参数存储在合适的位置);

开始利用记录协议封装应用数据进行通信;

通信中出现错误时,利用报警协议进行协调。

SSL的两个重要概念

SSL会话(会话)

  •  一个SSL会话是在客户与服务器之间的一个关联。会话由SSL握手协议创建。会话定义了一组可供多个连接共享的密码安全参数
  • 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价。

SSL连接(连接)  

  • 一个连接是一个提供一种合适类型服务的传输(OSI分层的定义)。  
  • SSL的连接是点对点的关系。  
  • 连接是暂时的,每一个连接和一个会话关联。

SSL会话

SSL会话由握手协议创建,定义了一系列相应的安全参数,最终建立客户机和服务器之间的一个关联。对于每个SSL连接,可利用SSL会话避免对新的安全参数进行代码繁多协商。

。每个SSL会话都有许多与之相关的状态一旦建立了会话,就有一个当前操作状态.SSL会话状态参数包括:

(1)会话标志符(Session Identifier)用来确定活动或可回复的会话状态;

(2)对等实体证书(Peer Certificate),是对等实体X.509 v3证书;

(3)压缩方法(Compression Method);

(4)加密规范(Cipher Spec)包括加密算法DES,3DES和IDEA等,消息摘要算法MD5和SHA-1等,以及相关参数;

(5)主密码(Master Secret),由客户机和服务器共享的密码;

(6)是否可恢复(可恢复)会话是否可用于初始化新连接的标志。

SSL连接

SSL连接是一个双向连接,每个连接都和一个SSL会话相关.SSL连接成功后,可以进行安全保密通信.SSL连接状态的参数包括7个:

(1)服务器和客户机随机数(Server and Client Random):Server和Client为每一个连接所选择的字节序列。

(2)服务器写MAC秘密(Server Write MAC Secret):一个**,用来对服务器送出的数据进行MAC操作。

(3)客户机写MAC秘密(Client Write MAC Secret):一个**,用来对客户送出的数据进行MAC操作。

(4)服务器写**(Server Write Key):用于服务器进行数据加密,客户端进行数据解密的对称保***。

(5)客户机写**(Client Write Key):用于客户进行数据加密,服务器进行数据解密的对称保***;

(6)初始化向量(Initialization Vectors):当数据加密采用CBC方式时,每一个**保持一个IV。该字段首先由SSL握手协议,以后保留每次最后的密文数据块作为IV。

(7)***(***):每一方为每一个连接的数据发送与接收维护单独的顺序号。当一方发送或接收一个改变的密码规范消息时,序号置为0,最大264-1

对SSL攻击的启示

历史上有不少针对SSL的攻击,有的并不是SSL协议本身的缺陷,而是实现上导致的缺陷,一些启示:

  • 随机数对于安全协议或者安全系统的重要性
  • 对待错误消息如何响应Contiune?

      会不会招致DOS?返回精确的错误容易被分析

  • 为防止明文模式被分析,可进行随机数填充

 

OpenSSL - 开发自己的支持SSL的应用

目前实现SSL / TLS的软件虽然不多,但都很优秀。除了SSL标准提出者网景实现的,OpenSSL的是一个非常优秀的实现SSL / TLS的开放源代码软件包,主要是作为提供SSL算法的函数库供其他软件调用而出现的,可给任何TCP / IP应用提供SSL功能。

1995年,Eric A. Young和Tim J. Hudson开始开发OpenSSL,后来不断发展更新,直到现在,SSL还在不断的修改和完善,新版本也不断的推出。最新的版本可以从OpenSSL的官方网站http ://www.openssl.org下载。

 

相关文章:

  • 2021-12-21
  • 2021-11-28
  • 2022-12-23
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
猜你喜欢
  • 2021-07-01
  • 2021-08-27
  • 2021-09-08
  • 2021-04-09
  • 2021-11-17
  • 2022-12-23
  • 2021-06-29
相关资源
相似解决方案