Здравствуйте. Прошу мне помочь, что дальше делать с этим сообщением (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);
Заголовок зашифрованного сообщения:
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]
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости