Тот факт, что мне приходится спрашивать об этом после того, как я потратил на это столько часов, уже говорит мне, что по крайней мере одно из этих двух утверждений верно:
- Я делаю что-то ужасно неправильное.
- PGP/GPG — это полная неразбериха, которая намеренно делает работу с ним максимально сложной и запутанной.
По сути, моя система автоматически импортирует все отправленные мне блоки открытых ключей PGP, чтобы иметь возможность автоматически шифровать сообщения при их отправке (отправке от меня в качестве ответа).
Когда вы шифруете текстовое сообщение с помощью PGP/GPG, вы сообщаете программе, какой «получатель» использовать. Этот сбивающий с толку термин на самом деле относится к полю «полное имя + адрес электронной почты» (которое по какой-то причине называется «имя пользователя») в открытом ключе, хранящемся в GPG.
Ну, когда я «импортирую» такой блок открытого ключа PGP (который работает), я понятия не имею, что такое поле «имя пользователя», и если я этого не знаю, я фактически не могу его использовать, поскольку функция шифрования требует, чтобы я ссылался на правильный «сохраненный открытый ключ».
Но как мне на самом деле извлечь поле "имя пользователя" из открытого ключа? Можно было бы подумать, что он вернет это, когда вы выполните команду --import, но, насколько я могу судить, это не так. И я часами копался в руководстве, но ничего по этому поводу не нашел.
Кстати, я нашел эту ветку на StackOverflow:https://security.stackexchange.com/questions/50965/extracting-the-gpg-userid-from-the-public-key-file ... но для меня это не имеет абсолютно никакого смысла. «Решение» уже знает и указывает какой-то идентификатор, что, кажется, сводит на нет весь смысл, поскольку это, по сути, то, что мы пытаемся найти (за исключением поля «имя пользователя»).
Я видел все виды "распространенных/полезных команд PGP/GPG", и ни одна из них даже не упоминает об этом. А? Это как самая простая и важная задача... Я совсем запутался. Почему команда --import не дает мне никакого идентификатора для использования? Дает, но каким-то запутанным образом?
решение1
Почему команда --import не дает мне никакого идентификатора для использования? Дает, но каким-то запутанным образом?
Это так, просто ваши ожидания относительно «пригодного для использования идентификатора» по большей части неверны.
Когда вы шифруете текстовое сообщение с помощью PGP/GPG, вы сообщаете программе, какой «получатель» использовать. Этот сбивающий с толку термин на самом деле относится к полю «полное имя + адрес электронной почты» (которое по какой-то причине называется «имя пользователя») в открытом ключе, хранящемся в GPG.
Поле называется «Идентификатор пользователя». Оно не называется «Имя пользователя».
Множество программ (в первую очередь gpg
и все инструменты, которые их обволакивают)волятакже принимать получателей только по их адресу электронной почты или любому другому совпадению подстроки идентификатора пользователя, или полному 160-битному отпечатку открытого ключа, или «идентификатору ключа» (32/64-битному усеченному отпечатку). Например:
gpg --recipient [email protected] --encrypt
gpg --recipient EA708A76F932CCEAF60D364375F1129BE6E591E4 --encrypt
gpg --recipient "EA70 8A76 F932 CCEA F60D 3643 75F1 129B E6E5 91E4" --encrypt
gpg --recipient fred --encrypt
gpg --recipient 0x75F1129BE6E591E4 --encrypt
(Вы можете проверить соответствие, передав его gpg --list-keys
, например gpg -k fred
, .)
Из них, указание получателя по отпечатку пальца является наиболее безопасным вариантом. Поле "User ID" (будь то полное или частичное) является безопасным идентификатором только если вы используете Web of Trust или имеете какой-либо другой способ отличить законный ключ "Fred Foobar" от поддельного ключа "Fred Foobar".
Ну, когда я «импортирую» такой блок открытого ключа PGP (который работает), я понятия не имею, что такое поле «имя пользователя», и если я этого не знаю, я фактически не могу его использовать, поскольку функция шифрования требует, чтобы я ссылался на правильный «сохраненный открытый ключ».
GnuPG всегда показывает это поле как часть вывода gpg --import
(вместе с 64-битным «идентификатором ключа»). Например:
$ gpg --status-fd=2 --import < /tmp/test.key gpg: ключ75F1129BE6E591E4: открытый ключ "Тестовый пользователь <[email protected]>" импортированный gpg: Общее количество обработанных: 1 gpg: импортировано: 1
Чтобы использовать это в автоматизированном инструменте, используйте --status-fd
который дает вам полный 160-битный отпечаток. Например:
$ gpg --status-fd=2 --import < /tmp/test.key [ГНУПГ:]ИМПОРТ_ОК 0 EA708A76F932CCEAF60D364375F1129BE6E591E4 [GNUPG:] КЛЮЧ_РАССМАТРИВАЕТСЯ EA708A76F932CCEAF60D364375F1129BE6E591E4 0 [GNUPG:] IMPORT_RES 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0
Если вы используете какое-либо другое программное обеспечение PGP (например, не GnuPG) и оно не показывает вам никакой информации о том, какие ключи оно только что импортировало, то это проблема пользовательского интерфейса в этом другом программном обеспечении PGP.