Прикладные программы. Программы для шифрования. PGP.
PGP (Pretty Good Privacy) — программа, позволяющая выполнять операции шифрования и цифровой подписи текста или файлов. Первоначально разработана Филиппом Циммерманном в 1991 году. PGP имеет множество реализаций, совместимых между собой и рядом других программ (GnuPG, FileCrypt и др.) благодаря стандарту OpenPGP (RFC 4880), но имеющих разный набор функциональных возможностей. Существуют реализации PGP для всех наиболее распространённых операционных систем. Кроме свободно распространяемых реализаций, есть ещё и коммерческие. В 1999 году силами Фонда свободного программного обеспечения на основе опубликованных исходных текстов PGP была создана свободная реализация OpenPGP под названием GNU Privacy Guard (GnuPG).
GnuPG поддерживает симметричное шифрование с помощью пароля и асимметричное с помощью ключевой пары. Пользователь GnuPG создаёт ключевую пару: открытый и закрытый ключ. При генерации ключей задаются их владелец (имя и адрес электронной почты), тип ключа, длина ключа и срок его действия. Открытый ключ используется для шифрования и проверки цифровой подписи. Закрытый ключ — для расшифровки и создания цифровой подписи. Ключи GnuPG можно использовать в SSH для аутентификации.
Непосредственно GnuPG работает в терминале и не имеет графического интерфейса. Для удобства пользователей написаны различные графические интерфейсы позволяющие использовать основные функции программы. Наиболее распространённые из них мы и рассмотрим в данном руководстве.
Kleopatra.

Предустановленая в Tails графическая оболочка для работы с GnuPG.

Для генерации новой ключевой пары асимметричного шифрования выбираем пункт меню Файл ⇒ Новая пара ключей OpenPGP
.

Задаём Имя пользователя и идентификатор в виде e-mail. Его можно задавать любой придуманный.
Выбираем пункт 🗹 Защитить созданный ключ паролем
, нажимаем кнопку Дополнительные параметры
.

Выбираем ключ 🗹 RSA 4096 бит
🗹 +RSA 4096 бит
Использование сертификата 🗹 Создание подписи
, 🗹 Сертификация
, 🗹 Шифрование
. Если планируется использовать ключ в том числе и для аутентификации по SSH, то необходимо выбрать пункт 🗹 Аутентификация
.

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

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

Необходимо сделать резервную копию закрытого ключа и экспортировать открытый ключ. Нажимаем правой клавишей мыши на созданном ключе, последовательно выбираем пункты Экспорт…
для экспорта открытого ключа и Резервное копирование закрытых ключей…
. Полученные файлы необходимо сохранить на отдельном носителе. Удобно импортировать их в базу паролей KeePassXC и хранить в таком виде.
Шифрование текста.
Нажимаем кнопку Блокнот
, выбираем вкладку Получатели
.

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

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

Для расшифровки\проверки подписи необходимо вставить шифрованное или подписанное сообщение в основное поле блокнота и нажать кнопку Расшифровать и\или проверить текст
.



Появившееся зелёное поле с информацией о подписи будет свидетельствовать о том что она верна.
Что бы воспользоваться симметричным шифрованием с паролем необходимо выбрать пункт 🗹 Зашифровать используя пароль
и ввести пароль шифрования.
Для шифрование или создания отдельной подписи для файлов необходимо использовать меню Файл ⇒ Подписать\зашифровать
. Для расшифровки\проверки Файл ⇒ Расшифровать и проверить
.
Открытые ключи можно искать и импортировать с публичных серверов ключей. Для этого должно быть установлено соединение с tor. К примеру импортируем открытый ключ подписи установочного дистрибутива операционной системы Kicksecure. Открываем страницу сайта разработчиков на которой указан Key fingerprint копируем от туда значение 916B 8D99 C38E AF5E 8ADC 7A2A 8D66 066A 2EEA CCDA
, нажимаем кнопку Поиск на сервере
, в поле Искать:
вставляем значение Key fingerprint, нажимаем кнопку Поиск
.

Выделяем найденный ключ, нажимаем кнопку Импорт
.

После этого можно заверить импортированный ключ.


