Чому Amazon випускає приватні ключі замість відкритих?


20

Мій мозок загорнутий навколо осі на публічних та приватних ключах. Коли ви створюєте хмарний сервер (екземпляр) на службі EC2 Amazon, а потім хочете підключитися до нього через 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-ключі на своїх машинах. Коли вони генерують пару ключів, вони повинні надсилати вам відкритий ключ для встановлення у відповідному файлі санкціонованих ключів. Приватний ключ, як випливає з назви, є приватним.


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 захищений.


1

В одному сенсі це не має значення. Пара приватного / публічного ключів складається з двох частин, а яка з них є публічною, залежить від вас. Якщо щось зашифровано одним ключем, вам знадобиться інший, щоб розшифрувати його. Якщо ви публікували один ключ публічно, а не інший, приватний ключ - той, який ви не публікували.

Перехід до власного запитання: імовірно, ключовим видом Amazon є те, що ви можете контролювати власні ресурси, тому його не слід давати іншим людям. У цьому контексті ви повинні довіряти Amazon мати свій приватний ключ, принаймні на достатньо довгий час, щоб налаштувати його.

Якщо ви хочете, щоб ваш клієнт увійшов таким чином, вам потрібно, щоб вони дали вам ключ, який вони готові поділитися з вами, тому їх публічний ключ. Ви встановлюєте це на сервері в авторизованих_кейсах, що фактично говорить "кожен, хто має приватний ключ, відповідний цьому загальнодоступному, може отримати доступ до цього ресурсу".


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. Звичайно , щойно ви вирішили, який ключ є приватним, а який публічним, це визначає спосіб його використання. У момент створення ключових рішень це рішення ще не прийняте. Оскільки це варте, логіка навколо підписання повністю залежить від логіки навколо шифрування, оскільки для підписання потрібне шифрування.
Домінік Кронін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.