Открыть сервисСервис

Стандарт DKIM

DKIM (DomainKeys Identified Mail) — это метод аутентификации электронной почты, позволяющий получающему почтовому серверу проверить, что письмо действительно было отправлено с домена, указанного в адресе отправителя, и не было изменено в процессе передачи. Технология основана на использовании криптографической подписи и публичного ключа, публикуемого в DNS-записях домена. DKIM является одним из ключевых механизмов борьбы с фишингом, спамом и подделкой отправителя (email spoofing).

История и развитие

Концепция DomainKeys была разработана компанией Yahoo! в 2004 году как метод аутентификации почты с использованием цифровых подписей. Параллельно Cisco разрабатывала протокол Identified Internet Mail (IIM). В 2005 году эти две инициативы были объединены под эгидой Internet Engineering Task Force (IETF). В результате в 2007 году был опубликован стандарт RFC 4871, который и получил название DKIM (DomainKeys Identified Mail). В 2011 году стандарт был обновлён и уточнён в RFC 6376, который остаётся актуальным на 2025 год. В 2018 году вышло дополнение RFC 8463, описывающее использование алгоритмов Elliptic Curve Digital Signature Algorithm (ECDSA) для подписи.

Принцип работы

DKIM работает по асимметричной криптографии. Отправляющий почтовый сервер (MTA — Mail Transfer Agent) подписывает определённые заголовки и тело письма с помощью закрытого ключа. Получающий сервер, получив письмо, извлекает из его заголовка поле DKIM-Signature, в котором указан селектор (имя DNS-записи) и домен отправителя. Затем он выполняет DNS-запрос к этому домену, получает публичный ключ, указанный в TXT-записи для данного селектора, и проверяет подпись. Если подпись верна и письмо не было изменено, проверка считается пройденной.

Поле DKIM-Signature

Заголовок DKIM-Signature содержит несколько обязательных и опциональных параметров, основные из которых:

  • v=1 — версия протокола.
  • a= — алгоритм подписи (например, rsa-sha256 или ed25519-sha256).
  • c= — канонизация (способ нормализации заголовков и тела письма перед подписанием). Возможные значения: simple (строгая) и relaxed (мягкая, допускающая небольшие изменения).
  • d= — домен отправителя (например, example.com).
  • s= — селектор (имя записи в DNS, например, default).
  • bh= — хеш тела письма (base64).
  • h= — список заголовков, включённых в подпись.
  • b= — сама цифровая подпись (base64).

DNS-запись

Публичный ключ публикуется в виде TXT-записи DNS для домена. Имя записи имеет вид <селектор>._domainkey.<домен>. Например, для селектора default и домена example.com запись будет выглядеть как default._domainkey.example.com. Содержимое записи — набор тегов, описывающих ключ и параметры. Основные теги:

  • v=DKIM1 — версия.
  • p= — публичный ключ в формате base64.
  • k= — тип ключа (например, rsa).
  • s= — тип сервиса (например, email).
  • t= — флаги (например, y — тестовый режим, s — подпись только от субдоменов).

Классификация и виды

По алгоритму подписи

  • RSA (Rivest–Shamir–Adleman) — наиболее распространённый алгоритм, описанный в оригинальном стандарте. Использует ключи длиной от 1024 до 2048 бит.
  • Ed25519 (Edwards-curve Digital Signature Algorithm) — более современный и быстрый алгоритм, основанный на эллиптических кривых. Описан в RFC 8463. Обеспечивает меньший размер подписи и более высокую производительность.

По режиму канонизации

  • Simple/Simple — строгая канонизация: тело письма не изменяется, заголовки сохраняются в исходном виде. Малейшее изменение (например, добавление пробела) приводит к недействительности подписи.
  • Relaxed/Relaxed — мягкая канонизация: допускаются незначительные изменения, такие как удаление лишних пробелов, изменение регистра заголовков и т.д. Наиболее распространённый режим, так как он совместим с большинством почтовых систем.
  • Simple/Relaxed или Relaxed/Simple — смешанные режимы.

Применение и значение

DKIM является одним из трёх основных методов аутентификации почты, наряду с SPF (Sender Policy Framework) и DMARC (Domain-based Message Authentication, Reporting & Conformance). Вместе они образуют комплексную систему защиты от подделки отправителя.