И он появится в списках известных открытых ключей с пометкой Удостоверен
.

Таперь можно с его помощью осуществлять проверку подписи загруженного установочного образа операционной системы Kicksecure.
Дополнительно для использования ключей GnuPG в качестве аутентификации SSH можно в свойствах подключа (Контекстное меню по нажатию на ключ правой клавишей мыши ⇒ Подробности ⇒ Подробные сведения
) экспортировать открытый ключ OpenSSH и сделать резерную копию подключа шифрования.


GNU Privacy Assistant (GPA)
Предустановленая в Whonix графическая оболочка для работы с GnuPG. Можно установить в Tails amnesia@amnesia:~$ sudo apt install gpa
. По сравнению с Kleopatra имеет более ограниченную функциональность и не обновлялась с Apr 15, 2021. Интерфейс не поддерживает вкладки, вся работа с программой происходит в отдельных окнах Диспетчер ключей
, Менеджер файлов
, Буфер
, Диспетчер карт
вызываемых из пункта меню Окна
. По умолчанию генерируются ключи RSA 2048 бит.

Для создания ключевой пары включаем Правка ⇒ Параметры ⇒ 🗹 Расширенный режим
.

Выбираем пункт меню Ключи ⇒ Новый ключ
.

В расширенном режиме максимально можно выбрать создание ключа RSA 3072 бит. Выбираем это значение, заполняем поля Имя:
, E-mail:
, Примечание
, нажимаем OK
, вводим парольную фрвзу для защиты ключа. Новый ключ готов.
Экспортируем открытый ключ.

Делаем резервную копию закрытого ключа.


Подпись текста.
Открываем окно буфера Окна ⇒ Буфер
. Вводим текст сообщения. Выбираем пункт меню Файл ⇒ Подписать
.

Выбираем закрытый ключ подписи.

Нажимаем OK
, в окне буфера появляется подписанный текст.

Шифрование текста.
Открываем окно буфера Окна ⇒ Буфер
. Вводим текст сообщения. Выбираем пункт меню Файл ⇒ Зашифровать
.

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

Нажимаем OK
, в окне буфера появляется зашифрованный текст.

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

Открываем окно буфера Окна ⇒ Буфер
. Вставляем подписанный текст сообщения. Выбираем пункт меню Файл ⇒ Проверить
.

Получаем сообщение о ключе, которым подписано сообщение и достоверности подписи.
Подписывание файлов.
Открываем окно менеджера файлов Окна ⇒ Менеджер файлов
. Добавляем подписываемый файл Файл ⇒ Открыть
. Выбираем пункт меню Файл ⇒ Подписать

Выбираем закрытый ключ для подписи файла.

Если выбрать пункт 🗹 Подпись и сжатие
, то файл будет архивирован и подписан, если 🗹 Упаковка в текст
, то подписанный архифированный файл будет в текстовом формате. Выбираем пункт 🗹 Отдельная подпись
, нажимаем OK
. В каталоге с подписываемым файлом появляется файл подписи с расширением .sig.
Проверка подписи файла.

Выделяем файл подписи .sig выбираем пункт меню Файл ⇒ Проверить
.

Получаем сообщение о ключе, которым подписано сообщение и достоверности подписи.
Шифрование и расшифровка файлов проводятся аналогичным образом с помощью пунктов меню Файл ⇒ Зашифровать
и Файл ⇒ Расшифровать
.
GeanyPG. GPG encryption plugin.
На мой взляд наиболее удобный инструмент повседневного использования GnuPG. С его помощью можно только зашифровать, подписать, расшифровать\проверить и проверить подпись текста, а работать с ключами и файлами в описанных выше программах или терминале. Geany это достаточно мощный текстовый редактор с большим количеством функций и подключаемых плагинов, его значительно удебнее использовать вместо стандартного предустановленного в оперционной системе gnome-text-editor.
Устанавливаем Geany и плагин GeanyPG
amnesia@amnesia:~$ sudo apt install geany geany-plugin-pg
Запускаем Geany и включаем плагин GeanyPG


В меню Инструменты появляется пункт GeanyPG.

Подписываем текст



Проверяем подпись


Шифруем текст



Расшифровываем текст


