E-mail hitelesítés

DKIM aláírás: Az e-mail hitelesség alapja

A DKIM (DomainKeys Identified Mail) kriptográfiai aláírással bizonyítja, hogy a levél valóban a feladó domainjéről származik és útközben nem módosult. Az SPF mellett a DKIM a második legfontosabb e-mail hitelesítési protokoll -- nélküle a leveleid nagy eséllyel a spam mappában kötnek ki.

kriptográfiai védelem

Mi az a DKIM?

A DKIM (DomainKeys Identified Mail) egy e-mail hitelesítési szabvány (RFC 6376), amely nyilvános kulcsú kriptográfiát használ az e-mailek hitelességének igazolására. A rendszer lényege egyszerű: a küldő levelezőszerver minden kimenő e-mailhez egy digitális aláírást fűz, amelyet a fogadó szerver a DNS-ben publikált nyilvános kulccsal ellenőrizhet. Ha az aláírás érvényes, a fogadó fél biztos lehet abban, hogy a levél valóban az adott domainről származik, és tartalma útközben nem módosult.

A DKIM a nyilvános és privát kulcspár (asymmetric cryptography) elvén működik. A privát kulcsot a küldő szerver biztonságosan tárolja -- ezt soha nem osztja meg senkivel. A nyilvános kulcsot ezzel szemben a domain DNS zónájában teszi közzé, hogy bárki -- azaz bármely fogadó levelezőszerver -- hozzáférhessen és ellenőrizhesse vele az aláírást. Ez a mechanizmus ugyanaz az alapelv, amely a HTTPS tanúsítványokat, a PGP titkosítást és a digitális aláírásokat is működteti.

Amikor egy DKIM-mel aláírt e-mail megérkezik, a fogadó szerver a levél fejlécében található DKIM-Signature mezőt keresi meg. Ez a mező tartalmazza az aláírás részleteit: melyik domain írta alá (d=), melyik selectort használta (s=), mely fejlécmezőket és a törzs melyik részét fedi le az aláírás (h=, bh=), valamint magát a kriptográfiai aláírást (b=). A fogadó szerver a selector és a domain alapján kikeresi a DNS-ből a nyilvános kulcsot, majd azzal ellenőrzi az aláírást.

Miért fontos a DKIM? A DKIM önmagában is javítja a kézbesíthetőséget, de a valódi ereje a DMARC szabályzattal együtt mutatkozik meg. A DMARC a DKIM és az SPF eredményeit használja annak eldöntésére, hogy egy e-mail hiteles-e. DKIM nélkül a DMARC nem tud hatékonyan működni, és a domainedet könnyebben hamisíthatják (spoofing).

Hogyan működik a DKIM?

A DKIM hitelesítés három szereplő együttműködésén alapul: a küldő levelezőszerver, a DNS szerver (ahol a nyilvános kulcs publikálva van), és a fogadó levelezőszerver. A folyamat lépésről lépésre a következő:

1. lépés: A küldő szerver aláírja az e-mailt

Amikor a levelezőszervered (pl. Google Workspace, Microsoft 365 vagy a saját SMTP szervered) kiküld egy e-mailt, a következő történik:

  • A szerver kiszámolja az e-mail törzsének (body) hash értékét, és ezt a bh= (body hash) mezőben rögzíti.
  • Kiválasztja az aláírandó fejlécmezőket (pl. From, To, Subject, Date).
  • A fejlécmezők és a body hash összefűzött értékéből a privát kulccsal létrehoz egy RSA (vagy Ed25519) kriptográfiai aláírást.
  • Az aláírást és a metaadatokat a DKIM-Signature fejlécmezőben helyezi el a levélben.

Példa DKIM-Signature fejléc:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  d=peldaceg.hu; s=google;
  h=from:to:subject:date:message-id:mime-version;
  bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
  b=dKp8R3...hosszú_aláírás...xYz=

2. lépés: A DNS tárolja a nyilvános kulcsot

A domain tulajdonosa a DNS zónájában egy TXT rekordot publikál, amely a nyilvános kulcsot tartalmazza. A rekord neve a selector._domainkey.domain formátumot követi. Például ha a selector google és a domain peldaceg.hu, akkor a DNS rekord neve:

google._domainkey.peldaceg.hu  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkq...nyilvános_kulcs..."

