یه نگاه خودمونی به روش‌های تولید کلید امن: مقایسه استانداردهای NIST و IEEE

Fall Back

خب دوستای گل، اگه حتی یه کم با امنیت اطلاعات سر و کار داشته باشین، شاید اسم «تولید کلید» و «اعداد شبه تصادفی» به گوشتون خورده باشه. حالا اگه نمی‌دونین این چیزها چی هستن، نگران نباشین، همه‌چی رو خودمونی توضیح میدم!

حتماً شنیدین که تو دنیای برنامه‌نویسی، مخصوصاً طرفای رمزنگاری، ما نیاز داریم اعداد شبه تصادفی (PRN) تولید کنیم. این یعنی اعدادی که تا حد خوبی شبیه اعداد تصادفی می‌مونن، اما واقعا ۱۰۰٪ تصادفی نیستن و یه الگوریتم پشتشونه.

حالا سؤالی که پیش میاد اینه: چطور این اعداد رو جوری بسازیم که هم امن باشن و هم قابل پیش‌بینی نباشن؟ اینجا پای یک سری چیز میاد وسط به نام Key Derivation Functions یا به اختصار KDF. یه توضیح ساده: «KDFها یعنی تابع‌هایی که از یه کلید و یه داده ورودی مشخص، یه کلید یا عددِ دیگه به‌دست میارن، اونم به روشی امن!»

تو این مقاله که همین تازگی منتشر شده (arXiv:2507.06244v1)، اومدن چند تا استاندارد معروف KDF که توسط سازمان‌هایی مثل NIST و IEEE تعریف شده رو بررسی کردن. اگه با این اسم‌ها آشنایی ندارین: NIST یعنی سازمان ملی استاندارد و فناوری آمریکا و IEEE هم یه مرجع جهانی برای استانداردهای الکترونیک و کامپیوتره.

حالا اصل کاری! مقاله اول میره سراغ سه تا الگوریتم معروف به اسم MAC. «MAC» یعنی Message Authentication Code، یه روشیه که باهاش می‌تونیم مطمئن بشیم یه پیام دستکاری نشده—یعنی واقعاً از طرف فرستنده اصلی فرستاده شده و کسی تو مسیر بهش ور نرفته. سه تا «مک» معروف که اینجا بررسی شدن:

۱. HMAC: این یکی با هش (hash) کار می‌کنه. یعنی با الگوریتم‌های هش مثل SHA-256 یه MAC می‌سازه. هش همون تابعیه که یه داده‌ی ورودی رو به یه خروجی کوتاه و یکتا تبدیل می‌کنه، طوری که برگشت‌پذیر نباشه و اگه داده عوض بشه خروجی هم کلی فرق کنه.

۲. CMAC: این هم یه نوع MAC هست که پایه‌اش روی رمزنگاری بلوکیه (یعنی داده رو به بلاک‌های مساوی تقسیم می‌کنه)؛ معمولاً از الگوریتم معروف AES (یه جور رمزنگار بلوکی) استفاده می‌شه.

۳. KMAC: این یکی هم مبتنی بر Keccak هست. حالا Keccak چیه؟ همون الگوریتمیه که پایه‌ی استاندارد SHA-3 رو تشکیل داده؛ یعنی نسخه جدیدتر و امن‌تر توی دنیای هشینگ.

بعد اینکه این الگوریتم‌های MAC بررسی شدن، مقاله میره سراغ KDFهایی که بر اساس همین MACها ساخته شدن. چند تا از اینا اینجورین:

  • Counter Mode KDF: حالتی که از یه شمارنده توی ساخت کلید استفاده میشه. یعنی هر بار عددی که تولید میشه فرق می‌کنه چون شمارنده هم عوض میشه.

  • KMAC-based KDF: تابه‌ی تولید کلید که با همون KMAC ساخته میشه.

  • KDF تعریف شده توسط استاندارد IEEE 1609.2.1: اینم باز یه مدل خاص تولید کلیده که IEEE اومده براش استاندارد گذاشته، مخصوصاً برای سیستم‌هایی مثل ارتباطات خودرو با خودرو (V2V).

حالا بخش باحال ماجرا اینجاست که پژوهشگرها اومدن این روش‌ها رو پیاده‌سازی کردن و سنجیدن از نظر زمانی هر کدوم چقدر طول می‌کشه تا هم MAC بسازن و هم عدد شبه تصادفی مربوط بهش رو تولید کنن. مثلاً چه مقدار زمان می‌بره که با هر الگوریتم، از یه پیام و کلید، یه خروجی امن به‌دست بیاد؟

نتیجه‌اش چی شد؟ مشخص شد که CMAC و KDFهایی که بر پایه CMAC ساخته شدن، از بقیه سریع‌تر عمل می‌کنن. مثلا CMAC فقط حدود ۰.۰۰۷ میلی‌ثانیه طول می‌کشه که خروجی بده و KDF مبتنی بر CMAC هم تقریبا دو برابرش (۰.۰۱۴ میلی‌ثانیه). عملاً این یعنی اگه سرعت براتون مهمه (مثلاً تو سیستم‌هایی که نباید تاخیر داشته باشن)، این دوتا گزینه‌های بهتری هستن.

توی مقاله یه نگاه هم انداختن به اینکه هرکدوم تو چه شرایطی بهتر جواب میدن و چه نقاط ضعفی دارن. مثلاً شاید یه روش تو سرعت عالی باشه اما از لحاظ انعطاف پذیری یا امنیت یه کم مشکل داشته باشه؛ یا برعکس، یکی امنیتش بیشتر باشه اما یه خورده کند کار کنه.

در کل، اگه دنبال انتخاب بهترین روش تولید کلید برای یه اپلیکیشن خاص مثل سرورهای امن، بانکداری یا حتی اینترنت اشیا (IoT) هستین، از این مقاله میشه فهمید بهتره بسته به نیازتون کدوم استاندارد رو انتخاب کنین. خلاصه هرکدوم یه نقطه قوت و نقطه ضعف دارن: چه از نظر سرعت، چه امنیت، و چه کاربرد.

پس اگر یه روزی تو پروژه‌هاتون گیر کردین که کدوم روش تولید کلید امن‌تر یا سریع‌تره، این مقاله می‌تونه مثل یه دوست خوب راهنمایی‌تون کنه. 😉

منبع: +