33

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

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

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

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

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

5 ответов5

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 используется для согласования случайно сгенерированного ключа, который будет использоваться с симметричным протоколом шифрования. Используемый протокол также согласовывается и должен быть самым сильным протоколом, с которым могут согласиться две системы. Таким образом, после того, как начальное рукопожатие и согласование завершены, в значительной степени все становится просто стандартной симметричной криптографией.

12

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

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

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

3

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

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

1

ты пишешь

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .