Алгоритм DES в аутентификации VNC с Python - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь подключиться к серверу VNC (Vino) с использованием аутентификации VNC.Читая RFC 6143 - Remote Framebuffer Protocol, мы можем увидеть, как работает аутентификация VNC.

Используется протокол запроса-ответа, при котором сервер отправляет запрос в 16 байтов, а клиент отвечает запросом, зашифрованным его ключом.Шифрование использует алгоритм DES.

Использование TigerVNC и Wireshark Я прослушал этот процесс, чтобы выполнить этот процесс с Python.

Например,

Это трафик, который японюхал Wireshark между Vino и TigerVNC.Это работает.

Server                                                                 Client
|------------------   Server protocol version: 003.007  ----------------->|
|<-----------------   Client protocol version: 003.007      --------------|
|------------------        Security types: 2        --------------------->|
|<-----------------    Security type selected: VNC (2)  ------------------|
|-------------------        Authentication result: OK           --------->|
|-----  Authentication challenge: b4a7257a443426527dd9d987fa6b099f  ----->|
|<----  Authentication response: 4838c102d8cbb1decd38ecdbec533bc7   ------|

Задачей и ответом являются байты, а не шестнадцатеричные строки.

Но когда я шифрую запрос аутентификации с помощью Python Я получил разные результаты.Я попытался использовать режим операций с блочным шифром различных операций, но безуспешно.

Например

>>> from pydes import des
>>> challenge = "\xb4\xa7\x25\x7a\x44\x34\x26\x52\x7d\xd9\xd9\x87\xfa\x6b\x09\x9f"
>>> key = "testingg"
>>> d = des()
>>> ciphered = d.encrypt(key,challenge,padding=True)
>>> import binascii
>>> ciphered = d.encrypt(key,challenge)
>>> binascii.hexlify(ciphered)
'4f16bc072bf34903e753b3f968b1aa56'

Или с другим модулем Python:

>>> import pyDes
>>> des = pyDes.des("testingg")
>>> challenge = "\xb4\xa7\x25\x7a\x44\x34\x26\x52\x7d\xd9\xd9\x87\xfa\x6b\x09\x9f"
>>> e = des.encrypt(challenge)
>>> binascii.hexlify(e)
'4f16bc072bf34903e753b3f968b1aa56'
>>> binascii.hexlify(des.decrypt(e))
'b4a7257a443426527dd9d987fa6b099f'

Я что-то упустил?В RFC ничего не говорится о режимах шифрования или векторах IV.

Более того, у меня есть исходный код TigerVNC, написанный на Java, и я не хочу иметь ничего особенного в этом вызове.шифрование.

...