710 likes | 924 Views
TLS/SSL. 电子科技大学计算机学院. 主要内容. 1 、 SSL 历史和概况 2 、 SSLV3.O 中的状态 3 、记录层协议 4 、 Change Cipher Spec 协议 5 、 Alert 协议 6 、握手协议 7 、 TLS/SSL 安全性和常见攻击. 1.1 SSL 发展历史. 时间 : 1994 年 Netscape 开发了 SSL(Secure Socket Layer) 安全套接层协议 1996 年正式发布 SSL3.0. 1.1 SSL发展历史. SSL 的版本及其特点: 1.0 ,不成熟。
E N D
TLS/SSL 电子科技大学计算机学院
主要内容 • 1、SSL历史和概况 • 2、SSLV3.O中的状态 • 3、记录层协议 • 4、Change Cipher Spec协议 • 5、Alert协议 • 6、握手协议 • 7、TLS/SSL安全性和常见攻击
1.1 SSL 发展历史 时间: • 1994年Netscape开发了SSL(Secure Socket Layer)安全套接层协议 • 1996年正式发布SSL3.0.
1.1 SSL发展历史 SSL的版本及其特点: • 1.0,不成熟。 • 2.0,基本上解决了Web通讯的安全问题。 • 3.0,1996年发布,增加了一些算法,修改了一些缺陷。 • TLS 1.0(Transport Layer Security传输层安全协议, 也被称为SSL 3.1),1997年IETF发布了Draft,同时,Microsoft宣布放弃PCT,与Netscape一起支持TLS 1.0。 • 1999年,发布RFC 2246(The TLS Protocol v1.0)。
1.2 SSL概况 SSL V3.0简介 • 位于TCP层和应用层之间,提供Internet上保密通信的安全协议。 • 分为握手层和记录层两层。 • 会话和连接是SSL的两个重要的贯穿始终的概念。
1.2 SSL概况 • https://与shttp://
1.2 SSL概况 目标 • SSL被设计用来使用TCP提供一个可靠的端到端安全服务,为两个通讯个体之间提供保密性、鉴别和完整性.
1.2 SSL概况 • SSLV3.0的目标依优先次序为: • 加密安全:为通信实体间建立安全的连接。具体体现为保密性、消息完整性和验证。 • 互操作性:保证不同的开发者开发的SSLV3.0能够成功地交换加密参数。 • 可扩展性:新的公钥加密方法和对称加密方法在必要时可以添加进来。 • 相对高效:为了不让加密操作占用过多的CPU时间,SSL有一个可选的会话高速缓存机制,可以减少需要从头建立的连接数。
1.2 SSL 概况 • SSLV3.0有三种验证模式: • Client和Server都被验证; • 只验证Server,不验证Client; • 完全匿名。 • 模式2是目前Internet上应用最广的模式
1.2 SSL实现 • OpenSSL,最新0.9.8g,实现了SSLv2,SSLv3,TLSv1.0 • Openssl ——a command line tool. • ssl(3) —— the OpenSSL SSL/TLS library. • crypto(3)—— the OpenSSL Crypto library. • URL: http://www.openssl.org • SSLeay • http://www2.psy.uq.edu.au/~ftp/Crypto/ • Internet号码分配当局已经为具备SSL功能的应用分配了固定的端口号,例如 • 带SSL的HTTP(https)被分配以端口号443 • 带SSL的SMTP(ssmtp)被分配以端口号465 • 带SSL的NNTP(snntp)被分配以端口号563
1.3 SSL体系结构 • 协议分为两层--------握手层和记录层 • 底层:SSL记录协议 • 上层:SSL握手协议、SSL修改密文规约协议、SSL警告协议
1.4两个主要协议 • SSL记录协议 • 建立在可靠的传输协议(如TCP)之上 • 它提供连接安全性,有两个特点 • 保密性,使用了对称加密算法 • 完整性,使用HMAC算法 • 用来封装高层的协议 • SSL握手协议 • 客户和服务器之间相互鉴别 • 协商加密算法和密钥 • 它提供连接安全性,有三个特点 • 身份鉴别,至少对一方实现鉴别,也可以是双向鉴别 • 协商得到的共享密钥是安全的,中间人不能够知道 • 协商过程是可靠的
1.5 SSL V3.O概况 SSL V3.0的加密属性: • 对称加密用于加密应用数据, • 非对称加密用于验证实体和交换密钥 非对称加密算法按用途分为密钥交换算 法和数字签名算法。
1.6 SSL V3.0的通信主体 • SSLV3.0中定义了两个通信主体:客户和服务器。 SSL的客户和服务器和应用层的客户/服务器中的客户和服务器的含义不同: • 应用层从请求服务和提供服务的角度定义客户和服务器 • SSLV3.0从在建立加密参数的过程中扮演的角色来定义客户和服务器。
2 SSLV3.O中的状态 SSL V3.0有两个重要的、贯穿始终的概念: • SSL连接(connection): • 一个连接是一个提供一种合适类型服务的传输(OSI分层的定义)。 • SSL的连接是点对点的关系。 • 有状态:每一个连接和一个会话关联。 • SSL会话(session): • 一个SSL会话是在客户与服务器之间的一个关联。会话由握手协议(Handshake Protocol)创建。会话定义了一组可供多个连接共享的密码安全参数。 • 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价。
2.1 会话状态和连接状态 • 会话状态 会话状态包含了标识一个会话的特征的信息和握手协议的协商结果。Client和server都需要记住已建立的所有的会话的状态。会话状态供握手协议层使用,特别是当恢复一个会话的情形下。
2.1 会话状态和连接状态 • 会话状态包括如下元素: • sessionidentifier会话标识符,由server视具体情况决定,它标识一个正在建立的会话或一个被恢复的会话。 • peercertificateserver(和client)的X.509v3格式的证书。此元素可为null,视是否验证Server或Client而定。 • compressionmethod压缩算法,用于加密前对数据进行压缩。 • cipherspec握手协议协商的一套加密参数,包括对称加密算法、MAC算法(即Hash算法)和一些加密属性,例如,Hash长度等。
2.1 会话状态和连接状态 • 会话状态的特点: • 会有多个连接状态与一个会话相关联 • 一旦一个会话建立,就存在一个读或写的当前状态 • 在握手协议中,创建了挂起的读写状态 • 成功的握手协议,将挂起状态转变为当前状态
2.1 会话状态和连接状态 • 会话状态参数有: • Session identifier:服务器选择的一个任意字节序列,用以标识一个活动的或可激活的会话状态。 • PeerCertificate:标识服务器的X.509.v3证书。可为空。 • Compressionmethod:加密前进行数据压缩的算法。 • Cipherspec:指明数据体加密的算法(无,或DES等) • 散列算法(如MD5或SHA-1)用以计算MAC。还包括其它参数,如散列长度。 • Mastersecret:48位秘密,在client与server之间共享。 • Isresumable:一个标志,指明该会话是否能用于产生一个新连接。
2.1 会话状态和连接状态 • 连接状态 • 连接状态包含了Client和Server在传输数据过程中使用的加密密钥、MACsecrets、Ivs(只有CBC方式的分析加密需要使用)以及Client和Server的随机数。Client和Server只需在一个连接存在时记住这个连接的状态。连接状态为记录协议层所使用,记录协议层按照Cipher Spec和连接状态给出的参数进行加/解密等操作。
2.1 会话状态和连接状态 连接状态包括如下元素: • serverandclientrandoms:Server和client为当次连接选择的随机数。 • serverwriteMACsecret:Server对要发送的数据进行MAC操作所使用的secret ,是Client的readMACsecret。 • clientwriteMACsecret:Client对要发送的数据进行MAC操作所使用的secret,是Server的readMACsecret。 • serverwritekey:Server用来加密数据、Client用来解密数据的对称加密密钥。
2.1 会话状态和连接状态 • clientwritekey:Client用来加密数据、Server用来解密数据的对称加密密钥。 • initializationvectors为CBC方式分组加密所使用的初始向量,每一个密钥有一个初始向量。 • seuqencenumbers:Server/Client为其在一个连接中发送和接收的消息分别记序列号,即两个方向上分别有各自的序列号。当Server/Client发送或接收到ChangeCipherSpec消息时,将相应方向上的序列号置0。
2.2 预备状态和当前操作状态 • 握手层协商的加密参数和生成的密钥何时对记录层生效? • Client和Server如何协调起来同时实施新的加密参数和密钥? • 这些工作主要靠SSLV3.0中定义的预备状态(ThePendingState)和当前操作状态(TheCurrentOperatingState)以及ChangeCipherSpec消息来实现。
2.2 预备状态和当前操作状态 • 预备状态和当前操作状态 • SSL用两个状态有效地实现了握手协议的协商结果和新生成的密钥对记录层生效: • 预备状态 包含了本次握手过程协商好的压缩、加密、计算MAC算法(不包含密钥交换算法)以及密钥等。 • 当前操作状态 包含了记录层正在使用的压缩、加密、计算MAC算法(不包含密钥交换算法)以及密钥等。
2.2 预备状态和当前操作状态 • 读状态和写状态 • client和server都有各自独立的读状态和写状态。 • 读状态(The Read State) 读状态中包含解压缩算法、解密算法、验证MAC的算法和解密密钥等。 • 写状态(The Write State) 写状态中包含压缩算法、加密算法、计算MAC的算法和加密密钥等。
2.2 预备状态和当前操作状态 预备状态、当前操作状态与读状态、写状态结合成4个逻辑状态: • 预备读状态(The Pending Read State) • 预备写状态(The Pending Write State) • 当前读状态(The Current ReadState) • 当前写状态(The Current Write State) 以上4种逻辑状态中的参数取自于会话状态和连接状态。Client和Server都具有这4种逻辑状态。当前读状态和当前写状态构成记录协议层的操作环境,所有的上层数据都在这两种状态下被压缩/解压缩、加/解密、计算/校验MAC。
2.2 预备状态和当前操作状态 Client/Server接收到ChangeCipherSpec消息后,立即指导记录层把预备读状态中的内容拷贝进当前状态,并清空预备读状;Client/Server在发送了ChangeCipherSpec消息后,立即指导记录层把预备读状态中的内容拷贝进当前状态,并清空预备写状态。
3 记录层协议 • 记录协议为SSL连接提供两种服务: • 保密性。Handshake Protocol定义一个共享的保密密钥用于对SSL有效载荷加密。 • 消息完整性。Handshake Protocol定义一个共享的保密密钥用于形成MAC。 记录协议层的功能是根据当前会话状态给出的压缩算法,Cipher Spec给出对称加密算法、MAC算法、密钥长度、Hash长度、IV长度等参数,以及连接状态中给出的Client和Server的随机数、加密密钥、MAC secrets JVs、消息序列号对当前的连接中要传送的高层数据实施压缩/解压缩、加/解密、计算/校验MAC等操作。
3 记录协议 • 对记录协议层来讲,要封装的高层协议有4类: • Changecipherspec协议 • Alert协议 • Handshake协议 • 应用层协议,例如,HTTP、FTPZELNET
3.1记录协议操作过程 • 记录协议操作过程如图所示:
3.1记录协议操作过程 • SSL记录协议中的操作: • 第一步,fragmentation。 • 上层消息的数据被分片成214(16384)字节大小的块,或者更小。 • 第二步,compression(可选)。 • 必须是无损压缩,如果数据增加的话,则增加部分的长度不超过1024字节
3.1记录协议操作过程 • 第三步,MAC计算:使用共享的密钥MAC_write_secret。 • hash(MAC_write_seret||pad_2||hash(MAC_write_secret||pad_1|| • seq_num||SSLCompressed.type||SSLCompressed.length||SSLCompressed.fragment) • 其中: • MAC_write_secret:共享的保密密钥。 • hash:密码散列函数(MD5或SHA-1)。 • pad_1:0x36重复48次(MD5); • 或40次(SHA-1)。 • pad_2:0x5C重复48次(MD5); • 或40次(SHA-1)。 • seq_num:该消息的序列号。 • SSLCompressed.type:更高层协议用于处理本分段。 • SSLCompressed.length:压缩分段的长度。 • SSLCompressed.fragment:压缩的分段(无压缩时为明文段)。 • 注:非常类似HMAC。
3.1记录协议操作过程 • 第四步, 加密, 可供选择的加密算法: • 采用CBC,算法由cipherspec指定 • 数据长度不超过214+2048字节,包括IV, • 初始协商指定,以后,前后记录连接起来 • 说明:如果是流密码算法,则不需要padding
3.2 SSL记录格式 • SSL记录格式 • ContentType—— 8位,上层协议类型 • Majorversion,Minnorversion—— 16位,主次版本 • 压缩长度:16位——加密后数据的长度,不超过214+2048字节 • EncryptedDatafragment—— 密文数据
4 Change Cipher Spec协议 • 该协议的作用是标志加密策略的改变。该协议只有一条消息:ChangeCipherSpec消息。Client和Server都发送此消息,通知接收方继该消息之后发送的消息将采用握手层刚协商好的算法、密钥进行压缩,计算MAC和加密。 • ChangeCipherspec消息的接收方指导记录层将预备读状态拷贝给当前读状态; • ChangeCipherspec消息的发送方指导记录层将预备写状态拷贝给当前写状态。 Change Cipherspec消息由一个值为1的单字节构成, 用以将挂起状态转至当前状态,导致当前加密处理包用于该连接。
5 Alert协议 • Alert协议包括若干个alert消息。Alert消息的作用是当握手过程或数据加密等操作出错或发生异常情况时,向对方发出警告或中止当前连接。根据错误的严重程度,Alert消息分为两类:警告alert消息和致命alert消息。致命alert消息立即中止当前连接,并将与这个连接相关的会话的session-id作废,以免这个会话被继续用来建立新的连接。alert消息被加密传输。 • Alert消息由两个字节构成: • Level= 1(warning); • 2(fatal) SSL将立即关闭本连接,本会话的其他 连接可以继续,但不能创建新连接。 • Alert= 具体警告编码,如:unexpected_message • bad_record_mac(均为fatal的警 告内容)
6 握手协议 • 握手协议层的作用是验证实体身份、协商密钥交换算法、压缩算法和加密算法、完成密钥交换以及生成密钥,用来保护在SSL记录中发送的数据。 • SSL V3.0握手协议格式:
6 握手协议 • SSL握手协议的流程: • 交换Hello消息,对于算法、交换随机值等协商一致 • 交换必要的密码参数,以便双方得到统一的premaster secret • 交换证书和相应的密码信息,以便进行身份认证 • 产生master secret • 把安全参数提供给SSL记录层 • 检验双方是否已经获得同样的安全参数
6 握手协议 • SSL握手协议使用的消息
5 Alert协议 • Alert消息共有12种,按功能分为两类: • close-notify消息 通知接收方、发方不再使用当前的连接进行消息的发送。Client和Server都通过发送此消息来发起结束当前的连接。若一个连接不是通过发警告close-notify消息终止的,那么相关的会话将不被恢复。 • erroralerts消息 检测到错误的一方向将向对方发送erroralerts消息。一旦发送了或接收到致命的erroralerts消息,client和Server立即中止当前连接,并忘掉该连接的密钥、MACsecrets以及与该连接相关的session-id。共有11个erroralerts消息。
6 握手协议 • 第一阶段:建立起安全协商 • 客户发送一个client_hello消息,包括以下参数:版本、随机数(32位时间戳+28字节随机序列)、会话ID、客户支持的密码算法列表(CipherSuite)、客户支持的压缩方法列表 • 然后,客户等待服务器的server_hello消息 • 服务器发送server_hello消息,参数:客户建议的低版本以及服务器支持的最高版本、服务器产生的随机数、会话ID、服务器从客户建议的密码算法中挑出一套、服务器从客户建议的压缩方法中 挑出一个
6 握手协议 • CipherSuite • 第一个元素指定了密钥交换的方法,SSL支持以下一些方法: • RSA,要求服务器提供一个RSA证书 • DH(Diffie-Hellman),要求服务器的证书中包含了由CA签名的DH公开参数。客户或者在证书中提供DH公开参数,或者在密钥交换消息中提供此参数 • EDH(Ephemeral Diffie-Hellman),产生临时的密钥,DH公开参数由发送者的私钥进行签名,接收者用对应的公钥进行验证 • 匿名的DH,不加鉴别。会受到中间人攻击 • 然后,指定以下信息 • 加密算法,和类型(流还是分组密码算法) • HMAC算法,MD5还是SHA-1 • 是否可出口 • HashSize • Key Material • IV Size
6 握手协议 • 第二阶段:服务器鉴别和密钥交换 • 服务器发送自己的证书,消息包含一个X.509证书,或者一条证书链 • 除了匿名DH之外的密钥交换方法都需要 • 服务器发送server_key_exchange消息 • 可选的,有些情况下可以不需要。只有当服务器的证书没有包含必需的数据的时候才发送此消息 • 消息包含签名,被签名的内容包括两个随机数及服务器参数 • 服务器发送certificate_request消息 • 非匿名server可以向 客户请求一个证书 • 包含证书类型和CAs • 服务器发送server_hello • _done,然后等待应答
6 握手协议 • 第三阶段:客户鉴别和密钥交换 • 客户收到server_done消息后,它根据需要检查服务器提供的证书,并判断server_hello的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器 • 如果服务器请求证书的话,则客户首先发送一个certificate消息,若客户没有证书,则发送一个no_certificate警告• 然后客户发送client_key_exchange消息,消息的内容取决于密钥交换的类型 • 最后,客户发送一个certificate_verify消息,其中包含一个签名,对从第一条消息以来的所有握手消息的HMAC值(用master_secret)进行签名
6 握手协议 • 第四阶段:结束 • 第四阶段建立起一个安全的连接 • 客户发送一个change_cipher_spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中 • 然后,客户用新的算法、密钥参数发送一个finished消息,这条消息可以检查密钥交换和鉴别过程是否已经成功。其中包括一个校验值,对所有以来的消息进行校验 • 服务器同样发送change_cipher_spec消息和finished消息 • 握手过程完成,客户和 • 服务器可以交换应用层 • 数据
6 握手协议 • 密钥交换算法 • SSL记录协议需要:CipherSuite, master secret,and the client and server random values • 在hello消息中,交换随机数以及各种算法 • 两类密钥交换算法: • RSA,客户产生一个48字节的pre_master_secret,然后通过服务器的公钥传递给服务器 • Diffie-Hellman,双方协商得到的密钥被用作pre_master_secret • 对于各种密钥交换算法,从pre_master_secret计算得到Master_secret,然后从内存中删除 • Master_secret总是48字节长,而pre_master_secret长度不定,取决于密钥交换算法
6 握手协议 • Master_secret的产生 • SSL 3.0 Master_secret = MD5(pre_master_secret‖SHA(‘A’‖pre_master_secret ‖ ClientHello.random ‖ServerHello.random)) ‖ MD5(pre_master_secret‖SHA(‘BB’‖pre_master_secret ‖ ClientHello.random ‖ServerHello.random)) ‖ MD5(pre_master_secret‖SHA(‘CCC’‖pre_master_secret ‖ ClientHello.random ‖ServerHello.random)) • TLS 1.0 master_secret = PRF(pre_master_secret, “master secret”, ClientHello.random + ServerHello.random)[0..47] * PRF(secret, label, seed)为伪随机函数
6 握手协议 • 伪随机函数PRF(secret,label,seed) • P_hash(secret, seed) = • +HMAC_hash(secret, A(1) + seed) • +HMAC_hash(secret, A(2) + seed) • +HMAC_hash(secret, A(3) + seed)+ ... • 这里A()定义如下: • A(0) = seed A(i) = HMAC_hash(secret, A(i-1)) • 伪随机函数 • PRF(secret, label, seed) =P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed); • 这里,S1和S2为secret的各一半,如果secret为奇数个字节,则S1和S2共享一个字节
6 握手协议 • 重用一个SSL会话 • 客户和服务器在交换hello消息中,客户要求重用已有的SSL会话,服务器同意使用cache中的会话 • *sessionid • 跳过第二第三阶段,直接把SSL会话中的参数传递给SSL记录层
7 TLS/SSL安全性分析 • 一些常见的攻击手法 • 针对密钥算法的破解 • 取决于算法的强度,协商过程 • 利用明文模式的攻击 • 上层协议中常常有一些固定的模式可以参考,比如http协议中get字节串 • 构造字典(密文-密钥对),查字典 • TLS办法:用长密钥,使得不可能构造这样的字典 • 重放攻击 • TLS中的nonce有32字节(包含时间戳),可用于避免重放攻击 • 会话ID标识了一个完整的会话,要重放部分会话需要知道私钥 • 中间人攻击 • 通过证书来认证对方 • 对于双方都是匿名的模式,中间人攻击也是成立的