Стандарт 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) необходимо выполнить следующие шаги:
- Установить пакет
opendkimиopendkim-tools. - Сгенерировать пару ключей с помощью команды
opendkim-genkey -D /etc/opendkim/keys/ -d example.com -s default. - Внести сгенерированную TXT-запись в DNS-зону домена
example.com. - Настроить конфигурационные файлы OpenDKIM и Postfix для включения подписывания исходящих писем и проверки входящих.
- Перезапустить службы.
После настройки все исходящие письма с домена 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)
