Почему Amazon выпускает закрытые ключи вместо открытых?

20

Мой мозг обернут вокруг оси на открытых и закрытых ключах. Когда вы создаете облачный сервер (экземпляр) в сервисе Amazon EC2, а затем хотите подключиться к нему через SSH, Amazon требует, чтобы вы установили закрытый ключ для установления соединения. Разве идея открытого / закрытого ключа не предполагает, что Amazon должен требовать от вас загрузки открытого?

Кроме того, если я настрою SFTP-сервер для использования клиентом, должен ли я устанавливать его ключ на сервер или давать ему ключ от сервера? В любом случае, это должен быть открытый или закрытый ключ?

Сет
источник
1
Для тех из нас, кто менее знаком с EC2, требуется ли Amazon загрузка личного ключа?
Zoredache
2
Когда вы настраиваете облачный сервер на Amazon EC2 и затем хотите подключиться к нему через SSH, консоль Amazon позволяет вам загрузить закрытый ключ, который вы используете для подключения. Разумеется, вы обязаны защищать ключ.
Сет
@ Zoredache Справедливости ради, это вариант. Кто-то, кто хочет быстро разобраться с Windows, вероятно, никогда раньше не использовал OpenSSH, так что это хороший старт.
ceejayoz

Ответы:

36

Размышляя более глубоко о процессе аутентификации, что нужно держать в секрете? Amazon знает публичную половину ключа, и любой желающий может знать публичную половину. Публичная половина пары ключей при сопоставлении с частной половиной означает, что частная половина использовалась для аутентификации.

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

Тот, кто проходит проверку подлинности, должен иметь личную половину. Это нормально, если все в мире могут аутентифицировать вас, удерживая открытую половину ключа, но только вы должны контролировать личную половину.

Джефф Ферланд
источник
18

Amazon предоставляет услуги генерации ключей, потому что некоторые операционные системы (кашель, Windows, кашель) могут не облегчать создание пар ключей SSH.

При использовании SSH (и SFTP) открытый ключ устанавливается в файл авторизованного пользователя при запуске экземпляра EC2. Закрытый ключ хранится только пользователем и предоставляется для аутентификации на сервере.

Из документации по адресу:

http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html

похоже, что Amazon генерирует пару ключей на своих серверах и отправляет вам закрытый ключ через HTTPS. Возможно, это не совсем идеально (в идеале, вы и никто другой не будете обладать закрытым ключом), но, вероятно, это не так ужасно, учитывая, что все это происходит в контексте вашей аутентифицированной сессии, и только вы (и Amazon временно) видите закрытый ключ. Вы также можете всегда создавать и загружать свой собственный открытый ключ для использования в EC2, сохраняя при этом личный ключ строго закрытым.

Для настройки пользователей SFTP для аутентификации ключей они должны генерировать ключи SSH на своих компьютерах. После того, как они сгенерируют пару ключей, они должны только отправить вам открытый ключ для установки в соответствующем файле авторизованных ключей. Закрытый ключ, как следует из названия, является закрытым.

CJC
источник
5
Я регулярно генерирую пары ключей на машинах Windows. Это не сложно, хотя это делается с помощью установленного программного обеспечения, а не самой Windows.
Доминик Кронин
2
Договорились с Домиником. Это скорее тот факт, что средний пользователь Windows напуган и потерян при виде CLI, и что у Windows все еще нет опции «войти с ключом SSH».
HopelessN00b
О да, согласился. Я использую Cygwin и т. Д. С openssh, поэтому все работает чисто. Я предполагаю, что большинство пользователей Windows, делающих это, будут использовать PuTTY и должны будут преобразовать некоторые ключи. Это просто больше шагов.
CJC
1
На самом деле я никогда не использовал Amazon, но вместо того, чтобы обвинять Windows, я бы предположил, что причина, по которой Amazon отправляет вам ключ, состоит в том, что если бы они не дали вам ключ для входа в систему, как бы вы вошли в систему, чтобы установить свой публичный ключ в первую очередь?
DerfK
1
@DerfK Вы можете отправить свой открытый ключ и выбрать его для установки в новом экземпляре EC2. Выбор определенного ключа является частью процесса создания экземпляра.
CJC
2

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

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

AWS требует, чтобы вы загрузили и сохранили свой закрытый ключ, потому что по соображениям безопасности он не будет его хранить. Поскольку закрытый ключ нигде не хранится в AWS, вы можете быть уверены, что ваш экземпляр EC2 защищен.

jkim
источник
1

В каком-то смысле это не имеет значения. Пара закрытых / открытых ключей состоит из двух частей, и какая из них является открытой, зависит от вас. Если что-то зашифровано одним ключом, вам нужен другой для его расшифровки. Если вы опубликовали один ключ публично, а не другой, закрытый ключ - это тот, который вы не опубликовали.

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

Если вы хотите, чтобы ваши клиенты входили таким образом, вам нужно, чтобы они дали вам ключ, которым они готовы поделиться с вами, и, следовательно, их открытый ключ. Вы устанавливаете это на сервере в authorized_keys, который фактически говорит, что «любой, кто обладает закрытым ключом, соответствующим этому общему, может получить доступ к этому ресурсу».

Доминик Кронин
источник
1
Хм, нет, это не правда. По крайней мере, с помощью RSA / DH вы шифруете с помощью открытого ключа и расшифровываете с помощью закрытого ключа, это не работает наоборот. Подписание это не то же самое, что шифрование / дешифрование.
Zoredache
1
@ErikA Нет, открытый ключ не может быть получен из закрытого ключа. Файлы закрытых ключей часто содержат оба ключа. Если вы действительно хотите вступить в дискуссию, я бы предложил crypto.stackexchange.com . Эти люди могут дать вам действительно глубокие внутренние детали, включая фактические различия ключей RSA и то, почему какой ключ считается открытым по сравнению с частным, не является просто произвольной монетой.
Джефф Ферланд
@Zoredache - я этого не знал: спасибо. У вас есть ссылка на хорошую ссылку?
Доминик Кронин
en.wikipedia.org/wiki/Asymmetric_key_algorithm - один ключ блокирует или шифрует открытый текст, а другой разблокирует или дешифрует зашифрованный текст. Ни одна из клавиш не может выполнять обе функции. - en.wikipedia.org/wiki/RSA_(algorithm) - RSA включает в себя открытый ключ и закрытый ключ. Открытый ключ может быть известен всем и используется для шифрования сообщений . Сообщения, зашифрованные открытым ключом, могут быть расшифрованы только с помощью закрытого ключа.
Zoredache
Ни одна из этих двух ссылок не говорит о том, что вы говорите @Zoredache. Разумеется , если вы решили, какой ключ является закрытым, а какой - открытым, это определяет способ его использования. На момент генерации ключа это решение еще не было принято. Во всяком случае, логика подписи полностью зависит от логики шифрования, поскольку подпись требует шифрования.
Доминик Кронин