איך DKIM מוצא את המפתח
חתימת DKIM בהודעה מציינת דומיין (d=) ו-selector (s=). השרת המקבל מחבר אותם ל-selector._domainkey.domain, קורא משם את רשומת ה-TXT ומשתמש במפתח הציבורי שבתג p= כדי לאמת את החתימה. דומיין אחד יכול לפרסם כל מספר של selectors, כך שלכל שירות שליחה יכול להיות מפתח משלו ואפשר להחליף מפתחות ללא השבתה.
הבודק צריך את ה-selector כי DNS לא מאפשר להציג רשימה של ה-selectors שיש לדומיין. אין מה לסרוק, ה-selector מגיע מהחתימה של הודעה אמיתית.
מה הופך מפתח לחלש או לא תקין
RFC 8301 קובע שמפתחות RSA חייבים להיות באורך 1024 סיביות לפחות, ומומלץ שיהיו באורך 2048 סיביות. מאמת רשאי להתעלם ממפתח קצר יותר, וגם הבודק שלנו עושה זאת, לכן מפתח של 512 סיביות נחשב כאילו אין חתימה כלל. מפתחות Ed25519 (RFC 8463) קצרים וחזקים מעצם תכנונם, אבל עדיין לא כל הנמענים מאמתים אותם. לכן בדרך כלל מפרסמים אותם לצד מפתח RSA ולא במקומו.
הבודק מפענח את המפתח במלואו, כי רשומה שפוצלה באופן שגוי בין מחרוזות TXT, או base64 שאי אפשר לפענח, יוצרים מפתח שאף נמען לא יכול להשתמש בו. p= ריק פירושו שהמפתח בוטל במכוון. t=y מסמן דומיין שעדיין נמצא בבדיקה, ו-RFC 6376 §3.6.1 מנחה מאמתים להתייחס לדואר ממנו בדיוק כמו לדואר ללא חתימה.
שאלות
איך מוצאים את הסלקטור של DKIM, והאם DKIM בכלל מופעל?
שלחו לעצמכם הודעה ופתחו את הכותרות של העותק שהגיע. כותרת DKIM-Signature מציינת שההודעה נחתמה: הסלקטור הוא הערך s= והדומיין הוא d=. אם אין כותרת כזו, השירות שדרכו שלחתם אינו חותם. כל שירות שליחה חותם באמצעות סלקטור משלו, לכן ניוזלטר והודעה מתיבת הדואר שלכם עשויים לכלול סלקטורים שונים.
המפתח תקין, אבל DKIM נכשל עם "body hash did not verify". למה?
בדרך כלל ההודעה שונתה לאחר שנחתמה, למשל נוספה תחתית על ידי רשימת תפוצה או שקישור שוכתב על ידי שער אבטחה. המפתח יכול לאמת רק את מה שנחתם. הבדיקה המלאה מציגה את תוצאת האימות בפועל עבור ההודעה שלכם.
המדריך המלא: DKIM fail
אורך מפתח DKIM: 1024 או 2048 ביט?
מפתח של 1024 ביט מאומת בכל מקום, ו-RFC 8301 מתיר אותו. עם זאת, זה עדיין הגודל המזערי, לכן עברו ל-2048 ביט בפעם הבאה שתחליפו מפתחות.
האם לדומיין יכולות להיות כמה רשומות DKIM?
כן, אחת לכל סלקטור, ולדומיינים רבים יש כמה רשומות: אחת לספק תיבת הדואר ואחת לכל שירות דיוור או חיוב. בדקו אותן אחת בכל פעם. מפתח שנמחק מ-DNS יגרום לכשל בכל הודעה שעדיין חתומה באמצעותו.
באיזו תדירות צריך להחליף מפתחות DKIM?
M3AAWG ממליץ להחליף מפתחות לפחות פעם בחצי שנה, ומיד אם ייתכן שמפתח פרטי דלף. פרסמו את המפתח החדש תחת סלקטור חדש, עברו לחתום באמצעותו ומחקו את הרשומה הישנה רק לאחר שהודעות שנחתמו במפתח הישן הפסיקו להגיע. שולחים מנסים שוב במשך ארבעה עד חמישה ימים, לכן המתינו כשבוע.