Использование gpg для шифрования и подписи файлов

GnuPG или GPG — конкретная открытая (GPLv3) реализация OpenPGP(стандарт шифрования, описанный в RFC 4880 и RFC 6637)

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

GPG позволяет шифровать/дешифровать, подписывать и авторизовывать.

Шифрование в gpg может быть выполнено:

1.Асимметрично(шифруется публичным ключом, расшифровывается приватным)
2.Симметрично(шифруется и расшифровывается приватным ключом, шифруется и расшифровывается одной и той же парольной фразой)

Шифрование можно совмещать с подписыванием файла.
Зашифровать можно одним или более публичными ключами.

1.Проверка наличия установленного gpg бинарника, если нет,то устанавливаем пакет,
который содержит в себе этот бинарник

Ubuntu

Centos

Просмотр установленной версии gpg

Просмотр существующих ключей

Просмотр наличия публичный ключей

Просмотр наличия приватный ключей

 

Генерация пары ключей для асимметричного шифрования
Для примера будем и использовать RSA-алгоритм с длиной ключа 2048 бит с бессрочным сроком годности ключа

Вы можете выбрать любой вариант, но учтите, что выбрав третий или четвёртый вариант вы не сможете шифровать сообщения и файлы!

Для RSA ключа размером 2048 бит вполне достаточно, но вы можете выбрать размер до 4096 бит (использовать ключи размера меньше 2048 бит небезопасно).

Выбор длины ключа в битах 2048 vs 4096
С точки зрения безопасности естественно лучше выбирать тот, который больше. Так как он будет наиболее безопасным. И причем тут зависимость не линейная.
То есть 2048 не в 2 раза безопаснее чем 1024. А во много раз. И так же 4096 во много раз безопаснее чем 2048.
Но при этом сам процесс шифрования и процесс расшифровки  требует процессорного времени. И тут тоже большая разница. Каждое увеличение ключа в два раза увеличивает процессорное время примерно в 6-7 раз. Например, если ваш процессор будет расшифровывать rsa1024 одну минуту. То rsa2048 он будет расшифровывать 7 минут. А RSA4096 он уже будет расшифровывать 49 минут.

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

GPG спросит, верно ли мы указали срок, и если да, то нужно будет указать имя, адрес электронной почты и примечание (всё это опционально, но нужно указать хотя бы что-то одно).

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

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

Для ускорения генерации случайных байт рекомендуется установить пакет rng-tools(имя пакета одинаково для Ubuntu и Centos)

Проверяем наличие созданных публичного и приватного ключей

 

Описание полей в созданных ключах:

Для приватного ключа

Для публичного ключа

Для обоих ключей

– алгоритм шифрования(R-RSA) и количество бит(2048)

– иденитификатор ключа,(точнее последняя его часть, полный идентификатор ключа доступен по командам)

— аналогично, но часть идентификатора подключа

– дата создания ключа
Поле expires не указано, значит ключ был создан без истечения срока давности/годности

 

Просмотр отпечатка(fingerprint) ключа

Fingerprint используется в основном для верификация публичного ключа(например, для проверки того, что с сервера ключей был импортирован действительно правильный публичный ключ)
Также отпечаток может выполнять функцию идентификатора ключа — то есть вместо указания имени пользователя (в данном случае MySQL User) можно использовать отпечаток.

 

Расположения gpg-ключей на файловой системе
Все gpg-ключи и конфигурация gpg хранится в каталоге .gnupg в домашем каталоге пользователя

 

Подписывание файлов

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

— файл исходит от того лица, которое её подписало;
— файл не был как либо модифицирован с момента подписи.

Для проверки подписи определённого лица у вас должен быть публичный ключ этого лица.

Подписываем тестовый файл
Подпись при этом сохраняется вместе с сообщением.

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

Либо

И провеярем его содержимое

Подписывание файла с созданием файла в бинарном формате

Будет создан файл 1.txt.gpg, который включает и исходный файл, и его цифровую подпись.
Новый файл в бинарном формате — то есть даже если ранее это было сообщение или текстовый файл, то он становится нечитаемым.

Если на компьютере имеется только один приватный ключ, то он будет выбран автоматически.
Если на компьютере несколько приватных ключей, то нужно использовать также опцию -u ИМЯ или её более длинный вариант —local-user ИМЯ.

Цифровая подпись может быть интегрирована в файл,
а может содержаться в отдельном файле

Для создания отдельного файла с цифровой подписью(вместо интеграции такой подписи в файл с данными)
можно использовать опцию -b (—detach-sign)

Будет создан дополнительный файл .sig (в данном случае 5.txt.sig).
В этом файле нет ничего, кроме цифровой подписи.
Поэтому нужно предоставлять и оригинальный файл, и файл .sig.

 

Проверка подписи:

Проверка подпись, которая интегрирована в файл с данными (используем опцию —verify)

Если цифровая подпись отделена от файла, то после опции —verify нужно указать два аргумента:
вначале идёт файл с подписью, а затем подписанные данные:

Извлечение файла из подписанного файла .gpg


Шифрование/расшифрование файла

Зашифруем новый тестовый файл

По умолчанию шифруется в бинарном формате

Выполним шифрование в ASCII-текстовом формате(используем опцию -a или —armor )

Раcшифровка файла зашифрованногов формате ASCI

Либо

Раcшифровка файла зашифрованного, в бинарном формате

Либо

т.к. у нас только одна пара ключей,то она автоматически/по умолчанию и используется для шифрования/расшифрования

Если таких пар несколько, тогда при выполнении шифрования/расшифрования указываем одно из значений
идентификатор пользователя(имя или email), идентификатор ключа, отпечаток ключа, которое было задано при генерировании ключа

Например, зашифруем и расшифруем файл с помощью идентификатора пользователя ‘MySQL User’


Экспорт/импорт ключей

Экспорт публичного ключа в текстовом виде

Экспорт приватного ключа в текстовом виде
Если при создании пары ключей был установлен пароль на приватный ключ,тогда
этот пароль будет запрошен при экспорте/импорте этого приватного ключа

Импорт публичного ключа

Импорт приватного ключа

 

Редактирования ключей GPG

Например

Получение списка доступных команд в оболочке gpg

Например, необходимо изменить или установить пароль на приватный ключ
Выполняем команду passwd

После чего вводим текущий пароль,если он был установлен,а затем новый пароль и его подтверждение

 

Удаление ключей

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

Затем удалить публичный ключ

 

Сервер ключей

Сервер ключей — это специальный сервер, хранящий публичные ключи.
Сервера ключей используются для распространения/обмена публичных/ми ключей/ами
Тема сервера ключей в этой статье не рассматривается

 

Источник:

https://hackware.ru/?p=8215
https://habr.com/ru/post/358182
https://eax.me/gpg
https://devpew.com/blog/gpg

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика