С зарождением цивилизации появилась необходимость передачи информации между людьми. При чём таким способом, чтобы эта информация не стала доступной третьим лицам.
С течением времени технологии развивались, количество информации увеличивалось, а методы её перехвата усложнялись.
В настоящее время происходит активное внедрение цифровых технологий в различные сферы человеческой жизни, поэтому вопрос защиты информации при её хранении и передаче является особенно актуальным.
Я расскажу о том, как сохранить конфиденциальность своей информации с помощью инструмента GPG.
GnuPG (Gnu Privacy Guard) — свободная программа для шифрования информации и создания электронных цифровых подписей. Разработана как альтернатива коммерческой программе PGP. GnuPG полностью совместима со стандартом IETF OpenPGP.
Инструмент командной строки для GnuPG называется GPG. Им я и буду пользоваться. В данной публикации все манипуляции будут выполняться в операционной системе Linux. В ней уже установлено программное обеспечение GnuPG.
Если вы используете macOS, то вам нужно установить GPG-Suite, или воспользоваться командой brew install gnupg2. Если вы пользователь Windows, то советую вам установить GPG4Win.
Шифрование файла с помощью пароля
Далее речь пойдёт о симметричном шифровании. Методе шифрования, при котором для шифрования и дешифрования применяется один и тот криптографический ключ.
1. Создание текстового файла для шифрования
Создать пустой файл через терминал можно с помощью команды: cat > имя_файла
.
Файл будет создан в вашей домашней папке.
В данном случае:
Запишем в файл стихотворение Евгения Евтушенко.
2. Шифрование файла
Вводим следующую команду: gpg -c message.txt
.
Опция -с
(или --symmetric
) означает шифрование только симметричным шифром. Далее нужно будет ввести фразу-пароль, которая станет ключом.
В итоге в директории с исходным файлом появится файл с расширением gpg. Это зашифрованный файл.
Если попытаетесь его открыть как обычный файл, то увидите примерно следующее:
3. Дешифрование
Для расшифровки этого файла следует ввести в терминале следующую команду: gpg --decrypt message.txt.gpg
. Утилита запросит фразу-пароль. Если был введён верный пароль, то на экране отобразится исходный текст.
Для записи дешифрованной информации в отдельный файл добавьте опцию --output и после укажите название файла.
Шифрование файла с помощью ключей
Шифрование с помощью пары ключей – это уже ассиметричное шифрование. Данный метод является более надёжным. Шифрование осуществляется с помощью публичного ключа, а дешифровка - с использованием приватного ключа. Без приватного ключа вы не сможете выяснить что содержалось в исходном файле.
1. Создание ключей
Для создания пары ключей наберите следующую команду в терминале: gpg --full-generate-key
.
Необходимо будет ввести тип ключа, размер ключа (по умолчанию 3072 бит), срок действия ключа, идентификатор пользователя (полное имя, адрес электронной почты) и примечание ключа (если нужно).
Идентификатор пользователя будет использован в качестве идентификатора ключа.
В конце нужно будет подтвердить корректность введённой информации и придумать фразу-пароль для защиты нового ключа.
В документации также указана команда gpg –gen-key
, но при её использовании ряд параметров такие, как тип, размер ключа будут взяты по умолчанию. Срок действия ключа будет 2 года.
В скрытой директории ~./gnupg появятся файлы с ключами. В файле pubring.gpg публичный ключ, а в secring.gpg - приватный.
Также все свои доступные ключи можно увидеть с помощью команды: gpg –list-keys
.
На скриншоте два ключа: первый был создан с помощью команды gpg –gen-key
, второй – с
помощью gpg –full-generate-key
с параметрами, указанными ранее.
3. Шифрование
Для шифрования введите следующую команду: gpg -e -r идентификатор_пользователя имя_файла
.
В качестве идентификатора пользователя я указал просто Dmitry, поэтому утилита выбрала первый по порядку ключ. Чтобы зашифровать информацию с помощью второго ключа, нужно было ввести идентификатор однозначно определяющий второй ключ. Например, ‘Dmitry Alekseev (best key)’.
Опять же в директории с исходным файлом будет создан файл с расширением gpg.
3. Дешифрование
Команда для дешифровки: gpg -d имя_файла.gpg
.
Необходимо ввести фразу-пароль.
После в терминале отобразится дешифрованная информация.
Использование цифровой подписи для файла
Цифровая подпись позволяет подтвердить авторство электронного документа. На основе файла и ключа создаётся отпечаток, который записывается в файл. Если файл будет изменён, то отпечаток уже не совпадёт.
1. Создание цифровой подписи
Вы можете подписать файл с помощью команды: gpg -sign имя_файла
.
Для создания подписи будет использован ранее созданный секретный ключ, поэтому нужно будет снова ввести фразу-пароль.
Опять же в директории с исходным файлом появится файл с расширением gpg.
Также вы можете создать подпись в отдельном файле: gpg -b имя_файла
.
В директории появится файл с расширением sig.
2. Проверка подлинности файла
Введите следующую команду: gpg --verify имя_файла.sig имя_файла
.
Если файл не был изменён, то вы увидите следующее.
Если файл был изменён, то при проверке на экране появится следующее сообщение.
Вывод:
Мы с вами познакомились с таким популярным инструментом шифрования как GPG. Эта утилита обладает большими возможностями по защите информации, мы с вами рассмотрели только часть. Посмотреть документацию по ней можно с помощью команды gpg - h
.
Комментарии (24)
saipr
11.04.2022 09:00+2Для хранения приватных ключей сертификатов в GnuPG можно использовать и криптографические токены PKCS#11. Для доступа к токенам PKCS#11 в GnuPG используется утилита gnupg_pkcs11_scd.
Говоря о GnuPG нужно вспомнить о Клеопатре и почтовых клиентах, использующих его.13werwolf13
11.04.2022 09:04выбор почтового клиента с gpg это на самом деле нетривиальная задача, в случае десктопа есть два варианта thunderbird и kmail. первый плох тем что не использует системное хранилище ключей а делает своё, второй достаточно НЕинтуитивен. для смартфона похоже что нету ничего кроме k9 mail который конечно хорошо работает но выглядит как привет из далёкого прошлого..
saipr
11.04.2022 09:29есть два варианта thunderbird и kmail. первый плох тем что не использует системное хранилище ключей а делает своё,
Конечно, вы можете использовать системное хранилище NSS (Network Security Services). Но я говорю об аппаратных криптографических токенах PKCS#11, которые являются вашим личным хранилищем и вы его храните у себя, например, в кармане
13werwolf13
11.04.2022 09:30+1физические токены я не очень люблю. и проблема даже не в том что они ломаются, а в том что они ломаются всегда невовремя.
astenix
11.04.2022 14:53+1В кде живу, раньше постоянно юзал клеопатру. Потом разузнал, что в кде есть kgpg и перелетел на него. Вообще никаких потерь по сравнению с царицей.
А потом обнаружил, что с ключами (что gpg, что ssh) мне всяко удобнее в консоли.
randomsimplenumber
11.04.2022 09:21+2Кстати, в openssl всё это тоже есть. Только длина ключей отличается.
saipr
11.04.2022 09:31-2Кстати, в openssl всё это тоже есть.
Что есть? Поддержка различных криптографических алгоритмов или что? Длина ключа у каждого криптографического алгоритмов своя.
randomsimplenumber
11.04.2022 10:20+2Что есть?
Шифрование файлов с помощью симметричной и асимметричной криптографии. Цифровые подписи. Ключи.
saipr
11.04.2022 10:31-1Как говорится
OpenSSL и Network Security Services (NSS) — две стороны одной медали
То что есть в этих двух проектах, а именно широты поддержки криптографических алгоритмов и механизмов, в других проектах нет. Естественно, что в openssl есть и шифрование файлов с помощью симметричной и асимметричной криптографии и цифровые подписи и генерация ключей.
randomsimplenumber
11.04.2022 10:43+2Да. Это я не к тому, что gpg не нужен, если есть openssl. Просто упомянул, что способов шифрования под Linux много.
agent_0007
11.04.2022 10:05+2Чуть чуть дополню вашу статью, если зашифрованный фаил потом закодировать в base64, то его можно будет пересылать plain text через мессанджер если он маленького размера, если размер большой(в пределах разумного), то можно порезать на чанки и передать несколькими сообщениями. Обычно делают однострочную комманду и прописывают на алиас, и шифрованный фаил сразу шифруется и бейсится и результат выводится на экран для копи-пасты. Удобно передавать маленькие конфиги)
andreishe
11.04.2022 11:20-1То же самое можно делать с любым файлом. Причем тут шифрование?
randomsimplenumber
11.04.2022 11:41Более того, через мессенджер можно и бинарные файлы передавать, не особо смотря на размер.
masai
11.04.2022 11:44У GPG есть параметр --armor. С ним зашифрованный файл будет содержать текст, который можно безопасно вставить в переписку.
13werwolf13
интересно почему так часто юзают cat и echo для создания пустых файлов если есть touch..
hogstaberg
Ну, для начала, первичным функционалом touch тоже является далеко не создание файла, так что с этой позиции он ничем не отличается от cat/echo.
Я лично использую именно cat > filename когда мне нужно быть уверенным в том, что файл точно окажется пустым независимо от его изначального наличия и/или содержимого до этого момента. В случае touch нужно будет ещё и truncate делать.
13werwolf13
@DirectoriXотвечу сразу и тебе
но в таком случае есть возможность затереть существующий файл что как по мне хуже
в таком случае независимо от того используется `cat > file` или `touch file` лучше делать проверку на его существование ДО выполнения cat/touch чем потом матерится осознавая что затёр то что не следовало затирать
DirectoriX
Предположу, что для получения пустого файла, даже в том случае если файл с таким именем уже существует. Если "потрогать" существующий файл, он от этого пустым не станет, а touch + truncate или rm + touch - две команды вместо одной.
Pinkbyte
Вот именно, ведь достаточно просто:
> имя_файла
tarekd
можно обойтись одной командой используя Here document