مدهای کاری رمزهای قطعه‌ای

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

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

## بردار مقداردهی اولیه
یک بردار مقداردهی اولیه قطعه‌ای از بیت‌هاست که در بسیاری از مدها برای تصادفی کردن رمزنگاری استفاده می‌شود که موجب تولید متن‌های رمزشده متمایز، بدون نیاز به فرآیند کند تولید مجدد کلید، می‌شود. حتی اگر همان متن آشکار چندین بار رمز شده باشد. یک بردار مقداردهی اولیه (آی‌وی، IV) نیازمندی‌های امنیتی متفاوتی نسبت به کلید دارد، بنابراین آی‌وی معمولاً نیازی ندارد که مخفی باشد. به هر حال، در بسیاری از موارد، این بسیار اهمیت دارد که یک آی‌وی تحت یک کلید مشابه هرگز مجدداً استفاده نشود. برای CBC و CFB، استفاده کردن مجدد از یک آی‌وی برخی از اطلاعات را در مورد اولین قطعه متن آشکار، و درباره هرگونه پیشوند مشترکی که بین دو پیغام به اشتراک گذاشته می‌شود، نشت می‌دهد. برای OFB و CTR، استفاده مجدد از یک آی‌وی امنیت را به‌طور کامل از بین می‌برد. در مود CBC، هچنین آی‌وی بایستی در زمان رمزگذاری غیرقابل پیش‌بینی باشد؛ به‌طور خاص، عمل (سابقا) رایج استفاده مجدد از آخرین قطعه متن رمزشده پیغام به عنوان آی‌وی برای پیغام جدید ناامن است (به‌طور مثال این متد توسط SSL 2.0 استفاده می‌شد). اگر یک مهاجم پیش از آنکه متن آشکار بعدی را مشخص کند؛ آی‌وی را بداند (یا قطعه قبلی متن رمزشده را)، او می‌تواند حدس خود را درباره متن آشکار برخی از قطعه‌ها که با همان کلید قبلاً رمز شده بودند، امتحان کند (این حمله به نام حمله TLS CBC IV شناخته می‌شود).

به عنوان یک مورد خاص، اگر متن‌های آشکار همیشه به اندازه کافی کوچک باشند که در یک قطعه جا شوند (بدون افزونگی‌گذاری)، آنگاه در برخی از مودها (EBC، CBC، PCBC)، استفاده مجدد از آی‌وی تنها دو متن آشکار یکسان را نشت می‌دهد. این مسئله می‌تواند در مواردی مفید باشد که کسی امید دارد بتواند بدون رمزگشایی یا ذخیره کردن یک درهم ساز به‌طور جداگانه، شباهت را تست کند

## افزونگی‌گذاری
یک رمز قطعه‌ای بر روی واحدهایی با اندازه ثابت (معروف به اندازه قطعه) عمل می‌کنند، اما پیغام‌ها در اندازه‌های متفاوتی از راه می‌رسند. بنابراین برخی از مدها (برای مثال ECB و CBC) نیازمند این هستند که قطعه آخر پیش از رمزگذاری افزونگی گذاری شود. چندین افزونگی‌گذاری نشان دهنده پایان کار است. ساده‌ترین روش این است که بایت‌های تهی را به متن آشکار اضافه کنیم تا زمانی‌که طولش مضربی از اندازه قطعه شود، اما باید دقت شود که طول اصلی متن آشکار می‌تواند به دست آید. مانند این است که، به‌طور مثال، اگر متن آشکاری یک رشته به سبک C باشد، شامل هیچ بایت تهی نباشد مگر در انتهای آن. متد اصلی DES قدری پیچیده تر از این است. این متد یک تک بیت به دنبال تعداد کافی بیت صفر برای پر کردن قطعه اضافه می‌کند؛ اگر پیغام در انتهای قطعه تمام شود، یک قطعه افزونگی‌گذاری کامل اضافه خواهد شد. پیچیده‌ترین‌ها طرح‌های CBC ویژه هستند از جمله سرقت متن رمز شده یا پایان دهی قطعه باقی مانده، که هیچ متن رمزشده اضافی در هزینه برخی از پیچیدگی‌های اضافی ایجاد نمی‌کند. بروس اشنایر و نیلز فرگوسن ۲ امکان را پیشنهاد دادند، هر دو ساده: الحاق یک بایت با ارزش ۱۲۸ (هگزادسیمال ۸۰) به دنبال تعداد کافی بایت‌های صفر که برای پر کردن قطعه آخر مورد نیاز است، یا بسط دادن قطعه آخر با n بایت که ارزش همگی n باشد.

