HMAC
HMAC (گاهی به عنوان (کد احراز هویت پیام درهم‌سازی شده) یا (کد اصالت‌سنجی پیام برپایه درهم‌سازی))، ساختار معینی برای محاسبه کد تأیید هویت پیام (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 استفاده می‌شوند.
فرض کنید: بنابراین تعریف ریاضی (HMAC("K","m" به صورت زیر است:
شبه کد زیر نشان می‌دهد که HMAC چگونه می‌تواند پیاده‌سازی شود:
تجارتی که دچار حمله‌های سفارش‌های جعلی اینترنتی می‌شود، می‌تواند تأکید کند که کلیهٔ مشتریانش یک کلید رمز ارسال کنند. مشتری باید خلاصهٔ 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، برای امنیت این الگوریتم، قطعی نیستند. اما برای داشتن فاصله همینگ بزرگ از یکدیگر تعریف شده‌اند. به این ترتیب کلیدهای داخلی و خارجی، بیت‌های مشترک کمتری خواهند داشت.
قدرت رمزنگاری HMAC بستگی به اندازهٔ کلید رمز مورد استفاده دارد. شایع‌ترین حمله روی HMACها برای کشف کلید رمز، حملهٔ کورکورانه‌است. HMACها به‌طور قابل ملاحظه‌ای کمتر از الگوریتم‌های درهمساز به کاررفته در آن‌ها تحت تأثیر برخوردها قرار می‌گیرند.
در سال ۲۰۰۶، جانگ سونگ کیم، الکس بیریوکف، بارت پرنیل و سوکی هونگ نشان دادند چگونه می‌توان HMAC با نسخه‌های کاهش یافتهٔ MD5 یا SHA-1 یا نسخه‌های کامل HAVAL، MD4 و SHA-0 را از یک تابع تصادفی یا HMAC با یک تابع تصادفی تشخیص داد. تمایزدهنده‌های تفاضلی به مهاجم این اجازه را می‌دهند که یک حملهٔ ساختگی روی HMAC ترتیب دهد. علاوه بر این، تمایزدهنده‌های مستطیلی و تفاضلی می‌توانند منجر به حمله‌های پیش‌تصویر دوم شوند. HMACی که از نسخهٔ کامل MD4 استفاده می‌کند، می‌تواند با این آگاهی‌ها جعل شود. این حمله‌ها تناقضی برای اثبات امنیت HMAC نیست بلکه بینشی از HMAC را براساس توابع درهم ساز رمزنگاری موجود ارائه می‌دهد.