Pull to refresh
2669.45
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Защита целостности кода с помощью PGP. Часть 2. Создание мастер-ключа

Reading time 6 min
Views 8.8K
Original author: Konstantin Ryabitsev
Перед вами перевод второй части серии материалов, посвящённых защите целостности кода с помощью PGP. В прошлый раз мы разобрали основы PGP, а сегодня поговорим о том, как создавать 4096-битные мастер-ключи RSA, и о том, как их защищать.



Ключи RSA


▍Контрольный список


Вот какие навыки вы должны освоить после того, как разберётесь с материалами этого раздела:

  1. Создание 4096-битного мастер-ключа RSA (Важно).
  2. Создание резервной копии мастер-ключа на бумаге (Важно).
  3. Подбор и добавление к мастер-ключу подходящих идентификационных данных (Важно).

Пояснения


▍Что такое мастер-ключ (сертифицирующий ключ)


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

  1. Между мастер-ключом и подключами, в техническом смысле, нет никакой разницы.
  2. Во время создания ключей задают их функциональные ограничения, назначая им специфические возможности.
  3. У PGP-ключей могут быть четыре возможности:

    • [S] Ключ может быть использован для подписывания данных.
    • [E] Ключ может быть использован для шифрования.
    • [A] ключ может быть использован для аутентификации.
    • [C] ключ может быть использован для сертифицирования других ключей.
  4. У одного ключа может быть несколько возможностей.

Ключ, имеющий возможность [C] (сертифицирующий) считается мастер-ключом, так как это единственный ключ, который может быть использован для работы с другими ключами.

Только сертифицирующий ключ может быть использован для выполнения следующих действий:

  • Добавление или отзыв других ключей (подключей) с возможностями S/E/A.
  • Добавление, изменение или отзыв идентификационных данных (UID), связанных с ключом.
  • Установка или изменение даты истечения срока действия самого этого ключа или любого подключа.
  • Подписывание ключей других людей для целей формирования сети доверия.

В мире свободного программного обеспечения ключ [C] — это ваше цифровое удостоверение личности. После того, как вы создали этот ключ, вам нужно уделить особое внимание его защите, и тому, чтобы не дать ему попасть в руки злоумышленников.

▍Действия, выполняемые перед созданием мастер-ключа


Прежде чем вы создадите свой мастер-ключ, вам нужно выбрать свои основные идентификационные данные и ключевую фразу.

▍Основные идентификационные данные


Идентификационные данные — это строка, использующая тот же формат, что и поле From в электронных письмах:

Alice Engineer <alice.engineer@example.org>

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

▍Ключевая фраза


Ключевая фраза (её ещё называют «фраза-пароль») используется исключительно для шифрования закрытого ключа с помощью симметричного алгоритма при сохранении этого ключа на диск. Если содержимое вашей директории .gnupg когда-нибудь попадёт в руки злоумышленника, хорошая ключевая фраза станет последней линией обороны между ним и его возможностью выдавать себя за вас в сети. Именно поэтому важно использовать хорошую ключевую фразу.

Надёжная ключевая фраза состоит из 3-4 слов, причём желательно, чтобы слова из неё нельзя было найти в словаре. Она не должна являться цитатой из широко известных источников (не стоит использовать в качестве ключевой фразы слова из песен, книг, рекламных лозунгов какой-нибудь компании). Вы будете использовать ключевую фразу довольно часто, поэтому она должна быть ещё и такой, чтобы вам было легко её запомнить и удобно вводить с клавиатуры.

▍Алгоритм и стойкость ключа


GnuPG уже некоторое время поддерживает шифрование, основанное на эллиптических кривых, но мы пока будем придерживаться использования ключей RSA. Хотя можно применять и ключи ED25519, вероятно, вам встретятся программные инструменты и устройства, которые не смогут с ними нормально работать.

Кроме того, у вас может возникнуть вопрос о том, почему мастер-ключ имеет длину 4096 бит, если широко известно, что и 2048-битных ключей хватает для любых нужд, и такие ключи ещё долго не потеряют актуальности. Причина использования 4096-битных ключей, в основном, относится к социальной, а не к технической сфере. Всё дело в том, что другие разработчики могут отнестись к вам с некоторым недоверием, если в вашем мастер-ключе будет меньше битов, чем в их мастер-ключе.

▍Создание мастер-ключа


Для того чтобы создать мастер-ключ, выполните следующую команду, поместив ваши данные вместо данных условного пользователя Alice Engineer:

$ gpg --quick-generate-key 'Alice Engineer <alice@example.org>' rsa4096 cert

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

Посмотрите на то, что выведет команда. Вы увидите примерно следующее:

pub   rsa4096 2017-12-06 [C] [expires: 2019-12-06]
     111122223333444455556666AAAABBBBCCCCDDDD
uid                      Alice Engineer <alice@example.org>

Обратите внимание на длинную последовательность символов во второй строке. Это — полный отпечаток только что созданного ключа. Идентификаторы ключей могут быть представлены в трёх различных формах:

  • Отпечаток (fingerprint) — полный 40-символьный идентификатор ключа.
  • Длинная форма (long) — последние 16 символов отпечатка (AAAABBBBCCCCDDDD).
  • Краткая форма (short) — последние 8 символов отпечатка (CCCCDDDD).

Следует избегать использования коротких 8-символьных идентификаторов ключей, так как они недостаточно уникальны.

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

▍Резервная копия мастер-ключа


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

Лучший способ создания копии секретного ключа, подходящей для печати, заключается в использовании программы Paperkey, которая разработана специально для этой цели. Эта программа доступна во всех дистрибутивах Linux, в Mac её можно установить командой brew install paperkey. Выполните следующую команду, заменив [fpr] на полный отпечаток вашего ключа:

$ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt

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

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

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

▍Добавление идентификационных данных


Если у вас есть несколько адресов электронной почты, которыми вы активно пользуетесь (личный и рабочий адреса, адрес, применяемый в некоем опенсорсном проекте, и так далее), вам следует добавить их к вашему мастер-ключу. Вам не нужно делать это для любых адресов, которые вы не планируете использовать с PGP (скажем, для адреса, который вам выдали, когда вы где-то учились). Ниже показана команда для добавления идентификационных данных к ключу. Здесь [fpr] надо заменить на отпечаток вашего ключа:

$ gpg --quick-add-uid [fpr] 'Alice Engineer <allie@example.net>'

Просмотреть уже добавленные к ключу UID можно следующей командой:

$ gpg --list-key [fpr] | grep ^uid

▍Выбор основного набора идентификационных данных


GnuPG автоматически сделает последний добавленный набор идентификационных данных главным, поэтому если вам нужно что-то другое, вы можете воспользоваться такой командой:

$ gpg --quick-set-primary-uid [fpr] 'Alice Engineer <alice@example.org>'

Итоги


Из этого материала вы узнали о ролях ключей PGP, том, как сгенерировать мастер-ключ, как надёжно сохранить резервную копию этого ключа, и как назначить основные идентификационные данные ключа. В следующий раз поговорим о подключах.

Уважаемые читатели! Как вы храните резервные копии ваших мастер-ключей?

Tags:
Hubs:
+16
Comments 2
Comments Comments 2

Articles

Information

Website
ruvds.com
Registered
Founded
Employees
11–30 employees
Location
Россия
Representative
ruvds