Шифрование заголовков S / MIME-сообщения / rfc822

Я хочу зашифровать определенные почтовые заголовки (Subject и Reply-To), которые отправляются в зашифрованном письме. Я беру весь MIME (включая заголовки) и успешно его шифрую. Я могу успешно отправить это зашифрованное письмо S / MIME своему почтовому клиенту (Thunderbird). Он будет успешно расшифрован и подтвержден как подписанный.

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

Согласно RFC-5751 я должен заключать свою почту в message/rfc822 сообщение, но я нахожусь в потеря в том, как этого добиться.

Ниже приведены примеры моих сообщений, которые я создаю.

Мой первый вопрос: правильно ли структурирован последний MIME, который я создаю message/rfc822? Возможно, это проблема с почтовым клиентом? Могу ли я зашифровать Reply-To заголовок?

Если бы я мог получить пример mesage/rfc822 инкапсулированного сообщения, это было бы действительно полезно.

Почта должна быть зашифрована

Это приведет к тому, что полученное письмо будет подписано, а заголовки Subject / Reply-To будут правильно интерпретированы почтовым клиентом.

Content-Type: multipart/signed; protocol="application/pkcs7-signature";
 micalg=sha256; boundary="--_NmP-d017e0e3556f7bbc-Part_1"
From: [email protected]
Sender: senderdomain.com
To: [email protected]
Reply-To: [email protected]
Subject: A Secret Subject
Message-ID: <400b1383-362b-eed7-0719-6b2a2e231143>
Date: Mon, 24 Feb 2020 15:59:19 +0000
MIME-Version: 1.0

----_NmP-d017e0e3556f7bbc-Part_1
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

My Message that will be encrypted

----_NmP-d017e0e3556f7bbc-Part_1
Content-Type: application/pkcs7-signature; name=smime.p7s
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7s

MIIOCAYJKoZIhvcNAQcCoIIN+TCCDfUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg
gguTMIIFCDCCA/CgAwIBAgIQVz2HAGYJcTJNsPiWLx1f/TANBgkqhkiG9w0BAQsFADCBjTELMAkG
.
.
.
17p13e02JxfyCqltdb6lkOdpRZ6ZlHHuQZyBCuRtJhRN83gvcJ4d7WCxKI349NEa2/tOb8ziFGat
gzvgu+o=
----_NmP-d017e0e3556f7bbc-Part_1--

Моя зашифрованная почта

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

Sender: [email protected]
From: [email protected]
To: [email protected]
Subject:  A Secret Subject
Reply-To: [email protected]
Message-ID: <400b1383-362b-eed7-0719-6b2a2e231143>
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7m
Content-Type: application/pkcs7-mime; smime-type=enveloped-data;
 name=smime.p7m
Date: Mon, 24 Feb 2020 16:03:38 +0000
MIME-Version: 1.0

MIIYbwYJKoZIhvcNAQcDoIIYYDCCGFwCAQAxggG/MIIBuwIBADCBojCBjTELMAkG
.
.
.
O+EPVCh1fGDFwiFpDtY/z1Lv8g==

Мое инкапсулированное сообщение / rfc822

Это сообщение будет правильно расшифровано, но мой клиент не распознает, что это было зашифрованное сообщение, и не проверяет, что оно было подписано (меня это не особо беспокоит). Расшифрованная почта интерпретируется как пересылаемая и прикрепляется как файл .eml. Однако заголовки Subject или Reply-To не найдены (они есть в зашифрованном письме). Если я добавлю фиктивные значения в соответствии с рекомендациями RFC, эти фиктивные значения будут использоваться моим почтовым клиентом, а не зашифрованными.

Content-Type: message/rfc822; forwarded=false; boundary="--_NmP-07c15c542cedfe74-Part_1"
From: [email protected]
Sender: [email protected]
To: [email protected]
Date: Mon, 24 Feb 2020 15:28:07 +0000
Message-ID: <400b1383-362b-eed7-0719-6b2a2e231143>
MIME-Version: 1.0

----_NmP-07c15c542cedfe74-Part_1
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7m
Content-Type: application/pkcs7-mime; smime-type=enveloped-data;
 name=smime.p7m

MIIYbwYJKoZIhvcNAQcDoIIYYDCCGFwCAQAxggG/MIIBuwIBADCBojCBjTELMAkG
.
.
.
fYU1LuhSBEyymSVRzwWr2T3lrhUe5BZBoY996epZtOPdIYrz2jqUglii1+AUBpUP
UUnpr8+cHTMk/50LHdy3MqMeYA==
----_NmP-07c15c542cedfe74-Part_1

Изменить: добавить отрывок из RFC

В RFC-8551 говорится следующее

In order to protect outer, non-content-related message header fields (for instance, the "Subject", "To", "From", and "Cc" fields), the
   sending client MAY wrap a full MIME message in a message/rfc822
   wrapper in order to apply S/MIME security services to these header
   fields.  It is up to the receiving client to decide how to present
   this "inner" header along with the unprotected "outer" header.  Given
   the security difference between headers, it is RECOMMENDED that the
   receiving client provide a distinction between header fields,
   depending on where they are located.

   When an S/MIME message is received, if the top-level protected MIME
   entity has a Content-Type of message/rfc822, it can be assumed that
   the intent was to provide header protection.  This entity SHOULD be
   presented as the top-level message, taking into account
   header-merging issues as previously discussed.

