Czym jest DKIM?
DKIM (DomainKeys Identified Mail) to metoda uwierzytelniania poczty elektronicznej, która pozwala serwerowi wysyłającemu cyfrowo podpisywać wiadomości wychodzące. Serwer odbierający może następnie zweryfikować ten podpis za pomocą klucza publicznego opublikowanego w DNS, potwierdzając, że wiadomość nie została zmodyfikowana podczas transmisji i rzeczywiście pochodzi z deklarowanej domeny.
Jak działa DKIM
1. Generowanie kluczy: Właściciel domeny generuje parę klucza publicznego i prywatnego
2. Publikacja w DNS: Klucz publiczny jest publikowany jako rekord TXT
3. Podpisywanie wiadomości: Wiadomości wychodzące są podpisywane kluczem prywatnym
4. Weryfikacja podpisu: Serwer odbierający pobiera klucz publiczny i sprawdza podpis
Proces podpisywania
Po wysłaniu wiadomości:
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
Proces weryfikacji
Po odebraniu wiadomości:
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
Format rekordu DKIM
Rekordy DKIM są rekordami TXT publikowanymi w określonej subdomenie:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
Składniki rekordu
| Tag | Opis | Przykład |
|---|---|---|
| v | Wersja | v=DKIM1 |
| k | Typ klucza | k=rsa |
| p | Klucz publiczny (base64) | p=MIGfMA0GCSqG... |
| t | Flagi (opcjonalne) | t=y (testing mode) |
| h | Algorytmy skrótu | h=sha256 |
Selektory
Selektory pozwalają utrzymywać wiele kluczy DKIM dla jednej domeny:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
Każda usługa pocztowa udostępnia własny selektor i klucz.
Nagłówek podpisu DKIM
Podpis DKIM może wyglądać tak:
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...
Najważniejsze pola:
- d=: Domena podpisująca
- s=: Selektor używany do znalezienia rekordu DNS
- h=: Nagłówki uwzględnione w podpisie
- b=: Właściwy podpis
- bh=: Skrót treści wiadomości
Konfiguracja DKIM
Google Workspace
1. Przejdź do Admin Console → Apps → Gmail → Authenticate email
2. Wygeneruj klucz DKIM (zalecany 2048-bitowy)
3. Dodaj rekord TXT przekazany przez Google
4. Włącz podpisywanie DKIM
Usługi zewnętrzne
Większość usług pocztowych (SendGrid, Mailchimp itd.) udostępnia:
1. Rekord CNAME do dodania (dla zarządzanego przez usługę klucza)
2. Albo rekord TXT z kluczem publicznym
Przykład (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
Weryfikacja DKIM
Wyślij wiadomość testową do usługi, która pokazuje nagłówki (Gmail wyświetla wyniki uwierzytelniania). Z wiersza poleceń:dig google._domainkey.example.com TXT
Za pomocą DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports DKIM status based on common selectors
Najlepsze praktyki DKIM
Używaj kluczy 2048-bitowych
Starsze klucze 1024-bitowe są coraz bardziej podatne na ataki. Większość dostawców domyślnie używa dziś kluczy 2048-bitowych.
Regularnie rotuj klucze
Rotuj klucze DKIM co roku lub po incydencie bezpieczeństwa. Opublikuj nowy klucz z nowym selektorem przed przełączeniem podpisywania.
Podpisuj ważne nagłówki
Dopilnuj, aby w podpisach uwzględniane były nagłówki From, To, Subject, Date i Message-ID.
Nie modyfikuj podpisanych wiadomości
Listy mailingowe i usługi przekazujące, które modyfikują treść, unieważnią DKIM. W przypadku przekazywanej poczty użyj ARC (Authenticated Received Chain).
Ograniczenia DKIM
Sam DKIM nie zapobiega podszywaniu się pod nadawcę, a jedynie potwierdza, że wiadomość nie została zmieniona. Domena może mieć prawidłowy DKIM, podczas gdy atakujący wysyłają niepodpisane wiadomości podszywające się pod nadawcę. DMARC rozwiązuje ten problem, określając sposób obsługi wiadomości bez prawidłowego uwierzytelnienia.