2023-11-16

vak: (Default)
В "Автостопом по галактике" утверждалось, что всякий путешественник обязан чётко знать, где его полотенце.

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

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

Здесь я составлю шпаргалку по ключам, для себя и для всех интересующихся. Я намеренно не пытаюсь объяснять суть асимметричного шифрования, цифровых подписей и прочей теории. Про это уже имеется много хороших статей.

Почему ключи, а не пароли

Все мы пользуемся паролями каждый день, заходя на разные сайты. Но следует понимать, что пароль это слабая и ненадёжная защита. Мы ведь не ставим кодовые замки на входную дверь нашего дома? И на автомобили. Потому что пароли легко утекают или забываются. Физический ключ реже "утекает" и забывается. Ровно так же и цифровой ключ.

В самом ключе доступа нет ничего магического. Это файл небольшого размера, внутри которого чепуха. То есть случайное число, шум. Но эта чепуха уникальная, сгенерённая персонально для вас, и внутренне защищённая от подделки. Плюс обычно защищённая паролем. То есть мало иметь этот файл-ключ: чтобы его применить, надо сообщить пароль, который знаете только вы.

Два типа ключей

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

Ключи SSH

Обычно чтобы настроить вход по ключу на удалённый сетевой сервис, надо на сайт сервиса положить вашу публичную часть ключа SSH. Таких ключей можно иметь несколько, для каждого сервиса свой, или один на все случаи жизни. Зависит от вашего желаемого уровня безопасности.

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

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

Заметьте, что при потере ключа SSH вы лишаетесь доступа к каким-то сайтам, скажем Github или Bitbucket. Никакие ваши данные при этом не теряются. После восстановления доступа методом замены ключа всё опять в порядке.

Ключи PGP

Для защиты данных применяются другие алгоритмы шифрования, и поэтому ключи в другом формате, а именно PGP. У них своя интересная история, заслуживающая отдельного поста. Нам достаточно знать, что существует стандарт OpenPGP и его реализации, в частности популярная опенсорсная GPG (Gnu Privacy Guard). Они дают возможность хранить и пересылать ваши файлы в хорошо защищённом зашифрованном виде.

Иметь много ключей PGP можно, но вы рискуете запутаться, что у вас зашифровано каким ключом. Обычно каждый человек заводит себе один ключ PGP на все случаи жизни. Крайне важно защитить ключ PGP хорошим паролем, так как предположительно вы будете пользоваться ним долго (много лет), и риск утечки возрастает.

Нужно иметь резервные копии ключа PGP в защищённом месте. Хранить их в облаке небезопасно. При утере ключа PGP вы потеряете все ваши зашифрованные файлы. Восстановить их будет невозможно. Часто народ держит ключи на флешках, но помните, что Flash память имеет ограниченный срок жизни.

Пароль выбирайте такой, чтобы легко вспомнить в любом сонном/нетрезвом состоянии, без необходимости записывать. Забудете пароль - опять пропало всё, нажитое нелёгким трудом. 😀

Как просмотреть ключи

Всякий юниксоид в курсе, что его публичный ключ SSH находится в файле ~/.ssh/id_rsa.pub, а секретный - в файле ~/.ssh/id_rsa. Если вы не знали - теперь знаете. 😀 Можете заглянуть туда: это текстовые файлы в кодировке base64.

В юниксе ключи PGP лежат в папке ~/.gnupg/, но не по одному, а связками: в одном файле публичные, в другом секретные. Из командной строки их можно глянуть командами gpg --list-keys и gpg --list-secret-keys.

В линуксе есть утилита "Passwords and Keys", она же seahorse, показывающая ключи в удобном виде.



На маке хоть и есть своя аналогичная тулза "Keychain Access", но она, к сожалению, не умеет работать с ключами SSH и PGP. Недоработочка. Вместо этого рекомендую GPG Tools

На андроидном мобильнике ключами удобно рулить из Termius (SSH) и OpenKeychain (PGP).

Для айфона или айпада годится PGPro.

Как создать ключ SSH

Из командной строки это делается командой:
ssh-keygen -t rsa -b 4096
Но это для юниксистов, а обычным людям воспользоваться утилитой Termius. Выбирайте формат RSA и размер как минимум 2048.

Как создать ключ PGP

Из командной строки:
gpg --full-generate-key
Вам будет задано несколько вопросов. Выбирайте формат RSA и размер 2048 или больше. Внимательно отнеситесь к остальным вопросам: имя, email, пароль. Повторю про пароль: ставьте такой, чтобы легко вспомнить в любом состоянии, без необходимости записывать. Но это для юниксистов, а обычным людям воспользоваться утилитой GPG Tools или другими вышеперечисленными. 

На маке легче создавать ключ утилитой GPG Keychain из пакета GPG Tools. Срок устаревания ключа лучше не ставить.

vak: (Путиномедвед)
«Не хотите, чтобы сносили Пушкина? Снесите путина.»