ما هو DKIM؟
DKIM (بريل محدد بمفاتيح النطاق) هو طريقة مصادقة البريل الإلكتروني التي تسمح لخادم الإرسال بالتوقيع رقمياً على الرسائل الصادرة. يمكن لخادم الاستقبال بعد ذلك التحقق من هذا التوقيع باستخدام مفتاح عام منشور في DNS، مما يؤكد عدم تعديل البريل الإلكتروني أثناء النقل وأنه نشأ فعلاً من النطاق المدّعى.
كيفية عمل DKIM
1. إنشاء مفتاح: ينشئ مالك النطاق زوج مفتاح عام/خاص
2. نشر DNS: يتم نشر المفتاح العام كسجل TXT
3. توقيع الرسالة: يتم توقيع رسائل البريل الإلكتروني الصادرة بالمفتاح الخاص
4. التحقق من التوقيع: يحصل خادم الاستقبال على المفتاح العام والتحقق من التوقيع
عملية التوقيع
عند إرسال بريل إلكتروني:
1. يحسب خادم البريل hash لرؤوس الرسالة والجسم
2. يتم تشفير Hash بالمفتاح الخاص (إنشاء التوقيع)
3. يتم إضافة التوقيع كرأس DKIM-Signature
4. يتم نقل البريل الإلكتروني
عملية التحقق
عند استقبال بريل إلكتروني:
1. يستخرج الخادم رأس DKIM-Signature
2. يجد المحدد والنطاق (s=محدد؛ d=domain.com)
3. يستعلم DNS لسجل TXT selector._domainkey.domain.com
4. يستخدم المفتاح العام لفك تشفير التوقيع
5. يحسب hash الخاص به للرسالة
6. يقارن: المطابقة = النجاح، عدم التطابق = الفشل
صيغة سجل DKIM
سجلات DKIM هي سجلات TXT في نطاق فرعي محدد:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
مكونات السجل
| الوسم | الوصف | مثال |
|---|---|---|
| v | الإصدار | v=DKIM1 |
| k | نوع المفتاح | k=rsa |
| p | المفتاح العام (base64) | p=MIGfMA0GCSqG... |
| t | العلامات (اختياري) | t=y (وضع الاختبار) |
| h | خوارزميات Hash | h=sha256 |
المحددات
المحددات تسمح بمفاتيح DKIM متعددة لكل نطاق:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
توفر كل خدمة بريل إلكترونية محددها ومفتاحها الخاص.
رأس توقيع DKIM
يبدو توقيع DKIM بالشكل التالي:
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...
الحقول الرئيسية:
- d=: نطاق التوقيع
- s=: المحدد (يُستخدم للعثور على سجل DNS)
- h=: الرؤوس المضمنة في التوقيع
- b=: التوقيع الفعلي
- bh=: hash الجسم
إعداد DKIM
لـ Google Workspace
1. انتقل إلى وحدة التحكم → التطبيقات → Gmail → مصادقة البريل الإلكتروني
2. إنشاء مفتاح DKIM (2048-بت موصى به)
3. إضافة سجل TXT الذي توفره Google
4. تفعيل توقيع DKIM
للخدمات الخارجية
توفر معظم خدمات البريل الإلكتروني (SendGrid و Mailchimp و إلخ):
1. سجل CNAME للإضافة (للمفتاح المُدار من قبلهم)
2. أو سجل TXT بالمفتاح العام
مثال (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
التحقق من DKIM
أرسل بريداً اختباراً إلى خدمة تعرض الرؤوس (Gmail يعرض نتائج المصادقة). استخدام سطر الأوامر:dig google._domainkey.example.com TXT
استخدام DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# يُبلغ عن حالة DKIM بناءً على المحددات الشائعة
أفضل ممارسات DKIM
استخدم مفاتيح 2048-بت
المفاتيح الأقدم 1024-بت عرضة متزايدة للضعف. معظم المزودين يستخدمون الآن افتراضياً 2048-بت.
تدوير المفاتيح بشكل دوري
دوّر مفاتيح DKIM سنوياً أو بعد حوادث الأمان. انشر مفتاح جديد مع محدد جديد قبل التبديل.
وقّع الرؤوس المهمة
تأكد من أن From و To و Subject و Date و Message-ID مضمنة في التوقيعات.
لا تعدّل الرسائل الموقعة
ستكسر خدمات القوائم البريدية أو الإعادة التي تعدّل المحتوى DKIM. استخدم ARC (Authenticated Received Chain) للبريل المُعاد توجيهه.
حدود DKIM
DKIM وحده لا يمنع الانتحال — يثبت فقط عدم تعديل الرسالة. يمكن لنطاق أن يكون له DKIM صحيح بينما يرسل المهاجمون بريداً مزيفاً بدون توقيع. يعالج DMARC هذا بتحديد ما يجب فعله مع الرسائل غير الموقعة.