Проверяет ли Enigmail серверы ключей при получении подписанных писем?
Как Enigmail получает открытый ключ для того, кто отправляет вам зашифрованное письмо? Вы должны импортировать его самостоятельно или он получает ключ от сервера ключей?
2 ответа
Итак, я пошел более прямым путем, чтобы узнать об этом вопросе. У Enigmail есть хороший веб-сайт и хороший справочник, который многое объясняет о его работе для обычного пользователя, такого как я, который любит шифрование, но теряется в коде.
В разделе 8 HTML-версии руководства Enigmail требует использования открытого ключа получателя для шифрования сообщения, чтобы они могли его прочитать. Если у вас еще нет их открытого ключа, то, вероятно, он сможет найти открытый ключ на сервере ключей. Это описано в разделе 7 руководства.
Ключ (обычно) записывается в заголовки сообщения. Но эта (зашифрованная) почта не содержит никакой информации об отправителе, если она не подписана. Давайте проанализируем, что содержится в сообщениях OpenPGP.
Разложение зашифрованного сообщения OpenPGP
Вы можете увидеть это, если перечислите пакеты, содержащиеся в зашифрованном сообщении:
$ echo foo | gpg --encrypt --recipient 0xa4ff2279 | gpg --list-packets
Вывод начинается с "публично" видимых незашифрованных заголовков, которые содержат подраздел, для которого зашифровано сообщение:
:pubkey enc packet: version 3, algo 1, keyid CC73B287A4388025
data: [4092 bits]
После ввода ключевой фразы GnuPG также напечатает оставшиеся пакеты:
:encrypted data packet:
length: 63
mdc_method: 2
gpg: encrypted with 4096-bit RSA key, ID A4388025, created 2014-03-26
"Jens Erat (born 1988-01-19 in Stuttgart, Germany)"
:compressed packet: algo=2
:literal data packet:
mode b (62), created 1402861918, name="",
raw data: 4 bytes
Разложение подписанного сообщения OpenPGP
Подписанное сообщение содержит идентификатор подписывающего (под) ключа отправителя, см. :signature packet
линия (четвертый пакет).
$ echo foo | gpg --sign | gpg --list-packets
(GnuPG запрашивает пароль для подписи)
:compressed packet: algo=1
:onepass_sig packet: keyid 8E78E44DFB1B55E9
version 3, sigclass 0x00, digest 2, pubkey 1, last=1
:literal data packet:
mode b (62), created 1402862406, name="",
raw data: 4 bytes
:signature packet: algo 1, keyid 8E78E44DFB1B55E9
version 4, created 1402862406, md5len 0, sigclass 0x00
digest algo 2, begin of digest 9a d2
hashed subpkt 2 len 4 (sig created 2014-06-15)
subpkt 16 len 8 (issuer key ID 8E78E44DFB1B55E9)
data: [4095 bits]
Зашифрованное сообщение OpenPGP также может быть подписано. Я оставляю составление команд для проверки этого в качестве упражнения заинтересованному читателю.
Получение открытых ключей
Используя идентификатор ключа, полученный из подписанного сообщения, можно получить ключ с серверов ключей. Большинство почтовых клиентов (плагинов) сделают это автоматически для вас:
$ gpg --recv-keys 0x8E78E44DFB1B55E9
gpg: requesting key FB1B55E9 from hkp server pool.sks-keyservers.net
gpg: key A4FF2279: "Jens Erat (born 1988-01-19 in Stuttgart, Germany)" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
Если сообщение не подписано, вы (или ваш клиент OpenPGP) могли бы искать на ключевых серверах почтовый адрес другого. Результат тот же, вы все еще не можете быть уверены в правильности этого ключа.