بالاترین سوالات
زمانبندی
چت
دیدگاه

HMAC

از ویکی‌پدیا، دانشنامه آزاد

HMAC
Remove ads

HMAC (گاهی به عنوان (به انگلیسی: keyed-hash message authentication code) (کد احراز هویت پیام درهم‌سازی شده) یا (به انگلیسی: hash-based message authentication code) (کد اصالت‌سنجی پیام برپایه درهم‌سازی))، ساختار معینی برای محاسبه کد تأیید هویت پیام (MAC) در رمزنگاری است که شامل یک تابع درهم ساز رمزنگاری در ترکیب با یک کلید رمز است. HMAC نیز مانند هر MAC، می‌تواند جامعیت داده و اعتبار یک پیام را همزمان بررسی کند. هر تابع درهم ساز رمزنگاری مانند ام‌دی۵ یا SHA-1، را می‌توان برای محاسبهٔ HMAC استفاده کرد. به این ترتیب الگوریتم MAC نتیجه شده، HMAC-MD5 یا HMAC-SHA1 نامیده می‌شود. قدرت رمزنگاری HMAC به قدرت رمزنگاری تابع درهم ساز به کاررفته در آن، اندازهٔ بیتی طول خروجی درهم ساز آن و اندازه و کیفیت کلید رمزنگاری بستگی دارد.
یک تابع درهم ساز تکراری، پیام را به بلوک‌هایی با اندازه معین تقسیم می‌کند و تابع فشرده‌سازی را روی آن‌ها تکرار می‌کند. به عنوان مثال، MD5 و SHA-1، روی بلوک‌های ۵۱۲ بیتی عمل می‌کنند. اندازهٔ خروجی HMAC با انداره تابع درهم ساز به کاررفته در آن یکسان است. (در حالت MD5یا SHA-1، 128 یا ۱۶۰ بیت). هرچند این اندازه می‌تواند در صورت لزوم کوتاه شود.
تعریف و تحلیل یک ساختار HMAC، اولین بار در سال ۱۹۹۶ توسط مهیر بلیر، ران کنتی و هوگو کرازیک که RFC 2104 را نیز نوشته بود، منتشر شد. همچنین این مقاله گونه‌ای را تعریف کرد که NMAC نامیده می‌شد و تاکنون به ندرت استفاده شده‌است. استاندارد پردازش اطلاعات فدرال، استفاده از HMACها را عمومیت بخشید و استانداردسازی کرد. HMAC-SHA-1 و HMAC-MD5 در پروتکل‌های آی‌پی‌سک و TLS استفاده می‌شوند.

Thumb
ایجاد و رمزگذاری کد احراز هویت هش‌شده HMAC با الگوریتم AES
Remove ads

تعریف (از RFC 2104)

فرض کنید:

  • (.)H یک تابع درهم‌ساز رمزنگاری است.
  • K کلید رمزی است که تعدادی صفر به سمت راست آن اضافه شده‌است تا اندازهٔ بلوک‌های تابع درهم‌ساز شود.
  • m پیامی است که باید تأیید هویت شود.
  • || نشاندهندهٔ عمل الحاق است.
  • ⊕ نشاندهندهٔ یای انحصاری است (XOR)
  • opad اضافه کردن بیت خارجی است (0x5c5c5c…5c5c، ثابت هگزادسیمال به اندازهٔ طول یک بلوک)
  • ipad اضافه کردن بیت داخلی است (0x363636…3636، ثابت هگزادسیمال به اندازهٔ طول یک بلوک)

