我正在尝试使用内存派生密钥通过SSH连接解密chacha20。我正在跟踪的源代码以及从中导出密钥的源代码位于:https://github.com/openssh/openssh-portable
文档后:https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.chacha20poly1305#L47
其中描述了chacha20在OpenSSH中的用法以及如何导出密钥,该密钥分为两部分,其中一部分用于加密长度,另一部分用于有效负载。
使用的随机数是数据包的序列号。
现在我的问题是。
我正在使用tcpdump来获取连接的数据包信息,并且有一个序列号(如下所示的代码),但是它似乎不起作用。
我也尝试使用1或0作为序列号,但是它也没有用。
我将序列号用作字节数组,所以类似b'\x00\x00\x00\x00\x00\x00\x00\x01'
也许有人看到了问题? 预先致谢
一个Tcpdump数据包:
09:42:05.231752 IP 192.168.12.29.35144 > 192.168.12.46.ssh: Flags [P.], seq 2723642976:2723643012, ack 716398578, win 452, options [nop,nop,TS val 1806461459 ecr 4294897807], length 36
0x0000: 4510 0058 b419 4000 4006 ecda c0a8 0c1d
0x0010: c0a8 0c2e 8948 0016 a257 7e60 2ab3 5ff2
0x0020: 8018 01c4 99e6 0000 0101 080a 6bac 6a13
0x0030: fffe f08f 724b 5259 1a86 cba9 11b8 ef0e
0x0040: 57f1 2236 2ca9 6751 1790 db5d 5247 7484
0x0050: 2438 2485 7103 1f22
键1和键2:
30A9C075103A628BABC8735785F075ECCD4E7E9C5BDB784B1DC0EDAB141F3B9C
3A5ADB494C9D13711EF2739ACC606150AFF32BF05C51910E1AC28460AB71998E
密码(不包括标题):
724B52591A86CBA911B8EF0E57F122362CA967511790DB5D524774842438248571031F22
我用于解密的pycrytodome
代码:
key1_hex = binascii.a2b_hex(key1)
seqnr_hex = binascii.a2b_hex(seqnr)
cipher_len = ChaCha20.new(key=key1_hex, nonce=seqnr_hex)
length = cipher_len.decrypt(binascii.a2b_hex(cipher[:8]))
cipher_chacha = ChaCha20.new(key=binascii.a2b_hex(key2),
nonce=binascii.a2b_hex(seqnr))
ciphertext = cipher_chacha.decrypt(binascii.a2b_hex(cipher[8:]))