使用内存派生密钥通过SSH解密chacha20poly1305

时间:2019-06-05 09:48:27

标签: python encryption ssh pycrypto pycryptodome

我正在尝试使用内存派生密钥通过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:]))

0 个答案:

没有答案