如何在pycryptodom中设置cha20poly1305的块计数器

2024-06-16 12:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试解密OpenSSH数据包,这些数据包是使用chacha20-poly1305加密的。到目前为止,我可以解密数据包长度并检查MAC(我使用的是pycryptodome),但是当我尝试解密有效负载时,它只返回乱码输出。你知道吗

我正在解密长度使用:

    nonce = int(seqnr).to_bytes(8, 'big')  
    cipher_len = ChaCha20.new(key=key1_hex, nonce=nonce)  
    length = cipher_len.decrypt(binascii.a2b_hex(cipher[:8]))  

seqnr是数据包序列号,key1\u hex是加密密钥第二部分的十六进制表示,cipher[:8]是数据包的前4个字节。
这个很好用!你知道吗

现在,我继续使用加密密钥的第一部分解密相同的nonce和有效负载:

        cipher_chacha = ChaCha20.new(key=key2_hex, nonce=int(seqnr).to_bytes(8, 'big'))
        ciphertext = cipher_chacha.decrypt(binascii.a2b_hex(cipher[8:-32]))

在这个https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.chacha20poly1305文档之后,openssh github站点告诉我必须使用块计数器1来解密有效负载。但是在https://pycryptodome.readthedocs.io/en/latest/src/cipher/chacha20_poly1305.html#chacha20-poly1305上的文档中,似乎没有定义块计数器编号的选项(似乎它从默认值0开始,因为对标记的验证对我有效)。
这是真的吗?还是我遗漏了什么? 直到现在它还不起作用,我很肯定这是因为块计数器的错误启动。你知道吗

编辑: 解决方法是调用密码_查查。寻找(64)解密前!然后它将从块计数器1开始!你知道吗


Tags: tolenbytes计数器数据包nonceintcipher