کد اصالت‌سنجی پیام سی‌بی‌سی

در رمزنگاری، یک کد اصالت‌سنجی زنجیره رمز-قطعه (CBC-MAC) یک روش ساخت کد اصالت‌سنجی پیام از یک رمز قالبی است. در این روش پیام با استفاده از یک الگوریتم رمز قالبی در مد CBC رمز می‌شود و زنجیره‌ای از قالب‌ها به وجود می‌آورد به طوری که هر قالب به رمزنگاری صحیح قالب قبلی وابسته است. این وابستگی داخلی تضمین می‌کند که تغییر هر یک از بیت‌های متن اصلی باعث ایجاد تغییری در آخرین قالب رمز شده می‌شود که نمی‌توان بدون اطلاع از کلید رمز قالبی آن را پیش‌بینی یا خنثی کرد.
برای محاسبه CBC-MAC پیام آن را در مد CBC با بردار اولیه صفر رمز می‌کنیم. شکل زیر محاسبه CBC-MAC یک پیام شامل قالب‌های را با استفاده از کلید مخفی و رمز قالبی نشان می‌دهد.
پرونده:CBC-MAC structure (en).svg
امنیت پیام‌های با طول ثابت و متغیر
در صورتی که رمز قالبی مورد استفاده امن باشد (به عبارت دیگر یک جایگشت شبه‌تصادفی باشد)، CBC-MAC برای پیام‌های با طول ثابت امن خواهد بود. اما در حالت کلی، برای پیام‌های با طول متغیر امن نیست. به همین دلیل، هر کلید باید تنها برای پیام‌های با طول ثابت و مشخص مورد استفاده قرار گیرد. دلیل این امر این است که مهاجمی که زوج‌های صحیح پیام-برچسب (همان CBC-MAC) دو پیام و را می‌داند می‌تواند پیام سوم را به گونه‌ای تولید کند که MAC آن نیز باشد. این کار به سادگی با XOR کردن اولین قالب با و سپس الحاق و تغییر یافته و تولید انجام می‌شود. هنگام محاسبه MAC پیام ، MAC پیام را به روش عادی برابر محاسبه می‌کنیم و در مرحله محاسبه آن را با مقدار MAC اولین پیام XOR می‌کنیم. حضور این برچسب در پیام جدید باعث از بین رفتن کامل اثر MAC قالب‌های پیام می‌شود: و در نتیجه برچسب پیام برابر است.
این مشکل را نمی‌توان با اضافه کردن قالب طول پیام به انتهای قالب‌ها حل کرد. سه راه‌حل اصلی اصلاح CBC-MAC و امن ساختن آن برای پیام‌های با طول متغیر عبارتند از: ۱)جداسازی کلید ورودی-طول ۲)الحاق طول به ابتدای قالب‌ها ۳)رمز کردن آخرین قالب. در این حالت، هم‌چنین توصیه می‌شود که از مد عملیات متفاوتی، برای مثال، CMAC یا HMAC برای حفظ صحت و جامعیت پیام‌های با طول متغیر استفاده شود.
الحاق طول به ابتدای قالب‌ها
یک راه قرار دادن طول پیام در اولین قالب است؛ ثابت شده‌است که CBC-MAC تا وقتی که دو پیامی که پیشوند یکدیگر هستند استفاده نشوند امن است و الحاق طول به ابتدای قالب‌ها حات خاص آن است. این مسئله در حالتی که طول پیام در آغاز محاسبات نامعلوم است می‌تواند گیج‌کننده باشد.
رمز کردن آخرین قالب
رمز کردن آخرین قالب به صورت تعریف می‌شود. در مقایسه با بقیه روش‌های توسعه CBC-MAC به پیام‌های با طول متغیر که بیان شد، رمز کردن آخرین قالب دارای این مزیت است که نیازی به دانستن طول پیام تا پایان محاسبات نیست.
روش‌های حمله
هم‌چون بسیاری از طرح‌های رمزنگاری، استفاده خام از رمزها و دیگر پروتکل‌ها حملات را ممکن می‌سازد، که باعث کاهش کارایی حفاظت رمزنگاری (یا حتی بلااستفاده ساختن آن) می‌شود. ما در این‌جا حملاتی که به علت استفاده نادرست از CBC-MAC ممکن می‌شوند را بیان می‌کنیم.
استفاده از کلید یکسان برای رمزنگاری و اصالت‌سنجی
یک اشتباه متداول استفاده مجدد از کلید برای رمزنگاری CBC و CBC-MAC است. گرچه در حالت کلی استفاده مجدد از یک کلید برای اهداف متفاوت تکنیک نامناسبی است، در این حالت خاص این اشتباه به حمله اعجاب‌انگیزی می‌انجامد:
فرض کنید Alice می‌خواهد قالب‌های رمزشده را به Bob بفرستد. در حین فرآیند انتقال، Eve می‌تواند در هر یک از قالب‌های رمزشده تغییر ایجاد کند و هر یک از بیت‌های آن را به انتخاب خود تغییر دهد، به طوری که آخرین قالب، ، دست‌نخورده باقی بماند. بدون لطمه‌خوردن به کلیت مسئله و برای تامین اهداف این مثال فرض می‌کنیم بردار اولیه که در فرآیند رمزنگاری مورد استفاده قرار گرفته یک بردار تمام صفر است.
Bob پیام را دریافت می‌کند و ابتدا آن را با معکوس کردن فرآیند رمزنگاری که Alice اعمال کرده روی قالب‌های رمزشده رمزگشایی می‌کند. در حین فرآیند انتقال، Eve می‌تواند در هر یک از قالب‌های رمزشده تغییر ایجاد کند و هر یک از بیت‌های آن را به انتخاب خود تغییر دهد، به طوری که آخرین قالب،  ، دست‌نخورده باقی بماند. سپس نسخه تغییر یافته او، به‌جای نسخه اصلی Alice به Bob تحویل داده می‌شود.
Bob ابتدا پیامی که دریافت کرده را با استفاده از کلید مخفی به اشتراک گذاشته شده رمزگشایی می‌کند و متن متناظر با آن را به دست می‌آورد. توجه کنید که همه متن به دست آمده با نسخه اصلی که Alice فرستاده متفاوت خواهد بود، زیرا Eve همه متن رمز شده به جز آخرین قالب آن را تغییر داده است. به بیان دقیق‌تر، متن نهایی، ، با متن اصلی که Alice فرستاده، ، متفاوت است؛ با وجود یکسان‌بودن ، است و در نتیجه با XOR کردن قالب رمز شده قبلی با رمز گشایی شده متن متفاوت به دست می‌آید: .
سپس Bob برچسب اصالت‌سنجی همه متن‌هایی که رمزگشایی کرده‌است را با استفاده از CBC-MAC محاسبه می‌کند. برچسب پیام جدید، ، برابر است با:
توجه کنید که این عبارت معادل است با:
که همان است:
در نتیجه داریم: .
دیدیم که Eve توانست متن رمزشده را در حین انتقال تغییر دهد (بدون اینکه لزوما اطلاعی از متن اصلی متناظر با آن داشته باشد) به طوری که یک پیام کاملا متفاوت، ، تولید شود که برچسب این پیام با برچسب پیام اصلی مطابقت می‌کرد و Bob از این که محتویات پیام در فرایند انتقال تغییر کرده اطلاعی نداشت. طبق تعریف، یک کد اصالت‌سنجی پیام آسیب دیده‌است اگر بتوانیم یک پیام متفاوت (یک دنباله از زوج متن‌های ) که همان برچسب پیام قبلی، ، را تولید می‌کند بیابیم به طوری که باشد. بدین ترتیب پروتکل اصالت‌سنجی پیام آسیب دیده‌است و Bob فریب داده شده و باور می‌کند که Alice پیامی برای او فرستاده است در حالی که Alice پیام را تولید نکرده‌است.
اگر در عوض از کلیدهای متفاوت و برای مراحل رمزنگاری و اصالت‌سنجی استفاده کنیم، این حمله خنثی می‌شود. از رمزگشایی بلوک‌های رمز شده تغییر یافته رشته متن به دست می‌آید. به هر حال، به علت استفاده MAC از یک کلید متفاوت ، نمی‌توانیم فرایند رمزگشایی را در مرحله بعدی محاسبه کد اصالت‌سنجی پیام خنثی کنیم و همان برچسب را تولید کنیم؛ اکنون هر تغییر یافته به وسیله در فرایند CBC-MAC به رمز می‌شود.
این مثال هم‌چنین نشان می‌دهد که یک CBC-MAC نمی‌تواند به عنوان یک تابع یک طرفه مقاوم در برابر برخورد مورد استفاده قرار گیرد: در صورتی که کلید داده شده باشد به سادگی می‌توان پیام متفاوتی تولید کرد که به همان برچسب فشرده شود.
بردار اولیه با مقادیر متغیر
منگام رمزنگاری داده با استفاده از یک رمز قالبی در مد زنجیره رمز-قطعه (یا مد دیگر)، به طور معمول یک بردار اولیه برای اولین مرحله فرایند رمزنگاری معرفی می‌شود. به طور معمول لازم است که این بردار به طور تصادفی انتخاب شود () و برای هیچ کلید مخفی داده شده که رمز قالبی تحت آن عمل می‌کند تکرار نشود. این شرایط با تضمین این‌که متن‌های یکسان به متن‌های رمزشده یکسان رمز نمی‌شوند امنیت معنایی را برقرار می‌سازد و به مهاجم اجازه می‌دهد استنباط کند که رابطه‌ای وجود دارد.
هنگام محاسبه کد اصالت‌سنجی پیام، مثلا به وسیله CBC-MAC، استفاده از یک بردار اولیه یک بردار حمله ممکن است.
در عملیات زنجیره رمز-قطعه، اولین قالب متن با بردار اولیه XOR می‌شود ( ). حاصل این عملیات ورودی رمز قالبی برای رمزنگاری است.
به هر حال، هنگام اجرای رمزنگاری و رمزگشایی، مستلزمیم بردار اولیه را در متن بفرستیم - معمولا به عنوان قالبی که بلافاصله قبل از اولین قالب رمزشده می‌آید - به طوری که اولین قالب متن با موفقیت رمزگشایی و بازیابی می‌شود.
هنگام محاسبه MAC، مستلزمیم بردار اولیه اولیه را در متن به طرف مقابل بفرستیم که آن‌ها بتوانند تحقیق کنند که برچسب پیام با مقداری که محاسبه کرده‌اند مطابقت می‌کند.
اگر اجازه بدهیم بردار اولیه به طور دلخواه انتخاب شود، اولین قالب متن می‌تواند تغییر کند (و پیام متفاوتی قرستاده شود) ولی همان برچسب را تولید کند.
پیام را در نظر بگیرید. هنگام محاسبه برچسب پیام برای CBC-MAC، فرض کنید بردار اولیه را به گونه‌ای انتخاب می‌کنیم که محاسبه MAC با شروع شود. در نتیجه زوج (پیام، برچسب) تولید می‌شود.
اکنون پیام را تولید می‌کنیم. برای هر بیت تغییر یافته در ، بیت متناظر با آن در بردار اولیه را تغییر می‌دهیم تا بردار اولیه تولید شود. برای محاسبه‌ی MAC این پیام، محاسبات را با آغاز می‌کنیم. از آن‌جا که بیت‌های متن اصلی و بردار اولیه در مکان‌های یکسان تغییر کرده‌اند، تغییر در مرحله اول خنثی می‌شود، با این معنا که ورودی رمز قالبی همان خواهد بود. اگر تعییر دیگری در متن اصلی ایجاد نشود، همان برچسب از پیام دیگری مشتق می‌شود.
اکر آزادی انتخاب بردار اولیه حذف شود و همه اجراهای CBC-MAC روی یک بردار اولیه خاص ثابت شوند (معمولا یک بردار تمام صفر، اما در تئوری، هر چیزی می‌تواند باشد مشروط بر این‌که با همه پیاده‌سازی‌ها سازگار باشد)، این حمله نمی‌تواند پیشروی کند.
استانداردهایی که الگوریتم را تعریف می‌کنند
اصالت‌سنجی داده‌های کامپیوتری یک (هم‌اکنون منسوخ) یک استاندارد دولت آمریکاست که الگوریتم CBC-MAC را با استفاده از DES به‌عنوان رمزقالبی تعیین می‌کند.
الگوریتم CBC-MAC هم‌ارز الگوریتم مک ۱ ISO/IEC 9797-1 است.