SSH договорится о методе шифрования
От: TailWind  
Дата: 19.03.25 19:03
Оценка:
Читаю
https://datatracker.ietf.org/doc/html/rfc4253

Пишу клиент SSH

Пытаюсь договорится с сервером какие алгоритмы шифрования будем использовать

Подключился
Получил от сервера: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
Отправил ему в ответ такую же строчку

Получил от сервера:
SSH_MSG_KEXINIT
packet_length  0x434
padding_length 0x5
cookie         a1b98423f8d41fe8dbea15fc080d9
kex_algorithms
  curve25519-sha256
  curve25519-sha256@libssh.org
  ecdh-sha2-nistp256
  ecdh-sha2-nistp384
  ecdh-sha2-nistp521
  diffie-hellman-group-exchange-sha256
  diffie-hellman-group16-sha512
  diffie-hellman-group18-sha512
  diffie-hellman-group14-sha256
  kex-strict-s-v00@openssh.com
server_host_key_algorithms
  rsa-sha2-512
  rsa-sha2-256
  ssh-rsa
  ecdsa-sha2-nistp256
  ssh-ed25519
encryption_algorithms_client_to_server
  chacha20-poly1305@openssh.com
  aes128-ctr
  aes192-ctr
  aes256-ctr
  aes128-gcm@openssh.com
  aes256-gcm@openssh.com
encryption_algorithms_server_to_client
  chacha20-poly1305@openssh.com
  aes128-ctr
  aes192-ctr
  aes256-ctr
  aes128-gcm@openssh.com
  aes256-gcm@openssh.com
mac_algorithms_client_to_server
  umac-64-etm@openssh.com
  umac-128-etm@openssh.com
  hmac-sha2-256-etm@openssh.com
  hmac-sha2-512-etm@openssh.com
  hmac-sha1-etm@openssh.com
  umac-64@openssh.com
  umac-128@openssh.com
  hmac-sha2-256
  hmac-sha2-512
  hmac-sha1
mac_algorithms_server_to_client
  umac-64-etm@openssh.com
  umac-128-etm@openssh.com
  hmac-sha2-256-etm@openssh.com
  hmac-sha2-512-etm@openssh.com
  hmac-sha1-etm@openssh.com
  umac-64@openssh.com
  umac-128@openssh.com
  hmac-sha2-256
  hmac-sha2-512
  hmac-sha1
compression_algorithms_client_to_server
  none
  zlib@openssh.com
compression_algorithms_server_to_client
  none
  zlib@openssh.com
languages_client_to_server
languages_server_to_client

first_kex_packet_follows 0x0
reserved  0x0


Отправил ему то же самое в ответ

А дальше что?
В доке не написано, что дальше делать
Как ему сказать какие алгоритмы я выбрал из его списка?
И почему он мне не отвечает какие ключи выбрал он из моего списка?

И еще я не понимаю зачем поле first_kex_packet_follows?
Отредактировано 19.03.2025 19:40 TailWind . Предыдущая версия . Еще …
Отредактировано 19.03.2025 19:08 TailWind . Предыдущая версия .
Отредактировано 19.03.2025 19:06 TailWind . Предыдущая версия .
Отредактировано 19.03.2025 19:04 TailWind . Предыдущая версия .
Отредактировано 19.03.2025 19:04 TailWind . Предыдущая версия .
Re: SSH договорится о методе шифрования
От: kov_serg Россия  
Дата: 19.03.25 20:15
Оценка: 2 (1)
Здравствуйте, TailWind, Вы писали:

TW>А дальше что?

TW>В доке не написано, что дальше делать
Там написано: предоллагается первый из списка + остальные которые может.

The first algorithm in each name-list MUST be the preferred (guessed)
algorithm.

Как только первые строки совпали ехать дальше.

After the SSH_MSG_KEXINIT message exchange, the key exchange
algorithm is run. It may involve several packet exchanges, as
specified by the key exchange method.

Once a party has sent a SSH_MSG_KEXINIT message for key exchange or
re-exchange, until it has sent a SSH_MSG_NEWKEYS message (Section
7.3), it MUST NOT send any messages other than:

o Transport layer generic messages (1 to 19) (but
SSH_MSG_SERVICE_REQUEST and SSH_MSG_SERVICE_ACCEPT MUST NOT be
sent);

o Algorithm negotiation messages (20 to 29) (but further
SSH_MSG_KEXINIT messages MUST NOT be sent);

o Specific key exchange method messages (30 to 49).

The provisions of Section 11 apply to unrecognized messages.

Note, however, that during a key re-exchange, after sending a
SSH_MSG_KEXINIT message, each party MUST be prepared to process an
arbitrary number of messages that may be in-flight before receiving a
SSH_MSG_KEXINIT message from the other party.

TW>Как ему сказать какие алгоритмы я выбрал из его списка?
Если не совпали слать еще раз, пока не совпадут

TW>И почему он мне не отвечает какие ключи выбрал он из моего списка?

Первые (совпадающие)
TW>И еще я не понимаю зачем поле first_kex_packet_follows?
Это значить что педположение высланое второй стороной нормальное, иначе надо слать другое предположение.
Как оба согласились, выбраны первые. ехать дальше к обмену ключами.

https://networking.harshkapadia.me/ssh.html#algorithm-negotiation
Re[2]: SSH договорится о методе шифрования
От: TailWind  
Дата: 20.03.25 18:39
Оценка:
_>Как только первые строки совпали ехать дальше.

