客户端在TLS 1.2中完成了消息?

时间:2016-04-21 10:00:37

标签: tls1.2

我正在实施tls 1.2并且我已经停留在客户端完成的消息上。我的问题是当使用ECDHE_RSA_AES_128_GCM_SHA256密码时,tls 1.2中客户端完成消息的大小和结构是什么。 我用google搜索了这个问题,有人说它的大小是48字节

- > 12字节验证数据

- > 1字节握手类型

- > 3字节验证数据长度

- >和32字节MAC

是否严格?根据RFC 5246完成的消息有 {verify_data [verify_data_length]}

verify_data = PRF(master_secret,finished_label,hash(handshake_messages)

并根据RFC 5246第5节

PRF(秘密,标签,种子)= P_(秘密,标签+种子)

P_hash(秘密,种子)= HMAC_hash(秘密,A(1)+种子)

当我使用sha256为verify_data计算HMAC时,它的大小为32字节。所以我在verify_data大小和完成的消息结构中感到困惑。请有人引导我走上正确的道路。

1 个答案:

答案 0 :(得分:0)

TLS v1.2中ECDHE_RSA_AES_128_GCM_SHA256的客户端完成消息结构是:
1字节:握手类型,完成消息的0x14
3个字节:验证数据的长度,12个字节的0x00000c
12个字节:验证数据,按照您的指示计算,例如,0x32c2b389cb39b3f5f7e657db

这是完成的消息,在这种情况下是16个字节 1400000c32c2b389cb39b3f5f7e657db

您提到的SHA256 MAC的32个字节不是消息的一部分。当消息被加密时,MAC被包含在记录层中。由于在更改密码规范消息之后发送完成消息,因此它始终是加密的。

对于AES CBC,MAC附加到加密数据,因此您将最后32个字节视为MAC。但是,对于GCM来说,情况有所不同。有一个8字节的随机数,加密数据和一个16字节标签。更多信息:
https://tools.ietf.org/html/rfc5288(AES GCM密码套件)
https://tools.ietf.org/html/rfc5289(椭圆曲线AES GCM密码套件)