ساختار رمزهای دنباله ای و الگوریتم RC4
در این بخش مقاله مروری بر ساختار رمزهای دنباله ای و الگوریتم RC4 را آماده کردیم که بر اساس کتاب اصول امنیت شبکه های کامپیوتری نوشته استالینگز می باشد. در ادامه با ما همراه باشید تا یک بررسی در رابطه با به متداول ترین رمز دنباله ای متقارن یعنی رمز RC4 داشته باشیم.
رمز دنباله ای
یک رمز قالبی در هر زمان یک بلوک از عناصر ورودی را پردازش نموده و یک بلوک خروجی برای آن بلوک ورودی تولید می کند. یک رمز دنباله ای، عناصر ورودی را بطور پیوسته پردازش کرده و همینطور که جلو می رود عنصر به عنصر متن رمز شده را تولید می کند. اگر چه رمزهای قالبی بسیار متداول تر هستند، ولی در برخی کاربردها یک رمز دنباله ای گزینه ای مناسب تر است. مثال هائی از این کاربردها را در بخش های بعدی معرفی خواهیم کرد. در این بخش به متداول ترین رمز دنباله ای متقارن یعنی رمز RC4 نگاهی می اندازیم. ابتدا مروری بر ساختار رمزهای دنباله ای داشته و سپس الگوریتم RC4 را بررسی خواهیم کرد.
شکل 2: یک دور عملیاتی AES
ساختار رمزهای دنباله ای
یک رمز دنباله ای معمولا متن ساده را بصورت بایت به بایت رمزنگاری می نماید. البته می توان رمزهای دنباله ای دیگری خلق کرد که داده ها را بصورت بیت به بیت و یا در واحدهای بزرگ تر از بایت در هر زمان رمزنگاری نماید. شکل 5 نمایش دهنده ساختار یک رمز دنباله ای است که در این ساختار یک کلید، ورودی یک تولید کننده شبه تصادفی بیتها بوده که یک دنباله ۸ بیتی که ظاهرا تصادفی به نظر می رسد را تولید می کند. خروجی تولید کننده شبه تصادفی، که یک دنباله کلید (keystream)، نامیده می شود با دنباله متن ساده ورودی بصورت یک بایت در هر زمان و بصورت عمل XOR روی بیت ها ترکیب می شود. برای مثال اگر بایت تولید شده توسط مولد 01101100 و بایت متن ساده 11001100 باشد، آنگاه بایت متن رمز شده حاصل چنین است:
عکس 3: رمزگذاری
رمزگشائی نياز به استفاده از همان رديف شبه تصادفی را دارد.
شکل 4: رمزگشائی
ملاحظات مهم زیر توسط [KUMA97] در طراحی يک رمز دنباله ای را ذكر شده است:
- دنباله رمز بایستی دارای دوره تناوب بزرگی باشد، یک تولید کننده اعداد شبه تصادفی از تابعی استفاده می کند که یک دنباله یقینی از بیت ها را تولید کرده که نهایتا بعد از مدتی تکرار می شوند. هر چقدر دوره تناوب این تکرار طویل تر باشد، عمل شکستن رمز سخت تر خواهد بود.
- دنباله کلید بایستی با تقریب بسیار خوب، خواص یک دنباله عدد تصادفی واقعی را داشته باشد. به عنوان مثال تقریبا بایستی تعداد 1 ها و 0 ها در این دنباله برابر باشند. اگر دنباله کلید بصورت یک ردیف از بایت ها مورد استفاده قرار گیرد، آنگاه تمام 256 حالت ممکن بایستی تقریبا بصورت مساوی مورد استفاده قرار گیرند. هر چقدر دنباله کلید تصادفی تر بنظر آید، متن رمز شده تصادفی تر بوده و شکستن رمز سخت تر خواهد بود.
شکل 5: دياگرام رمز دنباله ای
- با توجه به شکل 5 که در بالا آمده است، می توان دریافت که خروجی یک مولد اعداد شبه تصادفی به اندازه کلید ورودی وابسته است. برای جلوگیری از حملات همه جانبه، کلید بایستی به اندازه کافی بزرگ باشد. همان ملاحظاتی که در مورد رمزهای قالبی وجود داشت در اینجا نیز صادق اند. بنابراین با تکنولوژی کنونی، کلیدی با طول حداقل 128 بیت مناسب بنظر می رسد.
با یک مولد اعداد شبه تصادفی با طرح مناسب، یک رمز دنباله ای می تواند به همان اندازه یک رمز قالبی، با همان طول کلید، امن باشد. مزیت اصلی یک رمز دنباله ای این است که رمزهای دنباله ای تقریبا همیشه سریع تر بوده و نسبت به رمزهای قالبی از حجم برنامه کمتری استفاده می کنند. رمز RC4 که در این بخش تشریح شده است تنها می تواند با چند خط برنامه کامپیوتری پیاده سازی شود. شکل 7 که از اطلاعات [RESC01] اقتباس شده است، زمان اجرای RC4 را با سه رمز قالبی معروف مقایسه کرده است. حسن یک رمز قالبی در این است که شما می توانید از کلید رمز بارها استفاده کنید. در رمز دنباله ای اگر دو متن ساده با یک کلید یکسان رمزنگاری شوند، آنگاه شکستن رمز غالبا بسیار آسان خواهد بود [DAWS96]. اگر دو دنباله متن رمز شده با هم XOR شوند، نتیجه با XOR دو متن ساده نظیر آنها یکسان خواهد بود. حال اگر متن ساده، دنباله کوتاهی همانند شماره کارت های اعتباری و یا ردیف های دیگری با خواص شناخته شده باشند، عمل شکستن رمز ممکن است موفقیت آمیز باشد.
برای کاربردهائی همانند کانال های مخابره داده ها و یا مرور لینک های وب که نیاز به رمزنگاری / رمزگشائی دنباله های دیتا دارند، یک رمز دنباله ای می تواند گزینه بهتری باشد. برای کاربردهائی همچون انتقال فایل، پست الکترونیک و پایگاه داده که با بلوک های دیتا سرو کار دارند، رمزهای قالبی می توانند مناسب تر باشند. با وجود این هر دو نوع رمز تقریبا در هر کاربردی قابل استفاده اند.
الگوریتم RC4
الگوریتم RC4 یک رمز دنباله ای است که در سال 1987 میلادی توسط Ron Rivest برای کمپانی RSA Security طراحی گردید. الگوریتم RC4 یک رمز دنباله ای با طول کلید متغیر بوده و عملیات آن روی بایتها انجام می شود. الگوریتم بر مبنای استفاده از یک جایگشت تصادفی بنا نهاده شده است. تحلیل این رمز نشان میدهد که دوره تناوب رمز با احتمال قریب به یقین بزرگتر از 10100 است [ROBS95a]. برای تولید هر بایت خروجی بین 8 تا 16 عمل لازم است و انتظار می رود که رمزنگاری در نرم افزار به سرعت انجام شود.
شکل 6: مراحل جستجو در RC4
الگوریتم RC4 در استاندارد (Secure Socket Layer/Transport Layer Security) SSL/TLS که برای ارتباط بین مرورگرهای وب و سرورها تعریف شده است، بکار می رود. این رمز همچنین در پروتکل (Wired Equivalent Privacy) WEP و پروتکل جدیدتر (WiFi Protected Access) WPA که بخشی از استانداردهای IEEE 802.11 مربوط به LAN بی سیم هستند، مورد استفاده است. روش RC4 از نظر تجاری مدتها از سوی کمپانی RSA Security پنهان نگاه داشته شده بود. در سپتامبر 1994 این الگوریتم به صورت ناشناس در لیست پستی Cypherpunks قرار گرفت و لو رفت.
الگوریتم RC4 به صورت قابل توجهی ساده بوده و تشریح آن کاملا آسان است. یک کلید با طول متغیر 1 تا 256 بایت (8 تا 2.048 بیت) برای آغازیدن یک بردار حالت 256 بایتی S با مؤلفه های S[255] , … , S[1] , S[0] مورد استفاده قرار می گیرد. در همه حالات، S شامل جایگشت همه اعداد 8 بیتی از صفر تا 255 است. برای رمزنگاری و رمز گشائی، یک بایت k (شكل 5 را ببینید) از میان 255 مؤلفه S به صورت سیستماتیک انتخاب می شود. همینطور که هر مقدار k تولید می شود، مؤلفه های S یک بار دیگر جایگشت می یابند.
شکل 7: مقايسه سرعت پردازش رمزهای متقارن روی يک پردازشگر Pentium II
آغازیدن S
برای شروع، مقادیر صفر تا 255 بصورت صعودی در مؤلفه های S قرار داده می شود، یعنی S[1] = S[0] = 0 و S[255] = 255 و همچنین یک بردار موقت T خلق می شود. اگر طول کلید K برابر 256 بایت باشد، آنگاه K به T منتقل می شود. در غیر اینصورت برای کلیدی با طول keylen بایت، اولین مؤلفه های T از K کپی شده و سپس K هر چندبار لازم باشد تکرار شده تا T پر شود. این عملیات ابتدائی را می توان چنین خلاصه کرد:
شکل 8: فرمول مقداردهی اولیه
سپس از T برای جایگشت آغازین S استفاده می شود. این امر با S[0] شروع شده و تا [255]S ادامه می یابد. هر S[i] با بایت دیگری در S بر اساس روشی که توسط T[i] دیکته می شود، تعویض می گردد:
شکل 9: فرمول جایگزینی اولیه S
چون تنها عمل روی S یک تعویض محل بایت هاست، تنها اثر این امر ایجاد یک جایگشت است. S همچنان شامل تمام اعداد بین صفر تا 255 خواهد بود.
تولید دنباله
همین که بردار S با مقادیر اولیه پر شد، دیگر از کلید ورودی استفاده نخواهد شد. تولید دنباله شامل عبور از [0]S تا [255]S بوده و هر مقدار [S [i با بایت دیگری در S، بر حسب قانونی که بتوسط وضع فعلی S دیکته می شود، جایگزین می گردد. بعد از اینکه به [255]S رسیدیم، پردازش با شروع مجدد از [0]S ادامه می یابد:
شکل 10: فرمول جریان نسل
برای رمزنگاری، اندازه k را با بایت بعدی متن ساده XOR می کنیم. برای رمز گشائی، اندازه k را با بایت بعدی متن رمز شده XOR می کنیم. شکل 11 منطق RC4 را نشان میدهد.
توانائی الگوریتم RC4
مقاله های متعددی نوشته شده اند که روش حمله به الگوریتم RC4 را تحلیل کرده اند (مثلا [MIST98] , [KNUD98] , [MANT01] , [FLUH00]). هیچکدام از این روش ها برای حمله به روش RC4 با کلیدی که دارای طول منطقی همچون 128 بیت باشد، عملی نیستند. یک مورد جدی تر در [FLUH01] مطرح گردید. نویسندگان مقاله نشان دادند که پروتکل WEP که برای فراهم نمودن محرمانگی در شبکه های LAN بیسیم از پروتکل 802.11 استفاده می کند، در برابر حمله بخصوصی آسیب پذیر است. در واقع مشکل به RC4 ربطی نداشته بلکه به روشی که کلیدها برای استفاده در ورودی RC4 تولید می شوند، مرتبط است. این مشکل بخصوص در سایر کاربردهایی که از RC4 استفاده می کنند ظاهر نشده و در پروتکل WEP نیز با تغییر روش تولید کلیدها، مشکل رفع خواهد شد. این مسئله، مشکل طراحی یک سیستم امن، که هم از تابع رمزنگاری و هم از پروتکل هائی که این توابع را بکار می گیرند استفاده می کند، را خاطر نشان می سازد.
شکل 11: دیاگرام الگوریتم RC4
منبع: کتاب اصول امنیت شبکه های کامپیوتری استالینگز
هیچ نظری ثبت نشده است