A v=DKIM1 jelzi a DKIM verziót, a k=rsa az algoritmus típusát, a p= pedig maga a Base64-kódolt nyilvános kulcs.

3. lépés: A fogadó szerver ellenőrzi az aláírást

Amikor a fogadó levelezőszerver (pl. Gmail, Outlook, Yahoo) megkapja a levelet:

  1. Kiolvassa a DKIM-Signature fejlécből a d= (domain) és s= (selector) értékeket.
  2. DNS lekéréssel megkeresi a selector._domainkey.domain TXT rekordot, és kiolvassa a nyilvános kulcsot.
  3. A nyilvános kulccsal dekódolja az aláírást (b= mező).
  4. Újraszámolja a body hash-t és a fejlécmezők hash-ét, majd összeveti a dekódolt aláírással.
  5. Ha egyeznek: az e-mail DKIM PASS státuszt kap. Ha nem egyeznek (mert a tartalom módosult vagy az aláírás hamis): DKIM FAIL.

Fontos: A DKIM ellenőrzés eredménye önmagában nem dönti el, hogy a levél a beérkező mappába vagy a spambe kerül. A fogadó szerver a DKIM eredményt a DMARC szabályzattal, az SPF ellenőrzéssel és saját spam-szűrő algoritmusaival együtt értékeli ki.

DKIM beállítás lépésről lépésre

A DKIM beállítása néhány jól meghatározott lépésből áll. Az alábbiakban részletesen bemutatjuk a folyamatot a két legnépszerűbb levelezési platformra (Google Workspace és Microsoft 365), valamint az általános DNS konfigurációt.

1. lépés: Generálj DKIM kulcspárt

A DKIM kulcspár egy privát kulcsból (amit a levelezőszerver használ az aláíráshoz) és egy nyilvános kulcsból (amit a DNS-ben publikálsz) áll. A legtöbb felhőalapú levelező szolgáltató (Google Workspace, Microsoft 365) automatikusan generálja a kulcspárt -- neked csak aktiválnod kell és a DNS rekordot beállítanod.

Ha saját SMTP szervert használsz (pl. Postfix, Exim), az opendkim-genkey paranccsal generálhatsz kulcspárt:

opendkim-genkey -t -s mail -d peldaceg.hu -b 2048

Ez létrehoz egy mail.private (privát kulcs) és egy mail.txt (DNS TXT rekord a nyilvános kulccsal) fájlt.

Mi az a selector? A selector egy egyedi azonosító, amely lehetővé teszi, hogy egyazon domainhez több DKIM kulcsot is használj párhuzamosan. Például a Google Workspace a google selectort használja, míg a Mailchimp a k1 selectort. Kulcsrotáció esetén is hasznos: az új kulcsot egy új selectorral publikálod, majd az aláírást átállítod az újra, anélkül hogy a régi kulcsot azonnal törölnöd kellene.

2. lépés: Google Workspace beállítás

A Google Workspace-ben a DKIM aktiválása az Admin Console-ból történik:

  1. Navigálj az Admin ConsoleAppsGoogle WorkspaceGmailAuthenticate email menüpontra.
  2. Válaszd ki a domainedet a legördülő listából.
  3. Kattints a "Generate new record" gombra. Válaszd a 2048 bites kulcshosszt (ha a DNS szolgáltatód támogatja a hosszú TXT rekordokat).
  4. A Google megmutatja a DNS TXT rekordot, amelyet a domain DNS zónájába kell hozzáadnod. A rekord neve google._domainkey.peldaceg.hu lesz.
  5. Add hozzá a TXT rekordot a DNS-edhez (lásd a 4. lépést).
  6. Várj 24-48 órát a DNS propagációra, majd a Google Admin Console-ban kattints a "Start authentication" gombra.

Tipp: A Google Workspace alapértelmezetten 1024 bites kulcsot ajánl. Mindig válaszd a 2048 bites opciót, ha a DNS szolgáltatód támogatja -- ez lényegesen nagyobb biztonságot nyújt.

3. lépés: Microsoft 365 beállítás

A Microsoft 365-ben a DKIM konfigurálása a következőképpen történik:

  1. Navigálj a Microsoft Defender portálraEmail & collaborationPolicies & rulesThreat policiesEmail authentication settingsDKIM fülre.
  2. Válaszd ki a domainedet a listából.
  3. A Microsoft két CNAME rekordot generál, amelyeket a DNS zónádban kell elhelyezned. Ezek általában a következő formátumot követik:
selector1._domainkey.peldaceg.hu  CNAME  selector1-peldaceg-hu._domainkey.peldaceg.onmicrosoft.com
selector2._domainkey.peldaceg.hu  CNAME  selector2-peldaceg-hu._domainkey.peldaceg.onmicrosoft.com

A Microsoft két selectort (selector1, selector2) használ a kulcsrotáció megkönnyítéséhez. Miután a CNAME rekordok propagáltak, a Defender portálon kapcsold be a DKIM aláírást a csúszkával.

4. lépés: DNS rekord hozzáadása

Függetlenül attól, hogy melyik levelező platformot használod, a nyilvános kulcsot (vagy CNAME mutatót) a domain DNS zónájába kell elhelyezned. Lépj be a DNS szolgáltatód admin felületére (Cloudflare, Namecheap, GoDaddy, Rackhost, stb.) és add hozzá a rekordot.

Google Workspace esetén (TXT rekord):

Típus:  TXT
Név:    google._domainkey
Érték:  v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
TTL:    3600

Microsoft 365 esetén (CNAME rekord):

Típus:  CNAME
Név:    selector1._domainkey
Érték:  selector1-peldaceg-hu._domainkey.peldaceg.onmicrosoft.com
TTL:    3600

Figyelem: Egyes DNS szolgáltatóknál a TXT rekord maximum 255 karakteres lehet egy string-ben. Ha a 2048 bites nyilvános kulcs nem fér bele, több részre kell bontani idézőjelekkel: "első_rész" "második_rész". A legtöbb modern DNS szolgáltató ezt automatikusan kezeli.

5. lépés: Aktiváld a DKIM aláírást

Miután a DNS rekordot hozzáadtad és propagált (ez általában 15 perctől 48 óráig tarthat), aktiváld a DKIM aláírást a levelező platformodon:

  • Google Workspace: Admin Console → Gmail → Authenticate email → "Start authentication" gomb
  • Microsoft 365: Defender portál → DKIM oldal → csúszka bekapcsolása
  • Saját szerver (OpenDKIM): az OpenDKIM szolgáltatás újraindítása a kulcs- és selector-konfigurációval

6. lépés: Ellenőrzés

Az aktiválás után küldj egy teszt e-mailt egy Gmail címre, majd nyisd meg a levelet és kattints a "Show original" (Eredeti megjelenítése) opcióra. Keresd meg a fejlécben a következő sort:

Authentication-Results: mx.google.com;
  dkim=pass header.i=@peldaceg.hu header.s=google header.b=dKp8R3xY;

Ha dkim=pass látható, a DKIM aláírás sikeresen működik. Ha dkim=fail vagy dkim=neutral jelenik meg, ellenőrizd a DNS rekordot és a selector beállítást.

Hasznos ellenőrző eszközök: Használd az MXToolbox DKIM Lookup vagy a Mail-tester.com eszközöket a DKIM konfiguráció gyors ellenőrzéséhez. Az E-mail Teszt audit automatikusan vizsgálja a DKIM beállítást és részletes visszajelzést ad.

DKIM kulcsméret és biztonság

A DKIM aláírás biztonsága közvetlenül függ a használt kulcsmérettől és az algoritmus típusától. Jelenleg két fő RSA kulcsméret terjedt el:

1024 bit vs. 2048 bit

  • 1024 bites kulcs: Ez volt a korábbi alapértelmezés, és még ma is sok domain használja. Bár a gyakorlatban még nem törték fel nyilvánosan, a biztonsági szakértők és a NIST (National Institute of Standards and Technology) 2013 óta nem ajánlja új rendszerekhez. A 1024 bites RSA kulcsot elméletileg elegendő számítási kapacitással fel lehetne törni.
  • 2048 bites kulcs: Ez a jelenlegi ajánlott minimum. A 2048 bites kulcs exponenciálisan nehezebben törhető, mint az 1024 bites -- a jelenlegi technológiával gyakorlatilag lehetetlen. Mindig 2048 bites kulcsot használj, kivéve ha a DNS szolgáltatód nem támogatja a hosszabb TXT rekordokat (ami ma már ritka).

