نویسنده : Arvan

DKIM Record چیست؟

linkedin

DKIM یا DomainKeys Identified Mail پروتکلی است که با استفاده از آن فرستنده امضای دیجیتال به هر ایمیل اضافه می‌کند، تا احراز هویت و اصالت‌سنجی برای گیرنده انجام شود. به‌عبارتی DKIM یکی از راه‌کارهای احراز هویت فرستندۀ ایمیل است.
DKIM با ایجاد ارتباط بین ایمیل و دامنه، به گیرنده امکان می‌دهد اصالت هویت فرستنده را تأیید کند. این پروتکل با یک رکورد از نوع TXT در فایل تنظیمات DNS Zone دامنه ایجاد می‌شود.
این ارتباط در گام اول با به‌کارگیری کلید خصوصی، انجام رمزنگاری، ایجاد امضای دیجیتال و افزودن آن به header ایمیل ارسالی انجام می‌شود.
در گام دوم فرستنده کلید عمومی را منتشر می‌کند و گیرنده امضای دیجیتال را صحت‌سنجی می‌کند. به این ترتیب DKIM به رفع مشکل تشخیص ایمیل‌های جعلی کمک می‌کند. همچنین این پروتکل در کنار SPF در پیاده‌سازی خط‌مشی‌های پروتکل DMARC، نقش مکمل ایفا می‌کند.

عملکرد DKIM

کارکرد کلی DKIM شامل گام‌های زیر است:

در سمت فرستنده – ساخت امضای DKIM:

۱. تمام فاصله‌ها و فضاهای خالی بین کلمات متن ایمیل، به همراه بخشی از header که در رکورد DKIM مشخص می‌شوند، حذف می‌شوند. به این عمل canonicalization گفته می‌شود. در این حالت یک رشته متن به‌هم‌چسبیده به دست می‌آید.
دلیل این حرکت این است که ایمیل در گذر از سرورهای مختلف، تا رسیدن به مقصد، ممکن است فرمت‌های ظاهری مختلفی پیدا کند. با این حذف‌ها مطمئن می‌شوید که چه در سمت فرستنده و چه در سمت گیرنده رشتۀ متن واحدی، به تابع درهم‌ساز، Hash یا هش داده می‌شود. این رشته متن در ازای ورودی به هر تابع هشِ مشخص، خروجی ثابتی دارد.
در گام‌های بعدی می‎بینیم که این قابلیت یکسان بودن خروجی تابع هش، در سمت گیرنده نشان می‌دهد که محتوای اصلی در انتقال دستکاری نشده است.
به طور خلاصه، هش، تابع ریاضی است که به ازای هر رشته ورودی یکسان، خروجی ثابت و منحصر‌به‌فردی تولید می‌کند. این تابع یک‌سویه است؛ به این معنی که از خروجی نمی‌توان به مقدار ورودی دست یافت. از موارد کاربرد این تابع در دنیای کامپیوتر و به‌خصوص شبکه، می‌توان به آزمون صحت انتقال و یکپارچگی داده بر روی لینک‌های شبکه و دنیای اینترنت اشاره کرد. چون اگر مثلاً با محاسبۀ مقدار هش داده‌ها در دو سمت دریافت‌کننده‌‌ و ارسال‌کننده، به مقدار برابری برسیم، می‌توان نتیجه گرفت که داده‌های دریافتی بدون هیچ‌گونه خطا و دستکاری دریافت شده است.

۲. حال مقدار هش رشتۀ متن canonicalization شده محاسبه می‌شود.

۳. مالک دامنه با استفاده از کلید خصوصیِ جفت‌کلیدی که در اختیار دارد، خروجی هش گام دوم را رمزگذاری می‌کند. دقت داشته باشید که در هنگام ارسال ایمیل از سوی فرستنده، هم هش به دست آمده در گام دوم و هم خروجی رمزگذاری این گام، در بخش DKIM در header ایمیلِ ارسالی قرار می‌گیرند.

۴. هر چه که برای رمزگشایی و احراز هویت مورد نیاز است، توسط فرستنده در محتوای header قرار داده شده بر روی هر ایمیل، گنجانده می‌شود. مانند کلید عمومی جفت‌کلید و تگ‌هایی از header که در محاسبۀ هش نقش دارند. در نهایت مالک دامنه، کلید عمومی جفت‌کلید را برای دسترسی‌های آتی گیرندگان احتمالی، در رکوردی از نوع TXT و با ویژگی DKIM قرار می‌دهد.

