سورس الگوریتم رمزنگاری DES به زبان سی شارپ
در این بخش سورس الگوریتم رمزنگاری DES به زبان سی شارپ را برای شما آماده کرده ایم که در محیط نرم افزار Visual Studio و زبان برنامه نویسی سی شارپ نوشه شده است. در ادامه می توانید توضیحات، تصاویر و همچنین فیلمی از نحوه کارکرد پروژه را مشاهده کنید.
توضیحات پروژه
الگوریتم DES به عنوان یک الگوریتم استاندارد کدگذاری است و طرز کار الگوریتم DES به این شکل است که یک متن با طول ثابت را به عنوان ورودی میگیرد و پس از انجام عملیات مختلف بر روی رشته وارد شده یک خروجی که طولش برابر با طول متن وارد شده است را بر میگرداند. الگوریتم DES از یک کلید برای ایجاد رمز استفاده میکند و تنها کاربرانی می توانند عمل رمزگشایی را انجام دهند متن کلید را داشته باشند. بعد از شگستن الگوریتم DES دیگر این الگوریتم استفاده نشد و به جای آن الگوریتم AES به عنوان استاندارد جایگزین استفاده شد. الگوریتم AES مانند الگوریتم DES یک الگوریتم رمز قطعهای است و برعکس الگوریتم DES از ساختار فیستل استفاده نمیکند. حمله side channel حمله شناخته شده بر الگوریتم AES بودهاست.
مراحل پیاده سازی الگوریتم DES
در الگوریتم DES طول قطعات به ۶۴ بیت تقسیم شده می شود و کلید این الگوریتم نیز شامل ۶۴ بیت است که تنها از ۵۶ بیت آن استفاده میشود و ۸ بیت باقیمانده برای چک کردن parity مورد استفاده قرار می گیرد. الگوریتم DES شامل ۱۶ مرحله مشابه است و هر مرحله یک دور نامیده میشود. در واقع متن اولیه ما که می خواهیم آن را رمز کنیم ابتدا به تابع مربوط به جایگشت اولیه (IP) ارسال می شود. بعد از اجرای عملیات پیچیده وابسته به کلید در مرحله بعد یک جایگشت نهایی (FP) بر روی آن اعمال خواهد شد. IP و FP معکوس همدیگر هستند و در واقع تابع FP عملی که توسط تابع IP انجام شده است را خنثی خواهد کرد. بهم همین خاطر از نظر رمزنگاری اهمیت زیادی ندارند و برای آسان کردن عمل بارگذاری در قطعات داده در سختافزارهای دهه ۱۹۷۰ استفاده می شود.
در این الگوریتم قبل عملیات اصلی، اطلاعات به دو قسمت ۳۲ بیتی تقسیم میشود که این دو بخش به طور پی در پی مورد پردازش قرار میگیرند این عمل به عنوان شکل فیستل شناخته شده است. ساختار فیستل تضمین کننده این است که عمل رمزگذاری و عمل رمزگشایی هر دو رویه کاملاً شبیه هم هستند فرق آنها در این است که زیر کلیدها در زمان رمزگشایی در جهت معکوس رمزگذاری استفاده می شود به همین خاطر دیگر نیازی به الگوریتمهای دیگری برای رمزگذاری و رمزگشایی نیست. تابعی که خروجی IP را گرفته و پس از طی کردن ۱۶ مرحله ورودی FP را تولید میکند تابع F نامیده میشود. این تابع دو ورودی دارد که یکی ۳۲ بیتی و دیگری ۴۸ بیتی است و یک خروجی ۳۲ بیتی تولید میکند. در اینجا دو بلاک وجود دارد که ۳۲ بیت سمت چپ با L و ۳۲ بیت سمت راست با R مشخص شده است. نمای کلی از الگوریتم رمزنگاری DES:
در فرمول زیر اگر K یک بلاک ۴۸ بیتی باشد که از کلید اصلی که ۶۴ بیتی است مشتق شده باشد آنگاه خروجی یک دور با ورودی LR و خروجی L1R1 به صورت زیر تعریف میشود.
1 | L1=R R1=L XOR F(R,K) |
در فرمول زیر اگر KS نام تابعی باشد که کلید ۶۴ بیتی آن KEY در نظر گرفته شود و یک عدد صحیح ما بین ۱ تا ۱۶ را به عنوان پارامتر ورودی بگیرد و کلید ۴۸ بیتی Kn را به عنوان عدد خروجی تولید کند آنگاه بیتهای Kn از تغییر محل بیتهای KEY حاصل می شود.
1 | Kn= KS (n.KEY) |
همچنین KS را تابع key schedule مینامند.
1 | Ln=Rn-1 Rn=Ln-1 XOR f(Rn-1,Kn) |
برای رمزگشایی نیز از فرمول زیر استفاده می شود:
1 | R=L1 L=R1 XOR f(L1,K) |
عمل رمزگشایی با همان الگوریتمی که برای عمل رمزگذاری استفاده شد انجام گرفته می شود و در هر مرحله همان K بیتی که به عنوان کلید برای رمزگذاری استفاده شده بود مورد استفاده قرار میگیرد.
1 | Rn-1=Ln Ln-1=Rn XOR f(Ln,Kn) |
جهت انجام محاسبات رمزگشایی R16L16 ورودی IP و R0L0 ورودی تابع FP است. کلید ۱۶ در مرحله اول، کلید ۱۵در مرحله دوم و به همین ترتیب کلید اول در مرحله ۱۶ مورد استفاده قرار میگیرد.
تابع F
بسط: با استفاده از این مرحله یک جایگشت انبساطی ۳۲ بیتی به ۴۸ بیتی گسترش داده خواهد شد.
ترکیب کلید: با استفاده از این مرحله حاصل مرحله قبل با یک زیر کلید XOR خواهد شد. ۶ کلید ۴۸ بیتی با استفاده از الگوریتم key schedule از کلید اصلی تولید خواهد شد.
جایگزینی: پس از ترکیب کلید هر قطعه داده به هشت قسمت ۶ بیتی هر کدام از s-box ها ورودی ۶ بیتی خود را به یک خروجی ۴ بیتی تبدیل میکند S-box .ها قلب الگوریتم DES هستند و بدون آنها رمز خطی خواهد بود و در نتیجه قابل شکستن خواهد شد.
جایگشت: در آخر ۳۲ بیت خروجی S-box ها بوسیله یک جایگشت ثابت مجدداً سازماندهی میشود که با نام P-box شناخته شده است.
تصویری از تابع F:
الگوریتم Key Schedule
این الگوریتم برای تولید زیر کلیدها استفاده خواهد شد. در گام اول ۵۶ بیت از ۶۴ بیت اطلاعات کلید توسط تابع جایگشت۱ (PC1) انتخاب میشوند و ۸ بیت باقیمانده یا دور ریخته میشوند و یا به عنوان parity مورد استفاده قرار میگیرند در مرحله بعد این ۵۶ بیت به دو نیمه ۲۸ قسمتی تقسیم میشوند و پس از آن با هر نیمه به طور جداگانه رفتار خواهد شد. در دور بعدی هر دو نیمه یک یا دو بیت به سمت چپ انتقال مییابند و ۴۸ بیت زیر کلید توسط جایگشت۲ (PC2) انتخاب خواهد شد. ۲۴ بیت، نیمه راست و ۲۴ بیت دیگر در نیمه چپ ایجاد می شود. با استفاده از انتقال در هر زیر کلید مجموعه متفاوتی از بیتها مورد استفاده قرار میگیرد. هر بیت تقریباً در ۱۴ تا ۱۶ زیر کلید مورد استفاده قرار می گیرد. الگوریتم key schedule در عمل رمزگشایی مثل رمزگذاری است ولی زیر کلیدها در مقایسه با رمزگذاری در جهت عکس هستند به غیر از این تغییر بقیه الگوریتم مانند رمزگذاری انجام میشود.
هیچ نظری ثبت نشده است