第5章 协议安全技术.ppt

用连接的当前状态中指定的MAC算法对TLSCompressed计算消息摘要。计算方法如下所示: HMAC_hash(MAC_write_secret, seq_num ||TLSCompressed.type || TLSCompressed.version||TLSCompressed.length|| TLSCompressed.fragment)) 其中,HMA_hash是当前状态规定的数字摘要算法,seq_num是本TTL分片的消息序列号,其它内容由TLSCompressed结构确定。 用加密算法加密压缩数据和消息摘要,形成密文结构TLSCiphertext。由于TLS支持分组加密和流密码加密,因此TLSCiphertext存在两个对应的结构stream-ciphered struct和block-ciphered struct。前者是流密码的密文结构,而后者是分组密码的密文结构,其定义如下所示: stream-ciphered struct { opaque content[TLSCompressed.length];//加密后的数据 opaque MAC[CipherSpec.hash_size];//第三步中计算所得消息摘要值 } GenericStreamCipher;//流密码的密文结构 block-ciphered struct { opaque IV[CipherSpec.block_length];//加密所用的初始化向量 opaque content[TLSCompressed.length]; //加密后的数据 opaque MAC[CipherSpec.hash_size]; //第三步中计算所得消息摘要值 uint8 padding[GenericBlockCipher.padding_length];//填充信息 uint8 padding_length;//填充长度 } GenericBlockCipher;//分组密码的密文结构 将加密后的数据封装为TLSCiphertext结构(即添加上TLS记录层协议头),并封装为TCP的数据包后通过网络发送给接收方。 struct { ContentType type;//与TLSCompressed.type相同 ProtocolVersion version;//与TLSCompressed.version相同 uint16 length;// TLSCiphertext.fragment的长度 select (CipherSpec.cipher_type) { case stream: GenericStreamCipher; case block: GenericBlockCipher; } fragment; } TLSCiphertext; 最后所得TLS记录层协议数据包的格式如下所示: 握手协议是TLS中最复杂的部分。握手协议在传递应用程序数据之前使用,其协议消息通过TLS记录层协议来封装转送。客户和服务器在开始传递应用程序数据之前,利用握手协议对使用的TLS协议版本号、准备使用的安全参数等达成一致,并可允许客户端和服务器相互认证。概括而言,握手协议提供的安全服务包括: (1)安全参数协商:完成会话状态信息的协商(包括会话标识、对等实体的证书、压缩算法、加密算法、共享主密钥等); (2)身份认证:使用数字签名算法(如RSA,DSS)实现双向认证。 enum { hello_request(0), client_hello(1), server_hello(2), certificate(11), server_key_exchange (12), certificate_request(13), server_hello_done(14), certificate_verify(15), client_key_exchange(16), finished(20), (255) } HandshakeType; struct { Ha

文档评论(0)

1亿VIP精品文档

相关文档