Как попасть в Inbox: технология DKIM

В цикле статей «Как попасть в Inbox» рассказываем о SPF-записи, протоколе DMARC, чёрных списках, тактиках прогрева и многом другом. Эта статья цикла посвящена DKIM‑технологии. Рассказываем, как она работает, зачем её использовать и как настраивать.

Что такое DKIM

DKIM — это технология, объединяющая несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты.
Проще говоря, DKIM, на ряду с SPF, является ещё одним методом емейл-аутентификации.

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

Принцип работы базируется на двух ключах: публичном и приватном. Публичный ключ размещается в DNS‑записи в txt-поле. Приватный ключ размещается на стороне отправляющего сервера. В заголовки каждого отправляемого емейла с помощью приватного ключа в зашифрованном виде добавляются: тело письма, служебные заголовки, время отправки и другие параметры.

Почтовый провайдер обращается к домену отправителя сразу, как только получит подписанное емейл‑сообщение. С помощью публичного ключа расшифровывает заголовок и проверяет соответствие письма и информации в заголовке.

Зачем нужен DKIM

Наличие подписи в массовых емейл-рассылках является обязательным для большинства почтовых провайдеров. Она идентифицирует отправителя, и ISP считает его добросовестным. DKIM в совокупности с SPF-записью делает фишинг-атаки намного более сложными.

Как создать ключи

Пару ключей можно сгенерировать с помощью онлайн-сервисов, например, DKIM Core.

Либо без использования сторонних сервисов — с помощью OpenSSL:

  • openssl.exe genrsa -out tstpriv.pem 1024 — генерируем секретный ключ длиной 1024 бит
  • openssl.exe rsa -pubout -in tstpriv.pem -out tstpub.pem — получаем публичный ключ из секретного

Структура DKIM-заголовка

Заголовок, добавляемый сервером-отправителем, называется DKIM-Signature. Он состоит из списка тегов вида «тег=значение».

Пример заголовка:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; q=dns/txt;
d=news.emailmatrix.ru; s=expertsender1k;
h=Date:Subject:From:To;
bh=T40aFHbNRZ34aKS68ff3SMDIMv8UpE6yqrsTJ2fRCxA=;
b=SJZoNOtpWJ4ZwpVeR9Iy8fzAot29HXArr85NtdSjiE7P0RLr4KUd2wmTf4NjQ7rtGt0Y
ABFLwNSOYIpBiIbYuRiqsb3yNV1bJvidKNlQpO5N20FCoIl4KwUhbP6xYFMzNNHoshnXxo
A6v6ci8l+my4FQEo2kNx4/wevgXHXZgYo=

Основные теги и их значения:

  • b — содержимое письма (тело + заголовки, закодированные в Base64)
  • bh — хэш канонизированного тела письма (также в Base64)
  • d — доменное имя отправителя
  • h — список подписанных заголовков

Дополнительные теги:

  • a — основной алгоритм для генерации сигнатуры
  • v — версия системы
  • s — селектор для разделения пространства имен для «d=» тега
  • c — алгоритм для приведения тела письма и заголовков к каноническому виду
  • q — список алгоритмов для получения публичного ключа
  • x — время истечения сигнатуры
  • i — подпись клиента, проставившего DKIM-подпись
  • l — размер тела письма в байтах, включённых в криптографический хэш
  • t — таймстамп проставленной сигнатуры
  • z — копии заголовков на момент проставления сигнатуры

Таким образом, получив письмо с заголовком из примера, почтовый провайдер обратится к DNS-записи expertsender1k._domainkey.news.emailmatrix.ru для получения публичного ключа. Содержимое данной записи следующее:

DKIM

где значение за тегом «p» и является публичным ключом.

Как настроить

В большинстве платформ для емейл-рассылок настройки подписи включены по умолчанию, в таком случае технически рассылки ведутся от имени сервиса рассылок. Для крупных компаний рекомендуется вести рассылки от имени своего домена для формирования репутации и снижения возможности фишинговых атак.

Крупные ESP предоставляют возможность настройки подписи для вашего домена. В некоторых это является стандартной процедурой при открытии аккаунта, в некоторых дополнительной опцией. В обоих случаях платформа предоставляет сгенерированный публичный ключ, который необходимо разместить в DNS‑записи. После чего подпись писем настроится автоматически.

Если вы используете собственную платформу для рассылок, то воспользуйтесь дополнительными средствами для настройки подписи писем.

Например, OpenDKIM.

Как проверить настройку

После того как настройка подписи произведена и добавлена DNS-запись с ключом, проверим доступность публичного ключа. Сделать это можно известным нам www.dnswatch.info.

Для этого после перехода на сайт введите адрес по следующей структуре — *селектор*._domainkey.*рассылающий домен* и выберите тип записи TXT.

Как это выглядит

Если содержимое данной записи отображается верно, приступайте к живому тесту подписи, а именно к отправке тестового письма. Рассмотрим на примере веб-интерфейса Mail.ru.

Получив тестовое емейл-сообщение, открываем его. В меню ищем пункт «Служебные заголовки».

DKIM

Пример веб-интерфейса Mail.ru

Открыв его, вы увидите все служебные заголовки письма. Среди них будет DKIM-Signature.

DKIM

Пример DKIM-Signature

Немного выше над ним в блоке Authentication-Results при успешной проверке должна быть строка dkim=pass:

Если вместо значения pass там будет fail, проверьте правильность ключей.

Что будет, если не настроить DKIM

Наличие настроенного DKIM является обязательным требованием большинства почтовых провайдеров.

Несмотря на это, емейл-сообщения, не подписанные DKIM, могут быть доставлены, но придут они в папку «Спам». Поэтому не стоит игнорировать данное требование, тем более что, единожды настроив его, вы также обезопасите себя и своих подписчиков от действий злоумышленников.

Кроме того, на основе DKIM работает протокол DMARC, о  котором рассказали в одной из статей цикла.

Увеличим продажи
С помощью продуманной емейл-рассылки
Имя
Корпоративный email *
Array
(
    [0] => WP_Term Object
        (
            [term_id] => 1425
            [name] => Статьи
            [slug] => articles
            [term_group] => 0
            [term_taxonomy_id] => 1907
            [taxonomy] => category
            [description] => 
            [parent] => 0
            [count] => 688
            [filter] => raw
            [cat_ID] => 1425
            [category_count] => 688
            [category_description] => 
            [cat_name] => Статьи
            [category_nicename] => articles
            [category_parent] => 0
        )

)
Поделиться статьёй
Подписаться на рассылку