我试图了解最终的加密握手消息是如何工作的
为此,我试图确保我的算法给出与此示例相同的结果:
https://www.cloudshark.org/captures/56acf0481a79
由于 0xFEFF 标头,我很确定 DTLS 1.0 遵循 RFC 4347。
已知的是
Preshared Key: 123456789012345678901234567890aa
Server Random: d87eeeb79b8c5bb29a6e01236ca75a00d515ac18a060e7b4dd4aa85d66130b41
Client Random: df14cead6b8a82a7f0fa710ed4437fa747f5f20e160b6865a3486ca3abc1c427
Cipher Suite: TLS_PSK_WITH_AES_256_CBC_SHA
我正在执行以下步骤:
预大师秘密
premaster secret 的形成如下:如果 PSK 的长度为 N 个八位字节,则连接一个值为 N 的 uint16、N 个零八位字节、一个值为 N 的第二个 uint16 以及 PSK 本身。(RFC 4279 第 2 节)
001000000000000000000000000000000000
0010123456789012345678901234567890aa
master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random) [0..47];
PRF 被定义为结合两个不同的散列函数。RFC 2246 的第 5 节:
197c358a9de99d7c50120aea40af2095
c7c340719385f23f5355004c07d9f896
681942c494eb0d77992c3acf1bc92e4f
key_block = PRF(SecurityParameters.master_secret, "key expansion", ServerHello.random + ClientHello.Random) 根据 RFC4346第 6.3 节
- 客户端 MAC 密钥 (SHA1) 20 个字节
- 服务器 MAC 密钥 (SHA1) 20 个字节
- 32 字节的客户端加密密钥 (AES256)
- 32 字节的服务器加密密钥 (AES256)
- 客户端 IV 16 字节(AES 使用 128 位块)
- 服务器 IV 16 字节(AES 使用 128 位块)
在这种情况下,我们需要生成 136 字节
4921654a071c95e2ddb8e3a8162258fa
acffdd8def0a0b7ce49f492a6f088af9
e539aae851232337c90564d6d4b01fb1
0b34466fe379e34b10b5738203453253
3fe0823297ca5c111b3d23dfb6145447
a638a84376f21a845de503b324f2beab
e145274f680519cc2ecc088e0bf6fb37
69b31c82df3ce706f6ac2cb45226234a
dbd564a2b43c79ee
如果以上是正确的那么
Client Write Key: c90564d6d4b01fb10b34466fe379e34b
10b57382034532533fe0823297ca5c11
Client Write IV: 2ecc088e0bf6fb3769b31c82df3ce706
因此,如果我用上面的密钥和 IV 解密客户端握手加密记录,我会得到
7fd6314cf559a60c14a44a2fd4ac5494
1400000c000200000000000ce93fd3d8
557a3eb9574d25943e01f797b982a5ed
35ce268520ef7475144441ea03030303
我如何获得上面的值?
我知道这需要进行散列(Client Hello + Sever Hello + Sever Hello Done + Client Key Exchange 的串联)
010000390000000000000039feffdf14
cead6b8a82a7f0fa710ed4437fa747f5
f20e160b6865a3486ca3abc1c4270000
0006008d008c00ff0100000900230000
000f0001010200003600000000000000
36feffd87eeeb79b8c5bb29a6e01236c
a75a00d515ac18a060e7b4dd4aa85d66
130b4100008d00000eff010001000023
0000000f0001010e0000000001000000
00000010000011000100000000001100
0f436c69656e745f6964656e74697479
任何人都可以帮忙吗?