diffie-hellman ssh keyxchange - PullRequest
       18

diffie-hellman ssh keyxchange

3 голосов
/ 25 мая 2010

Я решил создать примитивный SSH-клиент на C #; вы можете помнить меня по таким сообщениям, как примитивное соединение ssh (низкий уровень) хе-хе.

В любом случае, все хорошо до того момента, когда я инициирую обмен ключами DH. Я сравнил трафик, когда я устанавливаю ssh-соединение (от клиента openssh до сервера openssh), с трафиком, когда мой клиент подключается к тому же серверу openssh.

Клиент OpenSSH -> Сервер OpenSSH (S для сервера, C для клиента): S: SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2 \ r (привет) C: SSH-2.0-OpenSSH_5.2 \ r (представьтесь) C: Обмен ключами Инициатива (0x14 = 20) S: Обмен ключами Инициатива C: Запрос Диффи-Хеллмана GEX (0x22 = 34) (с минимальным значением DH GEX, количеством битов и максимальным значением) S: Ответ обмена ключами Диффи-Хеллмана (с P, G и т. Д.) C: Diffie-Hellman GEX Init S: Diffie-Hellman GEX Ответить

Мой клиент -> Сервер OpenSSH: S: SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2 \ r (привет) C: SSH-2.0-Some_Name \ r (представьтесь) C: Обмен ключами Инициатива (0x14 = 20) S: Обмен ключами Инициатива C: Запрос Диффи-Хеллмана GEX (0x22 = 34) (с минимальным значением DH GEX, количеством битов и максимальным значением)

и затем поддельный TCP-пакет в качестве ответа (возможно, соединение с сервером было разорвано после / по запросу GEX.

Мне еще предстоит использовать AES128 (я думаю, что выбрано шифрование, но я не уверен, как это проверить ...), и я все еще отправляю в несжатом формате, пытаясь получить Значения P, G и т. Д. Для расчета DH.

Итак, где я застрял: RFC 4419 стр. 3 http://www.ietf.org/rfc/rfc4419.txt Я отправил SSH_MSG_KEY_DH_GEX_REQUEST, но сервер не отвечает SSH_MSG_KEX_DH_GEX_GROUP.

Может кто-нибудь дать мне небольшой совет о том, чего я здесь не понимаю? Сервер не понимает мой запрос GEX (из-за ожидающего шифрования или?)?

Любая помощь очень ценится, спасибо:)

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Моим лучшим предположением будет то, что обмен ключами является взаимоисключающим, то есть у сервера openssh нет алгоритма, который ищет клиент или , у клиента нет алгоритма обмена с openssh сервер. Вы можете проверить это, запустив wireshark на putty для сервера openssh, отслеживая обмены и сравнивая его с вашим собственным клиентом.

Я бы оценил предположение, что именно так работает putty, если обмен не удастся, вернемся к другому алгоритму после «запроса сервера openssh» для алгоритма, который он использует ... так как putty является открытым исходным кодом, это может стоить вашего пока взглянем на код, чтобы увидеть, как его выполняет замазка.

0 голосов
/ 25 мая 2010

Я почти уверен, что проблема в том, что после инициализации обмена ключами ключи не используются (правильно).

...