В каком формате открытый ключ сервера хранится на известных хостах?
Когда мы общаемся с хостом, он либо известен, либо нет. В последнем случае во время нашей первой попытки подключения нам предлагается
Подлинность хоста "13x.8x.xx.1x1 (13x.8x.xx.1x1)" не может быть установлена. Отпечаток ключа RSA: xx:xx:xx:xx:xx:26:86:80:5f:17:xx:xx:xx:xx:6d:6c. Вы уверены, что хотите продолжить подключение (да / нет)? да
Затем открытый ключ RSA сервера сохраняется в файле.ssh/know_hosts. Как это закодировано? И как мы можем гарантировать, что это не человек посередине? Наконец, этот так называемый "ключ хоста" является ассиметричным. Что это значит?
1 ответ
Как мы можем гарантировать, что это не человек посередине?
В первый раз вы можете проверить отпечаток пальца RSA. Кто-то должен предварительно сообщить об этом вам, или вам нужно каким-то образом получить его надежно (то есть опубликовать на сайте https или получить по подписанной электронной почте). Например, многие хостинг-провайдеры отправляют вам отпечатки вашего хоста по SSH.
В Ubuntu вы можете найти свой собственный отпечаток RSA, используя:
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
Обратите внимание, что существуют другие используемые форматы отпечатков пальцев (dsa и ecdsa), в зависимости от конфигурации сервера и клиента. В вашем файле known_hosts вы можете видеть формат хранения каждого отпечатка пальца.
Как это закодировано?
Файл known_hosts представляет собой список имен хостов (или часто хэшей имен хостов), типа отпечатка пальца и самого отпечатка пальца (криптографической информации) в кодировке base64. Подробности о формате можно найти на странице руководства OpenSSH в разделе ФОРМАТ ФАЙЛА SSH_KNOWN_HOSTS.
Этот так называемый "ключ хоста" является асимметричным. Что это значит?
Эти асимметричные механизмы означают, что, хотя отпечаток пальца позволяет вам проверить подлинность сервера, вы не можете использовать его для создания действительной идентификации (для олицетворения) этого сервера.
Следует отметить, что отпечаток (и соответствующий закрытый ключ) используются в качестве секрета для криптографических операций: случайный запрос отправляется от клиента на сервер. Сервер, имеющий закрытый ключ, может подписать этот запрос и отправить его обратно, а затем клиент может проверить, действительна ли подпись, потому что отпечаток пальца подходит.
Другими словами, криптографический секрет является двойным, закрытый ключ может шифроваться или подписываться, а открытый ключ может использоваться для расшифровки или проверки подписи. Один из ключей можно сделать общедоступным без риска и использовать его для проверки подписей и шифрования текста, который сможет декодировать только владелец личного ключа. Это примерно то, что асимметричный означает в криптографии.