ما هو DKIM، وكيف يعمل توقيع DKIM؟
يضيف DKIM (DomainKeys Identified Mail) توقيعًا تشفيريًا إلى كل رسالة. يوقّع النطاق المرسِل رؤوسًا مختارة ونص الرسالة بمفتاح خاص، وينشر المفتاح العام في DNS على العنوان selector._domainkey.domain. يجلب المستقبِلون ذلك المفتاح ويتحققون من التوقيع. ويثبت النجاح أن النطاق الموقِّع تولّى الرسالة وأن الأجزاء الموقَّعة لم تتغير.
في هذه الصفحة 12 أقسام
DKIM هو أسلوب مصادقة البريد الإلكتروني الذي يصمد طوال الرحلة. فبينما يفحص SPF الخادم الذي جاءت منه الرسالة، يوقّع DKIM الرسالة نفسها، فينتقل الدليل معها عبر خوادم الترحيل ومعظم عمليات إعادة التوجيه. يشرح هذا الدليل ما يحتويه التوقيع، وكيف يتحقق منه المستقبِلون، وكيف تعمل المفاتيح والمحدِّدات، وما الذي يعطّله. وهو أيضًا المرجع الرئيسي لأدلتنا عن DKIM.
ما هو DKIM؟
DKIM اختصار DomainKeys Identified Mail (البريد المعرَّف بمفاتيح النطاق). وهو معرَّف في RFC 6376، وهي وثيقة من فئة Standards Track صدرت في سبتمبر 2011. ويقول الـ RFC إن DKIM «يتيح لشخص أو جهة وظيفية أو مؤسسة أن تعلن تحمّلها قدرًا من المسؤولية عن رسالة، من خلال ربط اسم نطاق بها».
وهو يعمل بزوج من المفاتيح:
- تحتفظ منصة البريد لديك بمفتاح خاص وتستخدمه لتوقيع كل رسالة صادرة.
- يُنشر المفتاح العام المقابل في DNS تحت نطاقك.
- يقرأ المستقبِل التوقيع، ويجلب المفتاح العام، ويتحقق من تطابقهما.
ثلاثة أمور لا يقوم بها DKIM:
- ليس تشفيرًا. تظل الرسالة قابلة للقراءة. يثبت DKIM المصدر وسلامة المحتوى فقط.
- ليس فحصًا لعنوان From. يمكن أن يكون النطاق الموقِّع أي نطاق. وربطه بعنوان From الظاهر هو مهمة DMARC.
- ليس سببًا للرفض بمفرده. ينص القسم 6.3 من RFC 6376 على أن المستقبِلين «لا ينبغي (SHOULD NOT)» أن يبنوا قرار قبول الرسالة على مجرد غياب التوقيع أو تعذّر التحقق منه، لأن «هذا الرفض سيسبب مشكلات حادة في التوافق التشغيلي».
كيف يعمل توقيع DKIM؟
عندما يرسل خادمك رسالة، فإنه:
- يختار الرؤوس التي سيوقّعها ويدرجها في
h=. رأسFrom:«يجب (MUST) أن يُوقَّع» (القسم 5.4 من RFC 6376). - يطبّق التوحيد القياسي (canonicalization) على الرؤوس والنص: أي يوحّد صيغتهما وفق القواعد المختارة كي لا تُفسد التغييرات الصغيرة غير الضارة أثناء النقل التوقيع.
- يحسب تجزئة (hash) النص ويضع النتيجة في
bh=. - يحسب تجزئة الرؤوس الموقَّعة، بما فيها رأس
DKIM-Signatureالجديد نفسه معb=فارغة، ويوقّع تلك التجزئة بالمفتاح الخاص. - يكتب التوقيع في
b=ويضيف رأسDKIM-Signatureإلى أعلى الرسالة.
يبدو التوقيع هكذا (مختصرًا):
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=s202610;
h=from:to:subject:date:message-id; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB...
| الوسم | المعنى | إلزامي؟ |
|---|---|---|
v= |
الإصدار، وقيمته دائمًا 1 |
نعم |
a= |
الخوارزمية: rsa-sha256، أو ed25519-sha256 (RFC 8463) |
نعم |
d= |
النطاق الموقِّع (SDID). يفحصه DMARC للتحقق من التوافق | نعم |
s= |
المحدِّد (selector): أي مفتاح يُجلب تحت d= |
نعم |
h= |
حقول الرؤوس الموقَّعة، بالترتيب | نعم |
bh= |
تجزئة النص بعد التوحيد القياسي | نعم |
b= |
التوقيع نفسه | نعم |
c= |
التوحيد القياسي للرؤوس/النص. الافتراضي simple/simple |
لا |
t=، x= |
وقت التوقيع وانتهاء صلاحيته | لا (يُوصى بـ x=) |
l= |
طول النص الموقَّع. يترك النص المضاف لاحقًا دون توقيع؛ تجنّبه | لا |
i= |
معرّف الوكيل أو المستخدم؛ وقيمته الافتراضية @ متبوعة بـ d= |
لا |
كيف يتحقق الخادم المستقبِل من توقيع DKIM؟
- يقرأ رأس
DKIM-Signatureويتحقق من الوسوم الإلزامية. - يجلب المفتاح العام باستعلام DNS من نوع TXT عن
<s>._domainkey.<d>، مثلs202610._domainkey.example.com. - يعيد حساب تجزئة النص بالتوحيد القياسي نفسه ويقارنها بـ
bh=. وعدم التطابق هو الخطأ المألوف «body hash did not verify» (تعذّر التحقق من تجزئة النص). - يتحقق من
b=مقابل الرؤوس الموقَّعة باستخدام المفتاح العام. - يسجّل النتيجة، مثل
dkim=pass header.d=example.comفيAuthentication-Results.
قد تحمل الرسالة عدة توقيعات، من المرسل وخدمة البريد والقائمة البريدية. ولا يجعل التوقيع المعطوب الرسالة أسوأ من رسالة غير موقَّعة: ينص RFC 6376 على أن أداة التحقق «لا ينبغي (SHOULD NOT) أن تعامل رسالة تحمل توقيعًا معطوبًا واحدًا أو أكثر ولا تحمل توقيعًا سليمًا معاملة مختلفة عن رسالة بلا توقيع إطلاقًا».
ما هو التوحيد القياسي في DKIM؟
يُعاد تحرير البريد تحريرًا طفيفًا أثناء النقل: يُعاد لفّ أسطر الرؤوس، وتُحذف المسافات الزائدة في نهايات الأسطر. ويحدد التوحيد القياسي مقدار ما يتحمله التوقيع من ذلك. يعرّف القسم 3.4 من RFC 6376 خوارزميتين لكل من الرؤوس والنص، وتُكتب بالصيغة c=header/body.
| الخوارزمية | الرؤوس | النص |
|---|---|---|
simple |
لا تغيير إطلاقًا؛ وأي تعديل يُفسده | تُتجاهل الأسطر الفارغة في النهاية فقط |
relaxed |
تحويل الأسماء إلى أحرف صغيرة، وفك لفّ الأسطر، ودمج المسافات | دمج المسافات داخل الأسطر وحذف الزائد منها |
يقول الـ RFC إن الوضع relaxed «يتحمل التعديلات الشائعة مثل استبدال المسافات وإعادة لفّ أسطر حقول الرؤوس». وإذا غابت c=، يُطبَّق simple/simple. ولا يصمد أي من الوضعين أمام تغييرات فعلية في المحتوى، مثل تذييل تضيفه قائمة بريدية أو إخلاء مسؤولية تضيفه بوابة.
ما هي محدِّدات DKIM ومفاتيح DNS؟
المحدِّد (selector) يسمّي مفتاحًا واحدًا من بين عدة مفاتيح للنطاق نفسه. يقدّمها القسم 3.1 من RFC 6376 «لدعم عدة مفاتيح عامة متزامنة لكل نطاق موقِّع». وهذا ما يتيح لكل خدمة إرسال أن يكون لها مفتاحها الخاص، ويتيح لك استبدال مفتاح دون انقطاع.
يقع المفتاح على العنوان <selector>._domainkey.<domain>:
s202610._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
| وسم المفتاح | المعنى |
|---|---|
v=DKIM1 |
الإصدار؛ موصى به، ويأتي أولًا إن وُجد |
k= |
نوع المفتاح: rsa (الافتراضي) أو ed25519 |
p= |
المفتاح العام بترميز base64. وقيمة p= الفارغة تعني أن المفتاح مُلغى |
t=y |
وضع الاختبار: يجب على المستقبِلين معاملة البريد كبريد غير موقَّع |
h=، s= |
قيود اختيارية على خوارزميات التجزئة ونوع الخدمة |
يختلف المزوّدون في طريقة نشر المفاتيح. تستخدم Microsoft 365 سجلَّي CNAME، هما selector1 وselector2، يشيران إلى مفاتيح تستضيفها Microsoft وتدوّرها. أما Google Workspace فتطلب منك نشر سجل TXT واحد، افتراضيًا على google._domainkey (Google). تسرد صفحاتنا عن سجلات DKIM حسب المزوّد السجلات الخاصة بالخدمات الشائعة، ويوضح دليل كيف تعثر على محدِّد DKIM كيفية قراءته من رسالة.
ما الطول المناسب لمفتاح DKIM؟
حدّث RFC 8301 قواعد التشفير في DKIM عام 2018:
| القاعدة | نص RFC 8301 |
|---|---|
| الخوارزمية | «يجب (MUST)» على الموقِّعين «التوقيع باستخدام rsa-sha256»؛ و«لا يجوز (MUST NOT) استخدام rsa-sha1 للتوقيع أو التحقق» |
| الحد الأدنى لمفتاح RSA | «يجب (MUST)» على الموقِّعين «استخدام مفاتيح RSA بطول 1024 بت على الأقل» |
| مفتاح RSA الموصى به | «ينبغي (SHOULD)» على الموقِّعين «استخدام مفاتيح RSA بطول 2048 بت على الأقل» |
| أدوات التحقق | يجب أن تتعامل مع أطوال من 1024 إلى 4096 بت، و«لا يجوز (MUST NOT) لها اعتبار التوقيعات التي تستخدم مفاتيح RSA أقصر من 1024 بت صالحة» |
استخدم RSA بطول 2048 بت. المشكلة تكمن في DNS: فالمفتاح العام بطول 2048 بت أطول من أن يتسع في سلسلة TXT واحدة من 255 حرفًا، لذا يُخزَّن في عدة سلاسل يعيد المستقبِلون دمجها. يتعامل معظم مزوّدي DNS مع ذلك؛ أما إذا كان مزوّدك يقتطع المفتاح، فسيفشل التوقيع.
ماذا عن Ed25519؟
يضيف RFC 8463 خوارزمية Ed25519-SHA256، التي «تتميز بمفاتيح أقصر بكثير من RSA لمستويات أمان مماثلة». يستخدم سجل مفتاحها k=ed25519، ولا يتجاوز طول المفتاح العام 44 حرفًا بترميز base64، فيتسع في سلسلة TXT واحدة. ينص الـ RFC على أن أدوات التحقق «يجب (MUST)» أن تدعمها، لكن كبار مزوّدي صناديق البريد لا يوثّقون ما إذا كانوا يفعلون ذلك، ولا توثّق Microsoft 365 لتوقيع DKIM لديها إلا مفاتيح RSA (بطول 1024 أو 2048 بت). ويقدّم القسم 6 من RFC 8463 المسار الآمن: وقّع بالخوارزميتين، كلٌّ تحت محدِّد خاص بها.
ما علاقة DKIM بـ DMARC؟
يجيز DMARC (RFC 9989) الرسالة عندما ينجح SPF أو DKIM لنطاق يتوافق مع نطاق From. وفي حالة DKIM، فإن النطاق المعتبر هو d=. ويشرح RFC 9989 سبب الحاجة إلى التوافق: «يمكن أن تحمل الرسالة توقيعًا صالحًا من أي نطاق، حتى من نطاق تستخدمه جهة خبيثة».
لذا ليس كل نجاح مفيدًا. فإذا كانت أداة النشرات البريدية لديك توقّع بـ d=vendor-mail.net، ينجح DKIM، لكن DMARC للنطاق example.com لا يستفيد منه شيئًا. فعّل التوقيع بالنطاق المخصص في كل خدمة كي تكون d= نطاقك أو نطاقًا فرعيًا منه.
يهم DKIM في DMARC أكثر من SPF، لأنه يصمد عمومًا أمام إعادة التوجيه. ينص القسم 7.4 من RFC 9989 على أن البريد المعاد توجيهه «سيفشل على الأرجح في فحوصات SPF» بينما «تظل توقيعات DKIM صالحة عمومًا»، وعلى أن النطاقات التي تنشر p=reject «يجب (MUST) أن تضع توقيعات DKIM صالحة على رسائلها». وللصورة الكاملة، راجع ما هو DMARC وSPF مقابل DKIM مقابل DMARC.
ما الذي يعطّل DKIM؟
| العَرَض في الرؤوس | السبب المحتمل | الحل |
|---|---|---|
body hash did not verify |
تغيّر النص بعد التوقيع: تذييلات القوائم البريدية، أو إخلاءات المسؤولية، أو البوابات، أو إعادة الترميز | وقّع بعد آخر تغيير، أو اجعل الجهة المعدِّلة تعيد التوقيع |
signature did not verify |
تغيّر رأس موقَّع، أو نُشر مفتاح خاطئ | قارن المفتاح المنشور بمفتاح التوقيع |
no key for signature |
سجل المحدِّد مفقود، أو به خطأ إملائي، أو لم يظهر في DNS بعد | انشر السجل على <s>._domainkey.<d> |
| خطأ في صياغة المفتاح | مفتاح TXT مقتطع أو مقسّم بشكل خاطئ | أعد نشر المفتاح كاملًا كسلاسل مدموجة |
key revoked |
قيمة p= فارغة |
وقّع بالمحدِّد الحالي |
| نجاح DKIM مع فشل DMARC | d= هو نطاق المزوّد |
فعّل التوقيع بالنطاق المخصص |
الصف الأول هو الأكثر شيوعًا. ويتناول دليلنا عن خطأ DKIM «body hash did not verify» كل حالة فشل بالتفصيل.
كم مرة ينبغي تدوير مفاتيح DKIM؟
تنص إرشادات M3AAWG لتدوير المفاتيح على أنه «ينبغي تدوير مفاتيح DKIM مرة كل ستة أشهر على الأقل»؛ وقد خففت مراجعتها الصادرة في أبريل 2018 الدورة الربع سنوية السابقة. وتجعل المحدِّدات العملية سهلة، كما يصف القسم 3.1 من RFC 6376: انشر المفتاح الجديد تحت محدِّد جديد، وحوّل التوقيع إليه، وأبقِ المفتاح العام القديم منشورًا ما دام البريد الموقَّع به قد يكون في الطريق. ثم ألغِ المفتاح القديم.
تبدّل Microsoft 365 بين محدِّديها الاثنين عندما تطلب ذلك، وتوثّق Microsoft Learn الخطوات. وتجد الإجراء الكامل للمنصات الأخرى في تدوير مفاتيح DKIM.
كيف أُعدّ DKIM؟
- أدرج كل خدمة ترسل باسم نطاقك، كما تفعل مع SPF.
- فعّل التوقيع بالنطاق المخصص في كل منها. تولّد معظم الخدمات المفتاح وتعرض لك سجل TXT أو CNAME لنشره. ويشرح دليل إعداد DKIM في Microsoft 365 وGoogle Workspace المنصتين الكبيرتين خطوة بخطوة.
- هل تشغّل خادم بريد خاصًا بك؟ أنشئ زوج مفاتيح بطول 2048 بت باستخدام DKIM Key Generator (مولّد مفاتيح DKIM)، الذي ينشئ المفتاح داخل متصفحك، واضبط خادمك ليوقّع به.
- انشر السجل لدى مزوّد DNS، ثم افحصه باستخدام DKIM Checker (أداة فحص DKIM).
- أرسل رسالة اختبار إلى صندوق بريد خارجي وتأكد من ظهور
dkim=passمع نطاقك فيheader.d، مستخدمًا Email Header Analyzer (محلّل رؤوس الرسائل). - انشر DMARC كي يتصرف المستقبِلون بناءً على النتيجة.
أدلتنا عن DKIM
| إذا كنت تحتاج إلى... | اقرأ |
|---|---|
| إعداد DKIM في Microsoft 365 أو Google Workspace | دليل إعداد DKIM |
| معرفة السجلات الخاصة بمزوّد معيّن | سجلات DKIM حسب المزوّد |
| معرفة المحدِّد الذي يستخدمه نطاق ما | كيف تعثر على محدِّد DKIM |
| إصلاح توقيع يفشل | خطأ DKIM: body hash did not verify |
| استبدال المفاتيح بأمان | تدوير مفاتيح DKIM |
الخطوات التالية
- افحص المحدِّدات وقوة المفاتيح لديك باستخدام DKIM Checker.
- تأكد من أن كل خدمة إرسال توقّع بنطاقك في
d=، لا بنطاق المزوّد. - استبدل أي مفتاح بطول 1024 بت بمفتاح بطول 2048 بت عند التدوير التالي، وأدرج التدوير في جدولك الزمني.
- بعد أن ينجح DKIM في كل مكان، انقل سياسة DMARC تدريجيًا نحو الإنفاذ (enforcement)، وافحصها باستخدام DMARC Checker (أداة فحص DMARC).
يحمي DKIM نطاقك في صناديق بريد الآخرين. أما البريد الذي يصل إلى صندوق بريدك، فإن فلترًا للبريد الوارد مثل iBlockSpam يفحص مصادقة كل مرسل إلى جانب مؤشرات البريد العشوائي والتصيّد الاحتيالي؛ راجع كيف يعمل.
وإذا كانت التطبيقات أو الأجهزة ترسل البريد عبر iBlockSpam، فإن خدمة ترحيل البريد الصادر (outbound relay) توقّع تلك الرسائل بـ DKIM، وتشمل 500 رسالة ترحيل صادر لكل نطاق شهريًا.
تصفّح أدلتنا الأخرى عن SPF وDKIM وDMARC.
الأسئلة الشائعة
ما معنى DKIM؟
اختصار DomainKeys Identified Mail (البريد المعرَّف بمفاتيح النطاق). المواصفة الحالية هي RFC 6376، الصادرة في سبتمبر 2011، والتي حلت محل RFC 4871 وRFC 5672. وأضافت تحديثات لاحقة قواعد أكثر صرامة للمفاتيح (RFC 8301) وخوارزمية توقيع ثانية هي Ed25519 (RFC 8463). وتحدد هذه الوثائق معًا كيفية إنشاء التوقيعات ونشرها والتحقق منها.
هل يشفّر DKIM رسائلي؟
لا. يوقّع DKIM الرسالة ولا يخفيها. ويظل بإمكان أي جهة تتولى الرسالة قراءتها. يتيح التوقيع للمستقبِل فقط أن يتحقق من النطاق الذي تحمّل مسؤولية الرسالة، ومن تغيّر الرؤوس الموقَّعة والنص أثناء النقل أو عدمه. أما التشفير أثناء النقل فمهمة منفصلة يتولاها TLS.
أين يُنشر المفتاح العام لـ DKIM؟
في DNS، كسجل TXT باسم المحدِّد تحت _domainkey، مثل s1._domainkey.example.com. يأتي المحدِّد من الوسم s= في التوقيع، ويأتي النطاق من d=. وبعض المزوّدين، ومنهم Microsoft 365، يطلبون منك نشر سجل CNAME في ذلك الموضع يشير إلى مفتاح يستضيفونه.
هل يمكن أن تنجح الرسالة في DKIM وتفشل في DMARC؟
نعم. يحتاج DMARC إلى نجاح DKIM لنطاق يتوافق مع نطاق From الظاهر. فإذا كانت منصة البريد لديك توقّع بنطاقها الخاص، مثل نطاق الإرسال لدى المزوّد، فإن DKIM ينجح لذلك النطاق لكنه لا يُحتسب لنطاقك. فعّل التوقيع بنطاقك المخصص كي يطابق الوسم d= نطاقك.
هل ينبغي أن أستخدم Ed25519 مع DKIM؟
فقط كتوقيع ثانٍ إلى جانب RSA. ينص RFC 8463 على أن أدوات التحقق يجب أن تدعم Ed25519، لكن كبار مزوّدي صناديق البريد لا يوثّقون ما إذا كانوا يتحققون منه، ولا توثّق Microsoft 365 لتوقيع DKIM لديها إلا مفاتيح RSA (بطول 1024 أو 2048 بت). ويصف RFC 8463 التوقيع بالخوارزميتين تحت محدِّدين منفصلين، كي يحصل المستقبِلون الذين لا يستطيعون التحقق من Ed25519 على توقيع RSA صالح.
المصادر
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures
- RFC 8301: Cryptographic Algorithm and Key Usage Update to DKIM
- RFC 8463: A New Cryptographic Signature Method for DKIM (Ed25519)
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC)
- Microsoft Learn: How to use DKIM for email in your custom domain
- Google Workspace Admin Help: Set up DKIM
- M3AAWG: DKIM Key Rotation Best Common Practices (revised April 2018)
اعرف مستوى نطاقك
أجرِ فحص Email Health Check مجانًا: MX وSPF وDKIM وDMARC وأمان النقل في فحص واحد، مع عرض السجلات الأصلية. دون تسجيل.
تابع القراءة
ما هو DMARC، وكيف يعمل؟
ما هو DMARC وكيف يعتمد على توافق SPF وDKIM، وماذا تعني سياسات p=none وquarantine وreject، وما الذي تكشفه التقارير، وكيف تُعدّه في خمس خطوات آمنة.
مدة القراءة 9 دقيقة SPF وDKIM وDMARCما هو SPF، وكيف يعمل سجل SPF؟
ما هو سجل SPF، وكيف يفحصه الخادم المستقبِل مقابل مرسل المغلف، وحد عمليات البحث العشر، وما الذي لا يستطيع SPF فعله، وكيف تنشئ سجلًا لنطاقك.
مدة القراءة 9 دقيقة اختيار الفلترهل أحتاج إلى فلتر بريد عشوائي منفصل مع Microsoft 365؟
يفلتر Microsoft 365 البريد العشوائي والبرمجيات الخبيثة والتصيّد الاحتيالي أصلًا. متى تكفي الحماية المدمجة، ومتى يفيد Defender، ومتى تستحق بوابة أمامه التكلفة؟
مدة القراءة 9 دقيقة