DomainKeys Identified Mail (DKIM) adalah protokol untuk mengautentikasi pesan email menggunakan kriptografi kunci publik guna melindungi dari email palsu. Penggunaan tanda tangan DKIM di header pesan membantu meningkatkan pengiriman email dan keamanan email dengan membedakan email sah dari email penipuan, seperti business email compromise dan phishing.
Organisasi pengirim email bisa menggunakan standar autentikasi yang didefinisikan oleh DKIM untuk menambahkan tanda tangan digital ke header setiap email yang mereka kirim, dan organisasi penerima email bisa mengautentikasi email tersebut. DKIM sangat efektif sebagai metode autentikasi email karena mampu mendeteksi email palsu menggunakan autentikasi kriptografi yang kuat pada setiap pesan.
Protokol DKIM ditentukan dalam Internet Engineering Task Force RFC 6376, DomainKeys Identified Mail (DKIM) Signatures. DKIM memberi entitas pemilik domain pengirim kemampuan untuk mengklaim tanggung jawab atas pesan dengan mengaitkannya dengan domain tersebut. Protokol ini memungkinkan domain pengirim menandatangani email keluar menggunakan DKIM.
Tanda tangan DKIM berbeda dari protokol penandatanganan pesan seperti Pretty Good Privacy atau Secure/Multipurpose Internet Mail Extensions, atau S/MIME, yang memungkinkan pengguna akhir untuk mengautentikasi pesan. Tanda tangan digital tersebut berada di dalam isi pesan. Meskipun mereka mengautentikasi isi pesan, mereka tidak memberikan informasi tentang sistem yang mengirimkan pesan.
Sebaliknya, tanda tangan DKIM berada di dalam header pesan email yang diautentikasi, bukan dibuat atau diautentikasi oleh pengguna akhir. Tanda tangan DKIM dibuat oleh server email pengirim dan diautentikasi oleh server email penerima.
Bersama dengan protokol Sender Policy Framework (SPF) dan Domain-based Message Authentication, Reporting and Conformance (DMARC), DKIM membantu penyedia email dan perusahaan memvalidasi email dan mencegah domain email mereka dibajak untuk digunakan dalam serangan phishing, spoofing email, dan serangan berbahaya lainnya berbasis email.
SPF, DMARC, dan DKIM bekerja sama dalam validasi dan autentikasi email seperti ini:
- Protokol SPF memungkinkan organisasi pengirim email untuk mengidentifikasi server email mana yang diizinkan mengirim email atas nama domain organisasi. Rekaman SPF berisi informasi tentang server email yang diotorisasi dalam sistem nama domain (DNS) milik pengirim, yang bisa diakses oleh sistem mana pun yang terhubung ke internet. SPF sangat penting bagi penyedia layanan email — seperti Google Gmail, layanan email Yahoo, dan lainnya — yang mengelola email untuk banyak organisasi.
- Protokol DKIM memungkinkan organisasi pengirim email untuk menandatangani secara digital setiap pesan individual yang dikirim oleh server email yang diotorisasi. DKIM bergantung pada SPF untuk mengidentifikasi apakah pesan dikirim oleh server email yang sah, dan bergantung pada DMARC untuk menentukan kebijakan saat sebuah email gagal diautentikasi.
- Protokol DMARC memungkinkan organisasi pengirim email menentukan prosedur yang harus dilakukan penerima saat mereka menerima email yang gagal diautentikasi. Ketika server email yang tidak tercantum dalam catatan SPF mencoba mengirim pesan atau ketika autentikasi DKIM gagal, kebijakan DMARC memberikan petunjuk kepada penerima apakah pesan tersebut harus dikirimkan, dikarantina — misalnya, dimasukkan ke folder spam — atau ditolak sepenuhnya.
DKIM, SPF, dan DMARC semuanya mempublikasikan informasi autentikasi email di catatan DNS TXT. DKIM mempublikasikan kunci publik yang digunakan untuk autentikasi DKIM pada setiap email. SPF mempublikasikan informasi tentang server email yang diotorisasi, dan DMARC mempublikasikan kebijakan untuk email yang tidak terautentikasi.
Apa itu kunci DKIM?
DKIM memungkinkan pengirim email mempublikasikan kunci publik dari pasangan kunci milik pemilik domain.
Pengirim email yang menggunakan DKIM akan mempublikasikan kunci publik mereka dalam catatan DNS TXT yang terkait dengan domain pengirim email. Server email penerima menggunakan kunci publik ini untuk memverifikasi tanda tangan digital yang ditambahkan ke header email dari domain pengirim.
Apa itu catatan DKIM?
Sama seperti SPF dan DMARC, DKIM menggunakan catatan DNS TXT untuk menyimpan data autentikasi email. Catatan DKIM mencakup versi protokol — 1, untuk versi DKIM 1 — dan kunci publik yang digunakan untuk memverifikasi email dari pemilik domain.
Tidak seperti catatan SPF dan DMARC, catatan DNS TXT DKIM juga mencakup *selector*, yaitu nilai yang menghubungkan penyedia layanan email dengan domain dari mana email dikirim. Dengan cara ini, organisasi pengirim email bisa menggunakan beberapa layanan email, masing-masing dengan kunci publiknya sendiri.
Format nama catatan DKIM adalah sebagai berikut:
[selector]._domainkey.[domain]
Nama domain pengirim diawali dengan:
- _domainkey. Menandakan bahwa ini adalah catatan DKIM dalam DNS TXT.
- [selector]. Selector DKIM menghubungkan catatan dengan kunci publik tertentu yang digunakan oleh server email atau penyedia layanan email yang mengelola sebagian domain.
Contoh nama catatan DKIM untuk domain example.net yang mengirim email melalui layanan Gmail dengan selector gmail bisa seperti ini:
gmail._domainkey.example.net
Panjang kunci jadi tantangan dalam mencatat kunci publik di DNS. Rekomendasi saat ini menyarankan panjang kunci minimal lebih dari 256 bit, sementara catatan DNS tidak bisa menangani string lebih dari 255 karakter. Solusinya adalah membagi kunci publik menjadi beberapa string yang masing-masing kurang dari 255 karakter.
Apa itu tanda tangan DKIM?
Pesan dengan tanda tangan DKIM ditandai dengan kehadiran field header DKIM-Signature:, sesuai dengan standar dalam RFC 5322, Internet Message Format. Server email yang mendukung DKIM akan memproses tanda tangan ini sesuai dengan data yang ada di header.
Tanda tangan DKIM mencakup tanda tangan digital itu sendiri dan juga informasi lain terkait tanda tangan. Tag-tag header DKIM, yaitu field yang menyimpan data penting tentang tanda tangan, dijelaskan di tabel pertama (tidak disertakan di teks ini).
Kanonisasi header dan body
Salah satu tantangan tanda tangan digital di email adalah bahwa beberapa server email bisa mengubah email selama pengiriman. Contoh perubahan tersebut antara lain:
- perubahan pada cara header email ditampilkan, misalnya menambahkan *carriage return* untuk membagi header panjang; dan
- perubahan pada perlakuan terhadap karakter spasi — misalnya, spasi, tab, dan *carriage return*.
Konsep kanonisasi, yaitu penentuan bagian mana dari pesan yang dianggap resmi untuk ditandatangani, memungkinkan pemilik domain menentukan seberapa ketat tanda tangan digital harus diinterpretasikan berdasarkan email yang diterima. Kanonisasi bisa diterapkan terpisah pada header dan isi pesan. Dua opsi yang tersedia:
- Kanonisasi sederhana berarti tidak ada perubahan pada header atau body yang diterima.
- Kanonisasi longgar berarti modifikasi umum — seperti perubahan pada cara pemisahan header dan perlakuan terhadap spasi — masih bisa diterima.
Untuk kanonisasi longgar, server penerima harus menggunakan algoritma tertentu untuk membalikkan perubahan yang mungkin terjadi sejak pesan ditandatangani hingga diterima.
DKIM Signature Syntax
Tag-tag di bawah ini menjelaskan elemen-elemen dari string tanda tangan DKIM yang digunakan untuk memverifikasi keaslian email. Masing-masing tag memegang peran penting dalam proses validasi dan identifikasi sumber email.
- v=: Versi dari DKIM yang digunakan. Biasanya hanya ada satu nilai yaitu
v=1
. - a=: Algoritma kriptografi yang digunakan buat menghasilkan tanda tangan. Contoh umum:
a=rsa-sha256
. - c=: Menunjukkan metode canonicalization (penyesuaian format) untuk header dan body email. Formatnya:
c=relaxed/simple
atau kombinasi lainnya. - d=: Nama domain yang bertanggung jawab terhadap tanda tangan DKIM. Biasanya domain pengirim, misalnya:
d=example.com
. - s=: Selector untuk mencari kunci publik DKIM di DNS. Contoh:
s=selector1
. - h=: Daftar header yang disertakan dalam proses penandatanganan. Misalnya:
h=from:to:subject:date
. - bh=: Nilai hash dari body email yang sudah melalui proses canonicalization. Digunakan untuk memastikan isi email nggak berubah selama pengiriman.
- b=: Nilai dari tanda tangan digital itu sendiri, hasil enkripsi dari hash header dan body email.
Contoh
Berikut ini contoh header DKIM-Signature
dari email yang ditandatangani secara valid:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=selector1; h=from:to:subject:date; bh=MTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcA==; b=AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcdefghijklmnop==
Penjelasan dari contoh di atas:
v=1
: Menandakan bahwa ini versi 1 dari protokol DKIM.a=rsa-sha256
: Algoritma tanda tangan yang digunakan adalah RSA dengan SHA-256.c=relaxed/simple
: Mengindikasikan metode canonicalization untuk header dan body.d=example.com
: Email ini ditandatangani oleh domainexample.com
.s=selector1
: Selector digunakan buat nyari kunci publik di DNS, biasanya dalam bentukselector1._domainkey.example.com
.h=from:to:subject:date
: Header yang disertakan dalam proses tanda tangan.bh=...
: Hash dari body email. Nilainya harus sama dengan hasil hash saat diverifikasi.b=...
: Nilai tanda tangan digital yang bisa divalidasi pakai kunci publik dari DNS.