Definisi
DKIM (DomainKeys Identified Mail) adalah spesifikasi otentikasi email yang menggunakan kriptografi kunci publik untuk menandatangani pesan keluar, sehingga server email penerima dapat mengonfirmasi bahwa email datang dari domain yang diklaim dan bahwa body pesan serta header tertentu tidak diubah selama transit. Domain penandatangan mempublikasikan kunci publiknya di DNS; server penerima mengambil kunci tersebut dan menggunakannya untuk memverifikasi tanda tangan yang tertanam dalam header email DKIM-Signature.
DKIM dikembangkan dari dua proposal sebelumnya yang saling tumpang tindih — DomainKeys dari Yahoo dan Identified Internet Mail dari Cisco — dan pertama kali dipublikasikan sebagai IETF RFC 4871 pada 2007. Spesifikasi otoritatif saat ini adalah RFC 6376, dipublikasikan pada September 2011 dan diperbarui oleh RFC 8301 (2018) serta RFC 8463 (2018) untuk mewajibkan algoritma kriptografi yang lebih kuat. DKIM diterapkan secara luas di seluruh ekosistem email dan merupakan komponen yang diperlukan dari kebijakan DMARC yang memberikan perlindungan berarti.
Cara Kerjanya
Saat server email organisasi mengirim pesan, modul penandatangan DKIM (terintegrasi dalam MTA seperti Postfix, Exim, dan Microsoft Exchange, atau disediakan sebagai layanan oleh penyedia transaksional termasuk SendGrid, Mailgun, Amazon SES, dan Postmark) melakukan operasi berikut.
Penandatangan memilih subset header untuk disertakan dalam tanda tangan — biasanya From, To, Subject, Date, dan Content-Type — dan mengkanonikalisasinya menggunakan salah satu dari dua algoritma yang ditentukan: simple (normalisasi spasi minimal) atau relaxed (lebih permisif, menoleransi penulisan ulang header minor selama transit). Body pesan juga dikanonikalisasi dan di-hash menggunakan SHA-256 (algoritma yang diwajibkan sejak RFC 8301 menghapus SHA-1 yang lebih lama). Penandatangan kemudian menghitung tanda tangan digital RSA atau Ed25519 atas hash header ditambah string metadata penandatanganan yang terstruktur, dan menyisipkan header DKIM-Signature di bagian atas pesan.
Header DKIM-Signature berisi: v=1 (versi), a=rsa-sha256 (algoritma), d=example.com (domain penandatangan, dikenal sebagai tag d=), s=selector1 (selector, digunakan untuk mencari kunci publik tertentu), h=from:to:subject (header yang ditandatangani), bh=<body hash>, dan b=<base64 signature>.
Pemilik domain mempublikasikan kunci publik yang sesuai di <selector>._domainkey.<domain> sebagai record DNS TXT. Saat Gmail, Outlook, Yahoo Mail, atau MTA yang patuh RFC 6376 menerima pesan, mereka melakukan kueri DNS untuk record tersebut, mengambil kunci publik, dan memverifikasi tanda tangan kriptografis. Tanda tangan yang valid menghasilkan hasil DKIM pass. Tanda tangan yang hilang atau tidak valid, atau modifikasi apa pun pada header atau body yang ditandatangani selama transit, menghasilkan hasil fail atau neutral, yang kemudian diteruskan ke mesin evaluasi DMARC.
Selector (tag s=) memungkinkan domain mempublikasikan beberapa kunci DKIM secara bersamaan — berguna untuk merotasi kunci tanpa gangguan layanan, atau untuk mengisolasi kunci di berbagai sistem pengirim (misalnya, marketing._domainkey.example.com versus transactional._domainkey.example.com).
Di Mana Anda Menemuinya
DKIM adalah persyaratan pengiriman email fundamental untuk layanan apa pun yang bergantung pada email. Penyedia email transaksional seperti Amazon SES, SendGrid (bagian dari Twilio), Mailgun (bagian dari Sinch), Postmark, dan SparkPost menyertakan penandatanganan DKIM sebagai langkah konfigurasi wajib selama verifikasi domain. Penyedia menghasilkan keypair RSA-2048 atau Ed25519, menampilkan kunci publik sebagai record DNS TXT, dan meminta pemilik domain mempublikasikannya sebelum mengaktifkan pengiriman dari domain tersebut.
Untuk platform kontes yang mengirim email konfirmasi vote, penandatanganan DKIM sangat penting karena email konfirmasi harus lulus pemeriksaan otentikasi yang diterapkan oleh penyedia mailbox utama — Google Workspace / Gmail, Microsoft Outlook dan Exchange Online Protection, Yahoo Mail, Apple iCloud Mail, dan ProtonMail. Pesan tanpa tanda tangan atau pesan yang tanda tangannya gagal jauh lebih mungkin dikirim ke spam atau diblokir sepenuhnya, sehingga mencegah pemilih mengonfirmasi submisi mereka.
Tools pengujian email seperti Mail-Tester, GlockApps, dan MXToolbox DKIM Lookup memungkinkan pengirim memeriksa dan memvalidasi konfigurasi DKIM mereka sebelum pengiriman produksi. Google Postmaster Tools dan Microsoft SNDS menyediakan data pengiriman tingkat agregat yang mencerminkan tingkat keberhasilan DKIM dari waktu ke waktu.
Contoh Praktis
Sebuah platform kontes yang dikonfigurasi dengan selector DKIM s=contest untuk domain votes.example.com mempublikasikan kunci publik di contest._domainkey.votes.example.com. Setiap email konfirmasi keluar membawa header DKIM-Signature yang ditandatangani dengan kunci pribadi yang sesuai. Saat akun Gmail pemilih menerima pesan, filter masuk Gmail melakukan kueri DNS, memverifikasi tanda tangan, mencatat hasil pass, dan meneruskan hasilnya ke classifier spam. Pass DKIM yang dikonfirmasi, dikombinasikan dengan keselarasan SPF, memenuhi syarat untuk kepatuhan DMARC.
Seorang administrator kontes melakukan rotasi dari kunci RSA 1024-bit (yang tidak lagi dianggap memadai secara kriptografis) ke kunci RSA 2048-bit setelah membaca RFC 8301. Selector lama tetap aktif selama tujuh hari untuk mencakup pesan apa pun yang masih dalam transit, kemudian dihapus dari DNS. Semua pesan baru menggunakan selector dan kunci yang diperbarui.
Konsep Terkait
DKIM bekerja bersama-sama dengan SPF Record — yang mengotentikasi alamat IP server pengirim — dan DMARC — yang mendefinisikan tindakan kebijakan dan mekanisme pelaporan berdasarkan hasil SPF dan DKIM. Kedua sinyal harus dipahami bersama; lulus DKIM saja tidak membuat pesan patuh DMARC jika domain d= tidak selaras dengan domain RFC5322.From. Untuk konteks operasi kontes, konsekuensi praktis dari kegagalan DKIM dijelaskan dalam Email Confirmation Vote, di mana penempatan inbox dari pesan konfirmasi secara langsung menentukan apakah vote yang dikirim akan dihitung.