2016-04-21 52 views
0

我正在實施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大小和完成的消息結構中感到困惑。請有人引導我走向正確的道路。

+0

我能問你爲什麼C#,C和C++標有這個問題都非常不同的語言 –

+0

我只需要概念不管使用哪種語言。 –

+0

這裏可能有一些有用的信息和它所做的參考。 http://security.stackexchange.com/questions/65622/client-server-encryption-technique-explanation-tls-ecdhe-rsa-with-aes-128-gcm-s –

回答

0

爲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密碼套件)