Cyber Security Academy · Урок

Подпись DKIM

Криптографическая подпись сообщений

Урок 3 из 413 шагов

«Подпись DKIM» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.

Что обеспечивает DKIM

DKIM (DomainKeys для идентификации почты) добавляет криптографическую подпись к исходящему электронному письму. Получатель может проверить эту подпись и подтвердить два факта:

  • Сообщение действительно было разрешено доменом, который его подписал
  • Подписанное содержимое не изменилось при передаче

Если SPF подтверждает полномочия серверов, то DKIM подтверждает подлинность самого сообщения, причём эта подпись сохраняется при пересылке.

Основы криптографии с открытым ключом

DKIM использует асимметричную криптографию. Владелец домена хранит пару key:

  • закрытый key хранится в секрете на сервере отправляющей почты и используется для подписывания
  • открытый key публикуется в DNS и используется всеми желающими для проверки

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

Процесс подписывания

Когда отправляющий сервер передаёт сообщение, он вычисляет подпись для выбранных заголовков и тела, а затем добавляет заголовок DKIM-подписи.

Steps on the sender side:
1. Select headers to sign (From, Subject, Date, ...)
2. Hash the message body
3. Build the DKIM-Signature header with those fields
4. Sign the hash with the private key
5. Attach the signature to the outgoing message

Строение заголовка DKIM-подписи

Заголовок DKIM-подписи содержит параметры, необходимые получателю для проверки:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  d=company.com;        domain that signed
  s=mail2024;           selector (which key)
  h=from:subject:date;  signed headers
  bh=base64bodyhash;    body hash
  b=base64signature     the signature itself

Селектор и открытый key в DNS

Селектор (тег s=) сообщает получателям, какой открытый key нужно получить. key находится по предсказуемому адресу DNS:

Location:  <selector>._domainkey.<domain>

Example DNS TXT record:
mail2024._domainkey.company.com.  IN  TXT \
  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."

  p = the base64-encoded public key

Процесс проверки

После получения сообщения проверяющий сервер выполняет обратную последовательность действий:

  • Считывает домен d= и селектор s= из подписи DKIM
  • Получает открытый key из selector._domainkey.domain в DNS
  • Заново вычисляет хеш тела и хеш заголовков
  • Использует открытый key, чтобы проверить совпадение подписи

Если подпись действительна, проверка DKIM пройдена. Если сообщение было изменено или подписано неправильным key, проверка завершается ошибкой.

Хеш тела обнаруживает подделку

Поле bh делает изменения сообщения заметными для DKIM. Отправитель вычисляет хеш тела и включает этот хеш в подписываемые данные.

Если кто-либо изменит тело сообщения при передаче, повторно вычисленный получателем хеш не совпадёт с подписанным значением bh, и проверка завершится ошибкой. Так DKIM обеспечивает целостность, а не только проверку источника.

Канонизация

Почтовые серверы на маршруте часто вносят небольшие безвредные изменения: переносят строки и корректируют пробелы. Чтобы такие изменения не нарушали действительные подписи, DKIM использует канонизацию (тег c=).

  • строгий — почти любое изменение нарушает подпись
  • гибкий — допускает изменения пробелов и регистра заголовков

В большинстве систем используется relaxed/relaxed, что обеспечивает надёжность в разнообразной почтовой инфраструктуре.

Селекторы позволяют менять key

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

Процесс ротации:

  • Создайте новую пару key с новым селектором, например mail2025
  • Опубликуйте новый открытый key в DNS
  • Переключите подписывающий сервер на новый селектор
  • Оставьте старый селектор в DNS, пока сообщения, находящиеся в пути, не будут доставлены, а затем удалите его

Использование нового селектора предотвращает период, когда подписи невозможно проверить.

DKIM сохраняется при пересылке

В отличие от SPF, DKIM сохраняется при пересылке. Подпись перемещается вместе с сообщением, поэтому пересланное сообщение всё ещё проходит проверку, если подписанные заголовки и тело не изменены.

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

Ограничения DKIM

DKIM — мощный, но не самодостаточный механизм:

  • Он доказывает, что домен подписал сообщение, но не требует, чтобы домен, создавший подпись, совпадал с видимым заголовком «От кого»; это и есть согласование DMARC
  • Злоумышленник может подписать почту действительным key собственного домена
  • Утёкший закрытый key позволяет злоумышленнику создавать действительные подписи, пока этот key не будет заменён

Чтобы DKIM действительно защищал от подделки, его необходимо сочетать с DMARC.

Проверка

Проверьте, насколько хорошо Вы поняли принцип работы DKIM.

Итоги

Вы узнали, как DKIM подписывает сообщения:

  • DKIM добавляет криптографическую подпись, подтверждающую источник и целостность
  • На сервере сообщение подписывается закрытым key, а открытый key публикуется в DNS под определённым селектором
  • Хеш тела обнаруживает изменения, а канонизация допускает безвредные изменения
  • Селекторы обеспечивают безопасную ротацию key, а DKIM сохраняется при пересылке, когда SPF завершается ошибкой
  • DKIM по-прежнему требует согласования DMARC, чтобы связать подпись с видимым заголовком «От кого»

Далее Вы свяжете SPF и DKIM с помощью политики и отчётности DMARC.

Можно начать бесплатно

Изучай Cyber Security Academy с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
76
Уроки
303

Часто задаваемые вопросы

Урок «Подпись DKIM» бесплатный?

Да — полный текст урока «Подпись DKIM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.

Чему я научусь в уроке «Подпись DKIM»?

Криптографическая подпись сообщений Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cyber Security Academy?

Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Подпись DKIM»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cyber Security Academy?

Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Как работает подмена адреса электронной почты
  2. Записи SPF
  3. Подпись DKIM
  4. Политика и отчётность DMARC
← Назад к Cyber Security Academy