TLS1.2解密“已完成”消息

时间:2015-11-24 16:52:09

标签: ssl encryption aes tls1.2

我正在实现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"

试图使用两个密钥,但解密的消息没有任何意义。

我的钥匙是错的还是我在解释数据错误?

1 个答案:

答案 0 :(得分:0)

好的,我正在以错误的方式解释key_material。我为MAC密钥占用了32个字节,但它应该是20个字节。