TLSv1.2简介Jade2016/12目录概述TLS握手过程握手示例附录DTLS概述TLS全称是TransportLayerSecurityProtocol,TLS的前身是网景公司(NetScape)开发的基于TCP的SSL协议(SecureSocketLayer),SSL有三个版本,IETF在SSLv3.0的基础上,制定了TLS1.0规范,目前已经演进到TSLv1.2版本(RFC5246)本胶片介绍RFC5246TLSv1.2规范,TLS的目标是为通讯实体间提供安全的连接,包括对通信实体的相互认证,通讯内容的私密性和完整性保护协议模型TLS基于可靠的传输层,为上层应用提供安全保护逻辑上划分为两层TLSRecordProtocolTLSHandshakeProtocolIPTCPSCTPTLSrecordprotocolAppProtocolHandshakeProtocolChangeCipherProtocolAlertProtocolTLSHandshakeProtocolTLSRecord协议TLSRecordLayer在发送方向逻辑上分为如上四个步骤:分片,压缩(可选),计算Hash摘要(完整性保护),加密,最后交给传输层传输;在接受方向上执行逆过程FragmentationAppProtocolCompressMACEncryptionSenderDefragmentationAppProtocolDecompressMACDecryptionReceiverTCPTCPTLS握手协议TLS握手协议按功能划分为3个子协议握手协议相互认证用于协商加密密钥,MAC密钥用于协商压缩算法变更加密套件协议同于Client和Server通知对端后续封包会受当前协商的加密套件保护告警协议用于将本端发生的异常通知对端用于本端通知对端关闭安全会话连接目录概述TLS握手过程握手示例附录DTLSTLS全流程握手*表示该消息是条件出现TLS全流程握手TLS全流程握手过程说明双方通过交换Hello消息完成算法协商(密钥交换算法,加密算法,MAC算法,压缩算法),交换随机数,校验是否需要恢复会话(ClientHello中携带sessionID执行简短握手过程)双方交换必要的加密参数,以生成premaster密钥双方交换证书和加密信息,完成相互认证双方通过premaster密钥和交换的随机数,生成主密钥将由主密钥派生的加密密钥,MAC密钥等安全参数各自生效到各自的RecordLayer双方互相验证对方生成了一致的安全可选类消息说明ServerCertificate消息:本规范中定义的所有密钥交换算法(除DH_anon外)都需要发送该消息ServerKeyExchange消息:当Server发送的Certificate消息中没有携带足够的信息以支持Client端生成pre_master密钥时(密钥交换算法为DHE_DSS,DHE_RSA,DH_anon)发送该消息ServerCertificateRequest消息:当Server需要认证Client端时,要求Client发送他的证书ClientCertificate消息:当Server发送ServerCertificateRequest要认证客户端时,客户端通过该消息发送自身证书ClientCertificateVerify消息:该消息用于Server对客户端签名的显示认证,只有客户端的发送的证书表明其有签名能力时才会发送该消息(除包含fixedDH参数外的所有证书)如何导出pre_master密钥Pre_master是master密钥的前身,根据密钥交换算法不同,大体分为两类RSA方式客户端生成48Byte的pre_master密钥(由2byte的协议版本号+46byte的random组成)使用Server证书中的公钥加密后通过ClientKeyExchange发送给ServerDH(Diffie-Hellman)方式双方通过ClientKeyExchange和ServerKeyExchange(如果Server证书中已包含必要参数,可不发送该消息)交换DH算法计算对称密钥的参数,各自根据算法生成pre_master密钥如何导出主密钥主密钥通过pre_master密钥,双方的随机数,和一个常量字符串经过伪随机数发生器生成PRF定义参考RFC5246第4节,实际为SHA-256算法迭代多次,直到长度满足主密钥的长度要求如何导出安全参数安全参数通过master密钥,双方的随机数,和一个常量字符串经过伪随机数发生器生成PRF定义参考RFC5246第4节,实际为SHA-256算法迭代多次,直到长度满足能够生成所有安全参数TLS简短握手过程(会话恢复/重建过程)会话重建过程Client需要重建会话时,发送ClientHello携带要重建的SessionIDServer回复ServerHello,ChangeCipherSpec和Finished(已被加密保护)给Client,并按照重建会话的安全参数开始传输/接收封包Client发送ChangeCipherSpec和Finished(已被加密保护)给Server,并按照重建会话的安全参数开始传输/接收封包会话重建完成目录概述TLS握手过程握手示例附录DTLSTLS全流程握手示例(TLSv1.1举例)此时示例基于TLSv1.1采用TLS_RSA_WITH_AES_128_CBC_SHA建立TLS会话的过程TLS全流程握手示例(TLSv1.1举例)Client支持的加密套件Client支持的压缩算法Client支持的扩展,signature_algorithms由本规范定义,其他扩展由其他RFC文档定义SessionID为0表示全流程协商后的加密套件,压缩算法,扩展Server的证书,从CipherSutie可以看出是一个包含RSA公钥和签名的数字证书(x.509v3)预共享秘钥(已被加密)安全参数启用,后续封包启动安全保护被加密的Finshed握手消息Server根据生成的预共享密钥,生成安全参数并启用被加密的Finished握手消息应用协议数据被安全保护TLS全流程握手示例(TLSv1.2举例)此时示例基于TLSv1.2采用TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(RFC4492定义)建立TLS会话的过程TLS全流程握手示例(TLSv1.2举例)TLS会话恢复示例(TLSv1.1举例)此时示例基于TLSv1.1采用TLS_RSA_WITH_AES_128_CBC_SHA会话恢复的过程TLS会话恢复示例(TLSv1.1举例)TLS会话恢复示例(TLSv1.2举例)附录:TLS相关RFC标准rfc4346TLSv1.1rfc5246TLSv1.2rfc4279Pre-SharedKeyCiphersuitesforTLSrfc4492EllipticCurveCryptography(ECC)CipherSuitesforTLSrfc5280InternetX.509PublicKeyInfrasructrureCertificateandCerificateRevocationListProfilerfc6066TLSExtensions_Extensiondefinitionsrfc6347DTLSv1.2rfc6655AES-CCMCipherSuitesforTLSrfc7250UsingRawPublicKeysinTransportLayerSecurity(TLS)rfc7251AES-CCMEllipticCurveCryptography(ECC)CipherSuitesforTLS附录:术语AES:AdvancedEncryptionStandard,已被广泛应用的对称加密标准,采用块加密方式(Block),AES算法密钥长度可以为128,192,256bit,块长度为16字节,TLS目前支持的密钥长度为128和256bitasymmetriccipher:非对称密码,加密和解密采用不同的密钥AEAD:authenticatedencryptionwithadditionaldata,一种同时支持消息机密性和认证的对称加密算法Authentication:一个实体确认另一个实体身份的能力blockcipher:一个算法将明文分成特定bit位组操作,以前是64bit,现在典型的块大小为128bitBulkcipher:一个加密大量数据的对称性加密算法CBC:cipherblockchaining,用分组密码加密的每个明文块首先与前一密文块(或者在第一块的情况下,与初始化向量)异或运算的模式。对于解密,首先对每个块进行解密与前一密文块(或IV)进行异或运算。Certificate:证书,作为X.509协议(也称为ISO认证框架)的一部分,证书由可信认证机构分配,并对证书持有者的身份或一些其他属性及其公钥之间提供强的绑定Client:启动到服务器的TLS连接的应用程序实体。这可以或可以不暗示客户端发起了底层传输连接。服务器和客户端之间的主要操作差异是服务器通常被认证,而客户端仅被可选地认证。ClientWriteKey:客户端对发送数据加密的密钥ClientWriteMAC:客户端对发送数据做认证的密钥Connection:连接是提供适当类型的服务的传输(在OSI分层模型定义中)。对于TLS,此类连接是对等关系。连接是瞬态的。每个连接都与一个会话相关联。附录:术语DES:DES[DES]仍然是一种非常广泛使用的对称加密算法,虽然它现在被认为相当弱。DES是具有56位密钥和8字节块大小的块密码。请注意,在TLS中,为了密钥生成的目的,DES被视为具有8字节密钥长度(64位),但它仍然只提供56位保护。(假定每个密钥字节的低位被设置为在该密钥字节中产生奇数奇偶校验。)DES也可以在模式[3DES]中操作,其中对于每个数据块使用三个独立密钥和三个加密;这使用168位密钥(在TLS密钥生成方法中为24字节),并提供相当于112位的安全性。DSS:DigitalSignatureStandard,用于数字签名的标准,包括数字签名算法,由美国国家标准和技术研究所批准digitalsignatures:数字签名,数字签名使用公共密钥加密和单向散列函数来产生可以被认证的数据的签名,并且难以伪造或否认。IV:InitializationVector,当在CBC模式中使用块密码时,在加密之前,初始化向量与第一明文块进行异或运算。MAC:MessageAuthenticationCode,消息认证码是从消息和一些秘密数据计算的单向散列。在不知道秘密数据的情况下伪造是困难的。其目的是检测消息是否已被改变。MD5:MD5[MD5]是一种散列函数,可将任意长的数据流转换为固定大小(16字节)的散列。由于密码分析的重大进展,在本文件发布时,MD5不再被认为是“安全的”散列函数。publickeycryptography:一种使用双密钥密码的密码技术。使用公钥加密的邮件只能使用关联的私钥进行解密。相反,使用私钥签名的消息可以使用公钥进行验证。one-wayhashfunction:将任意数量的数据转换为固定长度的哈希的单向转换。计算上难以逆转变换或找到冲突。MD5和SHA是单向散列函数的示例。RC4:由RonRivest发明的流密码。RSA::一种非常广泛使用的公钥算法,可用于加密或数字签名附录:术语Server:服务器是响应来自客户端的连接请求的应用程序实体。另请参见“客户端”。Session:TLS会话是客户端和服务器之间的关联。会话由握手协议创建。会话定义了可以在多个连接之间共享的一组加密安全参数。会话可以用于避免每个连接都建立新的安全参数(会话恢复)。