客户端在TLS 1.2中完成的消息?
我正在实施tls 1.2,并且我卡在客户端完成的消息上。我的问题是当使用ECDHE_RSA_AES_128_GCM_SHA256密码时,tls 1.2中客户端已完成消息的大小和结构如何。 我一派这个问题有人表示,其大小为48字节客户端在TLS 1.2中完成的消息?
- > 12字节校验数据
- > 1字节握手类型
- > 3字节校验数据长度
- >和32字节的MAC
它是rigth?并根据RFC 5246完成消息具有{verify_data [verify_data_length]}
和verify_data = PRF(master_secret,finished_label,散列(handshake_messages)
和根据RFC 5246第5
PRF(秘密,标签,种子)= P_(秘密,标签+种子)
和P_hash(秘密,种子)= HMAC_hash(秘密,A(1)+ S eed)
当我使用sha256为verify_data计算HMAC时,它的大小是32字节。所以我在verify_data大小和完成的消息结构中感到困惑。请有人引导我走向正确的道路。
为ECDHE_RSA_AES_128_GCM_SHA256在TLS V1.2客户完成消息的结构是:
1字节:握手类型,0×14用于完成消息
3字节:验证数据的长度,用于0x00000c 12个字节
12字节:验证数据,计算为你所指出的,例如,0x32c2b389cb39b3f5f7e657db
这是完成消息,在这种情况下是16个字节 1400000c32c2b389cb39b3f5f7e657db
的32个字节你提及的SHA256 MAC不是消息的一部分。当消息被加密时,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密码套件)
我能问你为什么C#,C和C++标有这个问题都非常不同的语言 –
我只需要概念不管使用哪种语言。 –
这里可能有一些有用的信息和它所做的参考。 http://security.stackexchange.com/questions/65622/client-server-encryption-technique-explanation-tls-ecdhe-rsa-with-aes-128-gcm-s –