Linux -- это интересно

GnuPG / PGP


GPG (также известный как GnuPG) — консольная утилита для шифрования информации и создания электронных цифровых подписей, предоставляя различные алгоритмы (RSA, DSA, AES и др...) для решения этой задачи. Создана в 1997 году как свободная альтернатива проприетарному PGP (Pretty Good Privacy), в большинстве GNU/Linux систем GnuPG устанавливается по умолчанию и полностью совместима со стандартом IETF OpenPGP (может взаимодействовать с PGP и другими OpenPGP-совместимыми системами).

GPG (GNU Privacy Guard) может использоваться для симметричного шифрования, но в основном её используют для ассиметричного шифрования информации. При симметричном шифровании для шифровки и расшифровки сообщения используется один ключ (например, какой символ соответствует той или иной букве). При ассиметричном шифровании используются два ключа, публичный и приватный.

Криптографическая система с открытым ключом (разновидность асимметричного шифрования, асимметричного шифра) — система шифрования и/или электронной подписи (ЭП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для проверки ЭП (электронной подписи) и для шифрования сообщения. Для генерации электронной подписи и для расшифровки сообщения используется закрытый ключ.

Публичный ключ GnuPG используется для шифрования и его например можно дать своим друзьям, а приватный — для расшифровки, его необходимо хранить в безопасности. Благодаря такой схеме расшифровать сообщение может только владелец приватного ключа (даже тот, кто зашифровывал сообщение, не может произвести обратную операцию).

Основные технические особенности GnuPG:

  • Полноценная альтернатива PGP;
  • Не использует патентованные алгоритмы;
  • Распространяется под свободной лицензией (GPL);
  • Полная реализация OpenPGP (RFC4880);
  • Расшифровывание и аутентификация сообщений, созданных с помощью PGP 5, 6 и 7;
  • Поддержка электронной подписи с помощью алгоритмов ElGamal, DSA, RSA и хеш-функций MD5, SHA-1, RIPE-MD-160 и TIGER;
  • Работа с асимметричным шифрованием ElGamal и RSA (длина ключа от 1024 до 4096 бит);
  • Поддержка блочных алгоритмов симметричного шифрования AES, 3DES, Blowfish, Twofish, CAST5, а также IDEA с помощью модуля;
  • Лёгкая реализация новых алгоритмов с помощью дополнительных модулей;
  • Многоязычная поддержка (в том числе на русском);
  • Онлине-система помощи;
  • Поддержка просроченных ключей и подписей;
  • Встроенная поддержка HKP-серверов ключей.

GnuPG разработан в соответствии со стандартом OpenPGP, а это значит, что подписи и зашифрованные данные, созданные другими программами, совместимыми с OpenPGP, будут работать с GnuPG.

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

Первое взаимодействие с GnuPG начинается с генерирования ключей:

gpg --gen-key

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

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

GnuPG ведёт собственную базу, которая находится в файле:

~/.gnupg/pubring.gpg

В неё заносятся открытые (публичные) ключи всех респондентов.

Просмотреть все ключи, находящиеся в базе можно с помощью команды:

gpg --list-keys

Будет выведен список ключей, показывающий их статус (pub — публичный, sub — второстепенный), длину и метод шифрования, дату создания и, главное, уникальный идентификатор (ID), представляющий собой 8-значное 16-ричное число.

Для основного ключа обязательно необходимо создать отзывающий сертификат:

gpg --gen-revoke $KEY

Где $KEY — ID основного ключа.

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

Такие базы данных хранят публичные ключи совершенно свободно, это сделано для удобства обмена ключами и пользователю необязательно постоянно передавать публичный ключ лично. Можно воспользоваться несколькими способами: разместить у себя на домашней странице, на портале, в котором есть поле для публичного ключа, либо воспользоваться более централизованной базой (копилкой ключей), из которой достать ваш ключ будет всегда удобно. Чтобы использовать сертификат, нужно просто импортировать его в базу, как и любой открытый ключ:

gpg --import revoke-certificate.asc

А затем отправить на сервер:

gpg --send-keys $KEY

Где $KEY — ID ключа, который будет отправлен. Точно так же можно отправлять публичные ключи и хранить их на серверах баз данных. Для этого в первую очередь их нужно экспортировать в общую локальную базу командой:

gpg --import $FILE

Где $FILE — файл ключа или keyring («связка», несколько ключей в одном файле), после этого командой --sign-key $KEY (где $KEY — ID ключа респондента) нужно подписать желаемый ключ. При подписывании к нему добавляется ваш публичный ключ для того, чтобы ваши сообщения/письма могли идентифицировать другие. Затем нужно отправить подписанный вами ключ его владельцу:

gpg --export $KEY > userkey.gpg

Эта команда извлекает подписанный ключ отдельно для удобства отправки, можно сделать то же самое в виде ASCII-текста, который легко разместить в Сети:

gpg -a --export $KEY > userkey.asc

Где $KEY — ID ключа владельца, теперь владелец должен импортировать этот ключ к себе, чтобы ваша подпись находилась у него в базе. Экспорт такого ключа производится точно так же, как и любого другого публичного ключа, затем владелец отправляет его на сервер баз данных ключей или выкладывает на свой сайт. Теперь его ключ содержит вашу подпись и идентификация сообщений позволит удостовериться, что они дошли именно от вас.

Иногда может потребоваться хранить ваши ключи (публичные или приватные) на каком-либо носителе (например, на USB flash), для этого нужно экспортировать ключ, что можно сделать как в бинарном виде:

gpg --export $KEY > mykey.gpg

Так и в текстовом (ASCII armor):

gpg -a --export $KEY > mykey.asc

В обоих случаях $KEY — это ID вашего ключа. Вместо -a можно также использовать --armor, в итоге, для работы с документами доступны следующие команды:

  • Подписать документ (гарантирует, что документ «от вас»), к нему просто добавляется ваша электронная подпись;
  • Зашифровать документ (производится шифровка выбранным алгоритмом всего документа);
  • Подписать и зашифровать документ (сочетает в себе эти действия).

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

Можно создавать так называемые «прозрачные» подписи (в которых будет незашифрованное содержимое документа + ваша цифровая подпись):

gpg --clearsign $DOC

Где $DOC — путь к документу, таким образом, будет создан файл $DOC.asc, в котором само содержание документа открыто и добавлена его цифровая подпись. А подписи, находящиеся в отдельных файлах в бинарном виде (будет создан файл подписи $DOC.sig), создаются командами:

gpg --detach-sign $DOC

В текстовом (ASCII armor) виде (будет создан файл подписи $DOC.asc):

gpg -a --detach-sign $DOC

Такие подписи (в последних двух примерах) должны распространяться вместе с подписываемым документом. Любой ключ также можно отредактировать командой `--edit-key’. Это позволит изменить некоторые параметры ключа: степень достоверности, если это чужой публичный ключ, секретную фразу, если это ваш приватный ключ, и другое. Что касается степени достоверности, то в GnuPG существует пять уровней:

  • I don’t know or won’t say (я ничего не знаю о владельце этого ключа или не хочу говорить об этом);
  • I do NOT trust (я не доверяю этому человеку);
  • I trust marginally (я знаю этого человека и доверяю ему, но не уверен, что ключ принадлежит ему);
  • I trust fully (я знаю этого человека и лично убедился в том, что ключ принадлежит ему);
  • I trust ultimately (я знаю этого человека, у меня есть доступ к его секретному ключу).

В последнее время всё больше проектов используют GnuPG для подписывания файлов с целью дальнейшей проверки их целостности (вместо использования хешей MD5, SHA1, SHA256, SHA512). Поэтому помимо архивов (особенно в Open Source-среде) на сайтах обычно лежат GPG-подписи в бинарном или ASCII-видах.

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

Домашняя страница

По материалу опубликованному в электронном издании «Open Source» (выпуск №027 от 11.06.2008)
Оставьте комментарий!
Используйте нормальные имена.Войти через loginza
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



 
(обязательно)