حامد کیانمهر
13th January 2013, 00:51
در DES طول قطعات 64 بیت است . کلید نیز شامل 64 بیت است ولی در عمل تنها از 56 بیت آن استفاده می***شود و از 8 بیت دیگر فقط برای چک کردن parity استفاده می***شود. الگوریتم شامل 16 مرحله مشابه***است که هر مرحله یک دور 4نامیده می***شود . متنی که قرار است رمزگذاری شود ابتدا در معرض یک جایگشت اولیه (IP)قرار می***گیرد . سپس یک سری اعمال پیچیده وابسته به کلید روی آن انجام می***شود و در نهایت در معرض یک جایگشت نهایی (FP ) قرار می***گیرد. IP,FP معکوس هم هستند FP عملی که توسط IP انجام شده***است را خنثی می***کند. بنابراین از جنبه رمزنگاری اهمیت چندانی ندارند و برای تسهیل نمودن بار کردن قطعات داده در سخت***افزارهای دهه 1970 استفاده شدند ولی اجرای DES در نرم***افزار را کند کردند. قبل از دور اصلی ، داده به دو بخش 32 بیتی تقسیم می***شودکه این دو نیمه به طور متناوب مورد پردازش قرار می***گیرند این تقاطع به عنوان شکل فیستل شناخته می***شود . ساختار فیستل تضمین می***کند که رمزگذاری و رمزگشایی دو رویه کاملا مشابه هم هستند و تنها تفاوت آنها این است که زیر کلیدها در زمان رمزگشایی در جهت معکوس رمزگذاری به کار برده می***شوند . و بقیه الگوریتم درهر دو یکسان است که این امر پیاده سازی رابه خصوص در سخت***افزاربسیار آسان می***کند و دیگر نیازی به الگوریتم***های متفاوت برای رمزگذاری و رمزگشایی نیست . تابعی که خروجی IP را می***گیرد وپس از شانزده مرحله ورودی FP را فراهم می***کند تابع F نامیده می***شود. این تابع یک ورودی 32 بیتی و یک ورودی 48 بیتی دارد و یک خروجی 32 بیتی تولید می***کند. بلاک ورودی شامل 32 بیت که نیمه سمت چپ را تشکیل می***دهد و با L نشان داده می***شود و به دنبال آن 32 بیت دیگر که نیمه راست را تشکیل می***دهد و با R نمایش داده می***شود است پس کل بلاک را می***توان به صورت LR نمایش داد .
اگر K یک بلاک 48 بیتی باشد که از کلید اصلی 64 بیتی مشتق شده***است و خروجی یک دور با ورودی LR و خروجی L1R1 به صورت زیر تعریف می***شود. L1=R R1=L XOR F(R,K) اگر KS تابعی باشد که کلید 64 بیتی KEY و یک عدد صحیح در محدوده 1 تا 16 را به عنوان ورود ی می***گیرد و کلید 48 بیتی Kn را به عنوان خروجی تولید می***کند به طوری که بیتهای Kn از تغییر محل بیتهای KEY حاصل شده***اند داریم: Kn= KS (n.KEY)
KS را تابع key schedule می***نامند. بنابراین در حالت کلی داریم: Ln=Rn-1 Rn=Ln-1 XOR f(Rn-1,Kn) برای رمزگشایی نیز داریم: R=L1 L=R1 XOR f(L1,K)
در نتیجه رمزگشایی با همان الگوریتمی که برای رمزگذاری استفاده شد انجام می***شودو در هر مرحله همان K بیتی که به عنوان کلید برای رمزگذاری استفاده شده بود مورد استفاده قرار می***گیرد بنابراین می***توان نوشت: Rn-1=Ln Ln-1=Rn XOR f(Ln,Kn)
برای محاسبات رمزگشایی R16L16 ورودی IP و R0L0 ورودی FP است . کلید شانزدهم در مرحله اول ، کلید پانزدهم در مرحله دوم و به همین ترتیب کلید اول در مرحله شانزدهم مورد استفاده قرار می***گیرد.
تابع F
بسط: در این مرحله با استفاده از یک جایگشت انبساطی 32 بیت به 48 بیت گسترش داده می***شود .
ترکیب کلید: در این مرحله حاصل مرحله قبل با یک زیر کلید XOR می***شود. شش کلید 48 بیتی با استفاده از الگوریتم key schedule از کلید اصلی تولید می***شود.
جایگزینی: بعد از ترکیب کلید هر قطعه داده به هشت بخش 6 بیتی تقسیم می***شود)قبل از پردازش توسط جعبه***های جایگزینی( هر کدام از s-boxها ورودی 6 بیتی خود را با استفاده از یک تبدیل غیر خطی که به شکل یک جدول look up است به یک خروجی 4 بیتی تبدیل می***کند S-box***ها قلب DES هستند و بدون آنها رمز خطی خواهد بود و در نتیجه قابل شکستن خواهد شد.
جایگشت: در نهایت 32 بیت خروجی S-box***ها با استفاده از یک جایگشت ثابت مجددا سازماندهی می***شود (P-box).
اگر K یک بلاک 48 بیتی باشد که از کلید اصلی 64 بیتی مشتق شده***است و خروجی یک دور با ورودی LR و خروجی L1R1 به صورت زیر تعریف می***شود. L1=R R1=L XOR F(R,K) اگر KS تابعی باشد که کلید 64 بیتی KEY و یک عدد صحیح در محدوده 1 تا 16 را به عنوان ورود ی می***گیرد و کلید 48 بیتی Kn را به عنوان خروجی تولید می***کند به طوری که بیتهای Kn از تغییر محل بیتهای KEY حاصل شده***اند داریم: Kn= KS (n.KEY)
KS را تابع key schedule می***نامند. بنابراین در حالت کلی داریم: Ln=Rn-1 Rn=Ln-1 XOR f(Rn-1,Kn) برای رمزگشایی نیز داریم: R=L1 L=R1 XOR f(L1,K)
در نتیجه رمزگشایی با همان الگوریتمی که برای رمزگذاری استفاده شد انجام می***شودو در هر مرحله همان K بیتی که به عنوان کلید برای رمزگذاری استفاده شده بود مورد استفاده قرار می***گیرد بنابراین می***توان نوشت: Rn-1=Ln Ln-1=Rn XOR f(Ln,Kn)
برای محاسبات رمزگشایی R16L16 ورودی IP و R0L0 ورودی FP است . کلید شانزدهم در مرحله اول ، کلید پانزدهم در مرحله دوم و به همین ترتیب کلید اول در مرحله شانزدهم مورد استفاده قرار می***گیرد.
تابع F
بسط: در این مرحله با استفاده از یک جایگشت انبساطی 32 بیت به 48 بیت گسترش داده می***شود .
ترکیب کلید: در این مرحله حاصل مرحله قبل با یک زیر کلید XOR می***شود. شش کلید 48 بیتی با استفاده از الگوریتم key schedule از کلید اصلی تولید می***شود.
جایگزینی: بعد از ترکیب کلید هر قطعه داده به هشت بخش 6 بیتی تقسیم می***شود)قبل از پردازش توسط جعبه***های جایگزینی( هر کدام از s-boxها ورودی 6 بیتی خود را با استفاده از یک تبدیل غیر خطی که به شکل یک جدول look up است به یک خروجی 4 بیتی تبدیل می***کند S-box***ها قلب DES هستند و بدون آنها رمز خطی خواهد بود و در نتیجه قابل شکستن خواهد شد.
جایگشت: در نهایت 32 بیت خروجی S-box***ها با استفاده از یک جایگشت ثابت مجددا سازماندهی می***شود (P-box).