مدهای CFB، OFB و CTR برای کار کردن با پیغام‌هایی که طولشان مضربی از اندازه قطعه نیست، نیازی به تدابیر ویژه‌ای ندارند، زیرا این مدها به وسیله XOR کردن متن آشکار با خروجی قطعه رمز عمل می‌کنند. آخرین قسمت قطعه متن آشکار XOR شده که با اولین چند بایت آخرین قطعه جریان کلید، یک قطعه متن رمزشده نهایی را تولید می‌کند که با آخرین قسمت قطعه متن آشکار هم اندازه است. این خصوصیت رمزگذاری جریانی آن‌ها را برای برنامه‌های کاربردی‌ای که مستلزم برابری اندازه داده متن رمزشده رمزگذاری و داده متن آشکار اصلی هستند، و برنامه‌های کاربردی‌ای که داده را در جایی که اضافه کردن بایت‌های افزونگی ناخوشایند است، به صورت جریانی انتقال می‌دهند، مناسب کرده است.

## رمزنامه الکترونیکی
ساده‌ترین مود رمزنگاری مود رمزنامه الکترونیکی (ای‌سی‌بی، ECB) است. پیغام به قطعه‌ها شکسته می‌شود و هر قطعه به‌طور جداگانه رمزگذاری می‌شود.
|center
|center
نقطه ضعف این متد این است که قطعه‌های یکسان متن آشکار به قطعه‌های رمز شده یکسانی تبدیل می‌شوند؛ بنابراین، الگوی داده‌ای را به خوبی پنهان نمی‌کند. در برخی موارد، محرمانه بودن پیام‌های مهم را فراهم نمی‌کند. از این رو این متد برای استفاده در پروتکل‌های رمزنگاری به هیچ وجه توصیه نمی‌شود.

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

مد ای‌سی‌بی همچنین می‌تواند پروتکل‌هایی بدون حفظ صحت را فراهم کند که بیشتر به حمله تکرار حساس هستند، چرا که هر قطعه دقیقا به طریق یکسانی رمزگشایی می‌شود. به‌طور مثال، بازی ویدئویی آنلاین «دنیای فانتزی ستاره: انفجار آبی» از بلوفیش در مد ای‌سی‌بی استفاده می‌کند. پیش از آنکه کلید جابجا شود سیستم به روش‌های بسیار ساده‌ای شکسته شده بود، متقلبان بسته پیغام رمزشده «غول کشته شد» را، هرکدام به صورت یک قطعه رمزشده بلوفیش، برای به دست آوردن سریع و غیرمشروع امتیاز مرتبا تکرار می‌کردند.

## زنجیره رمز-قطعه
IBM مد عمل زنجیره رمز-قطعه (CBC) را در سال ۱۹۷۶ اختراع کرد. در مد CBC، هر قطعه از متن آشکار را با قطعه رمزشده مقدم که قبلاً رمز شده‌است XOR می‌کند. به این صورت، هر قطعه رمزشده به تمام قطعات متن آشکاری که تا آن نقطه تولید شده‌اند وابسته‌است. برای منحصربفرد کردن هر پیغام، یک بردار اولیه باید در قطعه اول استفاده شود.
|center
|center
اگر قطعه اول اندیس ۱ داشته باشد، فرمول ریاضی رمزگذاری CBC این گونه‌است:
:C_i = E_K(P_i \oplus C_{i-1}), C_0 = IV
در حالی که فرمول ریاضی برای رمزگشایی CBC این گونه‌است:
:P_i = D_K(C_i) \oplus C_{i-1}, C_0 = IV.
CBC متداول‌ترین مد عملی است که استفاده می‌شود. بزرگ‌ترین مشکلاتش این است که رمزگذاری ترتیبی است (به عنوان مثال نمی‌تواند موازی انجام شود)، و این که پیغام باید به مضربی از اندازه قطعه رمزشده افزونگی شود. راهی برای مواجه با مسئله آخری پیش می‌گیرند استفاده از روشی با نام سرقت متن رمزشده شناخته می‌شود. توجه داشته باشید که تغییر تنها یک بیت در متن آشکار یا بردار اولیه بر روی تمام قطعه‌های متن رمزشده بعدی تأثیر می‌گذارد.
رمزگشایی با بردار اولیه نادرست اولین قطعه متن آشکار را خراب می‌کند اما قطعه‌های بعدی متن آشکار صحیح خواهند بود. این به این خاطر است که یک قطعه متن آشکار می‌تواند توسط دو قطعه مجاور متن رمزشده بازیابی شود. در نتیجه، رمزگشایی می‌تواند موازی انجام شود. توجه داشته باشید که تغییر تنها یک بیت از متن رمز شده موجب خراب شدن تمام قطعات مربوط به متن آشکار شود، و بیت مربوط به قطعه بعدی متن آشکار را معکوس می‌کند اما باقی قطعه‌های دست نخورده باقی می‌مانند.

