我正在实现 TLS1.2 服务器套接字的简化版本,并且在解密客户端“已完成”消息时遇到了麻烦。我已成功将消息交换到客户端“已完成”消息。我已经正确计算了 master_secret(从浏览器中提取的 master_secret 与我计算的一个匹配),扩展了密钥材料,但我没有运气解密客户端消息。这是我到底做了什么:
交换了以下重要结果的消息:
cipher_suite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
master_secret = "bee102cfec022435774e97a9718628798643563b2e95626dc405f20660e023b6da73846bf54879bc53780760535316fd"
client_random = "99ab80aa2659df3ddb367f0d1e65b121d87782e26f7d75a7121c763833138529"
server_random = "0000000000000000000000000000000000000000000000000000000000000000"
基于以上,我生成了以下关键材料:
key_client_write = "64288957f9ad56be81db1af6a00f49713bd1fc7e89a56093fc8d18a9efe62267"
key_server_write = "280b12c845df613e5bc62f92337e6cbb91fcba5a63df535c77d06d16b5ef85ce"
但是在客户端(Firefox 浏览器)发送的“完成”消息之后解密没有运气,我将记录层标头与加密部分分开一个空格:
client_finished = "1603030040 b5d75b9c79a08d3895ae4e623187078e099c9af49ec5dcd65bfe31c11b0a404689b75d4bf73aabb74c947449adf52c15d01f541dbccf83c14ef8cdbfaeef94d3"
我将数据处理如下:
iv = "b5d75b9c79a08d3895ae4e623187078e"
ciphertext = "099c9af49ec5dcd65bfe31c11b0a404689b75d4bf73aabb74c947449adf52c15d01f541dbccf83c14ef8cdbfaeef94d37ffbbbdfe042200e2db7"
尝试使用这两个密钥,但解密的消息没有任何意义。
我的键是错的,还是我对数据的解释有误?