С появлением информационных систем задачи по организационной, кадровой, бухгалтерской или любой деятельности связанной с передачей документов перешли в цифровой вид. Теперь стало удобней хранить, передавать, изменять и обрабатывать большие потоки данных. Однако информация, стала подвержена атакам на ее основные свойства целостности, доступности и конфиденциальности. И потребовалось решение, которое как печать или подпись сможет обеспечить сохранность свойств!
Этим решением стала технология электронно-цифровой подписи, или же ЭЦП. Представляет собой систему, производящую криптографические преобразования с доверенной стороной, что позволяет подтвердить подлинность и целостность передаваемого сообщения!
Что такое подпись GPG?
GPG подпись или GPG signature представляют собой аналог обычной подписи человека на документах. Это не картинка или графическая подпись, а строковая последовательность, которая была сформирована однонаправленной функцией хеширования и процесса шифрования криптографическим алгоритмом.
На вход в криптосистему или же программу, позволяющую производить криптографические преобразования, поступает информация, которую необходимо подписать. Файл или же строковая последовательность на подпись проходит через однонаправленную математическую функцию или же хеш-функцию, которая преобразует данные в бессмысленную последовательность. Но уникальную для данного текста или файла. То есть если изменить хоть один символ, то функция будет уже иметь иное значение. За конфиденциальность отвечает ассиметричный алгоритм шифрования.
Установка и настройка GPG
Рассмотрим на примере процесс создания подписи для файла или сообщения, чтобы получатель был уверен в целостности, подлинности, а при некоторых конфигурациях и конфиденциальности переданных данных. Для начала обновим пакеты на машине, чтобы все зависимости были актуальных версий и не возникло проблем в соединении.
apt update && apt upgrade -y По умолчанию, в дистрибутивах уже есть пакетное решение gnupg, которое позволяет производить криптографические преобразования. Однако если на вашем устройстве отсутствует, укажите пакетный менеджер и команду:
- apt для Debian/Ubuntu;
- yum/dnf для Fedora/RedHat.
apt install gnupg -y 
Рассмотрим работу утилиты на примере облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать.

Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов. Вернемся к нашему терминалу с уже установленной утилитой, для того чтобы ознакомиться с синтаксисом напишем команды:
gpg -h 
Как видим вывод опций довольно обширный. Поэтому заострим внимание на основных опциях и функциях команды, которые могут понадобиться в ходе выполнения базовых действий.
Как создать ключи GPG?
Для того, чтобы подписать сообщение необходимо сгенерировать пару ключей по ассиметричному алгоритму шифрования:
gpg --full-generate-key --expertИспользуем gpg с опциями –full-generate-key и –expert для более подробной конфигурации ключей и пользователя. Выбрав, алгоритм шифрования RSA, длину ключа 2048 и задав пользовательский идентификатор, убедимся в том что ключи были созданы. По умолчанию, она хранятся в связке ключей или же keyring базе данных, которая зашифрована пользовательским ключом. Соответственно подлинность сообщения и файлов зависит от длины ключа и пароля пользователя, в процессе передачи и хранения. Поэтому необходимо задать сложный пароль, желательно от 14 символов.
Просмотрим созданные ключевые пары, для публичных -k, для приватных -K:
gpg -k
Для того, чтобы получатель смог проверить подпись необходимо экспортировать, а затем импортировать публичные ключи получателю:
gpg -a -u Koldek --export > keys.asc
Для просмотра ключа введем команду:
cat keys.ascТеперь есть два варианта распространения данных, из-за угрозы подмены общедоступного ключа, при первичной передаче нам необходимо работать через посредников или доверять ключу к источника. Рассмотрим модель Web-of-Trust, которая подразумевает доверие к источникам на основе рейтинга пользователей. Мы располагаем свой ключ на своем или WoT сайте, распространяем по запросу пользователей.
В схеме с удостоверяющим центром, нам необходимо зарегистрировать свой публичный ключ и получить сертификат, в котором будет стоять новая ЭЦП от удостоверяющего центра. Если пользователь доверяет УЦ, соответственно происходит расшифровка и проверка подписи.
Получив ключ, необходимо импортировать его командой:
gpg --import key.asc
После импорта мы видим номер ключа и имя, которые так же можем сверить для проверки подлинности:
При попытке верифицировать тестовое сообщение мы получим предупреждение о неизвестном происхождении ключа. Для проверки доверия ключам используется база данных или trusted gpg, которая хранит список ключей и уровень доверия к ним.

Пропишем уровень доверия вручную, изменив параметры ключа командой:
gpg --edit-key Koldek А затем выберем пункт, который необходимо отредактировать – trust:

Для полного доверия ключу необходимо выбрать пункт 5, но перед этим сверьте хеш-значения и данные о ключе! И подтвердите свой выбор:

Внизу видим примечание, что доверие к ключу изменится после перезагрузки утилиты, что и сделаем.
Как создать и проверить GPG подпись?
Вернемся к предыдущей машине, где мы генерировали ключи и подпишем первое сообщение!
Существует три варианта того, как можно подписать сообщение:
- создать чистую подпись в самом сообщении;
- создать отдельную подпись в файле;
- создать подпись в файле совмещенную с текстом.
Первый вариант представляет собой файл в котором разделены само сообщение и подпись, для прочтения файла не требуется специальных средств. Только для подтверждения подписи. Пропишем команду:
gpg -a -u Kolded --clear-sign target.txt 
После подписания передайте файл любым удобным способом и верифицируйте сообщение в файле уже на стороне получателя:
gpg --verify target.txt.asc 
Как видим теперь предупреждения и ошибки не появляются и установлена дата подписания сообщения. Однако без сервера времени возможна подмена этих значений, так как они хранятся в мета-данных файла и не верифицируются, как само сообщение.
Следующий способ, отдельный файл с подписью, что может быть удобно для программных пакетов, когда не нужно модифицировать их подписью. Всего лишь необходимо скачать отдельный файл для проверки:
gpg -a -u Koldek -b target.txt > target.txt.asc Для наглядности сразу проверим его подлинность командой:
gpg --verify target.txt.asc
Обратите внимание, что теперь нужно передать на машину само сообщение и подпись к нему, желательно чтобы они находились в одной папке.
Но как обеспечить одновременно конфиденциальность, целостность и подлинность передаваемой подписи? Достаточно после создания ее – зашифровать! Что обеспечит конфиденциальность нашего сообщения, файла или документа. Для этого пропишем команду:
gpg -a -u Koldek -r Raider -se target.txtСформируется файл, в котором уже будет интегрировано сообщение и подпись, теперь необходимо его верифицировать и расшифровать командой:
gpg -d target.txt.asc 
В создании цифровых подписей с помощью GPG мы видим мощный инструмент для обеспечения безопасности и доверия в обмене информацией. Этот процесс гарантирует целостность данных и подтверждает их авторство, открывая новые возможности для безопасного обмена сообщениями и файлами в цифровом мире.