بنابراین تعریف ریاضی (HMAC(K,m به صورت زیر است:

HMAC (K,m) = H((Kopad) ∥ H((Kipad) ∥ m))
Remove ads

پیاده سازی

شبه کد زیر نشان می‌دهد که HMAC چگونه می‌تواند پیاده‌سازی شود:

 function hmac (key, message)
    if (length(key) > blocksize) then
        key = hash(key) // keys longer than blocksize are shortened
    end if
    if (length(key) < blocksize) then
        key = key || zeroes(blocksize - length(key)) // keys shorter than blocksize are zero-padded
    end if
    o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function
    i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)
    return hash(o_key_pad || hash(i_key_pad || message)) // Where || is concatenation
end function
Remove ads

مثال کاربردی

تجارتی که دچار حمله‌های سفارش‌های جعلی اینترنتی می‌شود، می‌تواند تأکید کند که کلیهٔ مشتریانش یک کلید رمز ارسال کنند. مشتری باید خلاصهٔ HMAC سفارش را که با استفاده از کلید متقارن مشتری محاسبه شده‌است، همراه با سفارش ذخیره کند. به این ترتیب این تجارت با دانستن کلید متقارن مشتری، می‌تواند آن سفارشی را تأیید کند که از طرف خود مشتری است و دستکاری نشده‌است.

اصول طراحی

انگیزهٔ طراحی خصوصیات HMAC بدلیل وجود حمله‌ها به مکانیسم‌های بی‌اهمیت بیشتری ایجاد شد تا یک کلید را با یک تابع درهم ساز ترکیب کند. به عنوان مثال، یک نفر ممکن است فرض کند امنیتی که HMAC فراهم می‌کند، همان امنیتی است که می‌توان با MAC = H(key ∥ message) بدست آورد. درحالیکه این روش دارای نقص‌های جدی است: در اکثر توابع درهمساز، بدون دانستن کلید، می‌توان به راحتی داده‌هایی را به پیام اضافه نمود و MAC معتبر دیگری بدست آورد. همچنین، اضافه کردن کلید با استفاده از MAC = H(message ∥ key) دارای این مشکل است که مهاجمی که بتواند در تابع درهم ساز (بدون کلید) برخوردی پیدا کند، در MAC هم می‌تواند پیدا کند. با اینکه مقاله‌های امنیتی متعددی به آسیب پذیری‌هایی در MAC = H(key ∥ message ∥ key)، حتی زمانیکه از دو کلید متفاوت استفاده می‌شود، اشاره داشته‌اند، اما استفاده از این رویکرد بهتر است.[۱][۲][۳]
هیچ حملهٔ پسوندی شناخته شده‌ای دربرابر خصوصیات HMAC فعلی که به صورت H(key1 ∥ H(key2 ∥ message)) تعریف شده، یافت نشده‌است. زیرا درخواست تابع درهمساز بیرونی، نتیجهٔ متوسط درهم ساز داخلی را پنهان می‌کند. مقادیر ipad و opad، برای امنیت این الگوریتم، قطعی نیستند. اما برای داشتن فاصله همینگ بزرگ از یکدیگر تعریف شده‌اند. به این ترتیب کلیدهای داخلی و خارجی، بیت‌های مشترک کمتری خواهند داشت.

Remove ads

امنیت

قدرت رمزنگاری HMAC بستگی به اندازهٔ کلید رمز مورد استفاده دارد. شایع‌ترین حمله روی HMACها برای کشف کلید رمز، حملهٔ کورکورانه‌است. HMACها به‌طور قابل ملاحظه‌ای کمتر از الگوریتم‌های درهمساز به کاررفته در آن‌ها تحت تأثیر برخوردها قرار می‌گیرند.[۴][۵][۶]
در سال ۲۰۰۶، جانگ سونگ کیم، الکس بیریوکف، بارت پرنیل و سوکی هونگ نشان دادند چگونه می‌توان HMAC با نسخه‌های کاهش یافتهٔ MD5 یا SHA-1 یا نسخه‌های کامل HAVAL، MD4 و SHA-0 را از یک تابع تصادفی یا HMAC با یک تابع تصادفی تشخیص داد. تمایزدهنده‌های تفاضلی به مهاجم این اجازه را می‌دهند که یک حملهٔ ساختگی روی HMAC ترتیب دهد. علاوه بر این، تمایزدهنده‌های مستطیلی و تفاضلی می‌توانند منجر به حمله‌های پیش‌تصویر دوم شوند. HMACی که از نسخهٔ کامل MD4 استفاده می‌کند، می‌تواند با این آگاهی‌ها جعل شود. این حمله‌ها تناقضی برای اثبات امنیت HMAC نیست بلکه بینشی از HMAC را براساس توابع درهم ساز رمزنگاری موجود ارائه می‌دهد.[۷]

Remove ads

پیوند به بیرون

منابع و پانویس‌ها

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads