کد اصالت‌سنجی پیام سی‌بی‌سی
در رمزنگاری، یک کد اصالت‌سنجی زنجیره رمز-قطعه (CBC-MAC) یک روش ساخت کد اصالت‌سنجی پیام از یک رمز قالبی است. در این روش پیام با استفاده از یک الگوریتم رمز قالبی در مد CBC رمز می‌شود و زنجیره‌ای از قالب‌ها به وجود می‌آورد به طوری که هر قالب به رمزنگاری صحیح قالب قبلی وابسته است. این وابستگی داخلی تضمین می‌کند که تغییر هر یک از بیت‌های متن اصلی باعث ایجاد تغییری در آخرین قالب رمز شده می‌شود که نمی‌توان بدون اطلاع از کلید رمز قالبی آن را پیش‌بینی یا خنثی کرد.
برای محاسبۀ CBC-MAC پیام formula_1 آن را در مد CBC با بردار اولیه صفر رمز می‌کنیم. شکل زیر محاسبۀ CBC-MAC یک پیام شامل قالب‌های formula_2 را با استفاده از کلید مخفی formula_3 و رمز قالبی formula_4 نشان می‌دهد.
در صورتی که رمز قالبی مورد استفاده امن باشد (به عبارت دیگر یک جایگشت شبه‌تصادفی باشد)، CBC-MAC برای پیام‌های با طول ثابت امن خواهد بود. اما در حالت کلی، برای پیام‌های با طول متغیر امن نیست. به همین دلیل، هر کلید باید تنها برای پیام‌های با طول ثابت و مشخّص مورد استفاده قرار گیرد. دلیل این امر این است که مهاجمی که زوج‌های صحیح پیام-برچسب (همان CBC-MAC) دو پیام formula_5 formula_6 و formula_7 formula_8 را می‌داند می‌تواند پیام سوم formula_9 را به گونه‌ای تولید کند که MAC آن نیز formula_10 باشد. این کار به سادگی با XOR کردن اولین قالب formula_11 با formula_12 و سپس الحاق formula_1 و formula_11 تغییر یافته و تولید formula_15 انجام می‌شود. هنگام محاسبۀ MAC پیام formula_9، MAC پیام formula_1 را به روش عادی برابر formula_12 محاسبه می‌کنیم و در مرحلۀ محاسبۀ formula_19 آن را با مقدار MAC اولین پیام XOR می‌کنیم. حضور این برچسب در پیام جدید باعث از بین رفتن کامل اثر MAC قالب‌های پیام formula_1 می‌شود: formula_21 و در نتیجه برچسب پیام formula_9 برابر formula_10 است.
این مشکل را نمی‌توان با اضافه کردن قالب طول پیام به انتهای قالب‌ها حل کرد. سه راه‌حل اصلی اصلاح CBC-MAC و امن ساختن آن برای پیام‌های با طول متغیّر عبارتند از: ۱)جداسازی کلید ورودی-طول ۲)الحاق طول به ابتدای قالب‌ها ۳)رمز کردن آخرین قالب. در این حالت، هم‌چنین توصیه می‌شود که از مد عملیات متفاوتی، برای مثال، CMAC یا HMAC برای حفظ صحت و جامعیّت پیام‌های با طول متغیّر استفاده شود.
یک راه قرار دادن طول پیام در اولین قالب است؛ ثابت شده‌است که CBC-MAC تا وقتی که دو پیامی که پیشوند یکدیگر هستند استفاده نشوند امن است و الحاق طول به ابتدای قالب‌ها حات خاص آن است. این مسئله در حالتی که طول پیام در آغاز محاسبات نامعلوم است می‌تواند گیج‌کننده باشد.
رمز کردن آخرین قالب به صورت formula_24 تعریف می‌شود. در مقایسه با بقیۀ روش‌های توسعۀ CBC-MAC به پیام‌های با طول متغیر که بیان شد، رمز کردن آخرین قالب دارای این مزیت است که نیازی به دانستن طول پیام تا پایان محاسبات نیست.
هم‌چون بسیاری از طرح‌های رمزنگاری، استفاده خام از رمزها و دیگر پروتکل‌ها حملات را ممکن می‌سازد، که باعث کاهش کارایی حفاظت رمزنگاری (یا حتی بلااستفاده ساختن آن) می‌شود. ما در این‌جا حملاتی که به علّت استفادۀ نادرست از CBC-MAC ممکن می‌شوند را بیان می‌کنیم.
یک اشتباه متداول استفادۀ مجدد از کلید formula_3 برای رمزنگاری CBC و CBC-MAC است. گرچه در حالت کلّی استفادۀ مجدد از یک کلید برای اهداف متفاوت تکنیک نامناسبی است، در این حالت خاص این اشتباه به حملۀ اعجاب‌انگیزی می‌انجامد:
فرض کنید Alice می‌خواهد قالب‌های رمزشدۀ formula_26 را به Bob بفرستد. در حین فرآیند انتقال، Eve می‌تواند در هر یک از قالب‌های رمزشدۀ formula_27 تغییر ایجاد کند و هر یک از بیت‌های آن را به انتخاب خود تغییر دهد، به طوری که آخرین قالب، formula_28، دست‌نخورده باقی بماند. بدون لطمه‌خوردن به کلیّت مسئله و برای تأمین اهداف این مثال فرض می‌کنیم بردار اولیه که در فرآیند رمزنگاری مورد استفاده قرار گرفته یک بردار تمام صفر است.
Bob پیام را دریافت می‌کند و ابتدا آن را با معکوس کردن فرآیند رمزنگاری که Alice اعمال کرده روی قالب‌های رمزشدۀ formula_29 رمزگشایی می‌کند. در حین فرآیند انتقال، Eve می‌تواند در هر یک از قالب‌های رمزشدۀ formula_27 تغییر ایجاد کند و هر یک از بیت‌های آن را به انتخاب خود تغییر دهد، به طوری که آخرین قالب، ٰformula_28، دست‌نخورده باقی بماند. سپس نسخۀ تغییر یافتۀ او، به‌جای نسخۀ اصلی Alice به Bob تحویل داده می‌شود.
Bob ابتدا پیامی که دریافت کرده را با استفاده از کلید مخفی به اشتراک گذاشته شدۀ formula_32 رمزگشایی می‌کند و متن متناظر با آن را به دست می‌آورد. توجه کنید که همۀ متن به دست آمده با نسخۀ اصلی که Alice فرستاده متفاوت خواهد بود، زیرا Eve همۀ متن رمز شده به جز آخرین قالب آن را تغییر داده است. به بیان دقیق‌تر، متن نهایی، formula_33، با متن اصلی که Alice فرستاده، formula_34، متفاوت است؛ با وجود یکسان‌بودن formula_28، formula_36 است و در نتیجه با XOR کردن قالب رمز شدۀ قبلی با رمز گشایی شدۀ formula_28 متن متفاوت به formula_33 دست می‌آید: formula_39.
سپس Bob برچسب اصالت‌سنجی همۀ متن‌هایی که رمزگشایی کرده‌است را با استفاده از CBC-MAC محاسبه می‌کند. برچسب پیام جدید، formula_10، برابر است با:
formula_41
توجه کنید که این عبارت معادل است با:
formula_42
که همان formula_28 است:
formula_44
در نتیجه داریم: formula_45.
دیدیم که Eve توانست متن رمزشده را در حین انتقال تغییر دهد (بدون اینکه لزومأ اطّلاعی از متن اصلی متناظر با آن داشته باشد) به طوری که یک پیام کاملأ متفاوت، formula_46، تولید شود که برچسب این پیام با برچسب پیام اصلی مطابقت می‌کرد و Bob از این که محتویات پیام در فرایند انتقال تغییر کرده اطلاعی نداشت. طبق تعریف، یک کد اصالت‌سنجی پیام آسیب دیده‌است اگر بتوانیم یک پیام متفاوت (یک دنباله از زوج متن‌های formula_46) که همان برچسب پیام قبلی، formula_48، را تولید می‌کند بیابیم به طوری که formula_49 باشد. بدین ترتیب پروتکل اصالت‌سنجی پیام آسیب دیده‌است و Bob فریب داده شده و باور می‌کند که Alice پیامی برای او فرستاده است در حالی که Alice پیام را تولید نکرده‌است.
اگر در عوض از کلیدهای متفاوت formula_50 و formula_51 برای مراحل رمزنگاری و اصالت‌سنجی استفاده کنیم، این حمله خنثی می‌شود. از رمزگشایی بلوک‌های رمز شدۀ تغییر یافتۀ formula_52 رشتۀ متن formula_53 به دست می‌آید. به هر حال، به علت استفادۀ MAC از یک کلید متفاوت formula_51، نمی‌توانیم فرایند رمزگشایی را در مرحلۀ بعدی محاسبۀ کد اصالت‌سنجی پیام خنثی کنیم و همان برچسب را تولید کنیم؛ اکنون هر formula_53 تغییر یافته به وسیلۀ formula_51 در فرایند CBC-MAC به formula_57 رمز می‌شود.
این مثال هم‌چنین نشان می‌دهد که یک CBC-MAC نمی‌تواند به عنوان یک تابع یک طرفۀ مقاوم در برابر برخورد مورد استفاده قرار گیرد: در صورتی که کلید داده شده باشد به سادگی می‌توان پیام متفاوتی تولید کرد که به همان برچسب فشرده شود.
منگام رمزنگاری داده با استفاده از یک رمز قالبی در مد زنجیره رمز-قطعه (یا مد دیگر)، به طور معمول یک بردار اولیه برای اولین مرحلۀ فرایند رمزنگاری معرفی می شود. به طور معمول لازم است که این بردار به طور تصادفی انتخاب شود () و برای هیچ کلید مخفی داده شده که رمز قالبی تحت آن عمل می‌کند تکرار نشود. این شرایط با تضمین این‌که متن‌های یکسان به متن‌های رمزشدۀ یکسان رمز نمی‌شوند امنیت معنایی را برقرار می‌سازد و به مهاجم اجازه می‌دهد استنباط کند که رابطه‌ای وجود دارد.
هنگام محاسبۀ کد اصالت‌سنجی پیام، مثلأ به وسیلۀ CBC-MAC، استفاده از یک بردار اولیه یک بردار حملۀ ممکن است.
در عملیات زنجیره رمز-قطعه، اوّلین قالب متن با بردار اولیه XOR می‌شود (formula_58). حاصل این عملیات ورودی رمز قالبی برای رمزنگاری است.
به هر حال، هنگام اجرای رمزنگاری و رمزگشایی، مستلزمیم بردار اولیه را در متن بفرستیم - معمولاً به عنوان قالبی که بلافاصله قبل از اولین قالب رمزشده می‌آید - به طوری که اولین قالب متن با موفقیت رمزگشایی و بازیابی می شود.
هنگام محاسبۀ MAC، مستلزمیم بردار اولیه اولیه را در متن به طرف مقابل بفرستیم که آن‌ها بتوانند تحقیق کنند که برچسب پیام با مقداری که محاسبه کرده‌اند مطابقت می‌کند.
اگر اجازه بدهیم بردار اولیه به طور دلخواه انتخاب شود، اولین قالب متن می‌تواند تغییر کند (و پیام متفاوتی قرستاده شود) ولی همان برچسب را تولید کند.
پیام formula_59 را در نظر بگیرید. هنگام محاسبۀ برچسب پیام برای CBC-MAC، فرض کنید بردار اولیۀ formula_60 را به گونه‌ای انتخاب می‌کنیم که محاسبۀ MAC با formula_61 شروع شود. در نتیجه زوج (پیام، برچسب) formula_62 تولید می شود.
اکنون پیام formula_63 را تولید می‌کنیم. برای هر بیت تغییر یافته در formula_64، بیت متناظر با آن در بردار اولیه را تغییر می‌دهیم تا بردار اولیۀ formula_65 تولید شود. برای محاسبه ی MAC این پیام، محاسبات را با formula_66 آغاز می‌کنیم. از آن‌جا که بیت‌های متن اصلی و بردار اولیه در مکان‌های یکسان تغییر کرده‌اند، تغییر در مرحلۀ اول خنثی می شود، با این معنا که ورودی رمز قالبی همان formula_67 خواهد بود. اگر تعییر دیگری در متن اصلی ایجاد نشود، همان برچسب از پیام دیگری مشتق می‌شود.
اکر آزادی انتخاب بردار اولیه حذف شود و همۀ اجراهای CBC-MAC روی یک بردار اولیۀ خاص ثابت شوند (معمولاً یک بردار تمام صفر، اما در تئوری، هر چیزی می‌تواند باشد مشروط بر این‌که با همۀ پیاده‌سازی‌ها سازگار باشد)، این حمله نمی‌تواند پیشروی کند.
اصالت‌سنجی داده‌های کامپیوتری یک (هم‌اکنون منسوخ) یک استاندارد دولت آمریکاست که الگوریتم CBC-MAC را با استفاده از DES به‌عنوان رمز‌قالبی تعیین می‌کند.
الگوریتم CBC-MAC هم‌ارز الگوریتم مک ۱ ISO/IEC 9797-1 است.
http://en.wikipedia.org/wiki/CBC-MAC