در سمت سرورِ ایمیلِ گیرنده؛ تایید امضای دیجیتال DKIM:

۱. گیرنده هم فاصله‌ها و فضاهای خالی را حذف می‌کند؛ عمل canonicalization. این امر از طریق اطلاع از headerهای به‌کاررفته در تگ h صورت می‌گیرد.

۲. مقدار هش header و محتوای پیام ساخته می‌شود.

۳. کلید عمومی جفت‌کلید از طریق درخواست DNS، از دامنه‌ی مبدأ دریافت می‌شود.

۴. در این گام، گیرنده با استفاده از کلید عمومی، با امضای دیجیتال (محتوای رمزگذاری‌شده) گام سومِ بخش قبل را رمزگشایی می‌کند. با این‌کار، به هشی که توسط فرستنده از header و متن پیام محاسبه شده بود می‌رسد. اگر این محتوای هش، با محوای هشی که گیرنده محاسبه کرده، یکسان باشد، یعنی محتوای ایمیل و header آن در انتقال، تغییر نکرده و دستکاری نشده است. به عبارت دیگر یکپارچگی یا integrity داده‌ها حفظ شده است.
همچنین جواب دادن کلید عمومی روی محتوای رمزگذاری‌شده، یعنی جفت‌کلیدش، نشان می‌دهد که کلید خصوصی که برای رمزگذاری استفاده شده، در اختیار همان دامنه‌ای است که ادعای مالکیت و ارسال ایمیل دارد. بنابراین از طریق کار کردن این جفت کلید، هویت فرستنده برای گیرنده تأیید می‌شود.

نکته مهم دیگر آن است که در DKIM کل پیام و داده‌های ارسالی ایمیل رمزگذاری نمی‌شوند بلکه با کلید خصوصی، فقط از مجموع hash شدۀ داد‌های موجود در header و متن پیام، رمزنگاری می‌شود؛ بنابراین اشتباه است اگر فکر کنیم DKIM کل محتوای ایمیل را به صورت رمزنگاری درمی‌آورد و از دید دیگران مخفی می‌کند چون برایDKIM، یک ماهیت هدف در نظر گرفته شده که مشخص کردن یکپارچگی کل داده و احراز هویت فرستنده است، نه محرمانگی داده!
برای رمزنگاری و اعمال محرمانگی داده‌های ایمیل در حین انتقال، از پروتکل‌های مخصوص دیگری مانند STARTTLS یا رمزنگاری سرتاسری چون GNU Privacy Guard – GPG استفاده می‌شود. البته این رفتار DKIM حسن‌هایی هم دارد؛ محاسبۀ هشِ یک رشته متنِ به‌نسبت کوتاه، در مقایسه با رمزگشایی یک متن بلند رمزدار، به پردازش و زمان‌ بسیار کم‌تری نیاز دارد. به همین دلیل از سوءاستفاده و رخداد انواعی از حملات منع سرویس یا DoS جلوگیری می‌کند.
تصور کنید که قرار باشد سرور دریافت‌کنندۀ ایمیل، فقط برای تشخیص هویت، متن رمزنگاری‌شده‌ای را رمزگشایی کند. با صرف چنین زمانی برای هر درخواست، مهاجم درخواست‌های نامعتبر مکرر می‌فرستد و منابع زیادی از سرور را درگیر می‌کند.

ساختار DKIM Record

همان‌طور که گفتیم رکورد DKIM در فایل تنظمیات DNS Zone دامنه قرار می‌گیرد. این رکورد، نوع خاصی از رکورد TXT است.

Value Record type Class TTL Hostname
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqFGebZAOHfSGy9CWtA4Uads0zaXAy8TWtW9uIFby" TXT IN 86400 example._domainkey.exampledomain.com

 

- این رکورد با عبارت example._domainkey.exampledomain.com آغاز می‌شود. بخش example که به نام selector شناخته می‌شود، نامی است که برای این DKIM در نظر گرفته شده است. محدودیتی در تعداد تعریف رکورد DKIM وجود ندارد؛ به همین دلیل می‌توان برای هر نوع ایمیلی، رکورد DKIM و در نتیجۀ آن کلید عمومی و خصوصی و امضای به‌خصوص تعریف کرد. مثلن می‌توان برای ایمیل‌های بازاریابی یک رکورد DKIM خاص و برای ایمیل‌های پشتیبانی DKIM دیگری به‌کار گرفت. توجه داشته باشید که example همان نامی است که در تگ s در header ایمیل ارسالی است.
عبارت بعد از آن، .domainkey_ است که جزو ساختار رکورد پروتکل DKIM محسوب می‌شود و برای ساخت چنین رکوردهایی باید به همین‌شکل نوشته شود. exampledomain.com نام دامنه‌ای است که در فایل DNS Zone آن در حال ایجاد رکورد DKIM هستید.

