Что такое ключ SSH?

1066
quack quixote

Я подписался на github и заметил, что ключ ssh выглядит интересным. Первоначально я ожидал что-то вроде ssl-ключа (имя, имя и т. Д.). Пройдя через это, я замечаю, что я только ввел пароль, и это всегда myuser @ comp-name (это windows). Зачем? Я думал, что это был идентификатор пользователя / пароля, и я могу создать отдельные ключи для отдельной цели из соображений конфиденциальности.

Теперь я вижу, что мне нужно использовать один для создания хранилища. Также я вижу что-то о «файле закрытого ключа» при просмотре опций. Что именно является ключом SSH и как я могу создать отдельного пользователя, не создавая отдельную учетную запись в Windows.

4

2 ответа на вопрос

9
David Z

Вы слышали об асимметричном шифровании (также называемом криптографией с открытым ключом)? Это технология, на которой основаны ключи SSH.

Основная концепция асимметричного шифрования состоит в том, что у вас есть два ключа шифрования, которые обычно представляют собой очень большие числа (или, что то же самое, длинные строки двоичных данных). Любое сообщение, зашифрованное одним из них, может быть дешифровано только другим, даже не оригинальным ключом шифрования! Это полезно, потому что вы можете оставить один из ключей, закрытый ключ, при себе и опубликовать другой, открытый ключ, где-нибудь в сети или где угодно. Люди могут шифровать сообщения с помощью открытого ключа и быть уверенными, что только вы, владелец соответствующего закрытого ключа, можете расшифровать их и прочитать их содержимое. (Вот как работают GPG, PGP и подобные программы, если вы когда-либо слышали о них)

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

Если вы думаете об этом, то именно то, что нужно для проверки подлинности сообщения от вас, а не от какого-то самозванца. Каждый раз, когда вы заходите на веб-сайт, используя имя пользователя и пароль, вы предоставляете некоторую секретную информацию, которая, предположительно, известна только вам, чтобы доказать, что запрос на вход в систему исходит от вас. Что ж, вы можете сделать то же самое со своим закрытым ключом: зашифровать ваш запрос на вход в систему, чтобы доказать, что он исходит от вас. И так работает аутентификация пары ключей SSH. Вместо того, чтобы указывать имя пользователя и пароль, SSH-сервер отправляет вашему SSH-клиенту сообщение, которое необходимо зашифровать с помощью вашего закрытого ключа. Клиент шифрует его, отправляет обратно зашифрованное сообщение, а сервер расшифровывает его, используя ваш открытый ключ, чтобы проверить его. Если он проходит проверку, поздравляю, вы вошли в систему!

Я еще не подписался на GitHub (пока), поэтому я не знаком с точной процедурой, но подозреваю, что когда они просят username@host, это просто комментарий для идентификации конкретного ключа. Если вы входите в GitHub с разных компьютеров, у вас будет свой закрытый ключ SSH для каждого из этих компьютеров, и GitHub необходимо отслеживать все соответствующие открытые ключи. Это username@hostдовольно стандартный способ маркировки открытых ключей SSH, полученных от разных людей и / или разных хостов.

Кстати, стоит отметить, что аутентификация пары ключей SSH обычно считается более безопасной, чем аутентификация по имени пользователя и паролю. Причина в том, что когда вы используете имя пользователя и пароль для входа на веб-сайт, вы должны предоставить эту информацию как минимум еще одному компьютеру: веб-серверу, на котором работает сайт. В большинстве случаев это нормально, но всегда возможно, что кто-то, кто отвечает за веб-сайт, или даже кто-то, кто имеет доступ к серверу, может записать ваш пароль и использовать его за вашей спиной, чтобы выдать себя за вас. Использование пары секретный / открытый ключ исключает эту возможность, потому что вы никогда не передаете закрытый ключ никомувообще, даже сервер, на который вы входите. Таким образом, хотя сервер (например, GitHub) вполне способен проверить, действительно ли вы входите в систему, на нем все еще недостаточно информации, чтобы притворяться, что вы входите в систему как вы.

Что касается того, как вы создаете пару ключей SSH: я сам пользователь Linux, поэтому я не уверен, как это будет сделано с программным обеспечением, которое вы используете в Windows. Какая клиентская программа SSH, которую вы используете (PuTTY?), Должна дать вам возможность создать пару ключей.

1
sleske

Чтобы добавить к отличному ответу Дэвида:

Чтобы создать ключ SSH (или, точнее, пару открытых / закрытых ключей) в Windows, вы можете использовать (бесплатный) PuttyGen. Это дополнение к популярному клиенту PuTTY SSH.

Инструкции, например, здесь: http://theillustratednetwork.mvps.org/Ssh/Private-publicKey.html

Конечно, вы также можете создать ключ, используя инструменты OpenSSH; они просто менее распространены в Windows.

Это круто. Теперь я понимаю, что то, что беспокоило меня, не является проблемой, так как name @ comp - это комментарий, и я могу удалить это, чтобы просто использовать ключ. Все три, которые я использую (git gui, git / msysbash и puttyGen), используют случайные данные. Я не могу создать идентичные ключи с длинными 30-символьными паролями? также пароль в puttygen, похоже, абсолютно ничего не делает. Поэтому, если я потеряю свой ключ, я никогда не смогу подписать снова. Мне нужно либо сделать резервную копию, либо хранить где-нибудь в Интернете. Это кажется плохим. Может быть, я зашифрую, а затем загрузить. 14 лет назад 0
Вы говорите о закрытом ключе? Если это так, вы правы, хранить его в Интернете - плохая идея. Он никогда не должен покидать компьютер, на котором он создан. Я думаю, вы могли бы где-нибудь сделать резервную копию, но если вы потеряете ее, вы всегда можете сделать новую, так что это не очень важно. (ну, я полагаю, это зависит от того, насколько вы готовы обновить файл ключа на всех сайтах, на которые вы заходите) David Z 14 лет назад 1
@ Дэвид: Ох. да, это может быть так просто. Я думал, как pgp, где другим пользователям нужен открытый ключ, а вы его где-то не храните. В случае с github я всегда мог войти в систему и обновить ключи. Я думаю, это не сложно. Но вы говорите, что они будут использовать случайные данные, и я не могу сгенерировать идентичные ключи с той же фразой? Почти бессмысленно использовать фразу. Это было полезно. 14 лет назад 0
@ acidzombie24: здесь могут быть некоторые недоразумения. «парольная фраза в puttygen, похоже, абсолютно ничего не делает» -> парольная фраза используется для шифрования вашего личного ключа, для * защиты * вашего личного ключа, если он попадет в чужие руки. Вы можете просто опустить парольную фразу, если вам не нужна защита. Ключевая фраза не имеет ничего общего с аутентификацией ключа, так что да, если вы потеряете закрытый ключ, вы никогда не сможете подписать снова (с этим ключом). Но вы все равно делаете (надежные) резервные копии всех своих вещей, не так ли? ;-) sleske 14 лет назад 0
@ acidzombie24: «Но вы говорите, что они будут использовать случайные данные, и я не могу сгенерировать идентичные ключи с одной и той же фразой?» Да, (закрытый) ключ * должен * использовать случайные данные, иначе он не будет безопасным (б / с, это будет легко догадаться). И «генерация идентичных ключей» не имеет смысла; если вы хотите идентичный ключ, просто скопируйте его :-). sleske 14 лет назад 0

Похожие вопросы