uz
KA
июня 23, 2025
Обновлено июня 23, 2025

Создание цифровой подписи с GPG

Linux

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

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

Что такое подпись GPG?

GPG подпись или GPG signature представляют собой аналог обычной подписи человека на документах. Это не картинка или графическая подпись, а строковая последовательность, которая была сформирована однонаправленной функцией хеширования и процесса шифрования криптографическим алгоритмом.

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

Установка и настройка GPG

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

apt update && apt upgrade -y

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

  • apt для Debian/Ubuntu;
  • yum/dnf для Fedora/RedHat.
apt install gnupg -y
Установка
Скриншот №1 — Установка

Рассмотрим работу утилиты на примере облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать.

Создание сервера
Скриншот №2 — Создание сервера

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

gpg -h
Опции команды
Скриншот №3 — Опции команды

Как видим вывод опций довольно обширный. Поэтому заострим внимание на основных опциях и функциях команды, которые могут понадобиться в ходе выполнения базовых действий.

Как создать ключи GPG?

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

gpg --full-generate-key --expert

Используем gpg с опциями –full-generate-key и –expert для более подробной конфигурации ключей и пользователя. Выбрав, алгоритм шифрования RSA, длину ключа 2048 и задав пользовательский идентификатор, убедимся в том что ключи были созданы. По умолчанию, она хранятся в связке ключей или же keyring базе данных, которая зашифрована пользовательским ключом. Соответственно подлинность сообщения и файлов зависит от длины ключа и пароля пользователя, в процессе передачи и хранения. Поэтому необходимо задать сложный пароль, желательно от 14 символов.

Просмотрим созданные ключевые пары, для публичных -k, для приватных -K:

gpg -k
Просмотрим ключи
Скриншот №4 — Просмотрим ключи

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

gpg -a -u Koldek --export > keys.asc
Экспортируем ключи
Скриншот №5 — Экспортируем ключи

Для просмотра ключа введем команду:

cat keys.asc

Теперь есть два варианта распространения данных, из-за угрозы подмены общедоступного ключа, при первичной передаче нам необходимо работать через посредников или доверять ключу к источника. Рассмотрим модель Web-of-Trust, которая подразумевает доверие к источникам на основе рейтинга пользователей. Мы располагаем свой ключ на своем или WoT сайте, распространяем по запросу пользователей.

Обязательно после получения ключа, его скачивания, сверьте хеш-значения – они должны совпадать!

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

Получив ключ, необходимо импортировать его командой:

gpg --import key.asc
Импортируем ключи
Скриншот №6 — Импортируем ключи

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

При попытке верифицировать тестовое сообщение мы получим предупреждение о неизвестном происхождении ключа. Для проверки доверия ключам используется база данных или trusted gpg, которая хранит список ключей и уровень доверия к ним.

Доверие ключу
Скриншот №7 — Доверие ключу

Пропишем уровень доверия вручную, изменив параметры ключа командой:

gpg --edit-key Koldek

А затем выберем пункт, который необходимо отредактировать – trust:

Модификация ключа
Скриншот №8 — Модификация ключа

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

Подтверждение легитимности ключа
Скриншот №9 — Подтверждение легитимности ключа

Внизу видим примечание, что доверие к ключу изменится после перезагрузки утилиты, что и сделаем.

Как создать и проверить GPG подпись?

Вернемся к предыдущей машине, где мы генерировали ключи и подпишем первое сообщение!

Существует три варианта того, как можно подписать сообщение:

  • создать чистую подпись в самом сообщении;
  • создать отдельную подпись в файле;
  • создать подпись в файле совмещенную с текстом.

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

gpg -a -u Kolded --clear-sign target.txt
Чистая подпись
Скриншот №10 — Чистая подпись

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

gpg --verify target.txt.asc
Проверка подписи
Скриншот №11 — Проверка подписи

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

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

gpg -a -u Koldek -b target.txt > target.txt.asc

Для наглядности сразу проверим его подлинность командой:

gpg --verify target.txt.asc
Отдельная подпись
Скриншот №12 — Отдельная подпись

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

Но как обеспечить одновременно конфиденциальность, целостность и подлинность передаваемой подписи? Достаточно после создания ее – зашифровать! Что обеспечит конфиденциальность нашего сообщения, файла или документа. Для этого пропишем команду:

gpg -a -u Koldek -r Raider -se target.txt
Обратите внимание, что параметр -u отвечает за то чьими ключами поставим подпись, а -r чьим публичным ключом будем шифровать сообщение

Сформируется файл, в котором уже будет интегрировано сообщение и подпись, теперь необходимо его верифицировать и расшифровать командой:

gpg -d target.txt.asc
Шифрованная подпись
Скриншот №13 — Шифрованная подпись

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

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...