- TTL میزان زمانی است که سرورهای DNS داده‌های این رکورد را در خود ذخیره می‌کنند.

- TXT نوع رکورد DNS را مشخص می‌کند.

- اما قسمت اصلی کار در بخش value اتفاق می‌افتد. در تگ v=DKIM1 نوع پروتکلی را که در رکورد TXT قصد به‌کارگیری‌اش را دارید مشخص می‌کنید. بنابراین در اینجا نام DKIM قرار گرفته است. عدد ۱ هم نسخۀ آن را مشخص می‌کند. توجه داشته باشید که مقادیر آن با حروف بزرگ نوشته شده است و همواره به عنوان اولین تگ مورد استفاده قرار می‌گیرد.

تگ k نوع الگوریتم به‌کار رفته در کلید عمومی قرار گرفته در تگ p را مشخص می‌کند.

تگ p هم حاوی کلید عمومی است که در اختیار هر گیرندۀ ایمیلی قرار می‌گیرد و از طریق آن صحت مقادیر هش‌شده و امضای دیجیتال با آن سنجیده می‌شوند.

ساختار امضای DKIM

امضای DKIM همان چیزی است که فرستنده روی header هر ایمیل ارسالی اضافه می‌کند. قبلاً گفتیم که این امضا شامل هر چیزی است که گیرنده برای احراز هویت و یکپارچگی داده‌ها نیاز دارد.
یک نمونه از آن را در اینجا بررسی می‌کنیم.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=exampledomain.com; s=example;
h=from:content-transfer-encoding:subject:message-id:date:to:mime-version;
bh=ZkwViLQ8B7I9vFIen3+/FXErUuKv33PmCuZAwpemGco=;
b=kF31DkXsbP5bMGzOwivNE4fmMKX5W2/Yq0YqXD4Og1fPT6ViqB35uLxLGGhHv2lqXBWwF
hODPVPauUXxRYEpMsuisdU5TgYmbwSJYYrFLFj5ZWTZ7VGgg6/nI1hoPWbzDaL9qh

- v نسخۀ به‌کاررفته در DKIM را نشان می‌دهد.

- a نوع الگوریتم به‌کاررفته در رمزنگاری و هش را مشخص می‌کند.

- c یا canonicalization میزان حساسیت و شیو‌ه‌هایی را نشان می‌دهد که در حذف فضاهای خالی در header و متن اصلی پیام در سمت فرستنده برای ایجاد متن هش استفاده شده است. عبارت قبل از /، حالت استفاده‌شده برای header و عبارت بعد از آن برای body را مشخص می‌کند.

- d نام دامنه‌ای است که بایستی گیرنده، درخواست DNS را برای آن بفرستد و کلید عمومی را از آن بخواهد.

- هر نام دامنه می‌تواند چندین رکورد DKIM و کلید عمومی داشته باشد. به همین دلیل اینکه کدام کلید عمومی استفاده شود، از طریق تگ s یا همان selector مشخص می‌شود. در بخش ساختار DKIM توجه داشتید که عبارت example یا هر نام اختیاری دیگری، در واقع نام رکورد DKIM امضاکنندۀ این پیام دریافتی را مشخص می‌کند. بنابراین تگ s در اینجا، در تناظر با نامی است که در اول ساختار رکورد DKIM، به عنوان selector استفاده شده است؛ مثلاً ما در اینجا: example.

- h بیانگر header هایی است که در فرایند ایجاد هش در سمت سرور نقش داشته‌اند. از همین header ها برای ساخت هش در سمت گیرنده استفاده می‌‎شود.

- bh هشِ رمزنگاری‌نشده‌ محتوای body پیام را در بر دارد. توجه کنید که هش headerها با آن ادغام نشده است.

- b امضای داده‌ها یا همان متن رمزنگاری‌شده است که شامل headerهای مشخص‌شده در تگ h و محتوای body پیام است. توجه کنید که اگر گیرنده با کلید عمومی، این متنِ رمزنگاری‌‌شده را رمزگشایی کند، به متنِ هش‎شدۀ ترکیب header و محتوای body پیام دست پیدا می‌کند.

مطالب مرتبط