person jeeves    schedule 24.02.2020    source источник


Ответы (1)


RFC 822 предоставляет обобщенное описание того, как заголовки сообщений электронной почты составлены и должны обрабатываться. по системам, через которые они передаются. RFC 5751 S / MIME 3.2 (кстати, устаревший преемник RFC 8551 S / MIME 4.0) подробно описывает, как использовать этот стандарт для создания зашифрованных писем.

Таким образом, ваш подход к шифрованию электронной почты, описанный в разделе Моя зашифрованная почта, действителен и верен.

Однако ваш подход, описанный в разделе Мое инкапсулированное сообщение / rfc822, не совсем правильный. Вы явно неверно истолковали RFC относительно того, как применять оболочку rfc822. Обертка должна быть вокруг вашего сообщения до его зашифровывания, поэтому оно будет внутри зашифрованной части.

В вашем примере незашифрованное сообщение (слегка измененная версия Mail to be encrypted) должно выглядеть следующим образом:

MIME-Version: 1.0
Content-type: message/rfc822

From: [email protected]
Sender: senderdomain.com
To: [email protected]
Reply-To: [email protected]
Subject: A Secret Subject
Message-ID: <400b1383-362b-eed7-0719-6b2a2e231143>
Date: Mon, 24 Feb 2020 15:59:19 +0000
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha256; boundary="--_NmP-d017e0e3556f7bbc-Part_1"

----_NmP-d017e0e3556f7bbc-Part_1
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

My Message that will be encrypted
[...]

Таким образом, вы в основном добавляете сообщение / rfc822 к сообщению до того, как оно будет зашифровано.

Мне удалось проверить этот подход и протестировать полученное сообщение в двух принимающих почтовых клиентах с разными результатами. В приложении MacOS Mail зашифрованная тема не использовалась для замены незащищенной «внешней» темы, но, по крайней мере, она отображалась заметно ниже исходных заголовков. Это соответствует RFC, который не очень конкретен в отношении презентации:

Принимающий клиент должен решить, как представить этот «внутренний» заголовок вместе с незащищенным «внешним» заголовком. Учитывая различие в безопасности между заголовками, РЕКОМЕНДУЕТСЯ, чтобы принимающий клиент обеспечивал различие между полями заголовков в зависимости от того, где они расположены.

Зашифрованный заголовок Reply-To отображается аналогично, но его адрес электронной почты не учитывается при ответе на это письмо.

Служба поддержки клиентов

Поддержка зашифрованных заголовков в клиентах находится где-то между слабым и отсутствующим. Результаты некоторых тестов:

  • Ни один клиент не поддерживает замену "внешних" заголовков на "внутренние" зашифрованные.
  • Apple Mail (macOS) отображает внутренние заголовки в сообщении на видном месте.
  • Thunderbird отображает зашифрованную часть, включая ее заголовки, как переадресованное сообщение.
  • Outlook не отображает зашифрованную часть, а вместо этого отображает просто пустое сообщение с вложением (которое является зашифрованным сообщением).

Альтернативные подходы

В этом проекте для защищенных Заголовки для криптографической электронной почты (в стадии разработки). Идея состоит в том, чтобы включить защищенные заголовки как отдельную часть в составное сообщение. Эта часть будет визуализирована независимыми клиентами, и в то же время она может быть должным образом обработана поддерживающими клиентами.

person not2savvy    schedule 24.02.2020
comment
Спасибо. Я предполагаю, что то же самое относится и к другим заголовкам, например. ответить на - person jeeves; 24.02.2020
comment
Еще раз спасибо за ответ. Я обновил свой вопрос выдержкой из RFC 8551 об упаковке зашифрованного сообщения в message/rfc822 конверт. Совершенно запутался. - person jeeves; 24.02.2020
comment
Спасибо, что указали на эту часть. Опять же, я не знаю клиента, который его поддерживает. Тем не менее, я исследую еще немного. Если я приду к новым открытиям, я соответствующим образом обновлю свой ответ. - person not2savvy; 24.02.2020
comment
Я обновил свой ответ, чтобы отразить мои новые выводы благодаря вашему вкладу. - person not2savvy; 25.02.2020
comment
Большое Вам спасибо. Это было большим подспорьем. - person jeeves; 25.02.2020
comment
То, что вы видите, - это просто почтовые клиенты, отображающие тело mime message / rfc822 встроенными, при условии, что они поддерживают встроенную визуализацию частей mime message / rfc822. - person jstedfast; 25.02.2020
comment
Спасибо @jstedfast. Не могли бы вы подробнее рассказать о своем комментарии? - person jeeves; 26.02.2020
comment
Фактически вы создаете сообщение с зашифрованным сообщением в качестве единственного его содержимого. - person jstedfast; 26.02.2020