آر سی ۴

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

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 روی بیت‌ها ترکیب می‌شود. عمل رمزگشایی نیز به صورت مشابه انجام می‌شود. برای تولید دنبالهٔ کلید، کد استفاده از یک حالت داخلی پنهانی را میسر می‌سازد که شامل دو قسمت است:

    1. یک جایگشت از همه ۲۵۶ بایت ممکن (در کد زیر با S مشخص شده)
    2. دو شاخص اشاره گر هشت بیتی (در کد زیر با i و j مشخص شده)

جایگشت با یک طول کلید متغیر آغاز می‌شود که معمولاً بین ۴۰ تا ۲۵۶ بیت است، که با استفاده از الگوریتم زمانبندی کلید(KAS) انجام می‌شود. بعد خاتمه این مرحله، جریانی از بیت‌ها با استفاده از الگوریتم تولید شبه تصادفی (PRGA) تولید می‌شود.

الگوریتم زمانبندی کلید[KSA) [The Key-Scheduling Algorithm)[ویرایش]

KSA برای مقداردهی اولیه جایگشت در آرایه 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 راحت مناسب و راحت می‌باشند. کلیدها و متن‌های اصلی همگی در مد اسکی هستند و دنباله کلید و متون رمز شده در مد هگزادسیمال می‌باشند

ملاحظات[ویرایش]

ملاحظات زیر در طراحی یک رمز دنباله‌ای ذکر شده‌است:

    1. دنباله رمز باید دارای دوره تناوب بزرگی باشد. چرا که تولید کننده اعداد شبه تصادفی از تابعی استفاده می‌کند که دنباله‌ای از بیت¬ها را تولید کرده که نهایتاً بعد از مدتی تکرار می‌شود و هر چقدر دوره تناوب این تکرار طویل تر باشد عمل شکستن رمز سخت تر خواهد بود.
    2. دنباله کلید باید با تقریب بسیار خوبی خواص یک دنباله تصادفی واقعی را داشته باشد. به عنوان تقریباً باید تعداد ۰ها و ۱ها در این دنباله برابر باشد.
    3. از طرفی خروجی یک مولد اعداد شبه تصادفی به اندازه کلید ورودی وابسته‌است. برای جلوگیری از حملات همه جانبه، کلید بایستی به اندازه کافی بزرگ باشد. بنابراین با تکنولوژی کنونی، کلیدی با طول حداقل ۱۲۸بیت مناسب به نظر می‌رسد.

با یک مولداعداد تصادفی با طرح مناسب، یک رمز دنباله‌ای می‌تواند به هممان ندازه یک رمز قالبی با همان طول کلید، امن باشد. مزیت اصلی رمزهای دنباله‌ای این است که رمزهای دنباله‌ای تقریباً همیشه سریع تر بوده و نسبت به رمزهای قالبی از حجم برنامه کمتری استفاده می‌کنند. به عنوان مثال رمز 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 افزایش داده می‌شود، دو بایت تولید می‌شود:

    1. ابتدا الگوریتم پایه RC4 با استفاده از S1 و j1 اجرا می‌شود، اما در مرحله آخر [S1[i]+s1[i1 در S2 جستجو می‌شود.
    2. سپس عملیات تکرار می‌شود(بدون افزایش دوباره 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

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

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

    1. اصول امنیت شبکه‌های کامپیوتری (کاربردها و استانداردها)، ولیام استالینگ
    2. ویکی‌پدیا انگیسی