Перейти к основному содержимому

DKIM

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

Определение

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

DKIM собран из двух более ранних предложений — DomainKeys компании Yahoo и Identified Internet Mail компании Cisco — и впервые опубликован как RFC 4871 IETF в 2007 году. Действующая авторитетная спецификация — RFC 6376, опубликованная в сентябре 2011 года и обновлённая RFC 8301 (2018) и RFC 8463 (2018), которые требуют более сильных криптоалгоритмов. DKIM повсеместно развёрнут в почтовой экосистеме и обязателен в составе политики DMARC, дающей реальную защиту.

Как это работает

При отправке письма модуль подписи DKIM на стороне отправителя (встроенный в MTA — Postfix, Exim, Microsoft Exchange — или предоставляемый как сервис транзакционными провайдерами SendGrid, Mailgun, Amazon SES, Postmark) выполняет следующие операции.

Подписывающий выбирает подмножество заголовков для подписи — обычно From, To, Subject, Date, Content-Type — и канонизирует их по одному из двух определённых алгоритмов: simple (минимальная нормализация пробелов) или relaxed (более терпимый, допускающий мелкие правки заголовков в пути). Тело сообщения аналогично канонизируется и хешируется по SHA-256 (алгоритм, обязательный с момента, когда RFC 8301 устарелил SHA-1). Затем подписывающий вычисляет цифровую подпись RSA или Ed25519 по хешу заголовков плюс структурированной строке метаданных подписи и вставляет заголовок DKIM-Signature в начало сообщения.

Заголовок DKIM-Signature содержит: v=1 (версия), a=rsa-sha256 (алгоритм), d=example.com (подписывающий домен, тег d=), s=selector1 (селектор для поиска конкретного открытого ключа), h=from:to:subject (подписанные заголовки), bh=<хеш тела> и b=<подпись base64>.

Владелец домена публикует соответствующий открытый ключ по адресу <селектор>._domainkey.<домен> как DNS-запись TXT. Когда Gmail, Outlook, Yandex Почта или любой MTA, соответствующий RFC 6376, получает сообщение, он запрашивает DNS этой записи, извлекает открытый ключ и проверяет подпись. Корректная подпись даёт результат DKIM pass. Отсутствующая или недействительная подпись либо любые изменения подписанных заголовков или тела в пути дают fail или neutral, который затем передаётся движку DMARC.

Селекторы (s=) позволяют домену одновременно публиковать несколько ключей DKIM — это удобно для ротации без перерыва в работе и для разделения ключей разных систем рассылки (например, marketing._domainkey.example.com против transactional._domainkey.example.com).

Где вы это встречаете

DKIM — фундаментальное требование доставляемости для любого сервиса, опирающегося на email. Транзакционные провайдеры — Amazon SES, SendGrid (Twilio), Mailgun (Sinch), Postmark, SparkPost, UniSender, SendPulse — включают подписание DKIM как обязательный шаг проверки домена. Провайдер генерирует пару RSA-2048 или Ed25519, отображает открытый ключ в виде DNS-записи TXT и просит владельца домена опубликовать её до начала отправки.

Для конкурсных платформ, которые рассылают подтверждения голосов по email, DKIM особенно важен: письма с подтверждением должны проходить аутентификацию у крупных провайдеров — Google Workspace / Gmail, Microsoft Outlook и Exchange Online Protection, Yahoo Mail, Apple iCloud Mail, Mail.ru, Yandex Почта, ProtonMail. Неподписанные сообщения и сообщения с проваленной подписью с куда большей вероятностью попадут в спам или будут заблокированы вовсе, лишая голосующих возможности подтвердить участие.

Сервисы тестирования email — Mail-Tester, GlockApps, MXToolbox DKIM Lookup — позволяют проверить конфигурацию DKIM до запуска. Google Postmaster Tools и Microsoft SNDS дают агрегированные показатели доставляемости, отражая динамику пройденных DKIM.

Практические примеры

Конкурсная платформа с DKIM-селектором s=contest для домена votes.example.com публикует открытый ключ по адресу contest._domainkey.votes.example.com. Каждое исходящее письмо подтверждения несёт заголовок DKIM-Signature, подписанный соответствующим закрытым ключом. Когда учётная запись Gmail получателя получает сообщение, входной фильтр Gmail запрашивает DNS, проверяет подпись, регистрирует pass и передаёт результат своему классификатору спама. Положительный DKIM в сочетании с выравниванием SPF удовлетворяет условиям соответствия DMARC.

Администратор конкурса в России переходит с RSA-ключа 1024 бит (уже не считающегося криптографически достаточным) на RSA 2048 бит, прочитав RFC 8301. Старый селектор остаётся активным семь дней — на случай писем, задержавшихся в пути, — затем удаляется из DNS. Все новые сообщения используют обновлённый селектор и ключ.

Связанные понятия

DKIM работает в связке с SPF-записью — она аутентифицирует IP-адрес отправляющего сервера — и с DMARC — он задаёт политику и механизм отчётности на основе результатов SPF и DKIM. Эти сигналы нужно понимать вместе: одного DKIM-pass недостаточно для соответствия DMARC, если домен d= не выровнен с доменом в RFC5322.From. Практические последствия отказов DKIM для конкурсов описаны в Голосовании по подтверждению email: попадание подтверждающего сообщения в Inbox напрямую определяет, будет ли засчитан поданный голос.

Из блога — гайды и кейсы

Практические гайды, технические глубокие-дайвы, анонимизированные кейсы.60+ статей. Подборка обновляется.

Victor Williams — founder of Buyvotescontest.com
Victor Williams
Онлайн · обычно отвечаем за 5 мин

Привет 👋 — киньте URL конкурса, в течение часа пришлю расценку. Карта пока не нужна.