Що саме відправляє ssh при виконанні ключових переговорів?


10

Якщо явно вказати файл посвідчення до ssh:

ssh -i ./id_rsa ...

Я маю ці рядки в сліді налагодження в ssh:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

Чи означає це, що згенерований ssh id_rsaмістить і загальний показник RSA? id_rsaФормат видається досить явним, що він містить приватний ключ з його блоком "ПОЧАК ПРИВАТНОГО КЛЮЧА", тому "пропонування відкритого ключа" має означати щось інше, ніж "відправлення відкритого ключа на сервер".

Редагувати:

Для уточнення, я хочу знати, що саме відбувається за лінією "пропонування відкритого ключа". Якщо клієнт має кілька клавіш, всі вони будуть запропоновані серверу по черзі.


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

Відповіді:


12

для того, щоб підключитися до SSH-сервера та пройти автентифікацію за допомогою вашого відкритого / приватного ключа, ви повинні спочатку поділитися своїм відкритим ключем із сервером.

це робиться шляхом копіювання відкритого ключа для вашого секретного ключа на сервер, і додати його в ~/ssh/authorized_keysабо копіювати / вставити, копіювання id_rsa.pubна ~/.ssh/authorized_keysна сервері або cat id_rsa.pub >> ~/.ssh/authorized_keys, додавши його до списку.

під час підключення сервер використовує ваш відкритий ключ для підписання виклику, а ваш клієнт використовує ваш приватний ключ, id_rsaщоб розшифрувати виклик, повторно зашифрувати його загальнодоступним сервером host keyта відправити назад.

хост підтверджує, що ви правильно розшифрували виклик, розшифрувавши свою відповідь своїм приватним ключем, а клієнт / хост встановить зашифроване з'єднання на основі спільних даних, а не на ваших відкритих / приватних ключах.

в NO POINT в обміні - це ваш приватний ключ, або приватний ключ хоста обмінюється або відкривається один одному. ваш відкритий ключ зберігається на сервері, але саме тому це ПУБЛІЧНИЙ ключ.


Так, це все добре і добре, але це все відбувається до того, як сервер ідентифікував відкритий ключ для шифрування завдання. У мене є кілька ключів, і всі вони "пропонуються" серверу по черзі. Що саме це тягне за собою? І так, я усвідомлюю, що приватний ключ насправді не надсилається, я, мабуть, повинен повністю усунути цей рядок із питання. : P
Алекс Б

коли ви вказуєте, ssh -i keynameви точно повідомляєте своєму ssh-клієнту, який ключ ви плануєте використовувати для підключення до сервера. якщо у ~/.ssh/вашого клієнта є десяток ключів , НЕ буде повторюватися через кожен ключ. він може шукати ~/.ssh/id_rsa, ~/.ssh/id_dsaможливо, кілька інших імен файлів, кодованих у клієнта, або який ключ вказаний для цього хоста у ~/.ssh/config... короткому короткому описі; ваш клієнт не пропонує / не пропонує / жодних ключів на сервері.
cpbills

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

1
о, я перечитав ваш коментар; хост: шифрує виклик ключем хоста, клієнт: розшифровує виклик ключем хосту pub, клієнт: шифрує виклик приватним ключем, хост: спроби розшифрувати виклик усіма переліченими відкритими ключами в ~/.ssh/authorized_keysхості знає, що таке завдання, і що він шукає бо, тому щойно відкритий ключ відкриває його, він знає використовувати цей ключ.
cpbills

@cpbills, вибачте, що забув згадати, що у мене є кілька ключів від перенаправленого агента, отже, пропонуються кілька ключів (журнал -vvv показує всі запропоновані, хоча я вказую файл посвідчення).
Алекс Б

1

Криптографія відкритого / приватного ключа заснована на дуже простій системі:

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

Тож відповідь на ваше запитання - "Ваш відкритий ключ".


Так, дякую, я докладно знаю, як працює криптовалюта з відкритим ключем, але я хочу знати специфіку протоколу SSH та формат ключів. Мене цікавить, чи зберігає він відкритий експонент у файлі приватного ключа, чи ні? Наскільки я знаю, "пропонування відкритого ключа" може означати також підписання ніколи з вашим приватним ключем, тому сервер може знайти відповідний відкритий ключ.
Алекс Б

Так. це робить ssh-keygen - ви дасте відкритий ключ приватного ключа, зворотний не працює
Mâtt Frëëman

1

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

Я вважаю, що це говорить, Offering public key: ./id_rsaоскільки він використовує приватний ключ (зберігається в ./id_rsa) для виконання шифрування в простому тексті, який відомий сервером, а потім сервер використовує відкритий ключ для розшифровки цього шифротексту та підтвердження відповідності йому простого тексту. Файл відкритого ключа ./id_rsa.pubклієнту ніколи не потрібен після початкового створення ключа. Це сервер використовується лише для розшифровки.


Я підозрював, що щось подібне трапляється, але мені хотілося певної конкретики (тобто фактичного протоколу узгодження ключових SSH). Не впевнений, чому ви втратили чинність.
Алекс Б

Вибачте, що моя відповідь була такою рукою. Я не знайомий зі специфікою ключових переговорів SSH, лише загальними переговорами, необхідними для аутентифікації з відкритим ключем. Я, можливо, був би визнаний неточним за відповідь.
Мисливець Трей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.