GnuPG Использование в терминале.
В терминале GnuPG работает совершено одинаково для всех операционных систем. Вам не нужно забиться о том какой графический конфигуратор установлен, и установлен ли вообще. Доступны все функции программы. Моожно вызывать из скриптов.
Создание ключевой пары.
amnesia@amnesia:~$ gpg --full-generate-key
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: enabled debug flags: memstat
Выберите тип ключа:
(1) RSA и RSA (по умолчанию)
(2) DSA и Elgamal
(3) DSA (только для подписи)
(4) RSA (только для подписи)
(14) Имеющийся на карте ключ
Ваш выбор? 1
длина ключей RSA может быть от 1024 до 4096.
Какой размер ключа Вам необходим? (3072) 4096
Запрошенный размер ключа - 4096 бит
Выберите срок действия ключа.
0 = не ограничен
<n> = срок действия ключа - n дней
<n>w = срок действия ключа - n недель
<n>m = срок действия ключа - n месяцев
<n>y = срок действия ключа - n лет
Срок действия ключа? (0) 0
Срок действия ключа не ограничен
Все верно? (y/N) y
GnuPG должен составить идентификатор пользователя для идентификации ключа.
Ваше полное имя: test_key
Адрес электронной почты: test_key@test.tt
Примечание: Тестовый ключ
Используется таблица символов 'utf-8'.
Вы выбрали следующий идентификатор пользователя:
"test_key (Тестовый ключ) <test_key@test.tt>"
Сменить (N)Имя, (C)Примечание, (E)Адрес; (O)Принять/(Q)Выход? O
Необходимо получить много случайных чисел. Желательно, чтобы Вы
в процессе генерации выполняли какие-то другие действия (печать
на клавиатуре, движения мыши, обращения к дискам); это даст генератору
случайных чисел больше возможностей получить достаточное количество энтропии.
gpg: pinentry launched (735876 gtk2 1.2.1 /dev/pts/11 xterm-256color :0 20620/1000/5 1000/1000 -) --Задаём пароль
gpg: запись самоподписи
gpg: подпись RSA/SHA512 пользователя "0x137FF1980C68A1F4 [?]"
Необходимо получить много случайных чисел. Желательно, чтобы Вы
в процессе генерации выполняли какие-то другие действия (печать
на клавиатуре, движения мыши, обращения к дискам); это даст генератору
случайных чисел больше возможностей получить достаточное количество энтропии.
gpg: запись связующей подписи
gpg: подпись RSA/SHA512 пользователя "0x137FF1980C68A1F4 [?]"
gpg: сохранение открытого ключа в '/home/amnesia/.gnupg/pubring.kbx'
gpg: использую модель доверия pgp
gpg: сохраняю в '/home/amnesia/.gnupg/openpgp-revocs.d/E13C29283A43142828EECCEA137FF1980C68A1F4.rev'
gpg: подпись RSA/SHA512 пользователя "0x137FF1980C68A1F4 test_key (Тестовый ключ) <test_key@test.tt>"
gpg: сертификат отзыва записан в '/home/amnesia/.gnupg/openpgp-revocs.d/E13C29283A43142828EECCEA137FF1980C68A1F4.rev'.
открытый и секретный ключи созданы и подписаны.
gpg: keydb: handles=2 locks=1 parse=1 get=1
gpg: build=1 update=0 insert=1 delete=0
gpg: reset=5 found=1 not=1 cache=0 not=3
gpg: kid_not_found_cache: count=0 peak=1 flushes=1
gpg: sig_cache: total=4 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=10 polls=0/27 added=162/6480
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 1344/65536 bytes in 2 blocks
pub rsa4096/0x137FF1980C68A1F4 2024-09-03 [SC]
Отпечаток ключа = E13C 2928 3A43 1428 28EE CCEA 137F F198 0C68 A1F4
uid test_key (Тестовый ключ) <test_key@test.tt>
sub rsa4096/0x045CF0C25B12850F 2024-09-03 [E]
Просмотр ключей в свзяке.
Показывает все ключи в связке
amnesia@amnesia:~$ gpg --list-keys
pub rsa4096/0x137FF1980C68A1F4 2024-09-03 [SC]
Отпечаток ключа = E13C 2928 3A43 1428 28EE CCEA 137F F198 0C68 A1F4
uid [ абсолютно ] test_key (Тестовый ключ) <test_key@test.tt>
sub rsa4096/0x045CF0C25B12850F 2024-09-03 [E]
Показывает секретные ключи.
amnesia@amnesia:~$ gpg --list-secret-keys
sec rsa4096/0x137FF1980C68A1F4 2024-09-03 [SC]
Отпечаток ключа = E13C 2928 3A43 1428 28EE CCEA 137F F198 0C68 A1F4
uid [ абсолютно ] test_key (Тестовый ключ) <test_key@test.tt>
ssb rsa4096/0x045CF0C25B12850F 2024-09-03 [E]
Показывает публичные ключи.
amnesia@amnesia:~$ gpg --list-public-keys
pub rsa4096/0x137FF1980C68A1F4 2024-09-03 [SC]
Отпечаток ключа = E13C 2928 3A43 1428 28EE CCEA 137F F198 0C68 A1F4
uid [ абсолютно ] test_key (Тестовый ключ) <test_key@test.tt>
sub rsa4096/0x045CF0C25B12850F 2024-09-03 [E]
Показывает отпечаток ключа.
amnesia@amnesia:~$ gpg --fingerprint test_key@test.tt
gpg: enabled debug flags: memstat
gpg: использую модель доверия pgp
gpg: keydb: handles=1 locks=0 parse=1 get=1
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=1 not=1 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=2 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
pub rsa4096/0x137FF1980C68A1F4 2024-09-03 [SC]
Отпечаток ключа = E13C 2928 3A43 1428 28EE CCEA 137F F198 0C68 A1F4
uid [ абсолютно ] test_key (Тестовый ключ) <test_key@test.tt>
sub rsa4096/0x045CF0C25B12850F 2024-09-03 [E]
Отпечаток ключа = 8482 E27A F2A4 C502 A1A5 DE19 045C F0C2 5B12 850F
Экспорт открытого ключа в текстовом виде.
По умолчанию экспортируется в текущий каталог в файл pubkey.txt.
amnesia@amnesia:~$ gpg --armor --output pubkey.txt --export 0x137FF1980C68A1F4
gpg: enabled debug flags: memstat
gpg: сохраняю в 'pubkey.txt'
gpg: keydb: handles=1 locks=0 parse=1 get=1
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=1 not=1 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=0 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
amnesia@amnesia:~$ cat pubkey.txt
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
mp8EcRK+qFCK4wt6efhI3U87UA==
=v4YW
-----END PGP PUBLIC KEY BLOCK-----
Экспорт секретного ключа в текстовом виде.
amnesia@amnesia:~$ gpg --armor --output privkey.txt --export-secret-keys 0x137FF1980C68A1F4
gpg: enabled debug flags: memstat
gpg: сохраняю в 'privkey.txt'
gpg: key 30C7537C91D9DF01D1E138F8273508FB3EA3E07A: asking agent for the secret parts
gpg: pinentry launched (736403 gtk2 1.2.1 /dev/pts/11 xterm-256color :0 20620/1000/5 1000/1000 -) --Запрос пароля
gpg: key B9251BAAC98BEA1C158DF8B140159A343BDB46F4: asking agent for the secret parts
gpg: keydb: handles=2 locks=0 parse=2 get=2
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=2 not=1 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=2 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
amnesia@amnesia:~$ cat privkey.txt
-----BEGIN PGP PRIVATE KEY BLOCK-----
-----END PGP PRIVATE KEY BLOCK-----
Экспортируется в указанный файл privkey.txt Ключ все еще зашифрован паролем.
Импорт открытого ключа.
amnesia@amnesia:~$ gpg --import key.txt
Импортируется из файла key.txt текущего каталога.
Импорт секретного ключа.
amnesia@amnesia:~$ gpg --allow-secret-key-import --import privkey.txt
Импортируется из файла privkey.txt текущего каталога.
Импорт открытого ключа с keyserver.
amnesia@amnesia:~$ torsocks gpg --keyserver zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion --search-keys импортируемый@example.ее
Обновление ключей с keyserver.
Время от времени стоит обновлять ключи, на случай, если какие-то ключи отозвали.
amnesia@amnesia:~$ torsocks gpg --keyserver zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion --refresh-keys
Шифрование и подписываение файла для заданного получателя.
amnesia@amnesia:~$ gpg --encrypt --sign -u test_key@test.tt --armor -r tails-sysadmins@boum.org test.txt
gpg: enabled debug flags: memstat
gpg: использую модель доверия pgp
gpg: использую подключ 0x58BA940CCA0A30B4 вместо первичного ключа 0x70F4F03116525F43
gpg: автоматически получили 'tails-sysadmins@boum.org' через Local
gpg: 0x58BA940CCA0A30B4: Нет свидетельств того, что данный ключ принадлежит названному пользователю
sub rsa4096/0x58BA940CCA0A30B4 2012-08-23 Tails system administrators <tails-sysadmins@boum.org>
Отпечаток первичного ключа: D113 CB6D 5131 D34B A5F0 FE9E 70F4 F031 1652 5F43
Отпечаток подключа: 373D A2F4 25C9 D097 B95A DAD4 58BA 940C CA0A 30B4
НЕТ уверенности в том, что ключ принадлежит человеку, указанному
в идентификаторе пользователя. Если Вы ТОЧНО знаете, что делаете,
можете ответить на следующий вопрос утвердительно. (Это сообщение появляется потому что публичный ключ с идентификатором tails-sysadmins@boum.org не подписан вашим ключом.)
Все равно использовать данный ключ? (y/N) y
gpg: сохраняю в 'test.txt.asc'
gpg: RSA/AES256 зашифровано для пользователя "0x58BA940CCA0A30B4 Tails system administrators <tails-sysadmins@boum.org>"
gpg: pinentry launched (737182 gtk2 1.2.1 /dev/pts/11 xterm-256color :0 20620/1000/5 1000/1000 -)
gpg: подпись RSA/SHA512 пользователя "0x137FF1980C68A1F4 test_key (Тестовый ключ) <test_key@test.tt>"
gpg: keydb: handles=3 locks=0 parse=4 get=4
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=1 found=4 not=1 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=74 cached=72 good=72 bad=0
gpg: random usage: poolsize=600 mixed=19 polls=0/22 added=141/6044
outmix=5 getlvl1=4/527 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 1408/65536 bytes in 3 blocks
Расшифровка файла и проверка подписи.
amnesia@amnesia:~$ gpg test.txt.asc
Подпись и проверки подписи бинарного файла.
amnesia@amnesia:~$ gpg --detach-sign -u test_key@test.tt test.iso
gpg: enabled debug flags: memstat
gpg: сохраняю в 'test.iso.sig'
gpg: подпись RSA/SHA512 пользователя "0x137FF1980C68A1F4 test_key (Тестовый ключ) <test_key@test.tt>"
gpg: keydb: handles=1 locks=0 parse=1 get=1
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=1 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=2 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=1 polls=0/4 added=24/960
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 1344/65536 bytes in 2 blocks
amnesia@amnesia:~$ gpg --verify -u test_key@test.tt test.iso.sig
gpg: enabled debug flags: memstat
gpg: предполагается, что подписанные данные находятся в 'test.iso'
gpg: Подпись сделана Вт 03 сен 2024 11:30:59 MSK
gpg: ключом RSA с идентификатором E13C29283A43142828EECCEA137FF1980C68A1F4
gpg: издатель "test_key@test.tt"
gpg: использую модель доверия pgp
gpg: Действительная подпись пользователя "test_key (Тестовый ключ) <test_key@test.tt>" [абсолютное]
Отпечаток первичного ключа: E13C 2928 3A43 1428 28EE CCEA 137F F198 0C68 A1F4
gpg: формат подписи: двоичный, хеш-функция SHA512, алгоритм ключа rsa4096
gpg: keydb: handles=3 locks=0 parse=3 get=3
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=3 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=6 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
Шифрование текста с выводом в терминал.
amnesia@amnesia:~$ echo -e "Шифруемый текст" | gpg --armor --encrypt -r test_key@test.tt
gpg: enabled debug flags: memstat
gpg: использую модель доверия pgp
gpg: использую подключ 0x045CF0C25B12850F вместо первичного ключа 0x137FF1980C68A1F4
gpg: автоматически получили 'test_key@test.tt' через Local
gpg: Данный ключ принадлежит нам
gpg: чтение из '[stdin]'
gpg: вывод в stdout
gpg: RSA/AES256 зашифровано для пользователя "0x045CF0C25B12850F test_key (Тестовый ключ) <test_key@test.tt>"
-----BEGIN PGP MESSAGE-----
hQIMAwRc8MJbEoUPAQ//ZgsBVMDNWjZLrkh6ZbHervjSNDzQFeoZVhL4XsYJbUjl
9Hjz52RJ16Lq+/IaN+ICSx3mjLsY8eNQq5FpBR+BTb2ppY2yMzcmoWe6TxyqCt3w
CxsrOcT8UZy0uKpctNLB+lbWMMKMYgxg6ADRPgajU1SdLNRQwsogv8JrEKGVaXVK
h67pg3xk2CIM7M1418y2IwhDcvGtJBCs45m7eH/SgEmlsoG2KAawoCDs9fBuiyi6
leYD15uOg6R6PaBIwhGBPxrMYySlT8r8/zGiC1NVnOgubaEfHSIcEXw/95zS1q0m
yth1UAVqMIUShv1ieQhb7VJqWZ+43SxrU6afii4YhNlHcnPapN/hj7uaXZCAKD/b
pN+xHu0UVYKQJHcP5xAeuwlzQWRxo80+lBt4u2rC1pP4eSM3i1QddKRNuHEPQGUn
kxoxxsk1i46BrboGLg5jJ6MCsTgSEcSJm6z7ZWHsuM+ZJdQI8uOjYK5Srt5hAT/K
VZ/2F47etLl4JVbZhRiCwnx7Cm3h+SEr5LXf2+xedZoIhTkrFRAEpAz3hxmP8vh+
Zt2D2TZz2FzYsEojzOujmBMH8HEcU/TKvFUUwHAGftpmLBakvhNa91ODzoIoYUPN
NOgnBJXidYznUMScSxxFOLdGYZwNZXmcTAzIwZVSR7KDXpPAGUXfqPFMuqb7FU/S
WgHYy3dKt0IUGfupTWe8YJJzrHJleanRYRxpMM5XzmvEG4YMlrY7uKpGku+cTPbO
0i+UvrBBahMe+aRCuFa+2mxunSSBPcKdEyiXogKiB9RZjfZO8GDxTaYMNg==
=Do1B
-----END PGP MESSAGE-----
gpg: keydb: handles=2 locks=0 parse=2 get=2
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=2 not=1 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=4 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=11 polls=0/6 added=45/2204
outmix=5 getlvl1=4/526 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 1344/65536 bytes in 2 blocks
amnesia@amnesia:~$ echo -e "-----BEGIN PGP MESSAGE-----
hQIMAwRc8MJbEoUPAQ//ZgsBVMDNWjZLrkh6ZbHervjSNDzQFeoZVhL4XsYJbUjl
9Hjz52RJ16Lq+/IaN+ICSx3mjLsY8eNQq5FpBR+BTb2ppY2yMzcmoWe6TxyqCt3w
CxsrOcT8UZy0uKpctNLB+lbWMMKMYgxg6ADRPgajU1SdLNRQwsogv8JrEKGVaXVK
h67pg3xk2CIM7M1418y2IwhDcvGtJBCs45m7eH/SgEmlsoG2KAawoCDs9fBuiyi6
leYD15uOg6R6PaBIwhGBPxrMYySlT8r8/zGiC1NVnOgubaEfHSIcEXw/95zS1q0m
yth1UAVqMIUShv1ieQhb7VJqWZ+43SxrU6afii4YhNlHcnPapN/hj7uaXZCAKD/b
pN+xHu0UVYKQJHcP5xAeuwlzQWRxo80+lBt4u2rC1pP4eSM3i1QddKRNuHEPQGUn
kxoxxsk1i46BrboGLg5jJ6MCsTgSEcSJm6z7ZWHsuM+ZJdQI8uOjYK5Srt5hAT/K
VZ/2F47etLl4JVbZhRiCwnx7Cm3h+SEr5LXf2+xedZoIhTkrFRAEpAz3hxmP8vh+
Zt2D2TZz2FzYsEojzOujmBMH8HEcU/TKvFUUwHAGftpmLBakvhNa91ODzoIoYUPN
NOgnBJXidYznUMScSxxFOLdGYZwNZXmcTAzIwZVSR7KDXpPAGUXfqPFMuqb7FU/S
WgHYy3dKt0IUGfupTWe8YJJzrHJleanRYRxpMM5XzmvEG4YMlrY7uKpGku+cTPbO
0i+UvrBBahMe+aRCuFa+2mxunSSBPcKdEyiXogKiB9RZjfZO8GDxTaYMNg==
=Do1B
-----END PGP MESSAGE-----
" | gpg --armor --decrypt -r test_key@test.tt
gpg: enabled debug flags: memstat
gpg: открытый ключ - 0x045CF0C25B12850F
gpg: использую подключ 0x045CF0C25B12850F вместо первичного ключа 0x137FF1980C68A1F4
gpg: использую подключ 0x045CF0C25B12850F вместо первичного ключа 0x137FF1980C68A1F4
gpg: зашифровано 4096-битным ключом RSA с идентификатором 0x045CF0C25B12850F, созданным 2024-09-03
"test_key (Тестовый ключ) <test_key@test.tt>"
gpg: данные зашифрованы алгоритмом AES256
gpg: первоначальное имя файла=''
Шифруемый текст
gpg: keydb: handles=3 locks=0 parse=4 get=4
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=1 found=4 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=6 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
Редактирование ключа.
Добавление идентификаторов.
К одному ключу можно добавить несколько идентификаторов (UID). Редактирование ключа осуществляется в интерактивном режиме.
amnesia@amnesia:~$ gpg --edit-key 0x045CF0C25B12850F
> adduid
> uid <number>
> trust (5 = ultimate trust)
> uid <number>
> primary (для выбора основного идентификатора)
> save
Удаление идентификаторов.
amnesia@amnesia:~$ gpg --edit-key 0x045CF0C25B12850F
> uid <number>
> deluid
> save
Дополнительные ключи.
Существует несколько видов ключей
● для сертификации (тип C) (обычно только основной ключ)
● для подписи (тип S)
● для шифрования (тип E)
● для аутентификации (тип A)
amnesia@amnesia:~$ gpg --expert --edit-key 0x045CF0C25B12850F
> addkey
> save
Удаление ключа.
amnesia@amnesia:~$ gpg --delete-keys 0x045CF0C25B12850F
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: enabled debug flags: memstat
gpg: имеется секретный ключ для открытого ключа "0x045CF0C25B12850F"!
gpg: сначала удалите его командой "--delete-secret-keys".
gpg: keydb: handles=2 locks=0 parse=2 get=2
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=2 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=0 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
amnesia@amnesia:~$ gpg --delete-secret-keys 0x045CF0C25B12850F
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: enabled debug flags: memstat
sec rsa4096/0x137FF1980C68A1F4 2024-09-03 test_key (Тестовый ключ) <test_key@test.tt>
Удалить данный ключ из таблицы? (y/N) y
Это секретный ключ! - все равно удалить? (y/N) y
gpg: pinentry launched (739107 gtk2 1.2.1 /dev/pts/8 xterm-256color :0 20620/1000/5 1000/1000 -)
gpg: pinentry launched (739124 gtk2 1.2.1 /dev/pts/8 xterm-256color :0 20620/1000/5 1000/1000 -)
gpg: keydb: handles=3 locks=0 parse=3 get=3
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=3 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=2 cached=2 good=2 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 0/65536 bytes in 0 blocks
Симметричное шифрование.
Шифрование файла.
Шифруем файл test.txt из текущего каталога. Шифрованный файл на выходе test.txt.gpg
amnesia@amnesia:~$ gpg -o test.txt.gpg --cipher-algo AES -a -c test.txt
gpg: enabled debug flags: memstat
gpg: pinentry launched (751329 gtk2 1.2.1 /dev/pts/8 xterm-256color :0 20620/1000/5 1000/1000 -) --Ввод пароля
gpg: pinentry launched (751350 gtk2 1.2.1 /dev/pts/8 xterm-256color :0 20620/1000/5 1000/1000 -)
gpg: используется симметричный шифр AES
gpg: сохраняю в 'test.txt.gpg'
gpg: keydb: handles=0 locks=0 parse=0 get=0
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=0 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=0 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=7 polls=0/5 added=37/1956
outmix=3 getlvl1=2/24 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 1408/65536 bytes in 3 blocks
Расшифровка файла.
Очистка кэшированного пароля.
amnesia@amnesia:~$ echo RELOADAGENT | gpg-connect-agent
amnesia@amnesia:~$ gpg -o test.txt -d test.txt.gpg
gpg: enabled debug flags: memstat
gpg: данные зашифрованы алгоритмом AES.CFB
gpg: pinentry launched (751851 gtk2 1.2.1 /dev/pts/8 xterm-256color :0 20620/1000/5 1000/1000 -)
gpg: зашифровано одной фразой-паролем
gpg: первоначальное имя файла='test.txt'
gpg: keydb: handles=0 locks=0 parse=0 get=0
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=0 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=0 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 64/65536 bytes in 1 blocks
Шифрование текста в терминале.
amnesia@amnesia:~$ echo -e "Шифруемый текст" | gpg --cipher-algo AES -a -c
gpg: enabled debug flags: memstat
gpg: pinentry launched (751943 gtk2 1.2.1 - xterm-256color :0 - 1000/1000 -) --Ввод пароля
gpg: pinentry launched (751965 gtk2 1.2.1 - xterm-256color :0 - 1000/1000 -)
gpg: используется симметричный шифр AES
gpg: вывод в stdout
-----BEGIN PGP MESSAGE-----
jA0EBwMC+UhpSIJ4l6n/0lQB7/sXPsWaRwRFScc+4twEKB/MxPok8gfzRVsRT/9H
TZjOYPnh1w0lW0MhRvkjvxcyChhYv205h0bQ7qqRc+52EzCr7+NUHGc1JO0sg6n6
LQmH8p4=
=MNfX
-----END PGP MESSAGE-----
gpg: keydb: handles=0 locks=0 parse=0 get=0
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=0 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=0 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=7 polls=0/5 added=37/1956
outmix=3 getlvl1=2/24 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 1408/65536 bytes in 3 blocks
amnesia@amnesia:~$ echo -e "
-----BEGIN PGP MESSAGE-----
jA0EBwMC+UhpSIJ4l6n/0lQB7/sXPsWaRwRFScc+4twEKB/MxPok8gfzRVsRT/9H
TZjOYPnh1w0lW0MhRvkjvxcyChhYv205h0bQ7qqRc+52EzCr7+NUHGc1JO0sg6n6
LQmH8p4=
=MNfX
-----END PGP MESSAGE-----
" | gpg -d
gpg: enabled debug flags: memstat
gpg: данные зашифрованы алгоритмом AES.CFB
gpg: pinentry launched (752059 gtk2 1.2.1 - xterm-256color :0 - 1000/1000 -) --Ввод пароля
gpg: зашифровано одной фразой-паролем
gpg: первоначальное имя файла=''
Шифруемый текст
gpg: keydb: handles=0 locks=0 parse=0 get=0
gpg: build=0 update=0 insert=0 delete=0
gpg: reset=0 found=0 not=0 cache=0 not=0
gpg: kid_not_found_cache: count=0 peak=0 flushes=0
gpg: sig_cache: total=0 cached=0 good=0 bad=0
gpg: random usage: poolsize=600 mixed=0 polls=0/0 added=0/0
outmix=0 getlvl1=0/0 getlvl2=0/0
gpg: rndjent stat: collector=0x0000000000000000 calls=0 bytes=0
gpg: secmem usage: 64/65536 bytes in 1 blocks
Графический интерфейс для GnuPG под Android ― OpenKeyChain.
Из терминала GnuPG под Android можно пользоваться в Termux.