Что такое DKIM?
DKIM (DomainKeys Identified Mail) — метод аутентификации электронной почты, позволяющий отправляющему серверу подписывать исходящие сообщения цифровой подписью. Получающий сервер проверяет подпись с помощью открытого ключа, опубликованного в DNS, подтверждая, что письмо не изменилось при передаче и действительно отправлено заявленным доменом.
Как работает DKIM
1. Генерация ключей: владелец домена создаёт пару открытого и закрытого ключей
2. Публикация в DNS: открытый ключ публикуется как TXT-запись
3. Подпись сообщения: исходящие письма подписываются закрытым ключом
4. Проверка подписи: получающий сервер получает открытый ключ и проверяет подпись
Процесс подписания
При отправке письма:
1. Mail server calculates a hash of message headers and body
2. Hash is encrypted with the private key (creating the signature)
3. Signature is added as a DKIM-Signature header
4. Email is transmitted
Процесс проверки
При получении письма:
1. Server extracts the DKIM-Signature header
2. Finds selector and domain (s=selector; d=domain.com)
3. Queries DNS for selector._domainkey.domain.com TXT record
4. Uses public key to decrypt the signature
5. Calculates its own hash of the message
6. Compares: match = pass, mismatch = fail
Формат DKIM-записи
DKIM-записи являются TXT-записями в определённом поддомене:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
Компоненты записи
| Тег | Описание | Пример |
|---|---|---|
| v | Версия | v=DKIM1 |
| k | Тип ключа | k=rsa |
| p | Открытый ключ (base64) | p=MIGfMA0GCSqG... |
| t | Флаги (необязательно) | t=y (режим тестирования) |
| h | Алгоритмы хеширования | h=sha256 |
Селекторы
Селекторы позволяют использовать несколько DKIM-ключей для одного домена:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
Каждый почтовый сервис предоставляет собственный селектор и ключ.
Заголовок подписи DKIM
Подпись DKIM выглядит так:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;
c=relaxed/relaxed; q=dns/txt;
h=from:to:subject:date:message-id;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=AuUoFEfDxTDkHlLXSZEpZj79...
Основные поля:
- d=: домен, подписавший сообщение
- s=: селектор, используемый для поиска DNS-записи
- h=: заголовки, включённые в подпись
- b=: сама подпись
- bh=: хеш тела сообщения
Настройка DKIM
Для Google Workspace
1. Откройте консоль администратора (Admin Console) → Apps → Gmail → Authenticate email (аутентификация почты)
2. Сгенерируйте DKIM-ключ (рекомендуется 2048 бит)
3. Добавьте предоставленную Google TXT-запись
4. Активируйте подпись DKIM
Для сторонних сервисов
Большинство почтовых сервисов (SendGrid, Mailchimp и другие) предоставляют:
1. CNAME-запись для добавления (для управляемого ими ключа)
2. либо TXT-запись с открытым ключом
Пример (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
Проверка DKIM
Отправьте тестовое письмо в сервис, который показывает заголовки (Gmail отображает результаты аутентификации). Из командной строки:dig google._domainkey.example.com TXT
С помощью DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports DKIM status based on common selectors
Лучшие практики DKIM
Используйте ключи 2048 бит
Старые ключи 1024 бит становятся всё более уязвимыми. Большинство провайдеров теперь используют 2048 бит по умолчанию.
Регулярно меняйте ключи
Меняйте DKIM-ключи ежегодно или после инцидентов безопасности. Перед переключением публикуйте новый ключ с новым селектором.
Подписывайте важные заголовки
Убедитесь, что From, To, Subject, Date и Message-ID включены в подпись.
Не изменяйте подписанные сообщения
Списки рассылки и сервисы пересылки, изменяющие содержимое, нарушают DKIM. Для пересылаемой почты используйте ARC (Authenticated Received Chain).
Ограничения DKIM
DKIM сам по себе не предотвращает подмену: он лишь подтверждает, что сообщение не было изменено. У домена может быть действительная DKIM-подпись, пока злоумышленники отправляют неподписанные поддельные письма. DMARC определяет, что делать с неподписанными сообщениями.