Совместная работа с SPF и DMARC

  • SPF проверяет, что IP-адрес отправляющего сервера разрешён в DNS-записях домена.
  • DKIM проверяет, что письмо подписано и не изменено.
  • DMARC определяет политику обработки писем, не прошедших проверку SPF и/или DKIM, и позволяет получать отчёты о результатах проверки.

DMARC требует, чтобы письмо прошло хотя бы одну из двух проверок (SPF или DKIM) с совпадением домена отправителя с доменом в политике DMARC. DKIM при этом считается более надёжным, так как он не зависит от IP-адреса и может быть использован при пересылке писем (forwarding), в отличие от SPF, который часто ломается при пересылке.

Защита от фишинга и спама

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

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

Практически все крупные почтовые провайдеры, включая Яндекс.Почту, Mail.ru, Gmail, Outlook.com, а также корпоративные почтовые системы (Microsoft Exchange, Postfix, Exim, Sendmail) поддерживают проверку и подписание писем с помощью DKIM. Многие из них требуют настройки DKIM для отправки массовых рассылок или для использования собственного домена.

Критика и ограничения

Несмотря на свою эффективность, DKIM имеет ряд недостатков:

  • Сложность настройки. Требуется генерация ключей, публикация DNS-записей и настройка почтового сервера. Ошибки в конфигурации могут привести к тому, что легитимные письма будут отклоняться.
  • Зависимость от DNS. Для проверки подписи необходимо выполнение DNS-запроса. Если DNS-сервер домена отправителя недоступен или отвечает медленно, проверка может быть отложена или не выполнена.
  • Проблема с пересылкой писем. При пересылке письма с одного почтового ящика на другой почтовый сервер может изменить заголовки или тело письма, что приведёт к недействительности исходной подписи DKIM. Эта проблема частично решается использованием DMARC и механизмов ARC (Authenticated Received Chain).
  • Уязвимость к компрометации ключа. Если закрытый ключ DKIM будет украден или скомпрометирован, злоумышленник сможет подписывать письма от имени домена. Для минимизации риска рекомендуется регулярно менять ключи и использовать аппаратные модули безопасности (HSM).
  • Не защищает от всех видов атак. DKIM не проверяет содержимое письма на вредоносность, не защищает от фишинга, если злоумышленник использует похожий домен (например, example.com вместо examp1e.com), и не гарантирует, что отправитель является реальным владельцем домена (например, при компрометации учётной записи).

Пример настройки

Для настройки DKIM на типичном почтовом сервере (например, Postfix с OpenDKIM) необходимо выполнить следующие шаги:

  1. Установить пакет opendkim и opendkim-tools.
  2. Сгенерировать пару ключей с помощью команды opendkim-genkey -D /etc/opendkim/keys/ -d example.com -s default.
  3. Внести сгенерированную TXT-запись в DNS-зону домена example.com.
  4. Настроить конфигурационные файлы OpenDKIM и Postfix для включения подписывания исходящих писем и проверки входящих.
  5. Перезапустить службы.

После настройки все исходящие письма с домена example.com будут подписываться закрытым ключом, а входящие — проверяться на наличие корректной подписи.

Интересные факты

  • DKIM был разработан на основе более ранней технологии DomainKeys от Yahoo!, которая использовала только один алгоритм (RSA) и не поддерживала канонизацию.
  • В 2012 году компания Google начала использовать DKIM для всех писем, отправляемых с Gmail, что значительно повысило доверие к этому методу.
  • Согласно отчётам, в 2023 году более 90% всех легитимных писем в мире были подписаны с помощью DKIM.
  • DKIM может использоваться не только для почты, но и для других протоколов, например, для аутентификации сообщений в системах мгновенного обмена сообщениями (XMPP).

Источники

  • RFC 6376 — DomainKeys Identified Mail (DKIM) Signatures (2011)
  • RFC 8463 — A New Cryptographic Signature Algorithm for DKIM (Ed25519) (2018)
  • RFC 7489 — Domain-based Message Authentication, Reporting & Conformance (DMARC) (2015)
  • «DKIM: DomainKeys Identified Mail» — статья в журнале «Internet Protocol Journal» (Cisco, 2007)
  • Документация OpenDKIM (opendkim.org)
  • Материалы конференции «Mail Authentication and Security» (M3AAWG, 2022)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru