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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

در رمزنگاری، یک کد اصالت‌سنجی زنجیره رمز-قطعه (CBC-MAC) یک روش ساخت کد اصالت‌سنجی پیام از یک رمز قالبی است. در این روش پیام با استفاده از یک الگوریتم رمز قالبی در مد CBC رمز می‌شود و زنجیره‌ای از قالب‌ها به وجود می‌آورد به طوری که هر قالب به رمزنگاری صحیح قالب قبلی وابسته است. این وابستگی داخلی تضمین می‌کند که تغییر هر یک از بیت‌های متن اصلی باعث ایجاد تغییری در آخرین قالب رمز شده می‌شود که نمی‌توان بدون اطلاع از کلید رمز قالبی آن را پیش‌بینی یا خنثی کرد.

برای محاسبه‌ی CBC-MAC پیام m آن را در مد CBC با بردار اولیه صفر رمز می‌کنیم. شکل زیر محاسبه‌ی CBC-MAC یک پیام شامل قالب‌های m_1\|m_2\|\cdots\|m_x را با استفاده از کلید مخفی k و رمز قالبی E نشان می‌دهد.

CBC-MAC structure (en).svg

امنیت پیام‌های با طول ثابت و متغیّر[ویرایش]

در صورتی که رمز قالبی مورد استفاده امن باشد (به عبارت دیگر یک جایگشت شبه‌تصادفی باشد)، CBC-MAC برای پیام‌های با طول ثابت امن خواهد بود. اما در حالت کلی، برای پیام‌های با طول متغیر امن نیست. به همین دلیل، هر کلید باید تنها برای پیام‌های با طول ثابت و مشخّص مورد استفاده قرار گیرد. دلیل این امر این است که مهاجمی که زوج‌های صحیح پیام-برچسب (همان CBC-MAC) دو پیام (m, t) و (m', t') را می‌داند می‌تواند پیام سوم m'' را به گونه‌ای تولید کند که MAC آن نیز t' باشد. این کار به سادگی با XOR کردن اولین قالب m' با t و سپس الحاق m و m' تغییر یافته و تولید m'' = m \| [(m_1' \oplus t) \| m_2' \| \dots \| m_x'] انجام می‌شود. هنگام محاسبه‌ی MAC پیام m''، MAC پیام m را به روش عادی برابر t محاسبه می‌کنیم و در مرحله‌ی محاسبه‌ی E_{K_{MAC}}(m_1' \oplus t) آن را با مقدار MAC اولین پیام XOR می‌کنیم. حضور این برچسب در پیام جدید باعث از بین رفتن کامل اثر MAC قالب‌های پیام m می‌شود: E_{K_{MAC}}(m_1' \oplus t \oplus t) = E_{K_{MAC}}(m_1') و در نتیجه برچسب پیام m'' برابر t' است.

این مشکل را نمی‌توان با اضافه کردن قالب طول پیام به انتهای قالب‌ها حل کرد. سه راه‌حل اصلی اصلاح CBC-MAC و امن ساختن آن برای پیام‌های با طول متغیّر عبارتند از: ۱)جداسازی کلید ورودی-طول ۲)الحاق طول به ابتدای قالب‌ها ۳)رمز کردن آخرین قالب. در این حالت، هم‌چنین توصیه می‌شود که از مد عملیات متفاوتی، برای مثال، CMAC یا HMAC برای حفظ صحت و جامعیّت پیام‌های با طول متغیّر استفاده شود.

الحاق طول به ابتدای قالب‌ها[ویرایش]

یک راه قرار دادن طول پیام در اولین قالب است؛ ثابت شده‌است که CBC-MAC تا وقتی که دو پیامی که پیشوند یکدیگر هستند استفاده نشوند امن است و الحاق طول به ابتدای قالب‌ها حات خاص آن است. این مسئله در حالتی که طول پیام در آغاز محاسبات نامعلوم است می‌تواند گیج‌کننده باشد.

رمز کردن آخرین قالب[ویرایش]

رمز کردن آخرین قالب به صورت \text{CBC-MAC-ELB}(m, (k_1, k_2)) = E(k_2, \text{CBC-MAC}(k_1, m)) تعریف می‌شود. در مقایسه با بقیه‌ی روش‌های توسعه‌ی CBC-MAC به پیام‌های با طول متغیر که بیان شد، رمز کردن آخرین قالب دارای این مزیت است که نیازی به دانستن طول پیام تا پایان محاسبات نیست.

روش‌های حمله[ویرایش]

هم‌چون بسیاری از طرح‌های رمزنگاری، استفاده خام از رمزها و دیگر پروتکل‌ها حملات را ممکن می‌سازد، که باعث کاهش کارایی حفاظت رمزنگاری (یا حتی بلااستفاده ساختن آن) می‌شود. ما در این‌جا حملاتی که به علّت استفاده‌ی نادرست از CBC-MAC ممکن می‌شوند را بیان می‌کنیم.

استفاده از کلید یکسان برای رمزنگاری و اصالت‌سنجی[ویرایش]

یک اشتباه متداول استفاده‌ی مجدد از کلید k برای رمزنگاری CBC و CBC-MAC است. گرچه در حالت کلّی استفاده‌ی مجدد از یک کلید برای اهداف متفاوت تکنیک نامناسبی است، در این حالت خاص این اشتباه به حمله‌ی اعجاب‌انگیزی می‌انجامد:

فرض کنید Alice می‌خواهد قالب‌های رمزشده‌ی C = C_1\ ||\ C_2\ ||\ \dots\ ||\ C_n را به Bob بفرستد. در حین فرآیند انتقال، Eve می‌تواند در هر یک از قالب‌های رمزشده‌ی C_1 , \dots , C_{n-1} تغییر ایجاد کند و هر یک از بیت‌های آن را به انتخاب خود تغییر دهد، به طوری که آخرین قالب، C_n، دست‌نخورده باقی بماند. بدون لطمه‌خوردن به کلیّت مسئله و برای تأمین اهداف این مثال فرض می‌کنیم بردار اولیه که در فرآیند رمزنگاری مورد استفاده قرار گرفته یک بردار تمام صفر است.

Bob پیام را دریافت می‌کند و ابتدا آن را با معکوس کردن فرآیند رمزنگاری که Alice اعمال کرده روی قالب‌های رمزشده‌ی C=C_1\ ||\ C_2\ ||\ \cdots\ ||\ C_n رمزگشایی می‌کند. در حین فرآیند انتقال، Eve می‌تواند در هر یک از قالب‌های رمزشده‌ی C_1 , \dots , C_{n-1} تغییر ایجاد کند و هر یک از بیت‌های آن را به انتخاب خود تغییر دهد، به طوری که آخرین قالب، ٰC_n، دست‌نخورده باقی بماند. سپس نسخه‌ی تغییر یافته‌ی او، به‌جای نسخه‌ی اصلی Alice به Bob تحویل داده می‌شود.

Bob ابتدا پیامی که دریافت کرده را با استفاده از کلید مخفی به اشتراک گذاشته شده‌ی K رمزگشایی می‌کند و متن متناظر با آن را به دست می‌آورد. توجه کنید که همه‌ی متن به دست آمده با نسخه‌ی اصلی که Alice فرستاده متفاوت خواهد بود، زیرا Eve همه‌ی متن رمز شده به جز آخرین قالب آن را تغییر داده است. به بیان دقیق‌تر، متن نهایی، P_n'، با متن اصلی که Alice فرستاده، P_n، متفاوت است؛ با وجود یکسان‌بودن C_n، C_{n-1}' \not = C_{n-1} است و در نتیجه با XOR کردن قالب رمز شده‌ی قبلی با رمز گشایی شده‌ی C_n متن متفاوت به P_n' دست می‌آید: P_n' = C_{n-1}' \oplus E_K^{-1}(C_n).

سپس Bob برچسب اصالت‌سنجی همه‌ی متن‌هایی که رمزگشایی کرده‌است را با استفاده از CBC-MAC محاسبه می‌کند. برچسب پیام جدید، t'، برابر است با:

t' = E_K(P_n' \oplus E_K(P_{n-1}' \oplus E_K( \dots \oplus E_K(P_1'))))

توجه کنید که این عبارت معادل است با:

t' = E_K(P_n' \oplus C_{n-1}')

که همان C_n است:

t' = E_K(C_{n-1}' \oplus E_K^{-1}(C_n) \oplus C_{n-1}') = E_K(E_K^{-1}(C_n)) = C_n

در نتیجه داریم: t' = C_n = t.

دیدیم که Eve توانست متن رمزشده را در حین انتقال تغییر دهد (بدون اینکه لزومأ اطّلاعی از متن اصلی متناظر با آن داشته باشد) به طوری که یک پیام کاملأ متفاوت، P'، تولید شود که برچسب این پیام با برچسب پیام اصلی مطابقت می‌کرد و Bob از این که محتویات پیام در فرایند انتقال تغییر کرده اطلاعی نداشت. طبق تعریف، یک کد اصالت‌سنجی پیام آسیب دیده‌است اگر بتوانیم یک پیام متفاوت (یک دنباله از زوج متن‌های P') که همان برچسب پیام قبلی، P، را تولید می‌کند بیابیم به طوری که P \not = P' باشد. بدین ترتیب پروتکل اصالت‌سنجی پیام آسیب دیده‌است و Bob فریب داده شده و باور می‌کند که Alice پیامی برای او فرستاده است در حالی که Alice پیام را تولید نکرده‌است.

اگر در عوض از کلیدهای متفاوت K_1 و K_2 برای مراحل رمزنگاری و اصالت‌سنجی استفاده کنیم، این حمله خنثی می‌شود. از رمزگشایی بلوک‌های رمز شده‌ی تغییر یافته‌ی C_i' رشته‌ی متن P_i' به دست می‌آید. به هر حال، به علت استفاده‌ی MAC از یک کلید متفاوت K_2، نمی‌توانیم فرایند رمزگشایی را در مرحله‌ی بعدی محاسبه‌ی کد اصالت‌سنجی پیام خنثی کنیم و همان برچسب را تولید کنیم؛ اکنون هر P_i' تغییر یافته به وسیله‌ی K_2 در فرایند CBC-MAC به MAC_i \not = C_i' رمز می‌شود.

این مثال هم‌چنین نشان می‌دهد که یک CBC-MAC نمی‌تواند به عنوان یک تابع یک طرفه‌ی مقاوم در برابر برخورد مورد استفاده قرار گیرد: در صورتی که کلید داده شده باشد به سادگی می‌توان پیام متفاوتی تولید کرد که به همان برچسب فشرده شود.

بردار اوّلیه با مقادیر متغیّر[ویرایش]

منگام رمزنگاری داده با استفاده از یک رمز قالبی در مد زنجیره رمز-قطعه (یا مد دیگر)، به طور معمول یک بردار اولیه برای اولین مرحله‌ی فرایند رمزنگاری معرفی می شود. به طور معمول لازم است که این بردار به طور تصادفی انتخاب شود () و برای هیچ کلید مخفی داده شده که رمز قالبی تحت آن عمل می‌کند تکرار نشود. این شرایط با تضمین این‌که متن‌های یکسان به متن‌های رمزشده‌ی یکسان رمز نمی‌شوند امنیت معنایی را برقرار می‌سازد و به مهاجم اجازه می‌دهد استنباط کند که رابطه‌ای وجود دارد.

هنگام محاسبه‌ی کد اصالت‌سنجی پیام، مثلأ به وسیله‌ی CBC-MAC، استفاده از یک بردار اولیه یک بردار حمله‌ی ممکن است.

در عملیات زنجیره رمز-قطعه، اوّلین قالب متن با بردار اولیه XOR می‌شود (P_1 \oplus IV). حاصل این عملیات ورودی رمز قالبی برای رمزنگاری است.

به هر حال، هنگام اجرای رمزنگاری و رمزگشایی، مستلزمیم بردار اولیه را در متن بفرستیم - معمولاً به عنوان قالبی که بلافاصله قبل از اولین قالب رمزشده می‌آید - به طوری که اولین قالب متن با موفقیت رمزگشایی و بازیابی می شود.

هنگام محاسبه‌ی MAC، مستلزمیم بردار اولیه اولیه را در متن به طرف مقابل بفرستیم که آن‌ها بتوانند تحقیق کنند که برچسب پیام با مقداری که محاسبه کرده‌اند مطابقت می‌کند.

اگر اجازه بدهیم بردار اولیه به طور دلخواه انتخاب شود، اولین قالب متن می‌تواند تغییر کند (و پیام متفاوتی قرستاده شود) ولی همان برچسب را تولید کند.

پیام M_1 = P_1 | P_2 | \dots را در نظر بگیرید. هنگام محاسبه‌ی برچسب پیام برای CBC-MAC، فرض کنید بردار اولیه‌ی IV_1 را به گونه‌ای انتخاب می‌کنیم که محاسبه‌ی MAC با E_K(IV_1 \oplus P_1) شروع شود. در نتیجه زوج (پیام، برچسب) (M_1, T_1) تولید می شود.

اکنون پیام M_2 = P_1' | P_2 | \dots را تولید می‌کنیم. برای هر بیت تغییر یافته در P_1'، بیت متناظر با آن در بردار اولیه را تغییر می‌دهیم تا بردار اولیه‌ی IV_1' تولید شود. برای محاسبه ی MAC این پیام، محاسبات را با E_K(P_1' \oplus IV_1') آغاز می‌کنیم. از آن‌جا که بیت‌های متن اصلی و بردار اولیه در مکان‌های یکسان تغییر کرده‌اند، تغییر در مرحله‌ی اول خنثی می شود، با این معنا که ورودی رمز قالبی همان M_1 خواهد بود. اگر تعییر دیگری در متن اصلی ایجاد نشود، همان برچسب از پیام دیگری مشتق می‌شود.

اکر آزادی انتخاب بردار اولیه حذف شود و همه‌ی اجراهای CBC-MAC روی یک بردار اولیه‌ی خاص ثابت شوند (معمولاً یک بردار تمام صفر، اما در تئوری، هر چیزی می‌تواند باشد مشروط بر این‌که با همه‌ی پیاده‌سازی‌ها سازگار باشد)، این حمله نمی‌تواند پیشروی کند.

استاندارد‌هایی که الگوریتم را تعریف می‌کنند[ویرایش]

اصالت‌سنجی داده‌های کامپیوتری یک (هم‌اکنون منسوخ) یک استاندارد دولت آمریکاست که الگوریتم CBC-MAC را با استفاده از DES به‌عنوان رمز‌قالبی تعیین می‌کند.

الگوریتم CBC-MAC هم‌ارز الگوریتم مک ۱ ISO/IEC 9797-1 است.

منابع[ویرایش]

http://en.wikipedia.org/wiki/CBC-MAC