آر سی ۴
| این مقاله دقیق، کامل و صحیح ترجمه نشده است. لطفاً این ترجمه را با توجه به نسخهٔ اصلی اصلاح کنید و سپس این الگو را از بالای صفحه بردارید. |
|
|
ممکن است این مقاله نیازمند ویکیسازی باشد تا با استانداردهای کیفی ویکیپدیا همخوانی یابد. خواهشمندیم با افزودن پیوندهای داخلی مرتبط، یا با بهبود چیدمان به بهبود آن کمک کنید.
برای جزئیات بیشتر روی [نمایش] کلیک کنید.
هیچ دلیلی برای این برچسب ویکیسازی ذکر نشدهاست. میتوانید دلیلتان را با استفاده از پارامتر
|
RC4 یک رمز قالبی در هر زمان یک بلوک از عناصر ورودی را پردازش کرده و یک بلوک خروجی برای آن بلوک ورودی تولید میکند. یک رمز دنبالهای، عناصر ورودی را بطور پیوسته پردازش کرده و همینطور که جلو میرود عنصر به عنصر متن رمز شده را تولید میکند. اگرچه رمزهای قالبی بسیار متداول¬ترند ولی در برخی کاربردها یک رمز دنبالهای گزینه¬ای مناسب تر است. متداول ترین رمز دنبالهای RC4 است. در رمزنگاری، RC4 متداول ترین نرم افزار رمز کردن رشتهها ست و در پروتکلهایی همچون (Secure Socket Layer (SSL برای محافظت از ترافیک شبکه و WEP برای امن کردن شبکههای بی سیم استفاده میشود. RC4دارای ویژگیهای قابل توجهی، مثل سادگی و سرعت آن در نرم افزار میباشد. مطالعات گستردهای در رابطه با روشهای حمله به RC4 انجام شدهاست ولی هیچکدام از این روشها برای حمله به RC4 با کلیدی که دارای طول منطقی همچون ۱۲۸ بیت باشد عملی نبودهاند. یک مورد جدی در [FLUH1] مطرح شدهاست که در آن محققان نشان دادند پروتکل WEP که برای محرمانگی در شبکههای محلی بی سیم مورد استفاده قرار میگیرد، در برابر نوعی حمله بخصوص آسیب پذیر است. ولی در واقع مشکل ربطی به RC4 نداشت بلکه به روشی که کلیدها برای استفاده در ورودی RC4 تولید میشوند، بستگی داشتهاست. این مشکل در سایر کاربردهایی که از RC4 استفاده میکنند مشاهده نشده و در WEP هم نیز با تغییر روش تولید کلیدها، مشکل حل شدهاست.
محتویات |
[ویرایش] تاریخچه
RC4 یک رمز دنباله¬ای است که توسط Ron Rivest از اعضای کمپانی RSA Security در سال ۱۹۸۷طراحی شد. RC4 از نظر تجاری مدتها از سوی کمپانی RSA Security پنهان نگه داشته شده بود و درنهایت این الگوریتم در سمپامبر ۱۹۹۴ لو رفت. مهمترین فاکتورهای موفقیت RC4 در رنج وسیع کاربردهای آن، سادگی و سرعت آن میباشد و اینکه پیاده سازی آن هم در سخت افزار و هم در نرم افزار کارآمد است و همچنین توسعه آن بسیار سادهاست.
[ویرایش] تعریف
RC4 یک رمز دنبالهای با طول کلید متغیر بوده و عملیات آن روی بایتها انجام میشود. الگوریتم بر مبنای استفاده از یک جایگشت تصادفی بنا نهاده شدهاست. RC4 یک جریان شبه تصادفی از بیتها تولید میکند. خروجی تولیدکننده شبه تصادفی که یک دنباله¬ی کلید(keystream) نامیده میشود با دنباله متن سادهٔ ورودی به صورت یک بایت در هر زمان و به صورت عمل XOR روی بیتها ترکیب میشود. عمل رمزگشایی نیز به صورت مشابه انجام میشود. برای تولید دنبالهٔ کلید، کد استفاده از یک حالت داخلی پنهانی را میسر میسازد که شامل دو قسمت است:
-
- یک جایگشت از همه ۲۵۶ بایت ممکن (در کد زیر با S مشخص شده)
- دو شاخص اشاره گر هشت بیتی (در کد زیر با i و j مشخص شده)
جایگشت با یک طول کلید متغیر آغاز میشود که معمولا بین ۴۰ تا ۲۵۶ بیت است، که با استفاده از الگوریتم زمانبندی کلید(KAS) انجام میشود. بعد خاتمه این مرحله، جریانی از بیتها با استفاده از الگوریتم تولید شبه تصادفی (PRGA) تولید میشود.
[ویرایش] الگوریتم زمانبندی کلید[KAS) [The Key-Scheduling Algorithm)
KAS برای مقداردهی اولیه جایگشت در آرایه S استفاده میشود. keylength به عنوان تعداد بایتهای کلید تعریف میشود که میتواند بین ۱تا ۲۵۶ باشد ولی معمولا بین ۵ و۱۶ میباشد و طول کلید ۴۰-۱۲۸ بستگی دارد. ابتدا آرایه S برای ایجاد جایگشت مقداردهی اولیه شده و سپس S برای ۲۵۶ تکرار در PRGA پردازش میشود و همزمان نیز بایتهای مربوط به کلید را تولید میکند.
for i from 0 to 255
S[i]:= i
endfor
j:= ۰
for i from 0 to 255
j:= (j + S[i] + key[i mod keylength]) mod 256
[swap values of S[i] and S[j
endfor
[ویرایش] الگوریتم تولید شبه تصادفی[PRGA) [The pseudo-random generation algorithm)
به خاطر تکرارهای زیاد، PRGA حالت و خروجیهای دنباله کلید را بهبود میدهد. در هر بار تکرار،PRGA مقدار i را افزایش میدهد و سپس مقدار [S[i را با j جمع میکند، مقادیر [S[i و [S[j را با هم جابجا کرده و سپس مقدار S[i]+S[j] mod 256 را محاسبه کرده و به عنوان شاخصی برای واکشی S که در واقع خروجی الگوریتم میباشد، استفاده میکند. هر عنصر S با یک عنصر دیگر حداقل یک بار در هر ۲۵۶ تکرار جابجا خواهد شد.
i:= ۰
j:= ۰
while GeneratingOutput:
i:= (i + 1) mod 256
j:= (j + S[i]) mod 256
swap values of S[i] and S[j]
K:= S[(S[i] + S[j]) mod 256]
output K
endwhile
[ویرایش] پیاده سازی
خیلی از جریانهای رمزشده بر مبنای شیفت رجیسترهای بازخورد خطی (Linear feedback shift registers) میباشند، این در حالی است که پیاده سازی این سیستمها در سخت افزار کارآمد هستند ولی در نرم افزار اینچنین نیستند. در طراحی RC4 از استفاده از LFSRها پرهیز میشود و بنابراین برای پیاده سازی نرم افزاری ایده آل است چرا که فقط نیازمند دستکاری بایتها ست. RC4 از ۲۵۶ بایت حافظه برای آرایه حالت، [S[0 تا S[255]، k بایت حافظه برای کلید، [key[0 تا [key[k-1، و متغیرهای عددی i، j و y استفاده میکند.
[ویرایش] بردار تست
بردارهای تست زیر رسمی نیستند ولی برای تست کردن برنامههای RC4 راحت مناسب و راحت میباشند. کلیدها و متنهای اصلی همگی در مد اسکی هستند و دنباله کلید و متون رمز شده در مد هگزادسیمال میباشند
[ویرایش] ملاحظات
ملاحظات زیر در طراحی یک رمز دنبالهای ذکر شدهاست:
-
- دنباله رمز باید دارای دوره تناوب بزرگی باشد. چرا که تولید کننده اعداد شبه تصادفی از تابعی استفاده میکند که دنبالهای از بیت¬ها را تولید کرده که نهایتا بعد از مدتی تکرار میشود و هر چقدر دوره تناوب این تکرار طویل تر باشد عمل شکستن رمز سخت تر خواهد بود.
- دنباله کلید باید با تقریب بسیار خوبی خواص یک دنباله تصادفی واقعی را داشته باشد. به عنوان تقریبا باید تعداد ۰ها و ۱ها در این دنباله برابر باشد.
- از طرفی خروجی یک مولد اعداد شبه تصادفی به اندازه کلید ورودی وابستهاست. برای جلوگیری از حملات همه جانبه، کلید بایستی به اندازه کافی بزرگ باشد. بنابراین با تکنولوژی کنونی، کلیدی با طول حداقل ۱۲۸بیت مناسب به نظر میرسد.
با یک مولداعداد تصادفی با طرح مناسب، یک رمز دنبالهای میتواند به هممان ندازه یک رمز قالبی با همان طول کلید، امن باشد. مزیت اصلی رمزهای دنبالهای این است که رمزهای دنبالهای تقریبا همیشه سریع تر بوده و نسبت به رمزهای قالبی از حجم برنامه کمتری استفاده میکنند. به عنوان مثال رمز RC4 میتواند تنها با چند خط برنامه کامپوتری پیاده سازی شود. جدول زیر زمان اجرای RC4رابا با سه رمز قالبی معروف مقایسه کردهاست:
| سرعت(Mbps) | طول کلید | نوع رمز |
|---|---|---|
| ۹ | ۵۶ | DES |
| ۳ | ۱۶۸ | 3DES |
| ۰٫۹ | متغیر | RC2 |
| ۴۵ | متغیر | RC4 |
حسن یک رمز قالب در این است که میتوان از کلید رمز بارها استفاده کرد. در رمز دنبالهای اگر دو متن ساده با یک کلید یکسان رمزگاری شوند، انگاه شکستن رمز غالبا بسیار آسان خواهد بود. اگر دو دنباله متن رمز شده با هم XOR شوند، نتیجه با XOR دو متن ساده نظیر آنها یکسان خواهدبود. حال اگر متن ساده، دنباله کوتاهی همانند کارتهای اعتباری باشند، عمل شکستن رمز ممکن است موفقیت آمیز باشد. برای کارردهایی همچون کانالهای مخابرهٔ داده و یا مرور لینکهای وب که نیازمند رمزنگاری/رمزگشایی دنبالههای دیتا دارند، یک رمز دنبالهای میتواند گزینه بهتری باشد. برای کاربردهایی مثل انتقال فایل، پست الکترونیک و پایگاه داده که با بلوکهای دیتا سروکار دارند، رمزهای قالبی میتوانند مناسب تر باند. با این وجود هر دو نوع رمز تقریبا در هر کاربردی قابل استفادهاند. امنیت به دلیل اینکه RC4 یک رمزنگاری دنبالهای است سازگارتر از رمزهای قالبی است، و در صورتی که با یک کد احراز هویت پیام(MAC) ترکیب نشود رمزنگاری نسبت به حملهٔ تغییر بیتها آسیب پذیر خواهد بود.
[ویرایش] انواع RC4
همان طور که در بالا اشاره شد مهم ترین نقطه ضعف RC4از ناکارآمدی زمان کلید ناشی میشود به این صورت که اولین بایت خروجی کلید را آشکار میکند، که این امر را میتوان با در نظرنگرفتن بخش ابتدایی جریان خروجی تصحیح کرد. این روش بهRC4-dropN معروف است که N معمولا بر ۲۵۶ بخش پذیر است(مثل ۷۶۸ یا ۱۰۲۴). تعدای از تلاشهای انجام شده برای تقویت RC4 عبارت اند: RC4A، VMPC و RC+.
[ویرایش] RC4A
سورادیوت پل و بارت پرنیل نوع دیگری از RC4 را ارائه دادند به نام RC4A.RC4A از دو آرایه حالت S1 و S2 و از دو شاخص j1 و j2 استفاده میکند. هر زمان که i افزایش داده میشود، دو بایت تولید میشود:
-
- ابتدا الگوریتم پایه RC4 با استفاده از S1 و j1 اجرا میشود، اما در مرحله آخر [S1[i]+s1[i1 در S2 جستجو میشود.
- سپس عملیات تکرار میشود(بدون افزایش دوباره i) روی S2 و j2 و [[S1[S2[i]+S2[j2 به عنوان خروجی در نظر گرفته میشود.
All arithmetic is performed modulo 256
i:= ۰
j1:= ۰
j2:= ۰
while GeneratingOutput:
i:= i + 1
[j1:= j1 + S1[i]
swap values of S1[i] and S1[j1]
output S2[S1[i] + S1[j1]]
j2:= j2 + S2[i]
swap values of S2[i] and S2[j2]
output S1[S2[i] + S2[j2]]
endwhile
اگرچه این الگوریتم قوی تر از RC4 است ولی بازهم مورد حمله قرار گرفتهاست.
[ویرایش] VMPC
متغیر اصلاح ترکیب جایگشت (VMPC) یکی دیگر از انواع RC4 است. از زمان بندی کلید همانند RC4 استفاده میکنند، اما تعداد تکرارهای آن به جای ۲۵۶ بار ۷۶۸ تکرار میباشد.
All arithmetic is performed modulo 256
i:= ۰
while GeneratingOutput:
a:= S[i]
j:= S[j + a]
b:= S[j]
output S[S[b] + 1]
S[i]:= b
S[j]:= a
i:= i + 1
endwhile
[ویرایش] RC4+
RC4+ نسخه اصلاح شده از RC4 است با یک پیچدگی بیشتر در زمانبندی کلید سه-مرحلهای و همچنین تابع خروجی پیچیدگی بیشتری دارد به این صورت که چهار جستجوی بیشتر در آرایه S برای هر بایت خروجی انجام میدهد.
All arithmetic is performed modulo 256
while GeneratingOutput:
i:= i + 1
a:= S[i]
j:= j + a
b:= S[j]
S[i]:= b
S[j]:= a
c:= S[i<<5 ⊕ j>>3] + S[<5 ⊕ i>>۳]
output (S[a+b] + S[c⊕0xAA]) ⊕ S[j+b]
endwhile
این الگوریتم هنوز به صورت قابل توجهی موشکافی نشدهاست.
[ویرایش] منابع
-
- اصول امنیت شبکههای کامپیوتری (کاربردها و استانداردها)، ولیام استالینگ
- ویکیپدیا انگیسی