## انتشار زنجیری رمز-قطعه (PCBC)
مد انتشار زنجیره رمز-قطعه یا زنجیره رمز-قطعه متن آشکار طراحی شد تا موجب تغییرات کوچکی در متن رمزشده برای انتشار نامحدود در هنگام رمزگشایی، همچنین در هنگام رمزگذاری شود.
|center
|center
الگوریتم رمزگذاری و رمزگشایی در ادامه آمده‌است:
:C_i = E_K(P_i \oplus P_{i-1} \oplus C_{i-1}), P_0 \oplus C_0 = IV

:P_i = D_K(C_i) \oplus P_{i-1} \oplus C_{i-1}, P_0 \oplus C_0 = IV
مهم‌ترین پروتکل‌هایی که PCBC در آن استفاده می‌شود نسخه ۴ پروتکل Kerberos و پروتکل WASTE است اما در موارد دیگر چندان رایج نیست. در پیغامی که با مد PCBC رمزگذاری شود، اگر دو قطعه متن رمزشده مجاور تغییر کنند، بر روی رمزگشایی سایر قطعه تأثیری نخواهد داشت. به همین دلیل از PCBC در نسخه ۵ پروتکل Kerberos استفاده نشده‌است.

## بازخورد رمز (CFB)
مد بازخورد رمز (CFB) بسیار شبیه CBC است، یک قطعه رمزگذاری را به یک رمزگذاری جریانی خود-همگام‌ساز تبدیل می‌کند. عملگر نیز بسیار شبیه‌است، در واقع رمزگذاری CFB را به عنوان رمزگذاری CBC برعکس می‌شناسد:
:C_i = E_K (C_{i-1}) \oplus P_i

:P_i = E_K (C_{i-1}) \oplus C_i

:C_{0} = \ \mbox{IV}
|center
|center
در بالا ساده‌ترین روش استفاده از CFB توضیح داده شد که مانند دیگر مدهای رمزنگاری مانند CBC شامل خود-همگام‌سازی نیست. اگر کل یک قطعه از متن رمزشده گم شود هم CBC و هم CFB می‌توانند همگام شوند، اما اگر تنها یک بایت یا بیت گم شود دائما رمزگشایی را دور می‌اندازد! برای اینکه  با گم شدن تنها یک بایت یا بیت قادر به همگام‌سازی باشد، یک تک بایت یا بیت باید در یک زمان رمزگذاری شوند. CFB هنگامی می‌تواند به این شکل استفاده شود که با یک ثبات چرخشی به عنوان ورودی برای قطعه رمز ترکیب شود.

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

* http://cacr.uwaterloo.ca/hac/ 
* http://csrc.nist.gov/groups/ST/toolkit/BCM/index.html
* https://web.archive.org/web/20090604131329/http://www.itl.nist.gov/fipspubs/fip81.htm
* http://www.openssl.org/~bodo/tls-cbc.txt
* http://www.quadibloc.com/crypto/co040601.htm
* http://csrc.nist.gov/groups/ST/toolkit/BCM/modes_development.html

رده:مدهای کاری رمزهای قطعه‌ای
رده:الگوریتم‌های رمزنگاری