• الگوریتم DES و انواع آن الگوریتم های رمزگذاری DES و AES

    • آموزش

    سلام %username%!
    بسیاری از مردم می دانند که استاندارد پیش فرض در این زمینه است رمزگذاری متقارن برای مدت طولانیدر نظر گرفته شد الگوریتم DES. اولین حمله موفقیت آمیز به این الگوریتم تخریب ناپذیر در سال 1993، 16 سال پس از پذیرش به عنوان یک استاندارد منتشر شد. روشی که نویسنده آن را رمزنگاری خطی نامیده است، در حضور 247 جفت متن ساده/رمزگذاری شده، به شما امکان می دهد باز کنید کلید مخفیرمز DES در 243 عملیات.
    در زیر برش، سعی می کنم نکات اصلی این حمله را خلاصه کنم.

    رمزنگاری خطی

    رمزنگاری خطی نوع خاصی از حمله به رمزهای متقارن است که هدف آن بازیابی یک کلید رمزگذاری ناشناخته از اطلاعات شناخته شده است. باز کردن پیام هاو متون رمزی مربوط به آنها.

    در حالت کلی، یک حمله مبتنی بر تحلیل رمزی خطی به شرایط زیر کاهش می یابد. مهاجم دارد مقدار زیادجفت‌های متن ساده/متن رمز با استفاده از یک کلید رمزگذاری K به دست می‌آیند. هدف مهاجم بازیابی بخشی یا تمام کلید K است.

    اول از همه، مهاجم رمز را بررسی می کند و به اصطلاح را پیدا می کند. آنالوگ آماری، یعنی معادله ای از شکل زیر که با احتمال P ≠ 1/2 برای یک جفت متن دلخواه عمومی/خصوصی و یک کلید ثابت وجود دارد:
    P I1 ⊕ P I2 ⊕… ⊕ P Ia ⊕ C I1 ⊕ C I2 ⊕… ⊕ C Ib = K I1 ⊕ K I2 ⊕… ⊕ K Ic (1) ,
    که در آن P n , C n , K n بیت های n ام متن، متن رمزی و کلید هستند.
    پس از یافتن چنین معادله ای، مهاجم می تواند با استفاده از الگوریتم زیر، 1 بیت از اطلاعات کلید را بازیابی کند.

    الگوریتم 1
    بگذارید T تعداد متن هایی باشد که برای آن ها سمت چپپس معادله (1) 0 است
    اگر T>N/2، که در آن N تعداد متن های ساده شناخته شده است.
    فرض کنید که K I1 ⊕ K I2 ⊕… ⊕ K Ic = 0 (وقتی P> 1/2) یا 1 (وقتی P<1/2).
    در غیر این صورت
    فرض کنید که K I1 ⊕ K I2 ⊕… ⊕ K Ic = 1 (وقتی P> 1/2) یا 0 (وقتی P<1/2).
    بدیهی است که موفقیت الگوریتم مستقیماً به مقدار |P-1/2| بستگی دارد و بر روی تعداد جفت‌های متن ساده/متن خصوصی موجود N. هر چه احتمال P برابری (1) با 1/2 متفاوت باشد، تعداد متن‌های ساده N برای حمله کمتر می‌شود.

    دو مشکل وجود دارد که برای اجرای موفقیت آمیز حمله باید حل شود:

    • چگونه یک معادله موثر از فرم (1) پیدا کنیم.
    • چگونه با استفاده از چنین معادله ای بیش از یک بیت اطلاعات در مورد کلید بدست آوریم.
    حل این مسائل را با استفاده از رمز DES به عنوان مثال در نظر بگیرید.

    توضیحات DES

    اما ابتدا اجازه دهید به طور خلاصه نحوه عملکرد الگوریتم را شرح دهیم. در مورد DES به اندازه کافی گفته شده است. شرح کامل رمز را می توان در ویکی پدیا یافت. با این حال، برای توضیح بیشتر حمله، به تعدادی از تعاریف نیاز داریم که بهتر است از قبل معرفی شوند.

    بنابراین، DES یک رمز بلوکی مبتنی بر شبکه Feistel است. این رمز دارای اندازه بلوک 64 بیت و اندازه کلید 56 بیت است. طرح رمزگذاری الگوریتم DES را در نظر بگیرید.

    همانطور که از شکل مشخص است، عملیات زیر در هنگام رمزگذاری روی متن انجام می شود:

    1. تعویض بیت اولیه در این مرحله، بیت های بلوک ورودی به ترتیب معینی به هم می زنند.
    2. پس از آن، بیت های مخلوط شده به دو نیمه تقسیم می شوند که به ورودی تابع Feistel وارد می شوند. برای DES استاندارد، شبکه Feistel شامل 16 دور است، اما انواع دیگری از الگوریتم وجود دارد.
    3. دو بلوک به دست آمده در آخرین دور تبدیل با هم ترکیب می شوند و جایگشت دیگری روی بلوک حاصل انجام می شود.

    در هر دور از شبکه Feistel، کمترین 32 بیت پیام از طریق تابع f ارسال می شود:

    عملیات انجام شده در این مرحله را در نظر بگیرید:

    1. بلوک ورودی از طریق تابع فرمت E منتقل می شود که بلوک 32 بیتی را به بلوک 48 بیتی تبدیل می کند.
    2. بلوک به دست آمده به کلید گرد K i اضافه می شود.
    3. نتیجه مرحله قبل به 8 بلوک 6 بیتی تقسیم می شود.
    4. هر یک از بلوک های به دست آمده B i از یک تابع جایگزینی S-Box i عبور می کند که یک توالی 6 بیتی را با یک بلوک 4 بیتی جایگزین می کند.
    5. بلوک 32 بیتی حاصل از جایگشت P عبور داده می شود و به عنوان نتیجه تابع f برگردانده می شود.

    از نقطه نظر تحلیل رمز رمز، برای ما بلوک های S هستند که برای پنهان کردن ارتباط بین داده های ورودی و خروجی تابع f طراحی شده اند. برای حمله موفقیت آمیز به DES، ابتدا همتاهای آماری را برای هر یک از جعبه های S می سازیم و سپس آنها را به کل رمز گسترش می دهیم.

    تجزیه و تحلیل بلوک های S

    هر S-box یک دنباله 6 بیتی را به عنوان ورودی می گیرد و یک مقدار ثابت 4 بیتی برای هر یک از این دنباله ها برگردانده می شود. آن ها در مجموع 64 گزینه ورودی و خروجی وجود دارد. وظیفه ما نشان دادن رابطه بین داده های ورودی و خروجی بلوک های S است. به عنوان مثال، برای سومین جعبه S از رمز DES، بیت سوم دنباله ورودی در 38 مورد از 64 مورد، برابر با بیت 3 دنباله خروجی است. بنابراین، ما آنالوگ آماری زیر را برای سومین S پیدا کردیم. -جعبه:
    S 3 (x) = x که با احتمال P=38/64 برآورده می شود.
    هر دو طرف معادله نشان دهنده 1 بیت اطلاعات است. بنابراین، اگر قسمت چپ و راست مستقل از یکدیگر بودند، معادله باید با احتمال 1/2 برآورده شود. بنابراین، ما رابطه بین ورودی و خروجی سومین جعبه S الگوریتم DES را نشان دادیم.

    در نظر بگیرید که چگونه می توانید یک آنالوگ آماری از جعبه S در حالت کلی پیدا کنید.

    برای یک S-box S a، 1 ≤ α ≤ 63 و 1 ≤ β ≤ 15، مقدار NS a (α، β) توضیح می دهد که چند بار از 64 XOR ممکن بیت های ورودی S a روی بیت های α پوشیده شده است. برابر با XOR بیت های خروجی روی بیت های β هستند، یعنی:
    که در آن نماد یک AND منطقی است.
    مقادیر α و β که NS a (α، β) بیشتر از 32 متفاوت است، کارآمدترین آنالوگ آماری S-box S a را توصیف می کند.

    کارآمدترین آنالوگ در جعبه S 5 رمز DES برای α = 16 و β = 15 NS 5 (16، 15) = 12 یافت شد. این به این معنی است که معادله زیر درست است: Z=Y ⊕ Y ⊕ Y ⊕ Y، که در آن Z دنباله ورودی S-box و Y دنباله خروجی است.
    یا با در نظر گرفتن این واقعیت که در الگوریتم DES، قبل از ورود به جعبه S، داده ها مدول 2 با یک کلید گرد اضافه می شوند، یعنی. Z = X ⊕ K به دست می آوریم
    X ⊕ Y ⊕ Y ⊕ Y ⊕ Y = K، که در آن X و Y داده های ورودی و خروجی تابع f بدون جایگشت هستند.
    معادله به دست آمده در تمام دورهای الگوریتم DES با احتمال یکسان P=12/64 اجرا می شود.
    جدول زیر موارد موثر را فهرست می‌کند. دارای بیشترین انحراف از P=1/2، آنالوگ های آماری برای هر بلوک s از الگوریتم DES.

    ساخت آنالوگ های آماری برای چندین دور DES

    اکنون اجازه دهید نشان دهیم که چگونه می توان آنالوگ های آماری چندین دور DES را ترکیب کرد و در نتیجه یک آنالوگ آماری برای کل رمز به دست آورد.
    برای انجام این کار، یک نسخه سه دور از الگوریتم را در نظر بگیرید:

    بیایید آنالوگ آماری کارآمد s-box 5 را برای محاسبه بیت های خاصی از مقدار X(2) اعمال کنیم.
    می دانیم که با احتمال 12/64، تابع f برابری را برآورده می کند. X ⊕ Y ⊕ Y ⊕ Y ⊕ Y = K،در جایی که X دومین بیت ورودی S-box 5 است، اساساً بیت 26 از دنباله ای است که پس از گسترش بیت های ورودی به دست می آید. با تجزیه و تحلیل تابع پسوند، می توان دریافت که هفدهمین بیت از دنباله X(1) به جای بیت 26 است.
    به طور مشابه، Y،…، Y اساساً بیت های 17، 18، 19 و 20 از دنباله ای هستند که قبل از جایگشت P به دست آمده اند. با بررسی جایگشت P، متوجه می شویم که بیت های Y،…، Y در واقع بیت های Y(1) هستند. )، Y(1)، Y(1)، Y(1).
    بیت کلید K که در معادلات دخیل است، بیست و ششمین بیت کلید فرعی دور اول K1 است و سپس همتای آماری به شکل زیر است:
    X(1) ⊕ Y(1) ⊕ Y(1) ⊕ Y1 ⊕ Y(1) = K1.
    از این رو، X(1) ⊕ K1 = Y(1) ⊕ Y(1) ⊕ Y(1) ⊕ Y(1)(2) با احتمال P=12/64.
    با دانستن 3، 8، 14، 25 بیت از دنباله Y(1)، می توانید 3، 8، 14، 25 بیت از دنباله X(2) را بیابید:
    X(2) ⊕ X(2) ⊕ X(2) ⊕ X(2) = PL ⊕ PL ⊕ PL ⊕ PL ⊕ Y(1) ⊕ Y(1) ⊕ Y(1) ⊕ Y(1)یا با در نظر گرفتن معادله (2)
    X(2) ⊕ X(2) ⊕ X(2) ⊕ X(2) = PL ⊕ PL ⊕ PL ⊕ PL ⊕ X(1) ⊕ K1 (3) با احتمال 12/64.

    بیایید یک عبارت مشابه را با استفاده از دور آخر پیدا کنیم. این بار معادله را داریم
    X(3) ⊕ K3 = Y(3) ⊕ Y(3) ⊕ Y(3) ⊕ Y(3).
    زیرا
    X(2) ⊕ X(2) ⊕ X(2) ⊕ X(2) = СL ⊕ СL ⊕ СL ⊕ СL ⊕ Y(3) ⊕ Y(3) ⊕ Y(3) ⊕ Y(3)
    ما آن را دریافت می کنیم
    X(2) ⊕ X(2) ⊕ X(2) ⊕ X(2) = СL ⊕ СL ⊕ СL ⊕ СL ⊕ X(3) ⊕ K3(4) با احتمال 12/64.

    با معادل سازی قسمت های صحیح معادلات (3) و (4) به دست می آوریم
    СL ⊕ СL ⊕ СL ⊕ СL ⊕ X(3) ⊕ K3 = PL ⊕ PL ⊕ PL ⊕ PL ⊕ X(1) ⊕ K1با احتمال (12/64) 2 +(1-12/64) 2 .
    با در نظر گرفتن این واقعیت که X(1) = PR و X(3) = CR، یک آنالوگ آماری به دست می آوریم.
    СL ⊕ CR ⊕ PL ⊕ PR = K1 ⊕ K3 (5) ,
    که با احتمال (12/64) 2 +(1-12/64) 2 =0.7 انجام می شود.
    آنالوگ آماری شرح داده شده در بالا را می توان به صورت گرافیکی به صورت زیر نشان داد (بیت ها در شکل از راست به چپ شماره گذاری شده اند و از صفر شروع می شوند):

    تمام بیت های سمت چپ معادله برای مهاجم شناخته شده است، بنابراین او می تواند الگوریتم 1 را اعمال کند و مقدار K1 ⊕ K3 را دریابد. اجازه دهید نشان دهیم که چگونه با استفاده از این آنالوگ آماری، می توان نه 1، بلکه 12 بیت از کلید رمزگذاری K را باز کرد.

    با متن ساده شناخته شده به DES حمله کنید

    در اینجا روشی وجود دارد که با آن می توانید حمله را گسترش دهید و بلافاصله 6 بیت از کلید فرعی دور اول را دریافت کنید.
    هنگام کامپایل معادله (5) این واقعیت را در نظر گرفتیم که مقدار F1 (PR, K1) را نمی دانیم. بنابراین از آنالوگ آماری آن K1 ⊕ PR استفاده کردیم.
    به جای عبارت K1 ⊕ PR، مقدار F1 (PR, K1) را برمی گردانیم و معادله زیر را به دست می آوریم:
    CL ⊕ CR ⊕ PL ⊕ F1 (PR، K1) = K3 (6) ، که با احتمال 12/64 اجرا می شود. از زمانی که ما فقط آنالوگ آماری را از دور سوم باقی گذاشتیم، احتمال تغییر کرده است، همه مقادیر دیگر ثابت هستند.

    قبلاً در بالا مشخص کرده‌ایم که مقدار F1 (PR, K1) تحت تأثیر بیت‌های ورودی S-box پنجم است، یعنی بیت‌های کلید K1 و بیت‌های بلوک PR. اجازه دهید نشان دهیم که چگونه با داشتن مجموعه‌ای از متون باز/بسته، می‌توان مقدار K1 را بازیابی کرد. برای این کار از الگوریتم 2 استفاده می کنیم.

    الگوریتم 2
    اجازه دهید N تعداد جفت های متن باز/بسته شناخته شده قبل از حمله باشد. سپس برای باز کردن کلید باید مراحل زیر را انجام دهید.
    برای (i=0; i<64; i++) do
    {
    برای(j=0؛ j {
    if(СL j ⊕ CR j ⊕ PL j ⊕ F1(PR j , i)=0) سپس
    T i = T i +1
    }
    }
    به عنوان یک دنباله احتمالی K1، چنین مقداری از i گرفته می شود که عبارت |T i -N/2| حداکثر مقدار را دارد.

    با تعداد کافی متن ساده شناخته شده، الگوریتم به احتمال زیاد مقدار صحیح شش بیت کلید فرعی دور اول K1 را برمی گرداند. این با این واقعیت توضیح داده می شود که اگر متغیر i برابر با K1 نباشد، مقدار تابع F1 (PR j , K) تصادفی خواهد بود و تعداد معادلات برای چنین مقدار i، که در آن سمت چپ برابر با صفر است، به N/2 تمایل دارد. اگر کلید فرعی به درستی حدس زده شود، قسمت سمت چپ با بیت ثابت K3 با احتمال 12/64 برابر خواهد شد. آن ها انحراف قابل توجهی از N/2 وجود خواهد داشت.

    پس از دریافت 6 بیت از کلید فرعی K1، می توانید به طور مشابه 6 بیت کلید فرعی K3 را باز کنید. تنها چیزی که برای این کار لازم است جایگزینی C با P و K1 با K3 در رابطه (6) است:
    PL ⊕ PR ⊕ CL ⊕ F3(CR، K3) = K1.
    الگوریتم 2 مقدار صحیح K3 را برمی گرداند زیرا فرآیند رمزگشایی الگوریتم DES با فرآیند رمزگذاری یکسان است، فقط دنباله کلیدها معکوس می شود. بنابراین در دور اول رمزگشایی از کلید K3 و در دور آخر از کلید K1 استفاده می شود.

    مهاجم با دریافت 6 بیت از کلیدهای فرعی K1 و K3، 12 بیت از کلید مشترک رمز K را بازیابی می کند، زیرا کلیدهای گرد جایگشت معمول کلید K هستند. تعداد متن‌های ساده مورد نیاز برای یک حمله موفق به احتمال همتای آماری بستگی دارد. برای شکستن یک کلید 12 بیتی 3 دور DES، 100 جفت متن عمومی/خصوصی کافی است. برای شکستن یک کلید 16 دور DES 12 بیتی به 244 جفت متن نیاز است. 44 بیت باقی مانده از کلید با شمارش معمول باز می شود.

    حاشیه نویسی: یکی از شناخته شده ترین سیستم های رمزنگاری با کلید خصوصی، DES - Data Encryption Standard است. این سیستم اولین سیستمی بود که وضعیت استاندارد دولتی در زمینه رمزگذاری داده ها را دریافت کرد. و اگرچه استاندارد قدیمی DES آمریکایی اکنون وضعیت رسمی خود را از دست داده است، این الگوریتم هنوز در هنگام مطالعه رمزنگاری شایسته توجه است. علاوه بر این، این سخنرانی توضیح می دهد که "DES مضاعف" چیست، یک حمله "Meet in Mid" و نحوه رفع آن. در همین سخنرانی به طور خلاصه در مورد استاندارد جدید رمزگذاری بلوکی ایالات متحده، الگوریتم Rijndael بحث می شود.

    هدف از سخنرانی: دانش آموز را با اطلاعات اولیه در مورد الگوریتم رمزگذاری DES آشنا کند.

    اطلاعات اولیه

    یکی از معروف ترین سیستم های رمزنگاری با کلید خصوصی است DES - استاندارد رمزگذاری داده ها. این سیستم اولین سیستمی بود که وضعیت استاندارد دولتی در زمینه رمزگذاری داده ها را دریافت کرد. توسط متخصصان IBM توسعه یافت و در سال 1977 در ایالات متحده به اجرا درآمد. الگوریتم DESبه طور گسترده ای در ذخیره سازی و انتقال داده ها بین سیستم های محاسباتی مختلف استفاده می شود. در سیستم های پستی، در سیستم های نقشه کشی الکترونیکی و در مبادلات الکترونیکی اطلاعات تجاری. استاندارد DESهم در نرم افزار و هم در سخت افزار پیاده سازی می شود. شرکت های کشورهای مختلف تولید انبوه دستگاه های دیجیتال را با استفاده از راه اندازی کرده اند DESبرای رمزگذاری داده ها همه دستگاه ها گواهینامه اجباری را برای انطباق با استاندارد دریافت کردند.

    علیرغم این واقعیت که برای مدتی این سیستم وضعیت استاندارد دولتی را نداشته است، هنوز هم به طور گسترده مورد استفاده قرار می گیرد و در هنگام مطالعه رمزهای بلوکی با یک کلید خصوصی قابل توجه است.

    طول کلید در الگوریتم DES 56 بیت است. با این واقعیت است که بحث اصلی در مورد توانایی DESمقاومت در برابر حملات مختلف همانطور که می دانید، هر رمز بلوکی با یک کلید خصوصی را می توان با آزمایش تمام ترکیبات ممکن از کلیدها شکست. با طول کلید 56 بیت، 256 کلید مختلف امکان پذیر است. اگر یک کامپیوتر 1000000 کلید را در یک ثانیه برشمرد (که تقریباً برابر با 220 است) پس شمارش تمامی 256 کلید به 236 ثانیه یا کمی بیشتر از دو هزار سال زمان نیاز دارد که البته برای مهاجمان غیرقابل قبول است.

    با این حال، سیستم‌های محاسباتی گران‌تر و سریع‌تر از کامپیوتر شخصی. به عنوان مثال، اگر امکان ترکیب یک میلیون پردازنده برای محاسبات موازی وجود داشته باشد، حداکثر زمان انتخاب کلید به تقریباً 18 ساعت کاهش می یابد. این زمان خیلی طولانی نیست و یک رمزنگار مجهز به چنین تجهیزات گران قیمتی می تواند به راحتی یک حمله رمزگذاری شده با DES را در یک زمان معقول انجام دهد.

    در عین حال می توان به این نکته اشاره کرد که سیستم DESممکن است در برنامه های کوچک و متوسط ​​برای رمزگذاری داده های کم ارزش استفاده شود. برای رمزگذاری داده های دارای اهمیت ملی یا ارزش تجاری قابل توجه، سیستم DESدر حال حاضر، البته، نباید استفاده شود. در سال 2001، پس از یک مسابقه اعلام شده ویژه در ایالات متحده، استاندارد جدیدی برای رمزگذاری بلوک به تصویب رسید که به نام AES (استاندارد رمزگذاری پیشرفته)، که مبتنی بر رمز بود ریجندیلتوسط متخصصان بلژیکی ساخته شده است. این رمز در پایان سخنرانی مورد بحث قرار می گیرد.

    تنظیمات اصلی DES: اندازه بلوک 64 بیت، طول کلید 56 بیت، تعداد دور - 16. DESیک شبکه کلاسیک فیشتل با دو شاخه است. این الگوریتم یک بلوک داده ورودی 64 بیتی را در چندین دور به بلوک خروجی 64 بیتی تبدیل می کند. استاندارد DESبر اساس استفاده ترکیبی از جایگشت، جایگزینی و gamuting ساخته شده است. داده های رمزگذاری شده باید به صورت باینری باشند.

    رمزگذاری

    ساختار کلی DESدر شکل نشان داده شده است. 4.1. فرآیند رمزگذاری هر بلوک 64 بیتی از داده های منبع را می توان به سه مرحله تقسیم کرد:

    1. آماده سازی اولیه بلوک داده؛
    2. 16 دور "چرخه اصلی"؛
    3. پردازش نهایی بلوک داده

    در مرحله اول، جایگشت اولیهبلوک اصلی متن 64 بیتی که طی آن بیت ها به روش خاصی مرتب می شوند.

    در مرحله بعدی (اصلی)، بلوک به دو بخش (شاخه) هر کدام 32 بیت تقسیم می شود. شاخه سمت راست با استفاده از تابع F و تابع مربوطه تبدیل می شود کلید جزئی، از کلید رمزگذاری اصلی با استفاده از یک الگوریتم تبدیل کلید ویژه به دست می آید. سپس داده ها بین شاخه های چپ و راست بلوک رد و بدل می شود. این کار 16 بار در یک چرخه تکرار می شود.

    در نهایت، در مرحله سوم، نتیجه به دست آمده پس از شانزده مرحله حلقه اصلی جایگشت می یابد. این جایگشت معکوس جایگشت اصلی است.


    برنج. 4.1.

    اجازه دهید تمام مراحل تبدیل رمزنگاری را طبق استاندارد با جزئیات بیشتری در نظر بگیریم DES.

    در مرحله اول، بلوک 64 بیتی از داده های منبع تحت یک جایگشت اولیه قرار می گیرد. در ادبیات، این عمل گاهی اوقات "سفید کردن" - سفید کردن نامیده می شود. در طول جایگشت اولیه، بیت های بلوک داده به روش خاصی دوباره مرتب می شوند. این عملیات مقداری "تصادفی" به پیام اصلی می دهد و امکان استفاده از تحلیل رمز با روش های آماری را کاهش می دهد.

    همزمان با جایگشت اولیه بلوک داده، جایگشت اولیه 56 بیت کلید انجام می شود. از انجیر 4.1. مشاهده می شود که در هر یک از دورها از کلید جزئی 48 بیتی مربوطه K i استفاده شده است. کلیدهای K i طبق یک الگوریتم مشخص و با استفاده از هر یک از بیت های کلید اولیه چندین بار به دست می آیند. در هر دور، کلید 56 بیتی به دو نیمه 28 بیتی تقسیم می شود. سپس نیمه ها بسته به عدد دور با یک یا دو ضربه به سمت چپ منتقل می شوند. پس از تغییر، 48 بیت از 56 بیت به روش خاصی انتخاب می شوند. از آنجایی که این نه تنها زیرمجموعه ای از بیت ها را انتخاب می کند، بلکه ترتیب آنها را نیز تغییر می دهد، این عملیات را عملیات "swap-swap" می نامند. نتیجه آن مجموعه ای از 48 بیت است. به طور متوسط، هر بیت از کلید اصلی 56 بیتی در 14 مورد از 16 کلید فرعی استفاده می شود، اگرچه همه بیت ها به تعداد یکسان استفاده نمی شوند.

    در مرحله بعد، چرخه تبدیل اصلی انجام می شود که بر اساس شبکه فیشتل سازماندهی شده و از 16 دور یکسان تشکیل شده است. در این حالت، در هر دور (شکل 4.2)، یک مقدار متوسط ​​64 بیتی به دست می آید که سپس در دور بعدی پردازش می شود.


    برنج. 4.2.

    شاخه های چپ و راست هر مقدار میانی به عنوان مقادیر 32 بیتی جداگانه در نظر گرفته می شوند که L و R نشان داده می شوند.

    ابتدا، سمت راست بلوک R i با استفاده از جدولی که یک جایگشت به اضافه یک پسوند 16 بیتی را تعریف می کند، به 48 بیت گسترش می یابد. این عمل اندازه نیمه سمت راست را متناسب با اندازه کلید برای انجام عملیات XOR تنظیم می کند. علاوه بر این، با توجه به اجرای این عملیات، وابستگی تمام بیت های نتیجه به بیت های داده اصلی و کلید سریعتر افزایش می یابد (به این "اثر بهمنی" می گویند). هرچه اثر بهمن هنگام استفاده از یک یا آن الگوریتم رمزگذاری قوی تر باشد، بهتر است.

    پس از انجام جایگشت بسط، مقدار 48 بیتی حاصل با کلید فرعی 48 بیتی K i XOR می شود. سپس مقدار 48 بیتی حاصل به ورودی بلوک جایگزینی S (از انگلیسی. تعویض - جایگزینی)، نتیجهکه مقدار 32 بیتی است. تعویض در هشت جعبه جایگزین یا هشت جعبه S انجام می شود. هنگام اجرای این DES، روی کاغذ کاملاً پیچیده به نظر می رسد، چه رسد به اجرای نرم افزار آن! برنامه ای با عملکرد صحیح و بهینه کاملاً مطابق با DESاحتمالا فقط برای برنامه نویسان با تجربه. برخی از مشکلات در پیاده سازی نرم افزار، مانند جایگشت اولیه یا جایگشت گسترش ایجاد می شود. این مشکلات مربوط به این واقعیت است که در ابتدا برای اجرای آن برنامه ریزی شده بود DESفقط در سخت افزار تمامی عملیات استفاده شده در استاندارد توسط واحدهای سخت افزاری به راحتی انجام می شود و هیچ مشکلی در اجرا وجود ندارد. با این حال، مدتی پس از انتشار استاندارد، توسعه‌دهندگان نرم‌افزار تصمیم گرفتند که کنار ننشینند و همچنین به ایجاد سیستم‌های رمزگذاری بپردازند. به علاوه DESهم در سخت افزار و هم در نرم افزار پیاده سازی می شود.

    الگوریتم DES

    مزایای اصلی الگوریتم DES:

    فقط یک کلید 56 بیتی استفاده می شود.

    · پس از رمزگذاری یک پیام با استفاده از یک بسته، می توانید از هر بسته دیگری برای رمزگشایی آن استفاده کنید.

    سادگی نسبی الگوریتم سرعت بالای پردازش اطلاعات را تضمین می کند.

    پایداری نسبتاً بالای الگوریتم

    DES بلوک های 64 بیتی داده را با استفاده از یک کلید 56 بیتی رمزگذاری می کند. رمزگشایی در DES عملیات معکوس رمزگذاری است و با تکرار عملیات رمزگذاری به ترتیب معکوس انجام می شود (علی رغم آشکار بودن ظاهر، همیشه این کار انجام نمی شود. بعداً رمزهایی را در نظر خواهیم گرفت که در آنها رمزگذاری و رمزگشایی با استفاده از الگوریتم های مختلف انجام می شود).

    فرآیند رمزگذاری شامل یک مبادله بیت اولیه بلوک 64 بیتی، شانزده دور رمزگذاری و در نهایت یک تعویض بیت معکوس است (شکل 1).

    بلافاصله باید توجه داشت که تمام جداول ارائه شده در این مقاله استاندارد هستند و بنابراین باید بدون تغییر در اجرای الگوریتم شما گنجانده شوند. تمامی جایگشت ها و کدهای موجود در جداول توسط توسعه دهندگان به گونه ای انتخاب می شوند که با انتخاب کلید، فرآیند رمزگشایی را تا حد امکان دشوار می کنند. ساختار الگوریتم DES در شکل 2 نشان داده شده است.

    شکل 2. ساختار الگوریتم رمزگذاری DES

    اجازه دهید بلوک 8 بایتی بعدی T از فایل خوانده شود، که با استفاده از IP ماتریس جایگشت اولیه (جدول 1) به صورت زیر تبدیل می شود: بیت 58 بلوک T تبدیل به بیت 1، بیت 50 - بیت 2 و غیره می شود که نتیجه: T(0) = IP(T).

    دنباله بیت حاصل T(0) به دو دنباله 32 بیتی هر کدام تقسیم می شود: L(0) - بیت های چپ یا بالا، R(0) - بیت های راست یا پایین.

    جدول 1: ماتریس جایگشت اولیه IP

    58 50 42 34 26 18 10 02

    60 52 44 36 28 20 12 04

    62 54 46 38 30 22 14 06

    64 56 48 40 32 24 16 08

    57 49 41 33 25 17 09 01

    59 51 43 35 27 19 11 03

    61 53 45 37 29 21 13 05

    63 55 47 39 31 23 15 07

    سپس رمزگذاری انجام می شود که شامل 16 تکرار است. نتیجه تکرار i با فرمول های زیر توصیف می شود:

    R(i) = L(i-1) xor f(R(i-1)، K(i))،

    جایی که xor عملیات انحصاری OR است.

    تابع f را تابع رمزگذاری می نامند. آرگومان های آن دنباله 32 بیتی R(i-1) به دست آمده در تکرار (i-1) و کلید 48 بیتی K(i) است که نتیجه تبدیل کلید 64 بیتی K است. تابع رمزگذاری و الگوریتم استخراج کلیدهای K(i) در زیر توضیح داده شده است.

    در تکرار شانزدهم، دنباله‌های R(16) و L(16) (بدون جایگشت) به دست می‌آیند که در یک دنباله 64 بیتی R(16)L(16) به هم متصل می‌شوند.

    سپس موقعیت بیت های این دنباله مطابق با ماتریس IP -1 (جدول 2) بازآرایی می شوند.

    جدول 2: IP-1 ماتریس جایگشت معکوس

    40 08 48 16 56 24 64 32

    39 07 47 15 55 23 63 31

    38 06 46 14 54 22 62 30

    37 05 45 13 53 21 61 29

    36 04 44 12 52 20 60 28

    35 03 43 11 51 19 59 27

    34 02 42 10 50 18 58 26

    33 01 41 09 49 17 57 25

    ماتریس های IP -1 و IP به شرح زیر مرتبط هستند: مقدار عنصر اول ماتریس IP -1 40 است و مقدار عنصر 40 ماتریس IP 1 است، مقدار دوم. عنصر ماتریس IP -1 8 است و مقدار IP عنصر ماتریس 8 برابر با 2 است و به همین ترتیب.

    فرآیند رمزگشایی داده ها معکوس فرآیند رمزگذاری است. تمام مراحل باید به ترتیب معکوس انجام شود. این بدان معناست که داده‌هایی که باید رمزگشایی شوند، ابتدا طبق ماتریس IP-1 مرتب می‌شوند و سپس همان عملیات روی دنباله بیت R(16)L(16) مانند فرآیند رمزگذاری انجام می‌شود، اما به ترتیب معکوس.

    فرآیند رمزگشایی تکراری را می توان با فرمول های زیر توصیف کرد:

    R(i-1) = L(i)، i = 1، 2، ...، 16;

    L(i-1) = R(i) xor f(L(i)، K(i))، i = 1، 2، ...، 16.

    در تکرار شانزدهم، دنباله های L(0) و R(0) به دست می آیند که به دنباله 64 بیتی L(0)R(0) الحاق می شوند.

    سپس موقعیت بیت های این دنباله مطابق با ماتریس IP بازآرایی می شوند. نتیجه این جایگشت توالی 64 بیتی اصلی است.

    اکنون تابع رمزگذاری f(R(i-1),K(i)) را در نظر بگیرید. به صورت شماتیک در شکل نشان داده شده است. 3.


    شکل 3. محاسبه تابع f(R(i-1)، K(i))

    برای محاسبه مقدار تابع f از توابع ماتریسی زیر استفاده می شود:

    E - گسترش یک دنباله 32 بیتی به 48 بیت،

    S1، S2، ...، S8 - تبدیل بلوک 6 بیتی به بلوک 4 بیتی،

    P یک جایگشت بیت در یک دنباله 32 بیتی است.

    تابع فرمت E در جدول 3 تعریف شده است. طبق این جدول، 3 بیت اول E(R(i-1)) بیت های 32، 1، و 2 و آخرین بیت های 31، 32 و 1 هستند.

    جدول 3: تابع پسوند E

    32 01 02 03 04 05

    04 05 06 07 08 09

    08 09 10 11 12 13

    12 13 14 15 16 17

    16 17 18 19 20 21

    20 21 22 23 24 25

    24 25 26 27 28 29

    28 29 30 31 32 01

    نتیجه تابع E(R(i-1)) یک دنباله 48 بیتی است که مدول 2 (عملیات xor) با کلید 48 بیتی K(i) اضافه می شود. نتیجه یک دنباله 48 بیتی است که به هشت بلوک 6 بیتی تقسیم می شود. به این معنا که:

    E(R(i-1)) xor K(i) = B(1)B(2)...B(8) .

    توابع S1، S2، ...، S8 در جدول 4 تعریف شده است.

    جدول 4

    به جدول.4. توضیحات تکمیلی لازم است اجازه دهید ورودی تابع ماتریس Sj یک بلوک 6 بیتی B(j) = b1b2b3b4b5b6 باشد، سپس عدد دو بیتی b1b6 شماره ردیف ماتریس و b2b3b4b5 شماره ستون را نشان می دهد. نتیجه Sj(B(j)) یک عنصر 4 بیتی است که در تقاطع سطر و ستون مشخص شده قرار دارد.

    برای مثال، B(1)=011011. سپس S1(В(1)) در تقاطع سطر 1 و ستون 13 قرار می گیرد. ستون 13 ردیف 1 روی 5 تنظیم می شود. بنابراین S1(011011)=0101.

    با اعمال عملیات انتخاب برای هر یک از بلوک های 6 بیتی B(1)، B(2)، ...، B(8)، یک دنباله 32 بیتی S1(B(1)) S2(B(2) به دست می آوریم. ))S3(B(3))...S8(B(8)).

    در نهایت، برای به دست آوردن نتیجه تابع رمزگذاری، باید بیت های این دنباله را دوباره مرتب کنید. برای این کار از تابع جایگشت P استفاده می شود (جدول 5). در ترتیب ورودی، بیت ها برعکس می شوند به طوری که بیت 16 تبدیل به بیت 1، بیت 7 به بیت 2 و غیره می شود.

    جدول 5: تابع جایگشت P

    بدین ترتیب،

    f(R(i-1)، K(i)) = P(S1(B(1))،...S8(B(8)))

    برای تکمیل توضیحات الگوریتم رمزگذاری داده ها، باید الگوریتمی برای بدست آوردن کلیدهای 48 بیتی K(i)، i=1...16 ارائه دهیم. در هر تکرار، یک مقدار کلید جدید K(i) استفاده می‌شود که از کلید اولیه K محاسبه می‌شود. K یک بلوک ۶۴ بیتی با هشت بیت برابری است که در موقعیت‌های ۸،۱۶،۲۴،۳۲،۴۰،۴۸ قرار دارند. 56، 64.

    برای حذف بیت های کنترل و تنظیم مجدد بقیه، از تابع G آماده سازی اولیه کلید استفاده می شود (جدول 6).

    جدول 6

    ماتریس G آماده سازی کلید اولیه

    57 49 41 33 25 17 09

    01 58 50 42 34 26 18

    10 02 59 51 43 35 27

    19 11 03 60 52 44 36

    63 55 47 39 31 23 15

    07 62 54 46 38 30 22

    14 06 61 53 45 37 29

    21 13 05 28 20 12 04

    نتیجه تبدیل G(K) به دو بلوک 28 بیتی C(0) و D(0) تقسیم می شود و C(0) از بیت های 57، 49، ...، 44، 36 از K تشکیل می شود. کلید، و D(0) از بیت های 63، 55، ...، 12، 4 کلید K تشکیل شده است. پس از تعریف C(0) و D(0)، C(i) و D(i)، i =1...16، به صورت بازگشتی تعریف می شوند. برای این کار، مطابق جدول 7، یک شیفت چرخه ای به چپ با یک یا دو بیت، بسته به تعداد تکرار اعمال می شود.

    جدول 7

    جدول شیفت برای محاسبه کلید

    شماره تکرار شیفت (بیت)
    01 1
    02 1
    03 2
    04 2
    05 2
    06 2
    07 2
    08 2
    09 1
    10 2
    11 2
    12 2
    13 2
    14 2
    15 2
    16 1

    مقدار حاصل دوباره مطابق با ماتریس H (جدول 8) "مخلوط" می شود.

    جدول 8: ماتریس تکمیل کلید H

    14 17 11 24 01 05

    03 28 15 06 21 10

    23 19 12 04 26 08

    16 07 27 20 13 02

    41 52 31 37 47 55

    30 40 51 45 33 48

    44 49 39 56 34 53

    46 42 50 36 29 32

    کلید K(i) از بیت های 14، 17، ...، 29، 32 دنباله C(i)D(i) تشکیل شده است. بدین ترتیب:

    K(i) = H(C(i)D(i))

    بلوک دیاگرام الگوریتم محاسبه کلید در شکل 4 نشان داده شده است.

    شکل 4. بلوک دیاگرام الگوریتم محاسبه کلید K(i)

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

    K(15)، سپس - K(14) و غیره. اکنون باید درک کنید که چرا نویسنده قویاً استفاده از ماتریس های بالا را توصیه می کند. اگر خودسرانه شروع به رفتن کنید، باید یک رمز بسیار مخفی دریافت کنید، اما خودتان بعداً نمی توانید آن را باز کنید!

    حالت های عملکرد الگوریتم DES

    برای ارضای کامل ترین نیازهای سیستم های رمزگذاری تجاری، چندین حالت از عملکرد الگوریتم DES پیاده سازی شده است. پرکاربردترین حالت ها عبارتند از:

    کتاب کدهای الکترونیکی (کتاب کدهای الکترونیکی) - ECB;

    زنجیره ای از بلوک های دیجیتال (Cipher Block Chaining) - CBC.

    بازخورد دیجیتال (Cipher Feedback) - CFB;

    بازخورد خارجی (بازخورد خروجی) - OFB.

    در این حالت، فایل منبع M به بلوک های 64 بیتی (هر کدام 8 بایت) تقسیم می شود: M = M(1)M(2)...M(n). هر یک از این بلوک ها به طور مستقل با استفاده از همان کلید رمزگذاری کدگذاری می شوند (شکل 5). مزیت اصلی این الگوریتم سهولت اجرا است. نقطه ضعف آن مقاومت نسبتاً ضعیف در برابر رمزنگاران ماهر است.

    استاندارد DES برای محافظت در برابر دسترسی غیرمجاز به اطلاعات حساس اما طبقه بندی نشده در دولت و سازمان های تجاری ایالات متحده طراحی شده است. الگوریتم زیربنای استاندارد بسیار سریع گسترش یافت و قبلاً در سال 1980 توسط مؤسسه ملی استاندارد و فناوری ایالات متحده تأیید شد. از این نقطه به بعد، DES نه تنها در نام، بلکه در واقع به یک استاندارد تبدیل می شود. نرم افزارها و میکروکامپیوترهای تخصصی برای رمزگذاری و رمزگشایی اطلاعات در شبکه های داده طراحی شده اند.

    تا به امروز، DES رایج ترین الگوریتم مورد استفاده در سیستم های امنیتی اطلاعات تجاری است. علاوه بر این، اجرای الگوریتم DES در چنین سیستم هایی نشانه خوش سلیقه ای می شود.

    مزایای اصلی الگوریتم DES:

    فقط یک کلید 56 بیتی استفاده می شود.

    · پس از رمزگذاری یک پیام با استفاده از یک بسته، می توانید از هر بسته دیگری برای رمزگشایی آن استفاده کنید.

    سادگی نسبی الگوریتم سرعت بالای پردازش اطلاعات را تضمین می کند.

    پایداری نسبتاً بالای الگوریتم

    DES بلوک های 64 بیتی داده را با استفاده از یک کلید 56 بیتی رمزگذاری می کند. رمزگشایی در DES عملیات معکوس رمزگذاری است و با تکرار عملیات رمزگذاری به ترتیب معکوس انجام می شود (علی رغم آشکار بودن ظاهر، همیشه این کار انجام نمی شود. بعداً رمزهایی را در نظر خواهیم گرفت که در آنها رمزگذاری و رمزگشایی با استفاده از الگوریتم های مختلف انجام می شود).

    فرآیند رمزگذاری شامل یک مبادله بیت اولیه بلوک 64 بیتی، شانزده دور رمزگذاری و در نهایت یک تعویض بیت معکوس است (شکل 1).

    بلافاصله باید توجه داشت که تمام جداول ارائه شده در این مقاله استاندارد هستند و بنابراین باید بدون تغییر در اجرای الگوریتم شما گنجانده شوند. تمامی جایگشت ها و کدهای موجود در جداول توسط توسعه دهندگان به گونه ای انتخاب می شوند که با انتخاب کلید، فرآیند رمزگشایی را تا حد امکان دشوار می کنند. ساختار الگوریتم DES در شکل نشان داده شده است. 2.

    برنج. 2.

    اجازه دهید بلوک 8 بایتی بعدی T از فایل خوانده شود که با استفاده از IP ماتریس جایگشت اولیه (جدول 1) به صورت زیر تبدیل می شود: بیت 58 بلوک T تبدیل به بیت 1 می شود، بیت 50 به بیت 2 تبدیل می شود و غیره. نتیجه: T(0) = IP(T).

    دنباله بیت حاصل T(0) به دو دنباله 32 بیتی هر کدام تقسیم می شود: L(0) - بیت های چپ یا بالا، R(0) - بیت های راست یا پایین.

    جدول 1: ماتریس جایگشت اولیه IP

    58 50 42 34 26 18 10 02

    60 52 44 36 28 20 12 04

    62 54 46 38 30 22 14 06

    64 56 48 40 32 24 16 08

    57 49 41 33 25 17 09 01

    59 51 43 35 27 19 11 03

    61 53 45 37 29 21 13 05

    63 55 47 39 31 23 15 07

    سپس رمزگذاری انجام می شود که شامل 16 تکرار است. نتیجه تکرار i با فرمول های زیر توصیف می شود:

    R(i) = L (i-1) xor f (R(i-1)، K(i))،

    جایی که xor عملیات انحصاری OR است.

    تابع f را تابع رمزگذاری می نامند. آرگومان های آن دنباله 32 بیتی R (i-1) به دست آمده در تکرار (i-1) - امین و کلید 48 بیتی K(i) است که نتیجه تبدیل کلید 64 بیتی K است. به طور مفصل، تابع رمزگذاری و الگوریتم استخراج کلیدهای K(i) در زیر توضیح داده شده است.

    در تکرار شانزدهم، دنباله‌های R(16) و L(16) (بدون جایگشت) به دست می‌آیند که در یک دنباله 64 بیتی R(16) L(16) الحاق می‌شوند.

    سپس موقعیت بیت های این دنباله مطابق با ماتریس IP -1 (جدول 2) بازآرایی می شوند.

    جدول 2: IP-1 ماتریس جایگشت معکوس

    40 08 48 16 56 24 64 32

    39 07 47 15 55 23 63 31

    38 06 46 14 54 22 62 30

    37 05 45 13 53 21 61 29

    36 04 44 12 52 20 60 28

    35 03 43 11 51 19 59 27

    34 02 42 10 50 18 58 26

    33 01 41 09 49 17 57 25

    ماتریس های IP -1 و IP به شرح زیر مرتبط هستند: مقدار عنصر اول ماتریس IP -1 40 است و مقدار عنصر 40 ماتریس IP 1 است، مقدار دوم. عنصر ماتریس IP -1 8 است و مقدار IP عنصر ماتریس 8 برابر با 2 است و به همین ترتیب.

    فرآیند رمزگشایی داده ها معکوس فرآیند رمزگذاری است. تمام مراحل باید به ترتیب معکوس انجام شود. این بدان معنی است که داده هایی که باید رمزگشایی شوند، ابتدا مطابق با ماتریس IP-1 مرتب می شوند و سپس همان عملیات روی دنباله بیت R(16) L(16) مانند فرآیند رمزگذاری انجام می شود، اما به ترتیب معکوس.

    فرآیند رمزگشایی تکراری را می توان با فرمول های زیر توصیف کرد:

    R(i-1) = L(i)، i = 1، 2،…، 16;

    L (i-1) = R(i) xor f (L(i)، K(i))، i = 1، 2،…، 16.

    در تکرار شانزدهم، دنباله های L(0) و R(0) به دست می آیند که به دنباله 64 بیتی L(0) R(0) الحاق می شوند.

    سپس موقعیت بیت های این دنباله مطابق با ماتریس IP بازآرایی می شوند. نتیجه این جایگشت توالی 64 بیتی اصلی است.

    اکنون تابع رمزگذاری f (R(i-1)، K(i)) را در نظر بگیرید. به صورت شماتیک در شکل نشان داده شده است. 3.


    برنج. 3.

    برای محاسبه مقدار تابع f از توابع ماتریسی زیر استفاده می شود:

    E - گسترش یک دنباله 32 بیتی به 48 بیت،

    S1، S2،…، S8 - تبدیل بلوک 6 بیتی به 4 بیتی،

    P یک جایگشت بیت در یک دنباله 32 بیتی است.

    تابع پسوند E در جدول تعریف شده است. 3. طبق این جدول، 3 بیت اول E (R(i-1)) بیت های 32، 1 و 2 و آخرین بیت های 31، 32 و 1 هستند.

    جدول 3: تابع پسوند E

    32 01 02 03 04 05

    04 05 06 07 08 09

    08 09 10 11 12 13

    12 13 14 15 16 17

    16 17 18 19 20 21

    20 21 22 23 24 25

    24 25 26 27 28 29

    28 29 30 31 32 01

    نتیجه تابع E (R(i-1)) یک دنباله 48 بیتی است که مدول 2 (عملیات xor) با کلید 48 بیتی K(i) اضافه می شود. یک دنباله 48 بیتی بدست می آید که به هشت بلوک 6 بیتی B(1) B(2) B(3) B(4) B(5) B(6) B(7) B(8) تقسیم می شود. به این معنا که:

    E (R(i-1)) xor K(i) = B(1) B(2)… B(8).

    توابع S1، S2، ...، S8 در جدول تعریف شده اند. 4.

    جدول 4

    به میز. 4. توضیحات تکمیلی لازم است. اجازه دهید ورودی تابع ماتریس Sj یک بلوک 6 بیتی B(j) = b1b2b3b4b5b6 باشد، سپس عدد دو بیتی b1b6 شماره ردیف ماتریس و b2b3b4b5 شماره ستون را نشان می دهد. نتیجه Sj (B(j)) یک عنصر 4 بیتی خواهد بود که در تقاطع سطر و ستون مشخص شده قرار دارد.

    برای مثال، B(1)=011011. سپس S1 (B(1)) در تقاطع ردیف 1 و ستون 13 قرار می گیرد. ستون 13 ردیف 1 روی 5 تنظیم می شود. بنابراین S1 (011011)=0101.

    با اعمال عملیات انتخاب برای هر یک از بلوک های 6 بیتی B(1)، B(2)،…، B(8)، یک دنباله 32 بیتی S1 (B(1)) S2 (B(2)) به دست می آوریم. S3 (B( 3))… S8 (B(8)).

    در نهایت، برای به دست آوردن نتیجه تابع رمزگذاری، باید بیت های این دنباله را دوباره مرتب کنید. برای این کار از تابع جایگشت P استفاده می شود (جدول 5). در ترتیب ورودی، بیت ها برعکس می شوند به طوری که بیت 16 تبدیل به بیت 1، بیت 7 به بیت 2 و غیره می شود.

    جدول 5: تابع جایگشت P

    بدین ترتیب،

    f (R(i-1)، K(i)) = P (S1 (B(1))،… S8 (B(8)))

    برای تکمیل توضیحات الگوریتم رمزگذاری داده ها، باید یک الگوریتم برای بدست آوردن کلیدهای 48 بیتی K(i)، i=1…16 ارائه دهیم. در هر تکرار، یک مقدار کلید جدید K(i) استفاده می‌شود که از کلید اولیه K محاسبه می‌شود. K یک بلوک ۶۴ بیتی با هشت بیت برابری است که در موقعیت‌های ۸،۱۶،۲۴،۳۲،۴۰،۴۸ قرار دارند. 56، 64.

    برای حذف بیت های کنترل و تنظیم مجدد بقیه، از تابع G آماده سازی اولیه کلید استفاده می شود (جدول 6).

    جدول 6

    ماتریس G آماده سازی کلید اولیه

    57 49 41 33 25 17 09

    01 58 50 42 34 26 18

    10 02 59 51 43 35 27

    19 11 03 60 52 44 36

    63 55 47 39 31 23 15

    07 62 54 46 38 30 22

    14 06 61 53 45 37 29

    21 13 05 28 20 12 04

    نتیجه تبدیل G(K) به دو بلوک 28 بیتی C(0) و D(0) تقسیم می شود که در آن C(0) از بیت های 57، 49،…، 44، 36 کلید K تشکیل شده است. و D(0) متشکل از بیت های 63، 55،...، 12، 4 کلید K خواهد بود. پس از تعیین C(0) و D(0)، C(i) و D(i)، i=1 …16، به صورت بازگشتی تعیین می شوند. برای این کار، طبق جدول 1، یک یا دو بیت، بسته به تعداد تکرار، یک تغییر چرخه ای به چپ اعمال می شود. 7.

    جدول 7. جدول شیفت برای محاسبه کلید

    شماره تکرار

    شیفت (بیت)

    مقدار حاصل دوباره مطابق با ماتریس H (جدول 8) "مخلوط" می شود.

    جدول 8: ماتریس تکمیل کلید H

    14 17 11 24 01 05

    03 28 15 06 21 10

    23 19 12 04 26 08

    16 07 27 20 13 02

    41 52 31 37 47 55

    30 40 51 45 33 48

    44 49 39 56 34 53

    46 42 50 36 29 32

    کلید K(i) از بیت های 14، 17،...، 29، 32 از دنباله C(i) D(i) تشکیل شده است. بدین ترتیب:

    K(i) = H (C(i) D(i))

    بلوک دیاگرام الگوریتم محاسبه کلید در شکل نشان داده شده است. 4.

    برنج. 4.

    بازیابی متن اصلی طبق این الگوریتم انجام می شود، اما ابتدا از کلید K(15)، سپس K(14) و غیره استفاده می کنید. اکنون باید درک کنید که چرا نویسنده قویاً استفاده از ماتریس های بالا را توصیه می کند. اگر خودسرانه شروع به رفتن کنید، باید یک رمز بسیار مخفی دریافت کنید، اما خودتان بعداً نمی توانید آن را باز کنید!

    DES(استاندارد رمزگذاری داده ها) - یک الگوریتم رمزگذاری متقارن که در آن از یک کلید برای رمزگذاری و رمزگشایی داده ها استفاده می شود. DES توسط IBM توسعه داده شد و در سال 1977 توسط دولت ایالات متحده به عنوان یک استاندارد رسمی (FTPS 46-3) تایید شد. DES دارای بلوک های 64 بیتی و ساختار شبکه Feistel 16 چرخه است؛ از یک کلید 56 بیتی برای رمزگذاری استفاده می کند. این الگوریتم از ترکیبی از تبدیل های غیر خطی (S-box) و خطی (E, IP, IP-1 جایگشت) استفاده می کند. چندین حالت برای DES توصیه می شود:
  • حالت کتاب کد الکترونیکی (ECB - کتاب کد الکترونیکی)،
  • حالت زنجیره بلوکی (CBC - رمزارز بلوک زنجیره ای)،
  • حالت بازخورد متن رمزی (CFB - بازخورد رمز)،
  • حالت بازخورد خروجی (OFB - Output Feed Back).

    رمز را مسدود کنید

    داده های ورودی برای رمز بلوکی یک بلوک n بیت و یک کلید k بیت است. در خروجی، پس از اعمال تبدیل رمزگذاری، یک بلوک رمزگذاری شده n بیتی به دست می آید و تفاوت های جزئی در داده های ورودی، به عنوان یک قاعده، منجر به تغییر قابل توجهی در نتیجه می شود. رمزهای بلاک با اعمال مکرر تغییر شکل‌های اولیه در بلوک‌های متن مبدأ پیاده‌سازی می‌شوند.
    تحولات اساسی:
  • تبدیل پیچیده در یک بخش محلی بلوک.
  • تبدیل آسان بین قطعات بلوک. از آنجایی که تبدیل بلوک به بلوک انجام می شود، به عنوان یک مرحله جداگانه، لازم است داده های منبع را به بلوک هایی با اندازه مورد نیاز تقسیم کنیم. در این مورد، صرف نظر از فرمت داده های منبع، خواه اسناد متنی، تصاویر یا فایل های دیگر باشد، آنها باید به شکل باینری تفسیر شوند و تنها پس از آن به بلوک ها تقسیم شوند. تمامی موارد فوق با ابزارهای نرم افزاری و سخت افزاری قابل پیاده سازی هستند.

    شبکه Feistel تبدیل می شود

    این یک تبدیل بر روی بردارها (بلوک) است که نشان دهنده نیمه چپ و راست ثبت تغییر است. الگوریتم DES از تبدیل رو به جلو توسط شبکه Feistel در رمزگذاری (نگاه کنید به شکل 1) و تبدیل معکوس توسط شبکه Feistel به رمزگشایی (نگاه کنید به شکل 2) استفاده می کند.

    طرح رمزگذاری DES


    متن منبع - بلوک 64 بیتی.
    متن رمز یک بلوک 64 بیتی است.

    فرآیند رمزگذاری شامل یک جایگشت اولیه، 16 چرخه رمزگذاری و یک جایگشت نهایی است.
    طرح دقیق الگوریتم DES را در نظر بگیرید:
    L i R i = 1,2\ldots. نیمه چپ و راست بلوک 64 بیتی L i R i
    k i - کلیدهای 48 بیتی
    f - تابع رمزگذاری
    IP - جایگشت اولیه
    IP -1 جایگشت نهایی است. طبق جدول، 3 بیت اول بلوک IP(T) حاصل پس از جایگشت IP اولیه، بیت های 58، 50، 42 بلوک ورودی T و 3 بیت آخر آن، بیت های 23، 15، 7 ورودی هستند. مسدود کردن. علاوه بر این، IP (T) بلوک 64 بیتی در 16 چرخه تبدیل Feistel شرکت می کند.

    16 چرخه تبدیل Feistel:

    IP(T) را به دو قسمت L 0، R 0 تقسیم کنید، که در آن L 0، R 0 به ترتیب 32 بیت بالا و 32 بیت کم بلوک T0 IP(T) = L 0 R 0 هستند.

    فرض کنید T i -1 = L i -1 R i -1 نتیجه تکرار (i-1) باشد، سپس نتیجه تکرار i-ام Ti = L i R i با:

    L i = R i - 1نیمه چپ L i برابر است با نیمه راست بردار قبلی L i - 1 R i - 1 . و نیمه راست R i جمع بیتی L i - 1 و f(R i - 1 , k i) مدول 2 است.

    در 16 چرخه تبدیل Feistel، تابع f نقش رمزگذاری را ایفا می کند. اجازه دهید تابع f را با جزئیات در نظر بگیریم.

    آرگومان های تابع f یک بردار 32 بیتی R i - 1، یک کلید 48 بیتی k i هستند که نتیجه تبدیل کلید رمز اصلی 56 بیتی k هستند.

    برای محاسبه تابع f از تابع فرمت E، تبدیل S متشکل از 8 تبدیل S-box و جایگشت P استفاده می شود.

    تابع E بردار 32 بیتی R i - 1 را به بردار 48 بیتی E(R i - 1) با کپی کردن چند بیت از R i - 1 گسترش می دهد، در حالی که ترتیب بیت بردار E(R i - 1) مشخص شده است. در جدول 2. سه بیت اول بردار E(R i - 1) بیت های 32، 1، 2 بردار R i -1 هستند. جدول 2 نشان می دهد که بیت های 1، 4، 5، 8، 9، 12، 13، 16، 17، 20، 21، 24، 25، 28، 29، 32 کپی شده اند. 3 بیت آخر بردار E(Ri - 1) بیت های 31، 32، 1 بردار R i - 1 هستند. بلوک E(R i-1) که پس از جایگشت به دست می آید، مدول 2 با کلیدهای k i اضافه می شود و سپس به عنوان هشت بلوک متوالی B 1 ,B 2 ,...B 8 ارائه می شود.
    E(R i - 1) = B 1 B 2 ...B 8
    هر B j یک بلوک 6 بیتی است. بعد، هر یک از بلوک های B j با استفاده از تبدیل های S j به یک بلوک 4 بیتی B" j تبدیل می شود. تبدیل های S j توسط جدول 3 تعیین می شوند. فرض کنید B 3 = 101111 و می خواهیم B" 3 را پیدا کنیم. . اولین و آخرین رقم B 3 نماد دودویی عدد a است، 0 مقدار تابع f(R i - 1, k i) (32 بیت) با تغییر دادن P اعمال شده به بلوک 32 بیتی B به دست می آید. 1 B" 2 ...B" 8. جایگشت P توسط جدول 4 آورده شده است.
    f(R i - 1,k i) = P(B" 1 B" 2 ...B" 8)
    طبق جدول 4، چهار بیت اول بردار حاصل پس از عمل تابع f، بیت های 16، 7، 20، 21 بردار B" 1 B" 2 ...B" 8 هستند.

    تولید کلیدهای k i.
    کلیدهای k i از کلید اولیه k (56 بیت = 7 بایت یا 7 کاراکتر در اسکی) به این ترتیب به دست می آیند. هشت بیت واقع در موقعیت های 8، 16، 24، 32، 40، 48، 56، 64 به کلید k اضافه می شود تا هر بایت دارای تعداد فرد یک باشد. این برای تشخیص خطا در تعویض کلید و ذخیره سازی استفاده می شود. سپس یک جایگشت برای کلید توسعه یافته ایجاد می شود (به جز بیت های اضافه شده 8، 16، 24، 32، 40، 48، 56، 64). چنین جایگشتی در جدول 5 تعریف شده است.

    این جایگشت توسط دو بلوک C 0 و D 0 هر کدام 28 بیت تعریف می شود. 3 بیت اول C 0 بیت های 57، 49، 41 کلید توسعه یافته هستند. و سه بیت اول D 0 بیت های 63، 55، 47 کلید توسعه یافته هستند. C i ,D i i=1,2,3… از C i - 1 , D i - 1 با یک یا دو شیفت چرخه ای چپ مطابق جدول 6 بدست می آید.

    کلید k i , i=1,…16 شامل 48 بیت است که مطابق جدول 7 از بیت های بردار C i D i (56 بیت) انتخاب شده است. بیت های اول و دوم k i بیت های 14 و 17 بردار C هستند. من D i

    جایگشت نهایی IP - 1 روی T 16 عمل می کند و برای بازیابی موقعیت استفاده می شود. این برعکس جایگشت IP است. جایگشت نهایی توسط جدول 8 تعیین می شود.
    حالت های استفاده از DES DES را می توان در چهار حالت استفاده کرد.

  • حالت کتاب کد الکترونیکی (ECB): استفاده رایج از DES به عنوان رمز بلوکی (شکل 7 را ببینید).
  • حالت زنجیره ای بلوک (CBC - زنجیره بلوک رمز) (شکل 8 را ببینید). هر بلوک بعدی C i>=1، قبل از رمزگذاری، مدول 2 با بلوک بعدی متن ساده M i + 1 اضافه می شود. بردار C 0 بردار اولیه است، روزانه تغییر می کند و مخفی نگه داشته می شود.
  • حالت بازخورد رمز (CFB) (شکل 9 را ببینید). در حالت CFB، یک بلوک "گاما" Z 0 ,Z 1 ,...Z i = DESk(C i - 1) تولید می شود. بردار اولیه C 0 مخفی نگه داشته می شود.
  • حالت بازخورد خروجی (OFB) (شکل 10 را ببینید). در حالت OFB، یک بلوک "گاما" تولید می شود Z 0 ,Z 1 ,... , i>=1
  • پیاده سازی حالت ECB آسان است، اما تحلیل انتقادی امکان پذیر است
  • در حالت‌های ECB و OFB، اعوجاج در حین انتقال یک بلوک متن رمزی 64 بیتی Ci منجر به اعوجاج پس از رمزگشایی تنها بلوک باز مربوطه M i می‌شود، بنابراین این حالت‌ها برای انتقال از طریق کانال‌های ارتباطی با تعداد زیادی اعوجاج استفاده می‌شوند.
  • در حالت های CBC و CFB، اعوجاج در حین انتقال یک بلوک متن رمزی C i منجر به اعوجاج در گیرنده حداکثر دو بلوک متن ساده Mi,M i + 1 می شود. تغییر Mi منجر به تغییر در تمام بلوک های دیگر M i + 1 ,M i + 2 می شود ... این ویژگی برای ایجاد کد احراز هویت پیام استفاده می شود.