• استانداردهای رمز را مسدود کنید. الگوریتم های رمزگذاری DES و AES

    که ANSI آن را الگوریتم رمزگذاری داده DEA (الگوریتم رمزگذاری داده ها) می نامد و ISO - DEA-1 در 20 سال به استاندارد جهانی تبدیل شده است. در طول سال‌های عمر خود، در برابر هجوم حملات مختلف مقاومت کرده و با محدودیت‌های خاصی، همچنان مقاوم در برابر کریپتو محسوب می‌شود.

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

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

    نمای کلی چرخه تبدیل:

    اگر L i و R i دو نیمه چپ و راست حاصل از تکرار i هستند، Ki کلید 48 بیتی حلقه i است و f تابعی است که همه جانشینی ها، جایگشت ها و XOR ها را با کلید انجام می دهد، سپس یک حلقه تبدیل را می توان به صورت زیر تصور کرد:

    با در نظر گرفتن جایگزینی F i (*) و جایگشت T (*)، چرخه تبدیل را می توان همانطور که در شکل انجام می شود نشان داد.

    می توان دید که هر چرخه DES یک رمز ترکیبی با دو تبدیل متوالی است - جایگزینی F i (*) و جایگشت T (*) (به جز آخرین چرخه شانزدهم که جایگشت حذف شده است).

    تعویض:

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

    یک دگرگونی است زیرا

    F i (F i (L i -1، Ri -1)) = F i (R i -1، L i -1) ⊕ (f (R i -1، K i))) = (R i - 1، L i -1 ⊕(f (Ri -1، K i)) ⊕ (f (Ri -1، K i))) = (L i -1، Ri -1)

    یک تعویض

    T (L i ', R i ') = (R i ', L i ')،

    همچنین یک دگرگونی است، زیرا

    T (T (L i ', R i')) = T (R i ', L i ') = L i ', R i'

    اگر جایگشت های اولیه و نهایی را به عنوان (IP) و (IP) - 1 تعیین کنیم، تبدیل مستقیم DES (رمزگذاری) تابع را پیاده سازی می کند:

    DES = (IP) F 1 TF 2 T ... F 15 TF 16 (IP) − 1

    و تبدیل معکوس DES (رمزگشایی) تابع:

    DES - 1 = (IP) -1 F 16 TF 15 T ... F 2 TF 1 (IP).

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


    یعنی اگر از کلیدهای K 1 , K 2 , K 3 , ..., K 16 برای رمزگذاری استفاده می شد در این صورت کلیدهای رمزگشایی K 16 , K 15 , K 14 , ..., K 1 خواهند بود. الگوریتم فقط از محاسبات استاندارد اعداد 64 بیتی و عملیات منطقی، بنابراین پیاده سازی آن در سخت افزار آسان است.

    DES روی یک بلوک 64 بیتی از متن ساده کار می کند. پس از جایگشت اولیه، بلوک به دو نیمه راست و چپ هر کدام 32 بیت تقسیم می شود. سپس 16 تبدیل (تابع f) انجام می شود که در آن داده ها با کلید ترکیب می شوند. پس از چرخه شانزدهم، نیمه راست و چپ با هم ترکیب می شوند و الگوریتم با یک جایگشت نهایی (معکوس به حالت اولیه) به پایان می رسد. در هر چرخه (شکل را ببینید)، بیت های کلید جابجا می شوند و سپس 48 بیت از 56 بیت کلید انتخاب می شوند. نیمه سمت راست داده ها با یک جایگشت گسترده به 48 بیت افزایش می یابد، XOR با 48 بیت کلید جابجا شده و جابجا شده، از 8 جعبه S عبور داده می شود تا 32 بیت جدید تشکیل شود، و دوباره جابجا می شود. این چهار عمل توسط تابع f انجام می شود.

    سپس نتیجه f با استفاده از XOR دیگر با نیمه چپ ترکیب می شود. در نتیجه این اقدامات، نیمه راست جدید ظاهر می شود و سمت راست قدیمی به نیمه چپ جدید تبدیل می شود. این اقدامات 16 بار تکرار می شوند و 16 چرخه DES را تشکیل می دهند.

    استاندارد روسیه - GOST 28147-89

    GOST 28147-89 یک رمز بلوک با یک کلید 256 بیتی و 32 چرخه تبدیل است که بر روی بلوک های 64 بیتی کار می کند. الگوریتم رمز از یک کلید اضافی نیز استفاده می کند که در زیر به آن پرداخته می شود. برای رمزگذاری، متن ساده ابتدا به دو نیمه چپ و راست L و R تقسیم می شود. در چرخه i، از کلید فرعی K i استفاده می شود:

    L i = R i -1،
    R i = L i -1 ⊕ (f (R i -1، K i)).

    تابع f به صورت زیر پیاده سازی می شود. ابتدا، نیمه سمت راست و کلید فرعی i-امین مدول 2 32 اضافه می شوند. نتیجه به هشت دنباله 4 بیتی تقسیم می شود که هر کدام به ورودی S-box خود تغذیه می شود. GOST از هشت S-box مختلف استفاده می کند، 4 بیت اول به S-box اول، 4 بیت دوم به S-box دوم و ... هر S-box جایگشتی از اعداد از 0 تا 15 است. برای مثال، S-box ممکن است به شکل زیر باشد: 7،10،2،4،15،9،0،3،6،12،5،13،1،8،11. در این حالت، اگر ورودی S-box 0 باشد، خروجی آن 7 است. اگر ورودی 1، خروجی 10 و غیره باشد. هر هشت S-box متفاوت هستند، در واقع مواد کلید اضافی هستند. خروجی‌های هر هشت S-box در یک کلمه 32 بیتی ترکیب می‌شوند، سپس کل کلمه با 11 بیت به سمت چپ چرخانده می‌شود. در نهایت، نتیجه با نیمه چپ XOR می شود و در نتیجه یک نیمه راست جدید ایجاد می شود و نیمه راست به نیمه چپ جدید تبدیل می شود. برای تولید کلیدهای فرعی، کلید 256 بیتی اصلی به هشت بلوک 32 بیتی تقسیم می شود: k 1 , k 2 , …, k 8 . هر چرخه از کلید فرعی خود استفاده می کند. رمزگشایی به همان روش رمزگذاری انجام می شود، اما ترتیب کلیدهای فرعی k i برعکس است. استاندارد نحوه تولید S-box ها را تعریف نمی کند.

    تفاوت های اصلی بین DES و GOST

    تفاوت اصلی بین DES و GOST به شرح زیر است:

    • DES از یک روش پیچیده برای تولید کلیدهای فرعی از کلیدها استفاده می کند. در GOST، این روش بسیار ساده است.
    • DES دارای یک کلید 56 بیتی است، در حالی که GOST دارای یک کلید 256 بیتی است. اگر جایگشت های مخفی جعبه های S را اضافه کنیم، مقدار کل اطلاعات مخفی GOST تقریباً 610 بیت خواهد بود.
    • جعبه‌های DES S دارای ورودی‌ها و خروجی‌های 6 بیتی و جعبه‌های GOST S دارای ورودی و خروجی‌های 4 بیتی هستند. هر دو الگوریتم از هشت جعبه S استفاده می کنند، اما اندازه جعبه S GOST یک چهارم اندازه جعبه S DES است.
    • DES از جایگشت های نامنظم به نام P-block استفاده می کند و GOST از یک تغییر چرخه ای به چپ 11 بیت استفاده می کند.
    • در DES 16 چرخه و در GOST - 32 وجود دارد.

    حمله قدرت به GOST کاملاً ناامیدکننده است. GOST از یک کلید 256 بیتی استفاده می کند و اگر S-box های مخفی را در نظر بگیرید، طول کلید حتی بیشتر خواهد شد. به نظر می رسد GOST نسبت به DES در برابر تحلیل خطی و دیفرانسیل مقاوم تر باشد. اگرچه جعبه‌های S تصادفی GOST، با مقداری انتخاب، استحکام رمزنگاری بالایی را در مقایسه با جعبه‌های S ثابت DES تضمین نمی‌کنند، اما محرمانه بودن آن‌ها مقاومت GOST را در برابر تحلیل‌های دیجیتالی و خطی افزایش می‌دهد. علاوه بر این، اثربخشی این روش‌های رمزنگاری به تعداد چرخه‌های تبدیل بستگی دارد - هر چه چرخه‌ها بیشتر باشد، تحلیل رمز دشوارتر است. GOST دو برابر چرخه DES استفاده می کند، که ممکن است منجر به شکست در تحلیل رمزنگاری دیفرانسیل و خطی شود.

    GOST از جایگشت بسط که در DES وجود دارد استفاده نمی کند. حذف این جایگشت از DES با کاهش اثر بهمن، آن را ضعیف می کند. منطقی است که فرض کنیم عدم وجود چنین عملیاتی در GOST تأثیر منفی بر قدرت رمزنگاری آن دارد. از نقطه نظر قدرت رمزنگاری، عملیات جمع حسابی مورد استفاده در GOST بدتر از عملیات XOR در DES نیست.

    تفاوت اصلی استفاده از یک تغییر چرخه ای در GOST به جای جایگشت است. تعویض DES اثر بهمنی را افزایش می دهد. در GOST، تغییر در یک بیت ورودی، یک جعبه S از یک چرخه تبدیل را تحت تاثیر قرار می دهد، که سپس بر دو جعبه S چرخه بعدی، سپس سه بلوک از چرخه بعدی و غیره تاثیر می گذارد. قبل از اینکه تغییر یک بیت ورودی بر هر بیت از نتیجه تأثیر بگذارد، هشت چرخه طول می کشد. در DES، این فقط پنج چرخه طول می کشد. با این حال، GOST شامل 32 چرخه و DES فقط 16 چرخه است.

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

    وروبیوا ای.، لوکیانوا آ.

    • آموزش

    سلام %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

    مزایای اصلی الگوریتم 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). مزیت اصلی این الگوریتم سهولت اجرا است. نقطه ضعف آن مقاومت نسبتاً ضعیف در برابر رمزنگاران ماهر است.

    بیش از 30 سال از پذیرش الگوریتم DES به عنوان استاندارد رمزگذاری ایالات متحده می گذرد. DES الگوریتم رمزگذاری با غنی ترین و جالب ترین تاریخ است.

    تاریخچه ایجاد الگوریتم

    یکی از مشهورترین رمزنگاران جهان به نام بروس اشنایر در کتاب معروف خود به نام Applied Cryptography مشکلات کاربران ابزارهای امنیت اطلاعات در اوایل دهه 70 را اینگونه بیان کرد. قرن بیستم (البته، ما در مورد کاربران آن سوی پرده آهنین صحبت می کنیم):

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

    تقریباً هر ابزار رمزگذاری یک «جعبه سیاه» با محتوای نسبتاً مبهم بود: از چه الگوریتم رمزگذاری استفاده می‌شود، از نظر رمزنگاری چقدر قوی است، آیا به درستی پیاده‌سازی می‌شود، آیا کلیدهای رمزگذاری ایجاد می‌شوند، ذخیره می‌شوند، به درستی استفاده می‌شوند، آیا ویژگی‌های غیرمستندی وجود دارد یا خیر. درج شده توسط توسعه دهندگان در ابزار و غیره - تمام این اطلاعات بسیار مهم در دسترس اکثریت قریب به اتفاق خریداران ابزارهای رمزنگاری نبود.

    این مشکل توسط اداره ملی استاندارد (NBS) ایالات متحده آمریکا انجام شده است. در نتیجه، در سال 1973، اولین مسابقه آزاد برای یک استاندارد رمزگذاری اعلام شد. NBS مایل بود الگوریتم‌های متقاضی را که معیارهای زیر را برآورده می‌کنند برای انتخاب یک استاندارد بررسی کند:

    الگوریتم باید از نظر رمزنگاری قوی باشد.

    الگوریتم باید سریع باشد.

    ساختار الگوریتم باید واضح و دقیق باشد.

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

    الگوریتم باید به راحتی برای اهداف مختلف قابل اجرا باشد.

    الگوریتم باید به راحتی در سخت افزار بر روی پایه عنصر موجود پیاده سازی شود.

    فرض بر این بود که سازمان‌ها یا متخصصان علاقه‌مند مشخصات دقیق الگوریتم‌ها را به NBS ارسال می‌کنند که برای اجرای آن‌ها کافی است، یعنی بدون هیچ «لکه‌های سفید». همچنین فرض بر این بود که الگوریتم برای استفاده عمومی توسط NBS تأیید می شود، تمام محدودیت های ثبت اختراع و صادرات از آن حذف می شود، در نتیجه چنین استانداردی باید تمام مشکلات سازگاری ابزارهای رمزگذاری را حل کند. علاوه بر این، NBS وظایف تأیید ابزارهای رمزگذاری را بر عهده گرفت - یعنی "جعبه های سیاه" باید به طور غیرقابل برگشتی به چیزی از گذشته تبدیل می شد.

    در واقع، تنها یک الگوریتم متقاضی وجود داشت: این الگوریتم رمزگذاری لوسیفر بود که توسط CMM توسعه یافت. (به بخش 3.31 مراجعه کنید).در طی دو سال، الگوریتم اصلاح شد:

    در مرحله اول، NBS به همراه آژانس امنیت ملی (NSA، NSA - آژانس امنیت ملی) ایالات متحده تجزیه و تحلیل کاملی از الگوریتم انجام دادند که منجر به پردازش نسبتاً قابل توجه آن شد.

    ثانیاً نظرات و انتقادات کلیه سازمانها و افراد ذینفع جهت بررسی پذیرفته شد.

    در نتیجه کار مشترک IBM، NBS و NSA، در ژانویه 1977، DES به عنوان یک استاندارد ایالات متحده (آخرین نسخه این استاندارد در سند موجود است) برای یک الگوریتم رمزگذاری داده ها (به استثنای اطلاعات با درجه بالا) منتشر شد. درجه رازداری). الگوریتم DES توسط UM ثبت شد، اما NBS در واقع مجوز رایگان و نامحدودی برای استفاده از این الگوریتم دریافت کرد. نام جایگزین اما کمتر مورد استفاده برای الگوریتم، DEA (الگوریتم رمزگذاری داده ها) است.

    ویژگی های اصلی و ساختار الگوریتم

    الگوریتم DES اطلاعات را در بلوک های 64 بیتی با استفاده از یک کلید رمزگذاری 64 بیتی که فقط از 56 بیت استفاده می کند، رمزگذاری می کند (رویه گسترش کلید به طور مفصل در زیر توضیح داده شده است).

    رمزگذاری اطلاعات به شرح زیر انجام می شود (شکل 3.56):

    1. یک جایگشت اولیه بر روی یک بلوک داده 64 بیتی مطابق جدول انجام می شود. 3.16.

    جدول 3.16

    جدول به صورت زیر تفسیر می شود: مقدار بیت ورودی 58 (از این پس همه بیت ها از چپ به راست شماره گذاری می شوند، از 1 شروع می شود) در بیت خروجی 1 قرار می گیرد، مقدار بیت 50 در بیت 2 قرار می گیرد و غیره.



    2. نتیجه عملیات قبلی به 2 بلوک فرعی 32 بیتی (در هر

    برنج. 3.56 مشخص شده است A 0و B 0)، که بر روی آن 16 دور ساخته شده است

    تحولات زیر:

    همانطور که در بالا ذکر شد، از یک کلید رمزگذاری 64 بیتی، الگوریتم DES تنها از 56 بیت استفاده می کند. هر 8 بیت حذف می شود و به هیچ وجه در الگوریتم استفاده نمی شود و استفاده از بیت های باقی مانده از کلید رمزگذاری در پیاده سازی الگوریتم DES توسط استاندارد محدود نمی شود. روش استخراج 56 بیت مهم از یک کلید 64 بیتی در شکل. 3.59 به عنوان E تعیین شده است. این روش علاوه بر استخراج، جایگشت بیت های کلید را مطابق جدول نیز انجام می دهد. 3.19 و 3.20.


    جدول 3.19

    جدول 3.20


    در نتیجه جایگشت، دو مقدار 28 بیتی C و D تشکیل می شود. جدول 3.19 انتخابی از بیت های کلیدی را برای C، Table تعریف می کند. 3.20 - برای D.

    سپس 16 دور تبدیل انجام می شود که هر یک از آنها یکی از کلیدهای گرد K t را به دست می دهد. در هر دور از روند گسترش کلید، اقدامات زیر انجام می شود:

    1. مقادیر فعلی C و Dبا تعداد متغیری از بیت ها به سمت چپ بچرخد پ.برای دورهای 1، 2، 9 و 16 پ= 1، دور باقی مانده توسط 2 بیت چرخش می شود.

    2. با و Dدر یک مقدار 56 بیتی ترکیب می شوند که یک جایگشت فشرده سازی CP برای آن اعمال می شود، که منجر به یک کلید گرد 48 بیتی K می شود (. جایگشت فشرده سازی مطابق جدول 3.21 انجام می شود.

    جدول 3.21

    هنگام رمزگشایی داده ها، می توانید از همان روش گسترش کلید استفاده کنید، اما کلیدهای گرد را به ترتیب معکوس اعمال کنید. گزینه دیگری نیز وجود دارد: در هر دور روند گسترش کلید، به جای جابجایی دایره ای به چپ، یک جابجایی دایره ای به راست با n بیت انجام دهید، جایی که rc' = 0 برای دور اول، و '=1 برای دور 2 ، 9، 16 و n = 2 برای دورهای باقی مانده. چنین رویه گسترش کلید بلافاصله کلیدهای گرد مورد نیاز برای رمزگشایی را ارائه می دهد.

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

    رایج ترین و شناخته شده ترین الگوریتم رمزگذاری متقارن است DES (استاندارد رمزگذاری داده ها). این الگوریتم در سال 1977 توسعه یافت و در سال 1980 NIST (موسسه ملی استاندارد و فناوری، ایالات متحده آمریکا) به عنوان یک استاندارد پذیرفته شد.

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

    شکل 4. الگوریتم DES

    شکل روشی را نشان می دهد که از یک کلید 56 بیتی استفاده می کند. در ابتدا، کلید به ورودی تابع جایگشت تغذیه می شود. سپس، برای هر یک از 16 دور، کلید فرعی K i ترکیبی از یک جابجایی چرخه ای چپ و یک جایگشت است. تابع جایگشت برای هر دور یکسان است، اما کلیدهای فرعی K i برای هر دور به دلیل جابجایی مکرر بیت های کلید متفاوت است.

    جایگشت اولیه و معکوس آن توسط یک جدول استاندارد تعیین می شود. اگر M دلخواه 64 بیتی است، آنگاه X = IP(M) - 64 بیت جانشین شده است. اگر تابع جایگشت معکوس Y = IP-1 (X) = IP-1 (IP(M)) را اعمال کنیم، دنباله بیت اصلی را بدست می آوریم.

    توضیحات دور دس

    دنباله ای از تبدیل های استفاده شده در هر دور را در نظر بگیرید.

    شکل 5. تصویر یک دور از الگوریتم DES

    یک بلوک ورودی 64 بیتی از 16 عبور می کند دور، در حالی که در هر تکرار یک مقدار متوسط ​​64 بیتی به دست می آید. قسمت های چپ و راست هر مقدار میانی به عنوان مقادیر 32 بیتی جداگانه در نظر گرفته می شوند که با L و R نشان داده می شوند. هر تکرار را می توان به صورت زیر توصیف کرد:

    R i = L i -1 F(R i -1، K i)

    بنابراین، خروجی نیمه چپ L i برابر با ورودی نیمه راست R i-1 است. خروجی نیمه راست Ri نتیجه XORing L i-1 و تابع F بسته به R i-1 و Ki است.

    بیایید تابع F را با جزئیات بیشتری در نظر بگیریم. R i که به ورودی تابع F وارد می شود دارای طول 32 بیت است. ابتدا، R i با استفاده از جدولی که یک جایگشت به اضافه یک بسط 16 بیتی را تعریف می کند، به 48 بیت گسترش می یابد. گسترش به این صورت است. 32 بیت به گروه های 4 بیتی تقسیم می شوند و سپس با اضافه کردن بیت های شدید از دو گروه مجاور به 6 بیت گسترش می یابند. به عنوان مثال، اگر بخشی از پیام ورودی

    افغ ایجکل منوپ . . .

    سپس نتیجه گسترش پیام است

    دغی هیجکلم لمنوپق . . .

    سپس مقدار 48 بیتی به دست آمده با کلید فرعی 48 بیتی K i XOR می شود. سپس مقدار 48 بیتی به تابع جایگزینی وارد می شود و در نتیجه یک مقدار 32 بیتی ایجاد می شود.

    جایگزینی شامل هشت جعبه S است که هر کدام 6 بیت به عنوان ورودی دریافت می کنند و 4 بیت به عنوان خروجی تولید می کنند. این تبدیل ها با جداول خاصی تعریف می شوند. اولین و آخرین بیت مقدار ورودی S-box شماره ردیف جدول را تعیین می کند و 4 بیت میانی شماره ستون را تعیین می کند. تقاطع یک سطر و یک ستون یک خروجی 4 بیتی را تعریف می کند. به عنوان مثال، اگر ورودی 011011 باشد، شماره ردیف 01 (ردیف 1) و شماره ستون 1101 (ستون 13) است. مقدار در ردیف 1 و ستون 13 5 است، یعنی. خروجی 0101 است.

    در مرحله بعد، مقدار 32 بیتی حاصل با استفاده از جایگشت P پردازش می‌شود که هدف آن مرتب کردن مجدد بیت‌ها تا حد امکان است تا در دور بعدی رمزگذاری، با احتمال زیاد، هر بیت توسط یک S متفاوت پردازش شود. -جعبه

    کلید یک دور K i از 48 بیت تشکیل شده است. کلیدهای K i با الگوریتم زیر به دست می آیند. کلید 56 بیتی که به عنوان ورودی الگوریتم استفاده می‌شود، ابتدا مطابق جدول Permuted Choice 1 (PC-1) جابه‌جا می‌شود. کلید 56 بیتی به دو قسمت 28 بیتی تقسیم می شود که به ترتیب با C0 و D0 مشخص می شوند. در هر دور، C i و D i به طور مستقل بسته به عدد دور، 1 یا 2 بیت به سمت چپ می چرخند. مقادیر به دست آمده ورودی دور بعدی هستند. آنها همچنین یک ورودی به Permuted Choice 2 (PC-2) هستند، که یک مقدار خروجی 48 بیتی تولید می کند که ورودی تابع F(R i-1، K i) است.

    فرآیند رمزگشایی مشابه فرآیند رمزگذاری است. الگوریتم از متن رمزی به عنوان ورودی استفاده می کند، اما کلیدهای K i به ترتیب معکوس استفاده می شوند. K 16 در دور اول استفاده می شود، K 1 در دور آخر استفاده می شود. اجازه دهید خروجی دور رمزگذاری i-امین L i ||R i باشد. سپس ورودی متناظر دور (16-i) رمزگشایی R i ||L i خواهد بود.

    پس از آخرین دور فرآیند رمزگشایی، دو نیمه خروجی با هم عوض می شوند تا ورودی جایگشت نهایی IP-1 R 16 ||L 16 باشد. خروجی این مرحله متن ساده است.