MCMail by MYCLOUD

DKIM: xatlarning raqamli imzosi, selektorlar va kalitlarni almashtirish

DKIM (DomainKeys Identified Mail) har bir chiquvchi xatga kriptografik imzo qoʻshadi. Qabul qiluvchi server shu imzo orqali xat haqiqatan ham domeningiz ruxsati bilan yuborilganini va yoʻlda oʻzgartirilmaganini tekshiradi. Imzo va kalitlar qanday ishlashi, DKIMni qanday tekshirish va kalitlarni xavfsiz almashtirish haqida soʻzlab beramiz.

DKIM qanday ishlaydi

DKIM kalitlar juftidan foydalanadi: yopiq va ochiq kalit.

  1. Yopiq kalit joʻnatuvchining pochta serverida saqlanadi. Server xat matni va tanlangan sarlavhalar asosida imzo hisoblaydi va DKIM-Signature sarlavhasini qoʻshadi.
  2. Ochiq kalit domenning DNS zonasida TXT yozuvi sifatida eʼlon qilinadi.
  3. Qabul qiluvchi server imzodan domen va selektorni oʻqiydi, DNSdan ochiq kalitni soʻraydi va imzoni tekshiradi.

Agar xat yoʻlda oʻzgartirilgan boʻlsa (mavzu, matn yoki imzolangan sarlavha), imzo mos kelmaydi va natija dkim=fail boʻladi. SPFdan farqli oʻlaroq, DKIM yuboruvchi serverning IP manziliga bogʻliq emas, shuning uchun odatda yoʻnaltirishdan keyin ham saqlanadi.

Selektorlar va DNS yozuvi

Selektor — bitta domenda bir vaqtning oʻzida bir nechta kalit saqlash imkonini beradigan ixtiyoriy nom: masalan, korporativ pochta uchun bitta kalit, xabarnoma xizmati uchun boshqasi. Ochiq kalit <selektor>._domainkey.<domen> manzilida eʼlon qilinadi:

mail2026._domainkey.example.uz.  3600  IN  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
TegMaʼnosi
v=DKIM1Versiya, birinchi boʻlib yozish tavsiya etiladi
k=rsaKalit turi; standart holatda RSA
p=base64dagi ochiq kalit; boʻsh qiymat kalit bekor qilinganini bildiradi
t=yIxtiyoriy test rejimi belgisi

Selektor nomi erkin tanlanadi. Unga sana yoki tartib raqamini kiritish qulay (mail2026, s202610) — kalit almashtirilganda qaysi biri yangiroq ekani darhol tushunarli boʻladi.

Baʼzi xabarnoma xizmatlari TXT oʻrniga CNAME yozuvi yaratishni soʻraydi: s1._domainkey.example.uz xizmatdagi nomga ishora qiladi, kalitni esa xizmatning oʻzi boshqaradi. Bu odatiy amaliyot.

Kalit uzunligi: 2048 bit

1024 bitli RSA kalitlari minimal ruxsat etilgan hisoblanadi va asta-sekin isteʼmoldan chiqmoqda. Bugungi kunda standart tanlov — 2048 bit. 4096 bitli kalitlar amalda sezilarli foyda bermaydi, DNSga sigʻishi qiyinroq va barcha qabul qiluvchilar tomonidan qoʻllab-quvvatlanmaydi.

2048 bitli ochiq kalit base64da taxminan 400 belgini egallaydi, TXT yozuvidagi bitta qator esa 255 belgi bilan cheklangan. Shuning uchun kalit bitta yozuv ichida qoʻshtirnoqdagi bir nechta qatorga boʻlinadi:

mail2026._domainkey.example.uz. IN TXT ( "v=DKIM1; k=rsa; "
    "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...birinchi qism..."
    "...kalitning ikkinchi qismi...IDAQAB" )

Kalitni toʻliq joylashtirsangiz, DNS veb-panellarining aksariyati uni oʻzi boʻlib chiqadi. Agar panel uzun qiymatni qirqib tashlasa, natijani dig orqali tekshiring — kalit toʻliq kelishi kerak.

DKIMni qanday tekshirish mumkin

DNSdagi yozuv

dig TXT mail2026._domainkey.example.uz +short

Windowsda: nslookup -type=txt mail2026._domainkey.example.uz. Javobda v=DKIM1 va p= ichidagi kalit boʻlishi kerak.

Xat sarlavhalari

Tashqi pochta qutisiga xat yuboring va uning asl matnini oching (veb-interfeyslarda bu odatda «Asl nusxani koʻrsatish» yoki «Show original» deb ataladi). Imzoni toping:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.uz;
    s=mail2026; t=1760000000; h=from:to:subject:date:message-id;
    bh=...; b=...
  • d= — imzo qaysi domen nomidan qoʻyilgani. DMARC uchun u From maydonidagi domen bilan mos kelishi muhim.
  • s= — kalit qidiriladigan selektor.
  • h= — imzolangan sarlavhalar roʻyxati; from albatta imzolanadi.
  • c= — kanonizatsiya rejimi; relaxed/relaxed boʻshliqlar va sarlavha harflaridagi mayda oʻzgarishlarga bardoshliroq.
  • bh= va b= — xat matnining xeshi va imzoning oʻzi.

Qabul qiluvchi server tekshiruv natijasini quyidagi sarlavhaga yozadi:

Authentication-Results: mx.recipient.example;
    dkim=pass header.d=example.uz header.s=mail2026

DKIM nega oʻtmaydi

NatijaEhtimoliy sabab
dkim=noneXat imzolanmagan: serverda domen uchun imzo yoqilmagan
dkim=permerror yoki «no key»Bunday selektorli yozuv yoʻq, nomda xato bor yoki kalit qirqilgan
dkim=fail, «body hash did not verify»Imzodan keyin xat matni oʻzgargan: shlyuzdagi dissleymer, antivirus, pochta roʻyxati
dkim=fail, «signature verification failed»DNSdagi kalit serverdagi yopiq kalitga mos kelmaydi

Qaysidir qoʻllanma taklif qilsa ham, l= tegidan (imzolangan matn uzunligi) foydalanmang. U hujumchiga imzolangan xatga imzoni buzmasdan oʻz matnini qoʻshish imkonini beradi.

Kalitlarni almashtirish (rotatsiya)

DKIM kalitlarini vaqti-vaqti bilan almashtirib turish foydali — masalan, har 6–12 oyda bir marta, yopiq kalit sizib chiqqanidan shubha boʻlsa esa darhol. Selektorlar tufayli bu ishni toʻxtatmasdan amalga oshiriladi:

  1. Yangi kalitlar juftini yarating va ochiq kalitni eskisiga tegmasdan yangi selektor (mail2027) ostida eʼlon qiling.
  2. Yozuv DNSda koʻrinishini kuting (TTLni hisobga olgan holda).
  3. Serverda imzoni yangi selektorga oʻtkazing va sinov xatining sarlavhalarini tekshiring.
  4. Eski kalitni DNSda yana bir necha kun qoldiring: navbatlarda kechikkan xatlar ham muvaffaqiyatli tekshirilishi kerak.
  5. Eski yozuvni oʻchiring yoki uni boʻsh p= bilan eʼlon qiling — bu kalit bekor qilinganini aniq bildiradi.

MCMailda domeningiz uchun DKIM kalitlarini biz yaratamiz va ulaymiz, ochiq kalitli yozuvni esa domen ulanganda yuboramiz. DKIM SPF va DMARC bilan birgalikda ishlaydi — faqat uchalasi birga qabul qiluvchilarga xatlaringizga ishonch beradi.