Ed25519 -- a jövő algoritmusa: Az RFC 8463 bevezette az Ed25519 alapú DKIM aláírást. Ez az elliptikus görbe alapú algoritmus kisebb kulcsmérettel (256 bit) nyújt a 2048 bites RSA-val egyenértékű vagy jobb biztonságot, és gyorsabb is. A fogadó szerver támogatása azonban még nem univerzális, ezért jelenleg érdemes RSA 2048 bitet használni elsődleges aláírásként, és opcionálisan Ed25519-et másodlagos aláírásként hozzáadni.

Kulcsrotáció -- mikor és hogyan

A DKIM kulcsokat rendszeresen cserélni (rotálni) kell, hasonlóan a jelszavakhoz. A kulcsrotáció ajánlott gyakorisága:

  • Minden 6-12 hónapban érdemes új kulcspárt generálni és új selectorra váltani.
  • Azonnal, ha felmerül a gyanú, hogy a privát kulcs kompromittálódhatott (pl. szerverfeltörés).
  • A rotáció során az új kulcsot egy új selectorral publikáld a DNS-ben (pl. google2 a google helyett), állítsd át az aláírást az új selectorra, majd -- miután az összes átmeneti levél kézbesült -- töröld a régi DNS rekordot.

Ne töröld a régi kulcsot túl hamar! A DNS propagáció és a levelek kézbesítése időbe telik. A régi selector DNS rekordját tartsd fenn legalább 1-2 hétig az új kulcsra való átállás után, hogy a tranzitban lévő levelek még ellenőrizhetők legyenek.

Gyakori DKIM hibák

A DKIM beállítás során az alábbi hibákat követik el a leggyakrabban. Ha a DKIM ellenőrzés fail vagy neutral eredményt ad, valószínűleg az alábbiak valamelyike a probléma:

DNS rekord nem publikált vagy rossz formátumú

A leggyakoribb hiba: a DKIM DNS rekord egyszerűen nincs hozzáadva a DNS zónához, vagy a formátuma hibás. Ellenőrizd a következőket:

  • A rekord neve pontosan selector._domainkey.domain.tld formátumú-e (az aláhúzás karakterek fontosak!).
  • A TXT rekord tartalmazza-e a v=DKIM1; előtagot.
  • A p= mező tartalmazza-e a teljes nyilvános kulcsot, sortörések és szóközök nélkül.
  • Nincs-e felesleges szóköz vagy idézőjel a rekordban.

Selector eltérés

Az e-mail fejlécében szereplő selector (s= mező) nem egyezik a DNS-ben publikált rekorddal. Ez gyakran előfordul, ha a levelező platform más selectort generált, mint amit a DNS-ben beállítottál. Ellenőrizd, hogy a DKIM-Signature fejlécben lévő s= érték megegyezik-e a DNS rekord nevével.

Kulcs lejárat vagy elavulás

Ha a DKIM kulcsot már évek óta nem rotáltad és 1024 bites, egyes fogadó szerverek alacsonyabb megbízhatósági pontszámot adhatnak a leveleidnek. Ráadásul ha a privát kulcs kompromittálódott (pl. szervermigráció során kiszivárgott), az összes aláírásod megbízhatatlanná válik, amíg nem cseréled a kulcsot.

Third-party aláírás hiánya (ESP-k)

Ha e-mail marketing szolgáltatót (ESP) használsz -- például Mailchimp, SendGrid, Brevo (Sendinblue), Mailerlite --, az ESP a saját szervereiken keresztül küldi ki a leveleket. Ilyenkor a DKIM aláírást az ESP szervere végzi, de neked kell engedélyezned, hogy a te domaineddel írja alá a leveleket. Ez általában CNAME rekordok hozzáadásával történik a DNS-edben. Ha ezt elmulasztod, az ESP a saját domainjével írja alá a leveleket, ami DMARC alignment hibát okoz.

E-mail tartalom módosulás közvetítés közben

Egyes levelezőlisták, továbbító szabályok vagy e-mail átirányítók módosítják a levél tartalmát vagy fejléceit az átvitel során (pl. hozzáadnak egy lábléc szöveget). Ez érvényteleníti a DKIM aláírást, mivel a body hash többé nem egyezik az eredetivel. Erre a problémára az ARC (Authenticated Received Chain) protokoll nyújt megoldást, amely megőrzi a hitelesítési eredményeket a közvetítési láncon keresztül.

Következő lépés

A DKIM beállítása után a következő lépés a DMARC szabályzat konfigurálása, amely a DKIM és az SPF eredményeit összefogva védi a domainedet a hamisítástól.