Как работает шифрование SSH?


34

Я читал о создании 2 ключей (частного и открытого) на хосте клиента и копировании открытого ключа на хост сервера.

Насколько я понимаю, (поправьте меня, если я ошибаюсь): сервер шифрует данные открытым ключом и отправляет их клиенту, клиент расшифровывает их закрытым ключом.

Но если мне нужно зашифровать данные на клиенте для отправки на сервер, как это происходит?

Открытый ключ шифрует данные на клиенте? Но как сервер может его расшифровать, если он имеет только открытый ключ?

Как работает шифрование SSH?

Ответы:


35

Прежде всего после установления соединения TCP обе системы согласовывают сеансовый ключ , используя такие протоколы, как обмен ключами DH , ECDH или GSSAPI. Этот ключ является симметричным и временным - обе стороны используют один и тот же ключ для шифрования и дешифрования данных с использованием таких алгоритмов, как AES или RC4 .

Пара ключей клиента никогда не используется для шифрования данных, только для аутентификации - «publickey» является одним из нескольких доступных методов, где клиент представляет свой собственный открытый ключ вместе с доказательством владения закрытым ключом. Точно так же пара ключей сервера используется только для аутентификации сервера во время обмена ключами DH или ECDH; никакие данные не зашифрованы, используя это.

Протокол SSH2 задокументирован в нескольких RFC , в том числе:

  • RFC 4253 - протокол транспортного уровня Secure Shell (SSH)
  • RFC 4419 - группа компаний Diffie-Hellman Exchange
  • RFC 4432 - Обмен ключами RSA
  • RFC 4462 - аутентификация GSSAPI и обмен ключами

13

Первое, что вам нужно понять, это то, что, хотя многие протоколы шифрования, такие как SSH и SSL, используют PKI для аутентификации, почти ни одна из этих систем не будет использовать PKI для фактической передачи полезной нагрузки.

PKI слишком сильно загружает процессор, чтобы использовать его для передачи фактических данных полезной нагрузки. Что происходит, так это то, что PKI используется для согласования случайно сгенерированного ключа, который будет использоваться с симметричным протоколом шифрования. Используемый протокол также согласовывается и должен быть самым сильным протоколом, с которым могут согласиться две системы. Таким образом, после того, как начальное рукопожатие и согласование завершены, в значительной степени все становится просто стандартной симметричной криптографией.


2
Для дальнейшего чтения, это в основном объясняется в RFC4253 , стр. 15.
slhck

12

Вот несколько практических примеров. Предположим, что ключ A держался в секрете и поэтому является закрытым ключом, а ключ B был опубликован в общедоступном месте, и поэтому является открытым ключом.

Поэтому, если вы хотите отправить сообщение всем, и вы хотите, чтобы они убедились, что оно пришло от вас и не было изменено во время его доставки, вы отправите свое сообщение и включите хеш сообщения, зашифрованный с помощью ключа A. Затем любой, кто имеет ключ B, может дешифровать хеш, сравнить его с полученным сообщением и убедиться, что сообщение пришло от вас (из-за того, что только человек с ключом A мог сгенерировать зашифрованную полезную нагрузку, которая успешно расшифровала хеш, а также потому, что вы являются единственным человеком с ключом A, который может прийти только от вас). Это называется Подписание .

Теперь допустим, что кто-то хочет отправить вам секретное сообщение, но не хочет раскрывать, кто он. Они могут зашифровать свое сообщение симметричным ключом (как упомянул Zoredache, симметричный гораздо дешевле сделать), затем взять этот ключ и зашифровать его ключом B и отправить его вам. Поскольку только ключ A может расшифровать то, что было зашифровано ключом B, никто другой не сможет увидеть, что находится в сообщении, которое было отправлено вам. Вот как работает нормальное шифрование и как SSH обменивается данными.


3

Вот сравнительно доступное описание математики, лежащей в основе работы шифрования закрытым-открытым ключом.

Еще более простое описание от BBC здесь .


Я добавил новую ссылку на BBC, объясняющую этот процесс и некоторую историю.
Чогг

1

ты пишешь

«Открытый ключ шифрует данные на клиенте? Но как сервер может его расшифровать, если у него есть только открытый ключ?»

Я не очень много знаю об этом, но думаю, что могу ответить на этот вопрос довольно четко.

Если A хочет отправить сообщение B, A использует открытый ключ B. Таким образом, B может расшифровать его.

Если бы А использовал свой собственный открытый ключ для шифрования сообщения, то действительно, Б не смог бы его расшифровать.

Это объясняется здесь

http://www.comodo.com/resources/small-business/digital-certificates2.php

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.