TLS, расшифровка сообщения 'Finished'

337
26 января 2018, 20:31

Здравствуйте. Прошу мне помочь, что дальше делать с этим сообщением (HEX)

Сообщение в НЕ расшифрованном виде:

16030100309a547b7c3d1f71601a3686deb6496e60ca02f93cbcd3ed921f47ff5836a606e7d632f0c5e8a1585a964dc3095eeabeea

Сообщение в расшифрованном виде:

1400000cdb4dc24d336cb06128a40a9ec0450f0446643ee9480663586be1735f10fb28d60b0b0b0b0b0b0b0b0b0b0b0b

Я использую CipherSuite: TLS_RSA_WITH_AES_128_CBC_SHA 0x2f. Версия TLS - 1.0

Я получил master secret и key exchange верно, поскольку я расшифровал это сообщение. Ниже отрывок кода:

byte[] CKE_Length = Reader.ReadBytes(3);         //ClientKey Exchange
byte[] CKE_pubkKeyLength = Reader.ReadBytes(2);  //ClientKey Exchange
byte[] CKE_pubkKey = Reader.ReadBytes(256);      //ClientKey Exchange

byte[] pre_master_secret = Program.PrivateKey.Decrypt(CKE_pubkKey, RSAEncryptionPadding.Pkcs1);
byte[] master_secret = TlsUtilities.PRF_legacy(pre_master_secret, "master secret", ByteArray.Concat(ClientRandomBytes, ServerRandomBytes), 48);
byte[] key_block = TlsUtilities.PRF_legacy(master_secret, "key expansion", ByteArray.Concat(ServerRandomBytes, ClientRandomBytes), 104);
byte[] client_write_mac = new byte[20]; 
byte[] server_write_mac = new byte[20];
byte[] client_write_key = new byte[16];
byte[] server_write_key = new byte[16];
byte[] client_write_iv = new byte[16];
byte[] server_write_iv = new byte[16];

Buffer.BlockCopy(key_block, 0, client_write_mac, 0, 20);
Buffer.BlockCopy(key_block, 20, server_write_mac, 0, 20);
//40
Buffer.BlockCopy(key_block, 40, client_write_key, 0, 16);
Buffer.BlockCopy(key_block, 56, server_write_key, 0, 16);
//104
Buffer.BlockCopy(key_block, 72, client_write_iv, 0, 16);
Buffer.BlockCopy(key_block, 88, server_write_iv, 0, 16);
Answer 1

Заголовок зашифрованного сообщения:

16 - тип сообщения - handshake
0301 - версия SSL
0030 - длина сообщения

Расшифрованное сообщение:

14 - тип handshake сообщения - finished
00000c - длина сообщения
db4dc24d336cb06128a40a9e - сообщение
c0450f0446643ee9480663586be1735f10fb28d6 - HMAC
0b0b0b0b0b0b0b0b0b0b0b0b - паддинг

Если вы пишите свой сервер, вы должны проверить паддинг, код аутентификации (HMAC), и само сообщение. Вы используете TLS 1.0, значит должны проверить, соответствуют ли оно спецификации.

Согласно TLS 1.0 спецификации, раздел Finished эти 12 байт должны быть равны:

PRF(master_secret, finished_label, MD5(handshake_messages) + SHA-1(handshake_messages)) [0..11]
READ ALSO
Как правильно использовать IMouse в Selenium

Как правильно использовать IMouse в Selenium

C#, FierFox, Версия Selenium - 38 Задача: эмуляция движения курсора, используя IMouse

258
scrollrect и drop

scrollrect и drop

Я реализовал scrollrectГде есть группа дочерних объектов

316
TLSv1.0, вычисление 'HMAC'

TLSv1.0, вычисление 'HMAC'

ЗдравствуйтеПрошу мне помочь, как сгенерировать HMAC от сообщения? HEX:

251