Программы семейства GPG (GNU Privacy Guard) / PGP (Pretty Good Privacy) позволяют "прозрачно" подписывать и зашифровывать все типы цифровой информации. По своей сути, названные инструменты являются лишь удобной обёрткой, упрощающей практическое использование открытых алгоритмов ассиметричной криптографии.
Несколько лет ведется полемика об актуальности использования GPG, в рамках которой высказывается много скептицизма о громоздкости и устаревании этого криптографического продукта. Высокий порог вхождения очевиден при соответствующем поисковом запросе, который выдает много сложной информации и инструкции по работе с утилитой GPG в терминале Linux.
В этой статье рассмотрим приложение с открытым исходным кодом для работы с инструментарием GPG в графической оболочке — находка для новичков и тех, кто просто избегает загадочного черного окна командной строки. Благодаря кроссплатформенности Клеопатры, статья одинаково полезна для пользователей Windows, Linux и FreeBSD.
Установка
Во многих unix-like операционных системах Клеопатра имеется в репозиториях по умолчанию. В Debian установка выглядит так: sudo apt-get install kleopatra
.
Для Windows программа распространяется в пакете GPG4Win, объединяющем в себе несколько полезных инструментов: непосредственно Kleopatra, GpgEX - удобный плагин для проводника Windows, который добавляет в контекстное меню пункты "Зашифровать", "Подписать", "Расшифровать", "Проверить контрольные суммы" и некоторые другие, GPA — еще один более простой на вид и менее функциональный менеджер ключей, GpgOL — плагин для почтового клиента Outlook).
Первый шаг в использовании GPG — создание своей пары ключей. Публичный ключ предоставляется всем желающим, а секретный хранится в надежном месте и служит для подписания информации от лица его владельца и расшифровки адресованной ему информации.
Создание пары ключей
![](https://habrastorage.org/getpro/habr/upload_files/74a/b1e/649/74ab1e649dc27b80565b3f3c1e7df611.jpg)
На выбор предлагаются типы ключей X.509 (практически применяется в корпоративной среде) и OpenPGP. Выбираем OpenPGP. Вводим контактые данные, которые будут отображаться у всех владельцев нашего открытого ключа. Вместо настоящего имени можно указать никнейм. В дальнейшем некоторую информацию ключа будет возможно изменить.
По умолчанию используется шифрование RSA с длиной ключа в 2048 бит (2048 нулей и единиц машинного кода). С учетом развития квантовых технологий, данное шифрование всё менее и менее кажется надежным. В настоящее время себя хорошо зарекомендовало использование криптографии на эллиптических кривых. Подобные алгоритмы имеют невероятную криптостойкость и хорошую производительность, благодаря небольшой длине ключа.
![](https://habrastorage.org/getpro/habr/upload_files/e72/da1/f34/e72da1f34db1ee0be32d858b2d9161e0.jpg)
Чтобы создать пару ключей на эллиптических кривых, переходим в дополнительные параметры. Пункт ECDSA/EdDSA — то, что нам надо. Дополнительный чекбокс (галочка) "+ECDH" даст ключу возможность шифровать, без нее сертификат можно будет использовать только для подписи и идентификации, так как ECDSA/EdDSA — алгоритмы подписи, а не шифрования. В выпадающих списках предлагается выбрать один из алгоритмов: ed25519, brainpool и NIST.
ed25519 (Curve25519) — эталонная и непатентованной реализация криптографии на эллиптической кривой, имеет 128-битную длину. Является ключом EdDSA — самым актуальным алгоритмом цифровой подписи (считается, что без закладок от силовых структур каких-либо стран).
brainpool — алгоритм, разработанный немецким сообществом криптографоф, в число которых входят университеты, государственные ведомства и коммерческие организации, например, компания Bosch. Поддерживает длины в 256, 384 и 512 бит. При подписи использует несколько устаревший алгоритм ECDSA.
NIST — американский алгоритм, разработанный Национальным Институтом Стандартов и Технологий. Рекомендован для использования государственными органами США. Поддерживает длины в 256, 384 и 521 бит. По оценке некоторых специалистов, NIST лучше brainpool по производительности. При подписи использует несколько устаревший алгоритм ECDSA.
Для примера в обоих случаях используется алгоритм brainpool с максимальной длиной ключа. По умолчанию ключ создается со сроком годности в два года. Этот параметр можно изменить, либо вовсе отключить, тогда ключ будет бессрочным.
![](https://habrastorage.org/getpro/habr/upload_files/10b/02b/a2f/10b02ba2fd9c118973ddbc325d2c88a7.jpg)
На следующем шаге задается пароль, который является последним рубежом защиты секретного ключа. Не следует передавать кому-то секретный ключ, но если так все-таки вышло, будет лучше, когда вы задали очень надежный пароль. Рекомендуется использовать специальные знаки (символы пунктуации и прочее) для надежной защиты от брутфорса. Лучшим вариантом будет длинный пароль, полученный из генератора случайных символов, однако не забывайте про золотую середину между использованием и безопасностью. Например, вводить на телефоне очень длинный и сложный пароль с символами из расширенной таблицы ASCII, не имея возможности его скопировать из менеджера паролей, будет весьма проблематично.
![](https://habrastorage.org/getpro/habr/upload_files/678/448/e69/678448e69c5033056515b5c481d9f47c.jpg)
Итак, пара ключей создана! Обратите внимание на отпечаток, это уникальный идентификатор вашего ключа. Даже если кто-то захочет представиться вами, создав ключ с такими же именем и электронной почтой, его отпечаток будет отличаться. Именно поэтому важно сверять отпечатки получаемых ключей.
Клеопатра предлагает сделать резервную копию ключей, что по факту является экспортом закрытого ключа. Эту операцию в дальнейшем можно произвести в любой момент.
![](https://habrastorage.org/getpro/habr/upload_files/98d/d76/370/98dd76370ee7a6c6f374e63f10cde77b.jpg)
Открыв экспортированный ключ в текстовом редакторе, мы увидим специфичный фрагмент текста, начинающийся словами "BEGIN PGP PRIVATE KEY BLOCK". Будьте внимательны, не отправьте его кому-то по ошибке! Открытые ключи, предназначенные для передачи вторым лицам, начинаются со слов "BEGIN PGP PUBLIC KEY BLOCK".
Большое преимущество GPG перед другими средствами идентификации заключается в легкой переносимости ключа. Например, его можно распечатать на бумаге или выучить наизусть. Хранить можно только приватный ключ, так как при необходимости кому-то передать публичный, мы всегда можем экспортировать его из секретного (выводится математическим путём).
Экспорт и импорт
![](https://habrastorage.org/getpro/habr/upload_files/63f/93e/18d/63f93e18d9a455638110890b09c845a2.jpg)
Для операций с ключом, щелкните по нему правой кнопкой мыши.
![](https://habrastorage.org/getpro/habr/upload_files/6ce/32c/46f/6ce32c46fdab8dead79d28b408d873d2.jpg)
Для импорта ключей (нашего уже существующего на новом устройстве или полученного публичного), воспользуемся кнопкой "Импорт". Также можно использовать двойной клик по файлу ключа, это автоматически откроет Клеопатру и импортирует выбранный ключ. GPG-файлы встречаются с расширениями *.asc, *.pgp и *.gpg. Это не имеет большого значения, так как расширение нужно больше для удобства пользователя и лишь немного — приложений. Файл будет корректно прочитан и в случае, когда специальное расширение изменено или удалено.
![](https://habrastorage.org/getpro/habr/upload_files/e24/c41/5e6/e24c415e6251e751cccb38a4819d5c02.jpg)
Очень часто ключи распространяются в виде текстового блока. В таком случае, скопировав ключ, можно импортировать его через меню операций с буфером обмена.
![](https://habrastorage.org/getpro/habr/upload_files/cb3/31f/4f9/cb331f4f9cf40e4808fcfeb5bdba82fc.jpg)
Программа попросит удостовериться в подлинности ключа. В настоящее время самым простым и эффективным способом является сравнение отпечатка, поэтому его публикуют вместе с ключом. Если отпечаток совпадает с заявленным, заверяем сертификат.
![](https://habrastorage.org/getpro/habr/upload_files/a09/8dc/2a1/a098dc2a154381bbb1c083b41259bf51.jpg)
Теперь мы можем проверять подпись владельца нового ключа и шифровать для него информацию.
Шифрование и подпись
Чтобы зашифровать и подписать файл, воспользуемся соответствующим пунктом меню на верхней панели.
![](https://habrastorage.org/getpro/habr/upload_files/5da/774/f88/5da774f8833630e2adee17a6ff70740a.jpg)
После выбора файла, предлагается выбрать нужные операции. Подпись позволяет получателю убедиться в авторстве файла. Эта функция очень полезна: расшифровав архив, мы точно знаем, что архив был зашифрован владельцем обозначенного ключа, а не кем-то другим, кто просто располагает нашим публичным ключом. Использовать подпись — полезная привычка в большинстве случаев.
![](https://habrastorage.org/getpro/habr/upload_files/a43/956/ece/a43956eced57ca0984ba540b2e0de030.jpg)
Распространненым способом безопасного хранения данных на облачном хранилище является GPG-шифрование файлов "для себя". В таком случае расшифровать информацию можно будет только нашим ключом.
Также возможна подпись без шифрования. Чаще всего применимо к текстовой информации. Механизм подписания строится на хеш-сумме: позволяет сравнить актуальное состояние информации с тем, какой она была, когда ее подписывал отправитель. Для примера откроем "блокнот".
![](https://habrastorage.org/getpro/habr/upload_files/554/3ca/73c/5543ca73c71c781cac051ad588cfbc48.jpg)
Назначив отсутствие шифрования для кого-либо, оставляем только подпись и нажимаем кнопку "Подписать".
![](https://habrastorage.org/getpro/habr/upload_files/1e1/423/854/1e14238548abf042ae455b98a14f3b4b.jpg)
После ввода пароля от ключа, видим, что к фразе "Отличная работа" добавился дополнительный текстовый блок с хеш-суммой SHA512.
![](https://habrastorage.org/getpro/habr/upload_files/2a9/94d/5b6/2a994d5b6341d9047fd5ce683663227b.jpg)
Если сейчас проверить подпись, она будет верна, но если изменить хотя бы один символ или добавить пробел, проверка выявит недействительную для данного текста подпись. Это связано с тем, что хеш-сумма данного массива информации абсолютна отлична от той, когда вместо буквы "Я" стояла "я".
![](https://habrastorage.org/getpro/habr/upload_files/acb/ac4/b3c/acbac4b3c816c9d5f706703b018a6fbb.jpg)
В случае подписи файла без шифрования, в директории файла создается сигнатура с расширением *.sig, которую следует передавать вместе с исходным файлом. Если в файле изменится хотя бы один бит, проверка подписи выдаст ошибку.
![](https://habrastorage.org/getpro/habr/upload_files/94c/4a8/f94/94c4a8f94502045ac340631320ad1858.jpg)
Постскриптум
Все локальные ключи централизованно хранятся на устройстве в специальной папке. Все программы, взаимодействующие с GPG, будут их видеть. Для общения по протоколу XMPP (Jabber), защищенного GPG-шифрованием, можно использовать Gajim, который также является кроссплатформенным. Для ведения защищенной почтовой переписки удобно использовать этичный клиент Thunderbird, в который необходимо будет импортировать секретный ключ, так как он имеет свое изолированное хранилище ключей.
В статье опущено много технических нюансов, так как она рассчитана на широкий круг пользователей, которые в том числе имеют низкий уровень познаний в криптографии и ищут стартовую позицию для знакомства с действительно надеждным сквозным шифрованием.
saipr
На мой взгляд, было бы совсем здорово, если бы еще была рассмотрена поддержка Клеопатрой криптографических токенов PKCS#11. Что-то можно найти здесь:
Сказание о Клеопатре и о российской криптографии