Похоже, что не так работает

Написал SSH сервер
Клиент MobaXterm

Выдаю строчку SSH-2.0-OpenSSH_8.0
Получаю от клиента его строку

Получаю от клиента его SSH_MSG_KEXINIT

kex_algorithms
  sntrup761x25519-sha512@openssh.com
  curve448-sha512
  curve25519-sha256
  curve25519-sha256@libssh.org
  ecdh-sha2-nistp256
  ecdh-sha2-nistp384
  ecdh-sha2-nistp521
  diffie-hellman-group-exchange-sha256
  diffie-hellman-group-exchange-sha1
  diffie-hellman-group18-sha512
  diffie-hellman-group17-sha512
  diffie-hellman-group16-sha512
  diffie-hellman-group15-sha512
  diffie-hellman-group14-sha256
  diffie-hellman-group14-sha1
  rsa2048-sha256
  rsa1024-sha1
  diffie-hellman-group1-sha1
  ext-info-c
  kex-strict-c-v00@openssh.com


Выбрал у него из середины списка один вариант
И отправил ему через SSH_MSG_KEXINIT

kex_algorithms
  diffie-hellman-group18-sha512


По вашей логике клиент должен был бы прислать мне ещё один SSH_MSG_KEXINIT только с моими опциями
Но нет
Сразу отправил SSH_MSG_KEX_DH_GEX_REQUEST_OLD
Отредактировано 21.03.2025 5:42 TailWind . Предыдущая версия . Еще …
Отредактировано 21.03.2025 5:41 TailWind . Предыдущая версия .
Отредактировано 20.03.2025 19:15 TailWind . Предыдущая версия .
Отредактировано 20.03.2025 18:49 TailWind . Предыдущая версия .
Отредактировано 20.03.2025 18:48 TailWind . Предыдущая версия .
Re[3]: SSH договорится о методе шифрования
От: TailWind  
Дата: 21.03.25 05:44
Оценка:
_>>Как только первые строки совпали ехать дальше.
TW>Похоже, что не так работает

Рабочая гипотеза:

Нужно сначала убрать из списков все элементы, которых нет у партнёра (в памяти, не передавая)
И только потом сравнивать

То есть клиенту достаточно просто получить списки сервера
Выбрать из них один нужный ему вариант
И отправить список с одним элементом в качестве подтверждения
Сервер на это даже отвечать не будет. Посчитает, что всё согласованно
Отредактировано 21.03.2025 8:07 TailWind . Предыдущая версия . Еще …
Отредактировано 21.03.2025 5:59 TailWind . Предыдущая версия .
Re: SSH договорится о методе шифрования
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.03.25 07:04
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>https://datatracker.ietf.org/doc/html/rfc4253


TW>Пишу клиент SSH


А можно поинтересоваться, зачем?
Re[2]: SSH договорится о методе шифрования
От: TailWind  
Дата: 21.03.25 07:41
Оценка:
TW>>Пишу клиент SSH
Pzz>А можно поинтересоваться, зачем?

Начинается )
Чтобы впитать знания и подходы, которые там есть
А может и для себя какую-нибудь полезную утилитку напишу

Ещё чтобы лучше понимать что происходит в SSH
Например, как работает port forwarding
Re[3]: SSH договорится о методе шифрования
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.03.25 09:27
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Начинается )

TW>Чтобы впитать знания и подходы, которые там есть
TW>А может и для себя какую-нибудь полезную утилитку напишу

Он очень сложный. Слишком сложный для начинающего. Скажем, я задачу написания с нуля SSH оцениваю, как в несколько раз более сложную и трудоёмкую, чем задачу написания с нуля работоспособного стека TCP/IP.

TW>Ещё чтобы лучше понимать что происходит в SSH

TW>Например, как работает port forwarding

Можно взять хорошую библиотеку, реализующую SSH, и попрактиковаться.
Re[4]: SSH договорится о методе шифрования
От: TailWind  
Дата: 21.03.25 09:38
Оценка:
Pzz>Он очень сложный

Да нормальный он
Примеров только нет с расшифровкой, за что каждый байт отвечает
Главное через шифрование пробиться
Re[5]: SSH договорится о методе шифрования
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.03.25 10:22
Оценка:
Здравствуйте, TailWind, Вы писали:

Pzz>>Он очень сложный


TW>Да нормальный он

TW>Примеров только нет с расшифровкой, за что каждый байт отвечает
TW>Главное через шифрование пробиться

Я знаю уровень сложности и того и другого.
Re[6]: SSH договорится о методе шифрования
От: TailWind  
Дата: 07.05.25 19:10
Оценка:
Pzz>>>Он очень сложный

TW>>Да нормальный он

TW>>Примеров только нет с расшифровкой, за что каждый байт отвечает
TW>>Главное через шифрование пробиться

Pzz>Я знаю уровень сложности и того и другого.


Всё получилось

Даже написал аналог вашего Froxy
Хотя и не расчитывал на это
Думал ограничиться SFTP и удаленным выполнением команд на сервере

1.5 месяца ушло, судя по дате первого сообщения этой темы
Re[7]: SSH договорится о методе шифрования
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.25 19:18
Оценка: +1
Здравствуйте, TailWind, Вы писали:

Pzz>>Я знаю уровень сложности и того и другого.


TW>Всё получилось


Ну, поздравляю!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.