الگوریتم تبدیل رمزنگاری مطابق با GOST 28147 89. استاندارد رمزگذاری داده های داخلی

الگوریتم رمزگذاری GOST 28147-89. روش جایگزینی ساده - آرشیو WASM.RU

«تا زنده ای، نمیر، به این دنیا نگاه کن.
بسیاری در اینجا روح مرده دارند - آنها در درون مرده اند.
اما آنها راه می روند و می خندند، بدون اینکه بدانند که نیستند،
او به من گفت: ساعت مرگت را عجله نکن.

آریا، "بالا آنجا"

2.1 شبکه های Feistel.
2.2 رمز بلوک GOST 28147-89

3.1 اطلاعات کلیدی
3.2 مرحله اصلی تحول رمزنگاری

3.3 حلقه های اصلی:32-Z, 32-R.

4.1 پیاده سازی مرحله اصلی تحول رمزارزها
4.2 افزایش سرعت الگوریتم
5. الزامات اطلاعات کلیدی
6. فهرست ادبیات استفاده شده
7. قدردانی ها

معرفی.

این سند تلاش من برای توصیف روشی برای جایگزینی ساده الگوریتم رمزگذاری GOST 28147-89 با ساده ترین، اما، با این وجود، زبان فنی است. پس از خواندن شش نکته اول، خواننده نظر خود را در مورد نحوه انجام این کار بیان می کند.

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

اطلاعات اولیه در مورد رمزهای بلوکی

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

تاریخچه توسعه رمزهای بلوکی با اوایل دهه 70 مرتبط است، زمانی که IBM با درک نیاز به محافظت از اطلاعات در هنگام انتقال داده ها از طریق کانال های ارتباطی رایانه ای، شروع به اجرای برنامه تحقیقاتی خود اختصاص داده شده به حفاظت از اطلاعات در شبکه های الکترونیکی کرد. از جمله رمزنگاری

گروهی از محققان - توسعه دهندگان شرکت IBM که شروع به مطالعه سیستم های رمزگذاری با یک طرح استفاده از کلید متقارن کردند، توسط دکتر Dr. هورست فیستل.

2.1 شبکه های Feistel

معماری روش رمزگذاری جدید ارائه شده توسط Feistel در ادبیات کلاسیک "معماری Feistel" نامیده می شود، اما در حال حاضر در ادبیات روسی و خارجی از اصطلاح معتبرتری استفاده می شود - "شبکه Feistel" یا Feistel's NetWork. متعاقباً رمز «لوسیفر» بر روی این معماری ساخته شد - که بعداً منتشر شد و موج جدیدی از علاقه را به رمزنگاری به طور کلی ایجاد کرد.

ایده معماری "شبکه Feistel" به شرح زیر است: جریان ورودی اطلاعات به بلوک های n بیتی در اندازه تقسیم می شود که در آن n یک عدد زوج است. هر بلوک به دو قسمت تقسیم می شود - L و R، سپس این قسمت ها به یک رمز بلوک تکراری وارد می شوند، که در آن نتیجه مرحله j با نتیجه مرحله قبلی j-1 تعیین می شود! این را می توان با یک مثال نشان داد:

برنج. 1

در کجا، تابع A عمل اصلی رمز بلوکی است. این می تواند یک عمل ساده باشد، مانند یک عملیات XOR، یا می تواند شکل پیچیده تری به عنوان دنباله ای از یک سری اقدامات ساده داشته باشد - اضافه کردن مدول، تغییر به چپ، جایگزینی عنصر و غیره، با هم، این اقدامات ساده شکل می گیرند. به اصطلاح - مرحله اصلی تحول رمزنگاری.

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

برای اینکه ایده شبکه های Feistel در نهایت روشن شود، ساده ترین مورد نشان داده شده در آن را در نظر بگیرید برنج. 1، جایی که در تابع A - عملیات "mod 2" ("xor") وجود خواهد داشت، اما این ساده ترینیک مورد، در یک موقعیت جدی تر، برای مثال، پنهان کردن اطلاعات با اهمیت ملی، عملکرد A ممکن است پیچیده تر باشد (تا آنجا که من دیدم، تابع A واقعاً بسیار پیچیده است):

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

L = 1110b، R = 0101، K = 1111b

یک رمز دریافت کنید

1. (R + K) mod 2 4 = Smod، Smod = 0100b

2. (Smod + L) mod 2 = Sxor، Sxor = 1010b

3. L = R، R = Sxor

L = 0101b، R = 1010b

بیایید اقدامات خود را توضیح دهیم:

1. این عملیات اضافه کردن mod 2 4 است. در عمل، این عملیات به جمع ساده خلاصه می شود، جایی که باید دو عدد را جمع کنیم و انتقال به رقم 5 را نادیده بگیریم. از آنجایی که اگر نماها را بالای ارقام نمایش دودویی یک عدد قرار دهیم، یک ضریب چهار بالای رقم پنجم وجود خواهد داشت، بیایید به شکل زیر نگاهی بیندازیم که عملکرد عملیات ما را نشان می دهد:

برنج. 2

در اینجا من با یک فلش به اکسوننت ها اشاره کردم، همانطور که می بینید نتیجه باید 10100 می شد، اما از آنجایی که در عملیات mod 2 4 انتقال نادیده گرفته می شود، 0100 می گیریم.

2. این عملیات در ادبیات mod 2 نامیده می شود، در زبان اسمبلی توسط دستور پیاده سازی می شود XOR... اما نام صحیح تر آن mod 2 1 است. بدون این عملیات منحصربفرد، ساختن یک الگوریتم رمزگذاری سریع و به راحتی قابل پیاده سازی و در عین حال به سختی امکان پذیر است، به طوری که هنوز از نظر رمزنگاری کاملاً قوی باشد. منحصر به فرد بودن این عملیات در این است که خود برعکس است! مثلاً اگر عدد A با عدد B XOR شود در نتیجه B بدست می آید، در آینده کافی است اعداد B و C را مجدداً XOR بین یکدیگر قرار دهیم تا مقدار قبلی A بدست آید!

در این عملیات 1010 را با اعداد 1110 و 0100 بدست آوردیم، برای برگرداندن 1110 کافی است اعداد 0100 و 1010 را OverXOR کنید! جزئیات بیشتر در مورد این عملیات را می توانید در مقاله ضمیمه سایت مشاهده کنید. www.wasm.ru, « راهنمای ابتدایی برایالگوریتم های تشخیص خطا CRC_» نویسنده ای که راس ان. ویلیامز... نکته ای در این کار وجود دارد - " 5. حساب باینری بدون خط فاصله". در این مقاله است که عملیات شرح داده شده است. xor!من فریاد می زنم زیرا در این مقاله این عملیات به قدری برنامه ریزی شده است که خواننده نه تنها نحوه عملکرد این عملیات را درک می کند، بلکه حتی آن را شروع می کند. ببینید، بشنوید و احساس کنید!

3. این عمل ضروری است تا در هنگام رمزگشایی بتوان مقادیر اولیه را از رمز به دست آورد.

2.2 رمز بلوکی GOST 28147-89

الگوریتم رمزگذاری GOST 28147 - 89 متعلق به دسته رمزهای بلوکی است که مطابق با معماری شبکه های متوازن Feistel عمل می کنند، که در آن دو بخش از بلوک اطلاعات انتخاب شده دارای اندازه مساوی هستند. این الگوریتم در اعماق بخش هشتم KGB توسعه یافت، اکنون به FAPSI تبدیل شده و در سال 1989 تحت اتحاد جماهیر شوروی به عنوان استاندارد رمزگذاری فدراسیون روسیه ثبت شد.

برای اینکه این روش الگوریتم کار کند، لازم است اطلاعات را به بلوک هایی با اندازه 64 بیت تقسیم کرد. اطلاعات کلیدی زیر را ایجاد یا وارد سیستم رمزگذاری کنید: جدول کلید و جایگزین. انتخاب کلید و جدول جایگزین برای رمزگذاری باید بسیار جدی گرفته شود، زیرا این پایه و اساس امنیت اطلاعات شماست. برای اطلاع از الزامات اعمال شده بر روی کلید و جدول تعویض، به مورد "الزامات اطلاعات کلیدی" مراجعه کنید.

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

حداقل نظری

3.1 اطلاعات کلیدی

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

3.1.1. یک کلید دنباله ای از هشت عنصر است که هر کدام 32 بیت است. در ادامه با علامت K نشان خواهیم داد و عناصری که از آن تشکیل شده عبارتند از: k1، k2، k3، k4، k5، k6، k7، k8.

3.1.2 جدول جایگزینی - ماتریسی از هشت ردیف و شانزده ستون، از این پس - Hij. هر عنصر در تقاطع ردیف i و ستون j 4 بیت را اشغال می کند.

3.2 مرحله اساسی تبدیل رمزنگاری

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

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

  1. بخش اضافی بلوک R با عنصر کلیدی K mod 2 32 جمع می شود. من یک عملیات مشابه را در بالا توضیح دادم، در اینجا همان چیزی است که فقط توان "4" نیست، بلکه "32" است - نتیجه این عملیات در آینده Smod نشان داده می شود.
  2. نتیجه قبلی Smod را به عناصر چهار بیتی s7، s6، s5، s4، s3، s2، s1، s0 تقسیم کنید و آن را به تابع جایگزین تغذیه کنید. جایگزینی به شرح زیر است: عنصر Smod - si انتخاب می شود، از ابتدا با کمترین عنصر شروع می کنیم و با مقدار جدول جایگزینی i جایگزین می کنیم - ردیف و ستونی که با مقدار عنصر s به آنها اشاره می شود. من. ما به عنصر s i +1 می رویم و به همین ترتیب ادامه می دهیم تا زمانی که مقدار آخرین عنصر Smod را تغییر دهیم - نتیجه این عملیات به صورت Ssimple نشان داده می شود.
  3. در این عملیات، مقدار Ssimple را به صورت دوره‌ای 11 بیت به سمت چپ تغییر می‌دهیم و Srol را دریافت می‌کنیم.
  4. قسمت دوم بلوک L را انتخاب می کنیم و با Srol آن را mod 2 اضافه می کنیم، در نتیجه Sxor داریم.
  5. در این مرحله بخشی از بلوک L برابر با مقدار قسمت R می شود و قسمت R نیز به نوبه خود با نتیجه Sxor مقدار دهی اولیه می شود و در این مرحله عملکرد مرحله اصلی تکمیل می شود!

3.3 چرخه های اصلی: "32-З"، "32-Р".

برای رمزگذاری اطلاعات، باید آنها را به بلوک هایی با اندازه 64 بیت تقسیم کنید، البته آخرین بلوک می تواند کمتر از 64 بیت باشد. این واقعیت پاشنه آشیل این روش «تعویض آسان» است. از آنجایی که افزودن آن به 64 بیت کار بسیار مهمی برای افزایش قدرت رمزنگاری برنامه رمز و به این مکان حساس است، اگر در آرایه اطلاعات وجود داشته باشد و ممکن است وجود نداشته باشد (مثلاً یک فایل 512 بایتی! ) باید با مسئولیت بزرگ برخورد کرد!

بعد از اینکه اطلاعات را به بلوک‌ها تقسیم کردید، باید کلید را به عناصر تقسیم کنید:

K = k1، k2، k3، k4، k5، k6، k7، k8

رمزگذاری خود شامل استفاده از به اصطلاح چرخه های اساسی است. که به نوبه خود شامل n-امین مراحل اساسی تبدیل رمزنگاری می شود.

چرخه های اصلی برچسب گذاری شده اند، نحوه قرار دادن آن: n - m. جایی که n تعداد مراحل اساسی تبدیل رمزنگاری در چرخه پایه است و m "نوع" چرخه پایه است، یعنی. ما در مورد چه چیزی صحبت می کنیم، در مورد رمزگذاری "Z" یا رمزگذاری "R" داده ها.

چرخه رمزگذاری پایه 32-З شامل 32 مرحله اساسی تبدیل رمزنگاری است. بلوک N و یک عنصر از کلید K به تابعی وارد می شود که اقدامات مرحله را اجرا می کند، و اولین مرحله با k1، مرحله دوم بیش از نتیجه به دست آمده با عنصر k2 و غیره رخ می دهد. طبق طرح زیر:

k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8k8, k7, k6، k5، k4، k3، k2، k1

فرآیند رمزگشایی برای 32-P به روشی مشابه انجام می شود، اما عناصر کلیدی به ترتیب معکوس آورده شده اند:

k1, k2, k3, k4, k5, k6, k7, k8, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7، k6، k5، k4، k3، k2، k1

تمرین.

4.1 پیاده سازی مرحله اصلی تحول رمزنگاری

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

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

یک بلوک از اطلاعات N = 0102030405060708h را در نظر بگیرید، در اینجا قطعات L و R برابر هستند:

L = 01020304h، R = 05060708h، بیایید کلید را بگیریم:

K = as28 zw37 q839 7342ui23 8e2t wqm2 ewp1 '(اینها کدهای ASCII هستند، برای مشاهده نمایش هگزادسیمال، می توانید با فشار دادن کلید این فایل را در حالت view در Total Commander باز کنید. F3"و سپس کلید" 3 "). در این کلید، مقادیر عناصر به صورت زیر خواهد بود:

k1 = 'as28'، k2 = 'zw37'، k3 = 'q839'، k4 = '7342'

k5 = 'ui23'، k6 = '8e2t'، k7 = 'wqm2'، k8 = 'ewp1'

جدول تعویض زیر را نیز در نظر بگیرید:

برنج. 3

در اینجا، ردیف ها از 0 تا 7، ستون ها از 0 تا F شماره گذاری می شوند.

اخطار:تمام اطلاعات، از جمله کلید با جدول جایگزینی، به عنوان مثال برای در نظر گرفتن الگوریتم گرفته شده است!

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

1. قسمت R = 05060708h و عنصر کلید k1 = 'as28' را انتخاب کنید، در شکل هگزادسیمال عنصر کلید به این شکل خواهد بود: 61733238h. اکنون عملیات جمع بندی مود 2 32 را انجام می دهیم:

برنج. 4

همانطور که در شکل مشاهده می کنید، انتقالی در 33 بیت که با رنگ قرمز و با نماگر مشخص شده بود، نداشتیم. 32 ". و اگر مقادیر دیگری از R و عنصر کلیدی داشتیم، به خوبی می‌توانست این اتفاق بیفتد، و سپس آن را نادیده می‌گرفتیم و فقط از بیت‌هایی که با رنگ زرد مشخص شده‌اند استفاده می‌کردیم.

من این عمل را با دستور اسمبلر انجام می دهم اضافه کردن:

; eax = R، ebx = 'as28'

نتیجه این عملیات Smod = 66793940h

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

برنج. 5

من سعی کردم عناصر Smod را در شکل تجسم کنم، اما به هر حال توضیح می دهم:

s0 = 0، s1 = 4، s2 = 9، و غیره.

اکنون، با شروع با کمترین عنصر s0، جایگزینی را انجام می دهیم. یادآوری بند " 3.2 مرحله اساسی تبدیل رمزنگاری»I - row، s i - ستون، به دنبال مقدار در ردیف صفر و ستون صفر باشید:

شکل 6

بنابراین مقدار فعلی Smod 6679394 نیست 0 h و 6679394 5 ساعت

ما اقدام به جایگزینی s1 می کنیم، یعنی. چهار با استفاده از سطر اول و ستون چهارم (s1 = 4!). ما به تصویر نگاه می کنیم:

برنج. 7

حالا مقدار Smod است نه 667939 4 5h, 667939 2 5 ساعت من فرض می کنم که اکنون الگوریتم جایگزینی برای خواننده روشن است و می توانم بگویم که پس از نتیجه نهایی Ssimple مقدار زیر را خواهد داشت - 11e10325h.

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

  1. ما باید مقدار Ssimple حاصل را 11 بیت به سمت چپ تغییر دهیم.

برنج. هشت

همانطور که می بینید، این عمل بسیار ساده است و توسط یک دستور از زبان اسمبلی اجرا می شود - نقشو نتیجه این عملیات Srol 0819288Fh است.

4. اکنون قسمت L از بلوک اطلاعات ما باید با مقدار Srol XOR شود. من یک ماشین حساب از w2k sp4 می گیرم و Sxor = 091b2b8bh می گیرم.

5. این عمل نهایی است و ما به سادگی R را به مقدار قسمت L اختصاص می دهیم، پاک می کنیم و قسمت L را با مقدار Sxor مقداردهی اولیه می کنیم.

نتیجه نهایی:

L = 091b2b8bh، R = 01020304h

4.2 افزایش سرعت الگوریتم

حالا بیایید در مورد بهینه سازی الگوریتم برای سرعت صحبت کنیم. هنگام اجرای یک پروژه، باید در نظر داشت که برنامه ای که با ثبات ها بیشتر از حافظه کار می کند سریع ترین کار را انجام می دهد، و در اینجا این قضاوت نیز بسیار مهم است، زیرا بیش از یک بلوک اطلاعات به اندازه 32 عمل رمزگذاری!

زمانی که من الگوریتم رمزگذاری را در برنامه خود پیاده سازی کردم، موارد زیر را انجام دادم:

1. بخشی از بلوک L را به ثبات eax و R را به edx انتخاب کنید.

2. در رجیستر esi که با آدرس کلید توسعه یافته مقدار دهی اولیه شده است، در زیر بیشتر توضیح دهید.

3. در رجیستر ebx مقدار آدرس جدول توسعه یافته جایگزینی را اختصاص داده است، در زیر بیشتر در این مورد

4. اطلاعات موارد 1، 2، 3 را بسته به موقعیت به تابع چرخه پایه 32 - З یا 32 - Р منتقل کرد.

اگر به نمودار جریان عناصر کلیدی در پاراگراف نگاه کنید " چرخه های پایه: "32-З"، "32-Р""، سپس کلید ما برای چرخه پایه 32 - Z را می توان به صورت زیر نشان داد:

K 32-Z =

«As28»، «zw37»، «q839»، «7342»، «ui23»، «8e2t»، «wqm2»، «ewp1»،

«As28»، «zw37»، «q839»، «7342»، «ui23»، «8e2t»، «wqm2»، «ewp1»،

«Ewp1»، «wqm2»، «8e2t»، «ui23»، «7342»، «q839»، «zw37»، «as28»

آن ها از ابتدا k1، k2، k3، k4، k5، k6، k7، k8 وجود دارد - as28 ','zw37 ','q839 ',' 7342 ','ui23 ',' 8e2تی "،"wqm2 ','ewp1'این دنباله سه بار تکرار می شود. سپس عناصر به ترتیب معکوس می روند، به عنوان مثال: k8، k7، k6، k5، k4، k3، k2، k1 - «Ewp1»، «wqm2»، «8e2t»، «ui23»، «7342»، «q839»، «zw37»، «as28».

من عناصر موجود در آرایه را به ترتیبی که باید در 32 - Z تغذیه شوند، از قبل مرتب کردم. بنابراین، حافظه مورد نیاز را به صورت کلید در دست افزایش دادم، اما خود را از برخی فرآیندهای فکری که به آنها نیاز نداشتم نجات دادم و میزان حافظه را افزایش دادم. سرعت الگوریتم، برای با کاهش زمان دسترسی به حافظه! در اینجا من فقط کلید را برای 32 - З توصیف کردم، برای چرخه 32 - Р من همین کار را کردم، اما با استفاده از یک طرح متفاوت از تامین عناصر، که در پاراگراف نیز توضیح دادم " چرخه های اصلی: "32-W"، "32-P».

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

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

مثلاً باید عدد 66793940h را جایگزین کنیم. من آن را به شرح زیر ارائه خواهم کرد:

برنج. نه

حال اگر عناصر s1، s0 را بگیریم، i.e. بایت کم اهمیت، نتیجه تابع جایگزینی 25 ساعت خواهد بود! پس از خواندن مقاله آندری وینوکوروف، که در پاراگراف ذکر کردم " فهرست ادبیات استفاده شده"، در واقع متوجه می شوید که اگر دو خط بگیرید، می توانید یک آرایه دریافت کنید، که به شما امکان می دهد عناصر جایگزین را با استفاده از دستور اسمبلر به سرعت پیدا کنید. xlat.آنها می گویند از راه دیگری سریعتر امکان پذیر است، اما آندری وینوکوروف حدود چهار سال را صرف تحقیق در مورد الگوریتم های سریع برای اجرای GOST کرد! من فکر نمی کنم زمانی که چرخ را دارید، نباید دوباره اختراع کنید.

بنابراین، در مورد آرایه:

بیایید دو خط اول را صفر و اولی را یک آرایه 256 بایتی ایجاد کنیم. اکنون یک ویژگی را مشاهده می کنیم که اگر لازم باشد 00h تبدیل شود، نتیجه آن 75h خواهد بود (براساس شکل 3) - ما این مقدار را در آرایه در افست 00h قرار می دهیم. مقدار 01h را می گیریم، نتیجه تابع جایگزینی 79h، آن را در آرایه در افست 01 قرار می دهیم، و به همین ترتیب تا 0FFh، که به ما 0FCh می دهد، که در آرایه با آفست 0FFh قرار می دهیم. بنابراین ما یک جدول جایگزین توسعه یافته برای اولین گروه از ردیف ها دریافت کردیم: اولین و صفر. اما هنوز سه گروه وجود دارد: صفحه دوم، صفحه 3، صفحه سوم، صفحه 5، صفحه چهارم، صفحه 6، صفحه 7. ما با این سه گروه مانند گروه اول برخورد می کنیم. نتیجه یک جدول تعویض طولانی است!

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

lea ebx، extended_table_simple

mov eax، [شماره ای را که باید جایگزین شود قرار دهید]

ebx، 100h را اضافه کنید؛ به دو گره بعدی بروید

زیر ebx، 300h; به طوری که در آینده ebx به جدول اشاره می کند

حالا یک ویژگی دیگر، با اقدامات قبلی ما نه تنها جایگزین کردیم، بلکه عدد را 8 بیت به چپ منتقل کردیم! فقط باید 3 بیت دیگر را به چپ منتقل کنیم:

و نتیجه عمل rol eax 11 را می گیریم!

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

الزامات برای اطلاعات کلیدی

همانطور که در مقاله آندری وینوکوروف بیان شد، کلید بر اساس دو معیار انتخاب می شود:

معیار توزیع هم‌احتمال بیت‌ها بین مقادیر 1 و 0. معمولاً معیار توزیع هم‌احتمال بیت‌ها، معیار پیرسون ("chi-square") است.

این یعنی یک کلید، در اصل، هر عددی می تواند. یعنی وقتی بیت بعدی کلید تشکیل می شود، احتمال مقدار دهی اولیه آن یک یا صفر 50/50 است!

لطفاً توجه داشته باشید که کلید از هشت عنصر تشکیل شده است که هر کدام 32 بیت است، بنابراین 32 * 8 = 256 بیت در کلید وجود دارد و تعداد کلیدهای ممکن 2256 بیت است! آیا این به شما توجه نمی کند؟

معیار سری.

اگر به کلید خود که در پاراگراف دادم نگاه کنیم " 4.1 پیاده سازی مرحله اصلی تحول رمزنگاری», سپس متوجه خواهید شد که نماد زیر معتبر است:

برنج. ده

در یک عبارت، مقدار k 1 نباید نه در k 2 و نه در هیچ عنصر دیگری از کلید تکرار شود.

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

حالا در مورد انتخاب جدول تعویض ها:

حالا بیایید در مورد نحوه انتخاب جدول جایگزینی مناسب صحبت کنیم. نیاز اصلی برای انتخاب جداول جایگزین پدیده "تکرار نشدن" عناصر است که هر کدام از آنها 4 بیت اندازه دارند. همانطور که در بالا دیدید، هر ردیف از جدول جایگزینی شامل مقادیر 0h، 1h، 2h، 3h،…، 0fh است. بنابراین شرط اصلی این است که هر خط حاوی مقادیر 0h، 1h، 2h، ...، 0fh و هر یک از این مقادیر در یک کپی باشد. به عنوان مثال، دنباله:

1 2 3 4 5 6 7 8 9 A B C D E F

به طور کامل با این الزام مطابقت دارد، اما هنوز! توصیه نمی شود که چنین دنباله ای را به عنوان رشته انتخاب کنید. از آنجایی که اگر مقداری را به ورودی تابعی که به چنین رشته ای متکی است وارد کنید، همان مقدار را در خروجی دریافت خواهید کرد! باور نمی کنی؟ سپس عدد 332DA43Fh و هشت خط از این قبیل را به عنوان جدول جایگزین در نظر بگیرید. عملیات تعویض را انجام دهید و به شما اطمینان می دهم که خروجی آن عدد 332DA43Fh خواهد بود! یعنی همونی که به ورودی عملیات ارسال کردی! و این نشانه ای از فرم خوب در رمزگذاری نیست و آیا اینطور بود؟

این یکی از الزامات بود، معیار بعدی می گوید که - هر بیت از بلوک خروجی باید از نظر آماری مستقل از هر بیت بلوک ورودی باشد!

چگونه ساده تر به نظر می رسد؟ و در اینجا به این صورت است که مثلاً چگونه از عدد بالا عنصر s0 = 0Fh, 01111b را انتخاب کردیم. احتمال اینکه اکنون بیت اول را با یک یا صفر جایگزین کنیم 0.5 است! احتمال جایگزینی بیت های دوم، سوم و چهارم، هر بیت را جداگانه در نظر می گیریم، با یک یا صفر نیز 0، 5 است. هنگام انتخاب s1 = 0Eh، احتمال اینکه ما یک بیت صفر هستیم، و این "0" است. ، با یک صفر یا یک خیلی مساوی جایگزین می شود - 0.5! بنابراین، طبق این معیار، هیچ نظمی بین جایگزینی بیت های صفر عناصر s0، s1 وجود ندارد! بله، می توانید یک ها را جایگزین کنید، اما می توانید صفرها را نیز جایگزین کنید.

برای ارزیابی جدول با توجه به این معیار، می توانید جدولی از ضرایب همبستگی که با فرمول محاسبه می شود بسازید:

اگر p = 1، آنگاه مقدار بیت j در خروجی برابر است با مقدار بیت i در ورودی برای هر ترکیبی از بیت ها در ورودی.

اگر p = -1، مقدار بیت j در خروجی همیشه معکوس بیت ورودی i است.

اگر p = 0 باشد، بیت خروجی j با احتمال مساوی مقادیر 0 و 1 را برای هر مقدار ثابت بیت ورودی i می گیرد.

بیایید یک مثال خطی بزنیم:

بیایید آن را به "مولفه ها" تقسیم کنیم:

با توجه به فرمول بالا یک ضریب را محاسبه می کنیم. برای سهولت در درک نحوه انجام این کار، با جزئیات بیشتر توضیح خواهم داد:

بیت 0 از عدد 0 (0) را در ورودی و بیت 0 از عدد 0 را در خروجی (1) می گیریم، عملیات 0 XOR 1 = 1 را انجام می دهیم.

بیت 0 از شماره 1 (1) را در ورودی و بیت 0 از شماره 1 را در خروجی (1) می گیریم، عملیات 1 XOR 1 = 0 را انجام می دهیم.

بیت 0 عدد دوم (0) را در ورودی و بیت 0 عدد دوم را در خروجی (0) می گیریم عمل 0 XOR 0 = 0 را انجام می دهیم.

بیت 0 از عدد 3 (1) را در ورودی و بیت 0 از عدد 3 را در خروجی (1) می گیریم، عملیات 1 XOR 1 = 0 را انجام می دهیم.

با انجام متوالی عملیات XOR در چنین دنباله ای، تعداد تمام مقادیر غیر صفر را می شماریم، مقدار 6 را به دست می آوریم. بنابراین P 00 = 1- (6/2 4-1) = 0.25. بنابراین، معلوم شد که مقدار بیت 0 در خروجی با مقدار بیت 0 در ورودی در 4 مورد از 16 مورد برابر است.

جدول شانس نهایی:

همانطور که از جدول ضرایب همبستگی مشخص است، بیت 3 در ورودی نسبت به بیت 0 در خروجی در 14 مورد از 16 مورد معکوس شده است که 87.5 درصد است، این دیگر برای سیستم های رمزگذاری معمولی قابل قبول نیست. بیایید مثال دیگری برای تغییر بیاوریم:

جدول ضرایب به شرح زیر خواهد بود (برای کسانی که محاسبه مجدد تنبل نیست)

خب، در این جدول، اوضاع از این هم بدتر است - بیت های 1 و 2 گروه بدون تغییر باقی می مانند! Cryptanalyst جاهایی را دارد که بخواهد با در نظر گرفتن همه این الزامات، با یک جستجوی ساده ("هدر رو") جداول جایگشت مربوط به نظریه نشان داده شده را پیدا کرد (امروز - 1276 ترکیب) در اینجا برخی از آنها وجود دارد:

09 0D 03 0E-06 02 05 08-0A 07 00 04-0C 01 0F 0B

00 05 0A 07-03 08 0F 0C-0E 0B 04 09-0D 06 01 02

06 0B 0F 00-0C 01 02 0D-08 07 09 04-05 0A 03 0E

04 0E 00 09-0B 01 0F 06-03 0D 07 0A-0C 02 08 05

04 02 08 0E-05 0F 03 09-0B 01 0D 07-0A 0C 06 00

07 03 09 0C-08 00 06 0F-0E 04 01 0A-0D 0B 02 05

06 0F 03 08-0D 04 0A 01-09 02 05 0C-00 0B 0E 07

0C 06 08 01-03 09 07 0E-0B 05 0F 02-04 0A 00 0D

04 0B 09 06-0E 01 00 0F-0A 05 03 0C-0D 02 07 08

00 0E 0F 01-07 08 09 06-04 0B 0A 05-03 0D 0C 02

0F 09 01 07-04 0A 08 06-0E 00 02 0C-05 03 0B 0D

0A 03 04 01-05 0C 0B 0E-08 06 0F 0D-07 09 00 02

0B 06 0F 01-04 0A 08 05-00 0D 0C 02-07 09 03 0E

0C 03 02 08-0D 06 0B 05-07 09 04 0F-0A 00 01 0E

02 0B 0F 04-09 00 06 0D-05 0E 01 08-0C 07 0A 03

فهرست ادبیات استفاده شده

  1. مقاله آندری وینوکوروف:

الگوریتم رمزگذاری GOST 28147-89، استفاده و اجرای آن

برای رایانه های پلت فرم Intel x86.

همچنین کدهای منبع برای اجرای الگوریتم رمزگذاری وجود دارد.

  1. مقاله هورست فیستل:

رمزنگاری و امنیت کامپیوتر.

(در همان آدرس مقاله قبلی قابل مشاهده است)

  1. راس ان. ویلیامز:

راهنمای اولیه برای الگوریتم های تشخیص خطا CRC

در سایت قرار داده شده است www.وامru.

قدردانی ها

من می خواهم از همه بازدید کنندگان انجمن www.wasm.ru تشکر کنم. اما مایلم به ویژه از ChS که در حال حاضر با نام SteelRat شناخته می شود تشکر کنم، او به من کمک کرد چیزهایی را درک کنم که احتمالاً هرگز نمی فهمیدم و همچنین در نوشتن پاراگراف کمک کرد: الزامات اطلاعات کلیدیبخش اصلی این بند توسط ایشان نوشته شده است. من همچنین عمیقاً از کارمند KSTU که به نام نامگذاری شده است سپاسگزارم A.N. توپولف آنیکین ایگور ویاچسلاوویچ و این گناه است که از کریس کسپرسکی به خاطر این واقعیت که او است و Volodya / wasm.ru برای دستورالعمل هایش نامی نبریم. اوه، و من آن را از او دریافت کردم. من همچنین می‌خواهم به Sega-Zero / Callipso اشاره کنم، اما این یک جنگل ریاضی را به ذهن من آورد.

این، شاید، تمام چیزی است که من می خواهم به شما بگویم.

اگر انتقاد یا سوالی در رابطه با این مقاله یا فقط توصیه ای داشته باشید سپاسگزار خواهم بود. اطلاعات تماس من: [ایمیل محافظت شده]، ICQ - 337310594.

با احترام، Evil`s Interrupt.

P.S.: با این مقاله سعی نکردم از کسی پیشی بگیرم. این به قصد تسهیل مطالعه GOST نوشته شده است، و اگر مشکل دارید، به این معنی نیست که من در این امر مقصر هستم. منطقی باشید و صبر داشته باشید، بهترین ها برای شما!

«تا زنده ای، نمیر، به این دنیا نگاه کن.
بسیاری در اینجا روح مرده دارند - آنها در درون مرده اند.
اما آنها راه می روند و می خندند، بدون اینکه بدانند که نیستند،
او به من گفت: ساعت مرگت را عجله نکن.

آریا، "بالا آنجا"

  1. معرفی
  1. اطلاعات اولیه در مورد رمزهای بلوکی

2.1 شبکه های Feistel.
2.2 رمز بلوک GOST 28147-89

  1. حداقل نظری

3.1 اطلاعات کلیدی
3.2 مرحله اصلی تحول رمزنگاری

3.3 حلقه های اصلی:32-Z, 32-R.

  1. تمرین

4.1 پیاده سازی مرحله اصلی تحول رمزارزها
4.2 افزایش سرعت الگوریتم
5.
6. فهرست ادبیات استفاده شده
7. قدردانی ها

معرفی.

این سند تلاش من برای توصیف روشی برای جایگزینی ساده الگوریتم رمزگذاری GOST 28147-89 با ساده ترین، اما، با این وجود، زبان فنی است. پس از خواندن شش نکته اول، خواننده نظر خود را در مورد نحوه انجام این کار بیان می کند.

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

اطلاعات اولیه در مورد رمزهای بلوکی

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

تاریخچه توسعه رمزهای بلوکی با اوایل دهه 70 مرتبط است، زمانی که IBM با درک نیاز به محافظت از اطلاعات در هنگام انتقال داده ها از طریق کانال های ارتباطی رایانه ای، شروع به اجرای برنامه تحقیقاتی خود اختصاص داده شده به حفاظت از اطلاعات در شبکه های الکترونیکی کرد. از جمله رمزنگاری

گروهی از محققان - توسعه دهندگان شرکت IBM که شروع به مطالعه سیستم های رمزگذاری با یک طرح استفاده از کلید متقارن کردند، توسط دکتر Dr. هورست فیستل.

2.1 شبکه های Feistel

معماری روش رمزگذاری جدید ارائه شده توسط Feistel در ادبیات کلاسیک "معماری Feistel" نامیده می شود، اما در حال حاضر در ادبیات روسی و خارجی از اصطلاح معتبرتری استفاده می شود - "شبکه Feistel" یا Feistel's NetWork. متعاقباً رمز «لوسیفر» بر روی این معماری ساخته شد - که بعداً منتشر شد و موج جدیدی از علاقه را به رمزنگاری به طور کلی ایجاد کرد.

ایده معماری "شبکه Feistel" به شرح زیر است: جریان ورودی اطلاعات به بلوک های n بیتی در اندازه تقسیم می شود که در آن n یک عدد زوج است. هر بلوک به دو قسمت تقسیم می شود - L و R، سپس این قسمت ها به یک رمز بلوک تکراری وارد می شوند، که در آن نتیجه مرحله j با نتیجه مرحله قبلی j-1 تعیین می شود! این را می توان با یک مثال نشان داد:

برنج. 1

در کجا، تابع A عمل اصلی رمز بلوکی است. این می تواند یک عمل ساده باشد، مانند یک عملیات XOR، یا می تواند شکل پیچیده تری به عنوان دنباله ای از یک سری اقدامات ساده داشته باشد - اضافه کردن مدول، تغییر به چپ، جایگزینی عنصر و غیره، با هم، این اقدامات ساده شکل می گیرند. به اصطلاح - مرحله اصلی تحول رمزنگاری.

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

برای اینکه ایده شبکه های Feistel در نهایت روشن شود، ساده ترین مورد نشان داده شده در آن را در نظر بگیرید برنج. 1، جایی که در تابع A - عملیات "mod 2" ("xor") وجود خواهد داشت، اما این ساده ترینیک مورد، در یک موقعیت جدی تر، برای مثال، پنهان کردن اطلاعات با اهمیت ملی، عملکرد A ممکن است پیچیده تر باشد (تا آنجا که من دیدم، تابع A واقعاً بسیار پیچیده است):

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

L = 1110b، R = 0101، K = 1111b

یک رمز دریافت کنید

  1. (R + K) mod 2 4 = Smod، Smod = 0100b
  2. (Smod + L) mod 2 = Sxor، Sxor = 1010b
  3. L = R، R = Sxor

L = 0101b، R = 1010b

بیایید اقدامات خود را توضیح دهیم:

  1. این عملیات اضافه کردن mod 2 4 است. در عمل، این عملیات به جمع ساده خلاصه می شود، جایی که باید دو عدد را جمع کنیم و انتقال به رقم 5 را نادیده بگیریم. از آنجایی که اگر نماها را بالای ارقام نمایش دودویی یک عدد قرار دهیم، یک ضریب چهار بالای رقم پنجم وجود خواهد داشت، بیایید به شکل زیر نگاهی بیندازیم که عملکرد عملیات ما را نشان می دهد:

برنج. 2

در اینجا من با یک فلش به اکسوننت ها اشاره کردم، همانطور که می بینید نتیجه باید 10100 می شد، اما از آنجایی که در عملیات mod 2 4 انتقال نادیده گرفته می شود، 0100 می گیریم.

  1. این عملیات در ادبیات mod 2 نامیده می شود، در زبان اسمبلی توسط دستور اجرا می شود XOR... اما نام صحیح تر آن mod 2 1 است. بدون این عملیات منحصربفرد، ساختن یک الگوریتم رمزگذاری سریع و به راحتی قابل پیاده سازی و در عین حال به سختی امکان پذیر است، به طوری که هنوز از نظر رمزنگاری کاملاً قوی باشد. منحصر به فرد بودن این عملیات در این است که خود برعکس است! مثلاً اگر عدد A با عدد B XOR شود در نتیجه B بدست می آید، در آینده کافی است اعداد B و C را مجدداً XOR بین یکدیگر قرار دهیم تا مقدار قبلی A بدست آید!

در این عملیات 1010 را با اعداد 1110 و 0100 بدست آوردیم، برای برگرداندن 1110 کافی است اعداد 0100 و 1010 را OverXOR کنید! جزئیات بیشتر در مورد این عملیات را می توانید در مقاله ضمیمه سایت مشاهده کنید. www.wasm.ru, « راهنمای ابتدایی برایالگوریتم های تشخیص خطا CRC_» نویسنده ای که راس ان. ویلیامز... نکته ای در این کار وجود دارد - " 5. حساب باینری بدون خط فاصله". در این مقاله است که عملیات شرح داده شده است. xor!من فریاد می زنم زیرا در این مقاله این عملیات به قدری برنامه ریزی شده است که خواننده نه تنها نحوه عملکرد این عملیات را درک می کند، بلکه حتی آن را شروع می کند. ببینید، بشنوید و احساس کنید!

  1. این عمل ضروری است تا در هنگام رمزگشایی بتوان مقادیر اولیه را از رمز به دست آورد.

2.2 رمز بلوکی GOST 28147-89

الگوریتم رمزگذاری GOST 28147 - 89 متعلق به دسته رمزهای بلوکی است که مطابق با معماری شبکه های متوازن Feistel عمل می کنند، که در آن دو بخش از بلوک اطلاعات انتخاب شده دارای اندازه مساوی هستند. این الگوریتم در اعماق بخش هشتم KGB توسعه یافت، اکنون به FAPSI تبدیل شده و در سال 1989 تحت اتحاد جماهیر شوروی به عنوان استاندارد رمزگذاری فدراسیون روسیه ثبت شد.

برای اینکه این روش الگوریتم کار کند، لازم است اطلاعات را به بلوک هایی با اندازه 64 بیت تقسیم کرد. اطلاعات کلیدی زیر را ایجاد یا وارد سیستم رمزگذاری کنید: جدول کلید و جایگزین. انتخاب کلید و جدول جایگزین برای رمزگذاری باید بسیار جدی گرفته شود، زیرا این پایه و اساس امنیت اطلاعات شماست. برای اطلاع از الزامات اعمال شده بر روی کلید و جدول تعویض، به مورد "الزامات اطلاعات کلیدی" مراجعه کنید.

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

حداقل نظری

3.1 اطلاعات کلیدی

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

3.1.1. یک کلید دنباله ای از هشت عنصر است که هر کدام 32 بیت است. در ادامه با علامت K نشان خواهیم داد و عناصری که از آن تشکیل شده عبارتند از: k1، k2، k3، k4، k5، k6، k7، k8.

3.1.2 جدول جایگزینی - ماتریسی از هشت ردیف و شانزده ستون، از این پس - Hij. هر عنصر در تقاطع ردیف i و ستون j 4 بیت را اشغال می کند.

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

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

  1. بخش اضافی بلوک R با عنصر کلیدی K mod 2 32 جمع می شود. من یک عملیات مشابه را در بالا توضیح دادم، در اینجا همان چیزی است که فقط توان "4" نیست، بلکه "32" است - نتیجه این عملیات در آینده Smod نشان داده می شود.
  2. نتیجه قبلی Smod را به عناصر چهار بیتی s7، s6، s5، s4، s3، s2، s1، s0 تقسیم کنید و آن را به تابع جایگزین تغذیه کنید. جایگزینی به شرح زیر است: عنصر Smod - si انتخاب می شود، از ابتدا با کمترین عنصر شروع می کنیم و با مقدار جدول جایگزینی i جایگزین می کنیم - ردیف و ستونی که با مقدار عنصر s به آنها اشاره می شود. من. ما به عنصر s i +1 می رویم و به همین ترتیب ادامه می دهیم تا زمانی که مقدار آخرین عنصر Smod را تغییر دهیم - نتیجه این عملیات به صورت Ssimple نشان داده می شود.
  3. در این عملیات، مقدار Ssimple را به صورت دوره‌ای 11 بیت به سمت چپ تغییر می‌دهیم و Srol را دریافت می‌کنیم.
  4. قسمت دوم بلوک L را انتخاب می کنیم و با Srol آن را mod 2 اضافه می کنیم، در نتیجه Sxor داریم.
  5. در این مرحله بخشی از بلوک L برابر با مقدار قسمت R می شود و قسمت R نیز به نوبه خود با نتیجه Sxor مقدار دهی اولیه می شود و در این مرحله عملکرد مرحله اصلی تکمیل می شود!

3.3 چرخه های اصلی: "32-З"، "32-Р".

برای رمزگذاری اطلاعات، باید آنها را به بلوک هایی با اندازه 64 بیت تقسیم کنید، البته آخرین بلوک می تواند کمتر از 64 بیت باشد. این واقعیت پاشنه آشیل این روش «تعویض آسان» است. از آنجایی که افزودن آن به 64 بیت کار بسیار مهمی برای افزایش قدرت رمزنگاری برنامه رمز و به این مکان حساس است، اگر در آرایه اطلاعات وجود داشته باشد و ممکن است وجود نداشته باشد (مثلاً یک فایل 512 بایتی! ) باید با مسئولیت بزرگ برخورد کرد!

بعد از اینکه اطلاعات را به بلوک‌ها تقسیم کردید، باید کلید را به عناصر تقسیم کنید:

K = k1، k2، k3، k4، k5، k6، k7، k8

رمزگذاری خود شامل استفاده از به اصطلاح چرخه های اساسی است. که به نوبه خود شامل n-امین مراحل اساسی تبدیل رمزنگاری می شود.

چرخه های اصلی برچسب گذاری شده اند، نحوه قرار دادن آن: n - m. جایی که n تعداد مراحل اساسی تبدیل رمزنگاری در چرخه پایه است و m "نوع" چرخه پایه است، یعنی. ما در مورد چه چیزی صحبت می کنیم، در مورد رمزگذاری "Z" یا رمزگذاری "R" داده ها.

چرخه رمزگذاری پایه 32-З شامل 32 مرحله اساسی تبدیل رمزنگاری است. بلوک N و یک عنصر از کلید K به تابعی وارد می شود که اقدامات مرحله را اجرا می کند، و اولین مرحله با k1، مرحله دوم بیش از نتیجه به دست آمده با عنصر k2 و غیره رخ می دهد. طبق طرح زیر:

k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8k8, k7, k6، k5، k4، k3، k2، k1

فرآیند رمزگشایی برای 32-P به روشی مشابه انجام می شود، اما عناصر کلیدی به ترتیب معکوس آورده شده اند:

k1, k2, k3, k4, k5, k6, k7, k8, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7، k6، k5، k4، k3، k2، k1

تمرین.

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

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

یک بلوک از اطلاعات N = 0102030405060708h را در نظر بگیرید، در اینجا قطعات L و R برابر هستند:

L = 01020304h، R = 05060708h، بیایید کلید را بگیریم:

K = as28 zw37 q839 7342ui23 8e2t wqm2 ewp1 '(اینها کدهای ASCII هستند، برای مشاهده نمایش هگزادسیمال، می توانید با فشار دادن کلید این فایل را در حالت view در Total Commander باز کنید. F3"و سپس کلید" 3 "). در این کلید، مقادیر عناصر به صورت زیر خواهد بود:

k1 = 'as28'، k2 = 'zw37'، k3 = 'q839'، k4 = '7342'

k5 = 'ui23'، k6 = '8e2t'، k7 = 'wqm2'، k8 = 'ewp1'

جدول تعویض زیر را نیز در نظر بگیرید:

برنج. 3

در اینجا، ردیف ها از 0 تا 7، ستون ها از 0 تا F شماره گذاری می شوند.

اخطار:تمام اطلاعات، از جمله کلید با جدول جایگزینی، به عنوان مثال برای در نظر گرفتن الگوریتم گرفته شده است!

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

  1. قسمت R = 05060708h و عنصر کلید k1 = 'as28' را انتخاب می کنیم، در شکل هگزادسیمال عنصر کلید به این صورت خواهد بود: 61733238h. اکنون عملیات جمع بندی مود 2 32 را انجام می دهیم:

برنج. 4

همانطور که در شکل مشاهده می کنید، انتقالی در 33 بیت که با رنگ قرمز و با نماگر مشخص شده بود، نداشتیم. 32 ". و اگر مقادیر دیگری از R و عنصر کلیدی داشتیم، به خوبی می‌توانست این اتفاق بیفتد، و سپس آن را نادیده می‌گرفتیم و فقط از بیت‌هایی که با رنگ زرد مشخص شده‌اند استفاده می‌کردیم.

من این عمل را با دستور اسمبلر انجام می دهم اضافه کردن:

; eax = R، ebx = 'as28'

نتیجه این عملیات Smod = 66793940h

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

شکل ذخیره نشد

برنج. 5

من سعی کردم عناصر Smod را در شکل تجسم کنم، اما به هر حال توضیح می دهم:

s0 = 0، s1 = 4، s2 = 9، و غیره.

اکنون، با شروع با کمترین عنصر s0، جایگزینی را انجام می دهیم. یادآوری بند " 3.2 مرحله اساسی تبدیل رمزنگاری»I - row، s i - ستون، به دنبال مقدار در ردیف صفر و ستون صفر باشید:

شکل 6

بنابراین مقدار فعلی Smod 6679394 نیست 0 h و 6679394 5 ساعت

ما اقدام به جایگزینی s1 می کنیم، یعنی. چهار با استفاده از سطر اول و ستون چهارم (s1 = 4!). ما به تصویر نگاه می کنیم:

برنج. 7

حالا مقدار Smod است نه 667939 4 5h, 667939 2 5 ساعت من فرض می کنم که اکنون الگوریتم جایگزینی برای خواننده روشن است و می توانم بگویم که پس از نتیجه نهایی Ssimple مقدار زیر را خواهد داشت - 11e10325h.

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

  1. ما باید مقدار Ssimple حاصل را 11 بیت به سمت چپ تغییر دهیم.

برنج. هشت

همانطور که می بینید، این عمل بسیار ساده است و توسط یک دستور از زبان اسمبلی اجرا می شود - نقشو نتیجه این عملیات Srol 0819288Fh است.

  1. اکنون بخش L از بلوک اطلاعات ما باقی می ماند که باید با مقدار Srol XOR شود. من یک ماشین حساب از w2k sp4 می گیرم و Sxor = 091b2b8bh می گیرم.
  2. این عمل نهایی است و ما به سادگی R را به مقدار قسمت L اختصاص می دهیم، پاک می کنیم و قسمت L را با مقدار Sxor مقداردهی اولیه می کنیم.

نتیجه نهایی:

L = 091b2b8bh، R = 01020304h

4.2 افزایش سرعت الگوریتم

حالا بیایید در مورد بهینه سازی الگوریتم برای سرعت صحبت کنیم. هنگام اجرای یک پروژه، باید در نظر داشت که برنامه ای که با ثبات ها بیشتر از حافظه کار می کند سریع ترین کار را انجام می دهد، و در اینجا این قضاوت نیز بسیار مهم است، زیرا بیش از یک بلوک اطلاعات به اندازه 32 عمل رمزگذاری!

زمانی که من الگوریتم رمزگذاری را در برنامه خود پیاده سازی کردم، موارد زیر را انجام دادم:

  1. بخشی از بلوک L را برای ثبت eax و R را به edx انتخاب کرد.
  2. در رجیستر esi که با آدرس کلید توسعه یافته مقدار دهی اولیه شده است، در زیر بیشتر توضیح دهید.
  3. در رجیستر ebx مقدار آدرس جدول توسعه یافته جایگزین ها را اختصاص داده است، در زیر بیشتر در این مورد
  4. اطلاعات موارد 1، 2، 3 را بسته به موقعیت به تابع چرخه پایه 32 - З یا 32 - Р منتقل کرد.

اگر به نمودار جریان عناصر کلیدی در پاراگراف نگاه کنید " چرخه های پایه: "32-З"، "32-Р""، سپس کلید ما برای چرخه پایه 32 - Z را می توان به صورت زیر نشان داد:

K 32-Z =

«As28»، «zw37»، «q839»، «7342»، «ui23»، «8e2t»، «wqm2»، «ewp1»،

«As28»، «zw37»، «q839»، «7342»، «ui23»، «8e2t»، «wqm2»، «ewp1»،

«Ewp1»، «wqm2»، «8e2t»، «ui23»، «7342»، «q839»، «zw37»، «as28»

آن ها از ابتدا k1، k2، k3، k4، k5، k6، k7، k8 وجود دارد - as28 ','zw37 ','q839 ',' 7342 ','ui23 ',' 8e2تی "،"wqm2 ','ewp1'این دنباله سه بار تکرار می شود. سپس عناصر به ترتیب معکوس می روند، به عنوان مثال: k8، k7، k6، k5، k4، k3، k2، k1 - «Ewp1»، «wqm2»، «8e2t»، «ui23»، «7342»، «q839»، «zw37»، «as28».

من عناصر موجود در آرایه را به ترتیبی که باید در 32 - Z تغذیه شوند، از قبل مرتب کردم. بنابراین، حافظه مورد نیاز را به صورت کلید در دست افزایش دادم، اما خود را از برخی فرآیندهای فکری که به آنها نیاز نداشتم نجات دادم و میزان حافظه را افزایش دادم. سرعت الگوریتم، برای با کاهش زمان دسترسی به حافظه! در اینجا من فقط کلید را برای 32 - З توصیف کردم، برای چرخه 32 - Р من همین کار را کردم، اما با استفاده از یک طرح متفاوت از تامین عناصر، که در پاراگراف نیز توضیح دادم " چرخه های اصلی: "32-W"، "32-P».

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

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

مثلاً باید عدد 66793940h را جایگزین کنیم. من آن را به شرح زیر ارائه خواهم کرد:

شکل ذخیره نشد

برنج. نه

حال اگر عناصر s1، s0 را بگیریم، i.e. بایت کم اهمیت، نتیجه تابع جایگزینی 25 ساعت خواهد بود! پس از خواندن مقاله آندری وینوکوروف، که در پاراگراف ذکر کردم " فهرست ادبیات استفاده شده"، در واقع متوجه می شوید که اگر دو خط بگیرید، می توانید یک آرایه دریافت کنید، که به شما امکان می دهد عناصر جایگزین را با استفاده از دستور اسمبلر به سرعت پیدا کنید. xlat.آنها می گویند از راه دیگری سریعتر امکان پذیر است، اما آندری وینوکوروف حدود چهار سال را صرف تحقیق در مورد الگوریتم های سریع برای اجرای GOST کرد! من فکر نمی کنم زمانی که چرخ را دارید، نباید دوباره اختراع کنید.

بنابراین، در مورد آرایه:

بیایید دو خط اول را صفر و اولی را یک آرایه 256 بایتی ایجاد کنیم. اکنون یک ویژگی را مشاهده می کنیم که اگر لازم باشد 00h تبدیل شود، نتیجه آن 75h خواهد بود (براساس شکل 3) - ما این مقدار را در آرایه در افست 00h قرار می دهیم. مقدار 01h را می گیریم، نتیجه تابع جایگزینی 79h، آن را در آرایه در افست 01 قرار می دهیم، و به همین ترتیب تا 0FFh، که به ما 0FCh می دهد، که در آرایه با آفست 0FFh قرار می دهیم. بنابراین ما یک جدول جایگزین توسعه یافته برای اولین گروه از ردیف ها دریافت کردیم: اولین و صفر. اما هنوز سه گروه وجود دارد: صفحه دوم، صفحه 3، صفحه سوم، صفحه 5، صفحه چهارم، صفحه 6، صفحه 7. ما با این سه گروه مانند گروه اول برخورد می کنیم. نتیجه یک جدول تعویض طولانی است!

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

lea ebx، extended_table_simple

mov eax، [شماره ای را که باید جایگزین شود قرار دهید]

ebx، 100h را اضافه کنید؛ به دو گره بعدی بروید

زیر ebx، 300h; به طوری که در آینده ebx به جدول اشاره می کند

حالا یک ویژگی دیگر، با اقدامات قبلی ما نه تنها جایگزین کردیم، بلکه عدد را 8 بیت به چپ منتقل کردیم! فقط باید 3 بیت دیگر را به چپ منتقل کنیم:

و نتیجه عمل rol eax 11 را می گیریم!

من نمی توانم چیزی بیشتر در مورد بهینه سازی اضافه کنم، تنها چیزی که می توانم بر آن تاکید کنم همان چیزی است که در بالا گفتم - از ثبات ها بیشتر از دسترسی به حافظه استفاده کنید. من فکر می کنم این کلمات فقط برای مبتدیان، افراد با تجربه است و بدون کلمات من این را کاملاً درک می کنند :).

الزامات برای اطلاعات کلیدی

همانطور که در مقاله آندری وینوکوروف بیان شد، کلید بر اساس دو معیار انتخاب می شود:

- معیار توزیع همسان بیت ها بین مقادیر 1 و 0. معمولاً معیار توزیع همسان بیت ها، معیار پیرسون ("chi-square") است.

این یعنی یک کلید، در اصل، هر عددی می تواند. یعنی وقتی بیت بعدی کلید تشکیل می شود، احتمال مقدار دهی اولیه آن یک یا صفر 50/50 است!

لطفاً توجه داشته باشید که کلید از هشت عنصر تشکیل شده است که هر کدام 32 بیت است، بنابراین 32 * 8 = 256 بیت در کلید وجود دارد و تعداد کلیدهای ممکن 2256 بیت است! آیا این به شما توجه نمی کند؟ 🙂

- معیار سری.

اگر به کلید خود که در پاراگراف دادم نگاه کنیم " 4.1 پیاده سازی مرحله اصلی تحول رمزنگاری», سپس متوجه خواهید شد که نماد زیر معتبر است:

برنج. ده

در یک عبارت، مقدار k 1 نباید نه در k 2 و نه در هیچ عنصر دیگری از کلید تکرار شود.

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

حالا در مورد انتخاب جدول تعویض ها:

حالا بیایید در مورد نحوه انتخاب جدول جایگزینی مناسب صحبت کنیم. نیاز اصلی برای انتخاب جداول جایگزین پدیده "تکرار نشدن" عناصر است که هر کدام از آنها 4 بیت اندازه دارند. همانطور که در بالا دیدید، هر ردیف از جدول جایگزینی شامل مقادیر 0h، 1h، 2h، 3h،…، 0fh است. بنابراین شرط اصلی این است که هر خط حاوی مقادیر 0h، 1h، 2h، ...، 0fh و هر یک از این مقادیر در یک کپی باشد. به عنوان مثال، دنباله:

1 2 3 4 5 6 7 8 9 A B C D E F

به طور کامل با این الزام مطابقت دارد، اما هنوز! توصیه نمی شود که چنین دنباله ای را به عنوان رشته انتخاب کنید. از آنجایی که اگر مقداری را به ورودی تابعی که به چنین رشته ای متکی است وارد کنید، همان مقدار را در خروجی دریافت خواهید کرد! باور نمی کنی؟ سپس عدد 332DA43Fh و هشت خط از این قبیل را به عنوان جدول جایگزین در نظر بگیرید. عملیات تعویض را انجام دهید و به شما اطمینان می دهم که خروجی آن عدد 332DA43Fh خواهد بود! یعنی همونی که به ورودی عملیات ارسال کردی! و این نشانه ای از فرم خوب در رمزگذاری نیست و آیا اینطور بود؟ 🙂

این یکی از الزامات بود، معیار بعدی می گوید که - هر بیت از بلوک خروجی باید از نظر آماری مستقل از هر بیت بلوک ورودی باشد!

چگونه ساده تر به نظر می رسد؟ و در اینجا به این صورت است که مثلاً چگونه از عدد بالا عنصر s0 = 0Fh, 01111b را انتخاب کردیم. احتمال اینکه اکنون بیت اول را با یک یا صفر جایگزین کنیم 0.5 است! احتمال جایگزینی بیت های دوم، سوم و چهارم، هر بیت را جداگانه در نظر می گیریم، با یک یا صفر نیز 0، 5 است. هنگام انتخاب s1 = 0Eh، احتمال اینکه ما یک بیت صفر هستیم، و این "0" است. ، با یک صفر یا یک خیلی مساوی جایگزین می شود - 0.5! بنابراین، طبق این معیار، هیچ نظمی بین جایگزینی بیت های صفر عناصر s0، s1 وجود ندارد! بله، می توانید یک ها را جایگزین کنید، اما می توانید صفرها را نیز جایگزین کنید. 🙂

برای ارزیابی جدول با توجه به این معیار، می توانید جدولی از ضرایب همبستگی که با فرمول محاسبه می شود بسازید:

- اگر p = 1 باشد، مقدار بیت j در خروجی برابر است با مقدار بیت i در ورودی برای هر ترکیبی از بیت ها در ورودی.

- اگر p = -1 باشد، مقدار بیت j در خروجی همیشه معکوس بیت ورودی i است.

- اگر p = 0 باشد، بیت خروجی j با احتمال مساوی مقادیر 0 و 1 را برای هر مقدار ثابت بیت ورودی i می گیرد.

بیایید یک مثال خطی بزنیم:

دی ب 4 1 3 اف 5 9 0 آ E 7 6 8 2 سی

بیایید آن را به "مولفه ها" تقسیم کنیم:

با توجه به فرمول بالا یک ضریب را محاسبه می کنیم. برای سهولت در درک نحوه انجام این کار، با جزئیات بیشتر توضیح خواهم داد:

- بیت 0 از عدد 0 (0) را در ورودی و بیت 0 از عدد 0 را در خروجی (1) می گیریم، عملیات 0 XOR 1 = 1 را انجام می دهیم.

- بیت 0 از شماره 1 (1) را در ورودی و بیت 0 از شماره 1 را در خروجی (1) می گیریم، عملیات 1 XOR 1 = 0 را انجام می دهیم.

- بیت 0 از عدد 2 (0) را در ورودی و بیت 0 از عدد 2 را در خروجی (0) می گیریم و عملیات 0 XOR 0 = 0 را انجام می دهیم.

- بیت 0 از عدد 3 (1) را در ورودی و بیت 0 از عدد 3 را در خروجی (1) می گیریم، عملیات 1 XOR 1 = 0 را انجام می دهیم.

با انجام متوالی عملیات XOR در چنین دنباله ای، تعداد تمام مقادیر غیر صفر را می شماریم، مقدار 6 را به دست می آوریم. بنابراین P 00 = 1- (6/2 4-1) = 0.25. بنابراین، معلوم شد که مقدار بیت 0 در خروجی با مقدار بیت 0 در ورودی در 4 مورد از 16 مورد برابر است.

جدول شانس نهایی:

جدول ضرایب به شرح زیر خواهد بود (برای کسانی که محاسبه مجدد تنبل نیست)

ورود
خروجی 0 1 2 3
0 -0,25 0,00 0,00 0,00
1 0,00 1,00 0,00 0,00
2 0,00 0,00 1,00 0,00
3 0,00 0,00 0,00 -0,50

خب، در این جدول، اوضاع از این هم بدتر است - بیت های 1 و 2 گروه بدون تغییر باقی می مانند! رمزنگار باید به کجا مراجعه کند 🙂 با در نظر گرفتن همه این الزامات، با یک جستجوی ساده ("هدر رو") جداول جایگشت مربوط به نظریه نشان داده شده (امروز - 1276 ترکیب) یافت می شود که در اینجا برخی از آنها آمده است:

09 0D 03 0E-06 02 05 08-0A 07 00 04-0C 01 0F 0B
00 05 0A 07-03 08 0F 0C-0E 0B 04 09-0D 06 01 02
06 0B 0F 00-0C 01 02 0D-08 07 09 04-05 0A 03 0E
04 0E 00 09-0B 01 0F 06-03 0D 07 0A-0C 02 08 05
04 02 08 0E-05 0F 03 09-0B 01 0D 07-0A 0C 06 00
07 03 09 0C-08 00 06 0F-0E 04 01 0A-0D 0B 02 05
06 0F 03 08-0D 04 0A 01-09 02 05 0C-00 0B 0E 07
0C 06 08 01-03 09 07 0E-0B 05 0F 02-04 0A 00 0D
04 0B 09 06-0E 01 00 0F-0A 05 03 0C-0D 02 07 08
00 0E 0F 01-07 08 09 06-04 0B 0A 05-03 0D 0C 02
0F 09 01 07-04 0A 08 06-0E 00 02 0C-05 03 0B 0D
0A 03 04 01-05 0C 0B 0E-08 06 0F 0D-07 09 00 02
0B 06 0F 01-04 0A 08 05-00 0D 0C 02-07 09 03 0E
0C 03 02 08-0D 06 0B 05-07 09 04 0F-0A 00 01 0E
02 0B 0F 04-09 00 06 0D-05 0E 01 08-0C 07 0A 03

فهرست ادبیات استفاده شده

  1. مقاله آندری وینوکوروف:

الگوریتم رمزگذاری GOST 28147-89، استفاده و اجرای آن

برای رایانه های پلت فرم Intel x86.

(در اینجا می توانید پیدا کنید: http://www.enlight.ru/crypto/frame.htm).

همچنین کدهای منبع برای اجرای الگوریتم رمزگذاری وجود دارد.

  1. مقاله هورست فیستل:

رمزنگاری و امنیت کامپیوتر.

(در همان آدرس مقاله قبلی قابل مشاهده است)

  1. راس ان. ویلیامز:

راهنمای اولیه برای الگوریتم های تشخیص خطا CRC

در سایت قرار داده شده است www.وامru.

قدردانی ها

من می خواهم از همه بازدید کنندگان انجمن www.wasm.ru تشکر کنم. اما مایلم به ویژه از ChS که در حال حاضر با نام SteelRat شناخته می شود تشکر کنم، او به من کمک کرد چیزهایی را درک کنم که احتمالاً هرگز نمی فهمیدم و همچنین در نوشتن پاراگراف کمک کرد: الزامات اطلاعات کلیدیبخش اصلی این بند توسط ایشان نوشته شده است. من همچنین عمیقاً از کارمند KSTU که به نام نامگذاری شده است سپاسگزارم A.N. توپولف آنیکین ایگور ویاچسلاوویچ و این گناه است که از کریس کسپرسکی به خاطر این واقعیت که او است و Volodya / wasm.ru برای دستورالعمل هایش نامی نبریم. اوه، و من آن را از او دریافت کردم :). من همچنین می‌خواهم به Sega-Zero / Callipso اشاره کنم، اما این یک جنگل ریاضی را به ذهن من آورد.

این، شاید، تمام چیزی است که من می خواهم به شما بگویم.

اگر انتقاد یا سوالی در رابطه با این مقاله یا فقط توصیه ای داشته باشید سپاسگزار خواهم بود. اطلاعات تماس من: [ایمیل محافظت شده]، ICQ - 337310594.

با احترام، Evil`s Interrupt.

P.S.: با این مقاله سعی نکردم از کسی پیشی بگیرم. این به قصد تسهیل مطالعه GOST نوشته شده است، و اگر مشکل دارید، به این معنی نیست که من در این امر مقصر هستم. منطقی باشید و صبر داشته باشید، بهترین ها برای شما!

این الگوریتم برای استفاده به عنوان یک الگوریتم رمزگذاری در سازمان های دولتی فدراسیون روسیه و تعدادی از سازمان های تجاری اجباری است.

توضیحات الگوریتم

نمودار الگوریتم در شکل نشان داده شده است. 3.1. همانطور که می بینید، طرح این الگوریتم بسیار ساده است که به طور واضح اجرای نرم افزاری یا سخت افزاری آن را ساده می کند.

الگوریتم GOST 28147-89 اطلاعات را در بلوک های 64 بیتی رمزگذاری می کند که به دو بلوک فرعی 32 بیتی (N1 و N2) تقسیم می شوند. ساب بلوک N1 به روش خاصی پردازش می شود و پس از آن مقدار آن اضافه می شود

با مقدار بلوک فرعی N2 (افزودن مدول 2 انجام می شود)، سپس بلوک های فرعی مبادله می شوند. چنین تبدیلی برای تعداد معینی دور انجام می شود: 16 یا 32، بسته به حالت عملکرد الگوریتم (در زیر توضیح داده شده است). در هر دور عملیات زیر انجام می شود:

1. روکش کلید. محتوای بلوک فرعی / VI به مدول 2 32 با بخشی از کلید Kx اضافه شده است.

کلید رمزگذاری الگوریتم GOST 28147-89 ابعادی معادل 256 بیت دارد و Kx قسمت 32 بیتی آن است، یعنی کلید رمزگذاری 256 بیتی به صورت ترکیبی از کلیدهای فرعی 32 بیتی نشان داده می شود (شکل 3.2). :

SH ATI، AG2، YU، AG4، K5، KB، K7.

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

برنج. 3.1. طرح الگوریتم GOST 28147-

برنج. 3.2. کلید رمزگذاری الگوریتم GOST 28147-89

2. جایگزینی جدولی. پس از پوشاندن کلید، بلوک فرعی / VI به 8 قسمت 4 بیتی تقسیم می شود که مقدار هر کدام به صورت جداگانه مطابق با جدول جایگزینی این قسمت از بلوک فرعی جایگزین می شود. جعبه‌های جایگزین (S-box) اغلب در الگوریتم‌های رمزگذاری مدرن استفاده می‌شوند، بنابراین ارزش دارد که آنها را با جزئیات بیشتری در نظر بگیریم.

جایگزینی جدولی به این ترتیب استفاده می شود: یک بلوک داده با یک بعد خاص (در این مورد، 4 بیت) به ورودی تغذیه می شود که نمایش عددی آن تعداد مقدار خروجی را تعیین می کند. به عنوان مثال، ما یک S-box به شکل زیر داریم:

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1.

بگذارید یک بلوک 4 بیتی "0100" به ورودی بیاید، یعنی مقدار 4. طبق جدول، مقدار خروجی 15 خواهد بود، یعنی. "1111" (0 با 4 جایگزین می شود، 1 با 11 جایگزین می شود، مقدار 2 بدون تغییر است و غیره).

همانطور که می بینید، طرح الگوریتم بسیار ساده است، به این معنی که بیشترین بار رمزگذاری داده ها روی جداول جایگزین می افتد. متأسفانه، الگوریتم این ویژگی را دارد که جداول جایگزینی "ضعیف" وجود دارد که هنگام استفاده از آنها می توان الگوریتم را با روش های تحلیل رمزی فاش کرد. موارد ضعیف شامل، برای مثال، جدولی است که در آن خروجی برابر با ورودی است:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

3. تغییر چرخه ای چرخه ای به چپ 11 بیت.

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

الگوریتم GOST 28147-89 دارای 4 حالت عملیاتی است:

□ حالت جایگزینی ساده؛

□ حالت گاما؛

حالت P گاما با بازخورد.

□ نحوه تولید شبیه سازها.

این حالت‌ها تا حدودی با حالت‌های پذیرفته‌شده عمومی (شرح‌شده در بخش 1.4) متفاوت هستند، بنابراین ارزش دارد که آنها را با جزئیات بیشتری در نظر بگیرید.

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

حالت تعویض آسان

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

□ KO، Kl، ​​K2، KZ، K4، K5، Kb، AG7، KO، ATI و غیره - در دورهای 1 تا 24؛

□ K1، Kb، K5، K4، KZ، K2، K \، KO — در راندهای 25 تا 32.

رمزگشایی در حالت جایگزین ساده دقیقاً به همان روش انجام می شود، اما با دنباله ای کمی متفاوت از کلیدهای فرعی:

□ KO، K \، K2، KZ، K4، K5، Kb، KP - در راندهای 1 تا 8.

□ KP، Kb، K5، K4، KZ، K2، K \، KO، K1، Kb و غیره - در راندهای 9 تا 32.

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

حالت گاما

در حالت گاما (شکل 3.3)، هر بلوک متن ساده به صورت بیتی مدول 2 با یک بلوک گامای رمز 64 بیتی اضافه می شود. گامای رمزی یک دنباله خاص است که با استفاده از تبدیل های شرح داده شده در بالا به شرح زیر ایجاد می شود:

1. در رجیسترهای N1 و N2 پر کردن اولیه آنها نوشته شده است - یک مقدار 64 بیتی به نام "Synchro-burst" (Synchro-burst، در عمل، آنالوگ بردار اولیه در حالت های CBC، CFB و OFB است).

2. رمزگذاری محتویات ثبات / VI و N2 (در این مورد - همگام سازی پیام ها) در حالت جایگزینی ساده انجام می شود.

3. به محتوای N1 مدول اضافه می شود (2 32 - 1) با ثابت CI = 2 24 + 2 16 + 2 8 + 4، نتیجه جمع برای ثبت / VI نوشته می شود.

4. محتوای N2 مدول 2 با ثابت C2 = 2 24 + 2 16 + 2 8 +1 اضافه می شود، نتیجه جمع برای ثبت N2 نوشته می شود.

5. محتویات ثبات / VI و N2 به عنوان یک بلوک گامای رمز 64 بیتی خروجی می شود (یعنی در این مورد / VI و N2 اولین بلوک گاما را تشکیل می دهند).

6. اگر بلوک بعدی گاما مورد نیاز باشد (یعنی باید رمزگذاری یا رمزگشایی را ادامه دهید)، به مرحله 2 باز می گردید.

برای رمزگشایی، گاما به روشی مشابه تولید می‌شود، سپس عملیات XOR دوباره روی متن رمز و بیت‌های گاما اعمال می‌شود.

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

در اکثر پیاده‌سازی‌های الگوریتم GOST 28147-89، پیام همگام‌سازی یک عنصر مخفی نیست، با این حال، پیام همگام‌سازی می‌تواند به اندازه کلید رمزگذاری مخفی باشد. در این حالت می توان فرض کرد که طول موثر کلید الگوریتم (256 بیت) با 64 بیت دیگر از پیام همگام سازی افزایش می یابد که می تواند به عنوان یک عنصر کلیدی اضافی در نظر گرفته شود.

حالت گاما با بازخورد

در حالت گاما با بازخورد، به عنوان پر کردن رجیسترهای / VI و L / 2، با شروع از بلوک 2، از بلوک گامای قبلی استفاده نمی شود، بلکه نتیجه رمزگذاری بلوک قبلی متن ساده است (شکل 3.4). . بلوک اول در این حالت کاملاً مشابه بلوک قبلی ایجاد می شود.

برنج. 3.4. تولید گامای رمز در حالت گامای بازخورد

نحوه تولید شبیه ساز

پیشوند یک جمع کنترل رمزنگاری است که با استفاده از یک کلید رمزگذاری برای تأیید صحت پیام ها محاسبه می شود. برای محاسبه آن، یک حالت خاص از الگوریتم GOST 28147-89 وجود دارد.

تولید یک شبیه ساز به صورت زیر انجام می شود:

1. اولین بلوک اطلاعات 64 بیتی که پیشوند برای آن محاسبه می شود، در ثبات های N1 و N2 نوشته می شود و در حالت کاهش یافته جایگزینی ساده رمزگذاری می شود که در آن 16 دور اول از 32 راند انجام می شود.

2. نتیجه به دست آمده، مدول 2 با بلوک بعدی اطلاعات جمع می شود و نتیجه را در N1 و N2 ذخیره می کند.

3. M و N2 دوباره در حالت کاهش یافته جایگزینی ساده رمزگذاری می شوند و تا آخرین بلوک اطلاعات ادامه می یابد.

یک تقلید کننده محتوای 64 بیتی حاصل از ثبات های N1 و N2 یا بخشی از آن است. رایج ترین پیشوند 32 بیتی استفاده می شود، یعنی نیمی از محتویات رجیستر. این کافی است، زیرا، مانند هر چک‌سوم دیگری، شبیه‌ساز در درجه اول برای محافظت در برابر تحریف تصادفی اطلاعات طراحی شده است. برای محافظت در برابر اصلاح عمدی داده ها، از روش های رمزنگاری دیگر استفاده می شود - اول از همه، امضای دیجیتال الکترونیکی (به بخش 1.1 مراجعه کنید).

مقلد به صورت زیر استفاده می شود:

1. هنگام رمزگذاری هر اطلاعاتی، پیشوند متن ساده محاسبه شده و همراه با متن رمز ارسال می شود.

2. پس از رمزگشایی، پیشوند دوباره محاسبه و با پیشوند ارسال شده مقایسه می شود.

3. اگر پیشوندهای محاسبه شده و ارسال شده مطابقت نداشته باشند - متن رمز در حین انتقال مخدوش شده است یا از کلیدهای نادرست در هنگام رمزگشایی استفاده شده است.

این پیشوند به ویژه برای تأیید رمزگشایی صحیح اطلاعات کلید هنگام استفاده از طرح های چند کلیدی مفید است.

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

قدرت رمزنگاری الگوریتم

در سال 1994، شرح الگوریتم GOST 28147-89 به انگلیسی ترجمه و منتشر شد. پس از این بود که نتایج تجزیه و تحلیل او که توسط کارشناسان خارجی انجام شده بود، ظاهر شد. با این حال، برای مقدار قابل توجهی از زمان، هیچ حمله ای نزدیک به امکان پذیر یافت نشد.

□ طول کلید بزرگ - 256 بیت. همراه با پیام همگام مخفی، طول کلید موثر به 320 بیت افزایش می یابد.

□ 32 دور تبدیل. پس از 8 دور، اثر کامل پراکندگی داده های ورودی به دست می آید: تغییر در یک بیت از بلوک متن ساده بر تمام بیت های بلوک متن رمزی تأثیر می گذارد، و بالعکس، یعنی یک حاشیه امنیتی چندگانه وجود دارد.

نتایج تحلیل رمز الگوریتم GOST 28147-89 را در نظر بگیرید.

تجزیه و تحلیل جداول جایگزین

از آنجایی که جداول جایگزینی در استاندارد آورده نشده است، تعدادی از کارها (به عنوان مثال ج) نشان می دهد که یک "سازمان صالح" می تواند جداول جایگزین "خوب" و "بد" را تولید کند. با این حال، معروف ترین کارشناس بروس اشنایر، چنین فرضیاتی را "شایعات" می نامد. واضح است که قدرت رمزنگاری الگوریتم تا حد زیادی به ویژگی های جداول جایگزین استفاده شده بستگی دارد؛ بر این اساس، جداول جایگزین ضعیفی وجود دارد (به مثال بالا مراجعه کنید) که استفاده از آنها می تواند حمله به الگوریتم را ساده کند. با این وجود، امکان استفاده از جداول جایگزینی مختلف ایده بسیار شایسته ای به نظر می رسد که به نفع آن می توان به دو واقعیت زیر از تاریخچه استاندارد رمزگذاری DES اشاره کرد (برای جزئیات به بخش 3.15 مراجعه کنید):

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

□ با استفاده از جداول جایگزینی قوی تر، تلاش هایی برای تقویت DES در برابر تحلیل رمزنگاری خطی و دیفرانسیل صورت گرفته است. چنین جداول، که در واقع قوی تر هستند، برای مثال در الگوریتم s 5 DES پیشنهاد شده است. اما، افسوس، جایگزینی DES با s 5 DES غیرممکن بود، زیرا جداول جایگزین به ترتیب در استاندارد تعریف شده است، اجرای الگوریتم احتمالاً از توانایی تغییر جداول به دیگران پشتیبانی نمی کند.

در تعدادی از کارها (به عنوان مثال، و) به اشتباه به این نتیجه رسیده است که جداول مخفی جایگزینی الگوریتم GOST 28147-89 می تواند بخشی از کلید باشد و طول موثر آن را افزایش دهد (که ناچیز است، زیرا الگوریتم دارای ویژگی های بسیار زیادی است. کلید 256 بیتی بزرگ). با این حال، کار ثابت کرد که جداول جایگزین مخفی را می توان با استفاده از حمله زیر محاسبه کرد که می تواند در عمل اعمال شود:

1. کلید صفر تنظیم می شود و جستجوی "بردار صفر" انجام می شود، یعنی مقادیر z = / (0)، که در آن / () تابع دور الگوریتم است. این مرحله در حدود 2 عملیات رمزگذاری طول می کشد.

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

اصلاح الگوریتم و تجزیه و تحلیل آنها

این کار یک تحلیل رمزی از تغییرات الگوریتم GOST 28147-89 انجام داد:

□ الگوریتم GOST-H، که در آن، نسبت به الگوریتم اصلی، ترتیب استفاده از کلیدهای فرعی تغییر می کند، یعنی در دورهای 25 تا 32، کلیدهای فرعی به ترتیب مستقیم استفاده می شوند، یعنی به همان ترتیبی که در دورهای قبلی الگوریتم؛

□ الگوریتم 20 دور GOST® که از XOR برای کلید زدن به جای اضافه کردن مدول 32 استفاده می کند.

بر اساس نتایج تجزیه و تحلیل، نتیجه‌گیری شد که GOST-H و GOST © ضعیف‌تر از الگوریتم اصلی GOST 28147-89 هستند، زیرا هر دو دارای کلاس‌هایی از کلیدهای ضعیف هستند. لازم به ذکر است که در قسمت GOST © cryptanalysis، کار کلمه به کلمه بخش اختصاص داده شده به تحلیل رمز الگوریتم GOST 28147-89، منتشر شده در سال 2000 توسط یک اثر معروف (بدون هیچ ارجاعی به نسخه اصلی) را تکرار می کند. . این موضوع حرفه ای بودن نویسندگان اثر و بقیه نتایج آن را مورد تردید قرار می دهد.

یک اصلاح بسیار جالب از الگوریتم در کار پیشنهاد شده است: جداول S \... Ss باید متفاوت باشند. در هر دور از الگوریتم، آنها باید طبق قانون خاصی مرتب شوند. این جایگشت می تواند وابسته به کلید رمزگذاری باشد، یا می تواند مخفی باشد (یعنی می تواند بخشی از کلید رمزگذاری بزرگتر از کلید 256 بیتی اصلی باشد). هر دوی این گزینه‌ها، به گفته نویسندگانشان، مقاومت الگوریتم را در برابر تحلیل خطی و دیفرانسیل به میزان قابل توجهی افزایش می‌دهند.

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

تجزیه و تحلیل الگوریتم کامل

حملاتی به GOST 28147-89 کامل بدون هیچ گونه تغییری انجام می شود. یکی از اولین کارهای عمومی که در آن تجزیه و تحلیل الگوریتم انجام شد - یک کار شناخته شده - به حملاتی اختصاص دارد که از نقاط ضعف رویه گسترش کلید تعدادی از الگوریتم های رمزگذاری معروف سوء استفاده می کنند. به طور خاص، الگوریتم کامل GOST 28147-89 را می توان با استفاده از تحلیل رمزی دیفرانسیل در کلیدهای پیوند خورده شکست، اما تنها در صورتی که از جداول جایگزین ضعیف استفاده شود. نسخه 24 دوری الگوریتم (که فاقد 8 دور اول است) برای هر جدول جایگزینی به همین ترتیب باز می شود، اما جداول جایگزین قوی (مثلاً در ج نشان داده شده است) چنین حمله ای را کاملا غیرعملی می کند.

دانشمندان داخلی A.G. Rostovtsev و E.B. Makhovenko در سال 2001 در کار خود یک روش اساساً جدید برای تحلیل رمز (به گفته نویسندگان، بسیار مؤثرتر از تحلیل رمزی خطی و دیفرانسیل) با تشکیل یک تابع عینی از یک متن ساده شناخته شده مربوط به آن متن رمز و مقدار کلید مورد نظر و یافتن حداکثر آن مطابق با مقدار کلید واقعی. آنها همچنین دسته بزرگی از کلیدهای ضعیف را برای الگوریتم GOST 28147-89 پیدا کردند که شکستن الگوریتم را تنها با استفاده از 4 متن ساده انتخاب شده و متن های رمزی مربوطه با پیچیدگی نسبتاً کم امکان پذیر می کند. تحلیل رمز الگوریتم در کار ادامه دارد.

در سال 2004، گروهی از متخصصان کره ای حمله ای را پیشنهاد کردند که با استفاده از آنالیز رمزنگاری تفاضلی روی کلیدهای مرتبط، می توان با احتمال 91.7 درصد 12 بیت از کلید مخفی را به دست آورد. این حمله به 235 متن ساده انتخاب شده و 236 عملیات رمزگذاری نیاز دارد. همانطور که می بینید، این حمله عملا برای حمله واقعی به الگوریتم بی فایده است.

الگوریتم GOST 28147-89 و رمز "ماگما" (GOST R 34.12-2015)

طرح کلی الگوریتم الگوریتم توصیف شده توسط GOST 28147-89 "سیستم های پردازش اطلاعات. حفاظت رمزنگاری الگوریتم تبدیل رمزنگاری، یک استاندارد داخلی برای رمزگذاری متقارن (قبل از 1 ژانویه 2016) است و برای پیاده سازی در ابزارهای حفاظت اطلاعات رمزنگاری تایید شده مورد استفاده در سیستم های اطلاعات دولتی و در برخی موارد در سیستم های تجاری اجباری است. برای محافظت از اطلاعاتی که راز دولتی فدراسیون روسیه را تشکیل می دهند، و اطلاعاتی که محرمانه بودن آنها باید مطابق با قوانین فعلی تضمین شود، گواهی ابزارهای حفاظت رمزنگاری اطلاعات لازم است. همچنین در فدراسیون روسیه، استفاده از الگوریتم GOST 28147-89 برای حفاظت از سیستم های اطلاعات بانکی توصیه می شود.

الگوریتم GOST 28147-89 (شکل 2.21) بر اساس طرح Feistel است و اطلاعات را در بلوک های 64 بیتی رمزگذاری می کند که به دو بلوک فرعی 32 بیتی تقسیم می شوند (I و ر).بلوک فرعی توسط تابع تبدیل گرد پردازش می شود، پس از آن مقدار آن به مقدار زیر بلوک Lj اضافه می شود، سپس بلوک های فرعی مبادله می شوند. این الگوریتم بسته به حالت رمزگذاری (محاسبه درج تقلید یا سایر حالت های رمزگذاری) دارای 16 یا 32 دور است.

برنج. 2.21.

در هر دور از الگوریتم، تبدیل های زیر انجام می شود.

1. روکش کلید.محتوای زیربلاک R iمدول 2 32 با کلید گرد اضافه شد K. Kjبخش 32 بیتی کلید اصلی است که به عنوان کلید گرد استفاده می شود. الگوریتم GOST 28147-89 ns از یک روش بسط کلید استفاده می کند، کلید رمزگذاری 256 بیتی اصلی به عنوان یک الحاق (الحاق) از هشت کلید فرعی 32 بیتی نشان داده می شود (شکل 2.22): K 0، K (، K t K، K A، K 5، K 6، K 7.

فرآیند رمزگذاری از یکی از این کلیدهای فرعی استفاده می کند. به

از دور اول تا بیست و چهارم - به ترتیب مستقیم:

از دور 25 تا 32 - به ترتیب معکوس:

برنج. 2.22. ساختار کلید رمزگذاری الگوریتم GOST 28147-89

2. جایگزینی جدولیپس از اعمال کلید، بلوک فرعی R iبه هشت قسمت اما 4 بیت تقسیم می شود که مقدار هر کدام به صورت جداگانه مطابق با جدول جایگزینی آن (S-box) جایگزین می شود. در مجموع از هشت جعبه S استفاده می شود - S 0، S، S 2، S 3، S 4، S 5، S 6، S 7. هر بلوک S الگوریتم GOST 28147-89 یک بردار (آرایه یک بعدی) با عناصر ^ شماره گذاری شده از 0 تا 15 است. مقادیر بلوک S اعداد 4 بیتی هستند، یعنی: اعداد صحیح از 0 تا 15

عنصری از جدول S-box گرفته می شود که عدد ترتیبی آن با مقداری که به ورودی جایگزین آمده منطبق است.

مثال 2.6.

بگذارید یک بلوک S به شکل زیر وجود داشته باشد:

اجازه دهید مقدار 0100 2 = 4 به ورودی این S-box داده شود.خروجی S-box چهارمین عنصر جدول جایگزینی خواهد بود، یعنی. 15 = 1111 2 (عناصر با شروع از صفر شماره گذاری می شوند).

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

متأسفانه، الگوریتم GOST 28147-89 جداول جایگزینی "ضعیف" دارد که هنگام استفاده از آنها می توان الگوریتم را به راحتی با روش های رمزنگاری آشکار کرد. در میان "ضعیف"، به عنوان مثال، یک جدول بی اهمیت از جایگزینی است، که در آن ورودی برابر با خروجی است (جدول 2.16).

جدول 2.16

نمونه ای از S-box ضعیف

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

در واقع، جداول جایگزین مخفی را می توان با استفاده از حمله زیر محاسبه کرد که می تواند در عمل اعمال شود:

  • یک کلید صفر تنظیم می شود و جستجوی "بردار صفر" انجام می شود، یعنی. معنی z = F ( 0) کجا F -تابع تبدیل گرد الگوریتم این به حدود 2 32 عملیات رمزگذاری آزمایشی نیاز دارد.
  • با استفاده از بردار صفر، مقادیر جداول جایگزینی محاسبه می شود که بیش از 2 11 عملیات طول نمی کشد.

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

همچنین فرض بر این است که جداول جایگزینی برای همه گره های رمزگذاری در یک سیستم حفاظت رمزنگاری مشترک است.

بهبود ساختار S-boxها یکی از مسائلی است که به شدت در زمینه رمزهای بلوکی متقارن تحقیق شده است. اساساً لازم است که هر گونه تغییر در ورودی S-box ها به بیرون بریزد تصادفیظاهراً خروجی را تغییر می دهد. از یک طرف، هرچه S-box ها بزرگتر باشند، الگوریتم در برابر روش های تحلیل رمزی خطی و دیفرانسیل مقاومت بیشتری دارد. از سوی دیگر، طراحی میز جایگزین بزرگ دشوارتر است.

در الگوریتم های مدرن، جعبه های S معمولاً یک برداری (آرایه یک بعدی) هستند که شامل 2 "t-عناصر بیت ورودی بلوک تعداد عنصر را مشخص می کند که مقدار آن به عنوان خروجی بلوک S عمل می کند.

تعدادی معیار برای طراحی S-box ارائه شده است. جدول تعویض باید موارد زیر را برآورده کند:

  • معیار دقیق بهمن؛
  • معیار استقلال بیت;
  • نیاز غیر خطی از مقادیر ورودی.

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

در برخی از کارها، برای S-box ها، بررسی تحقق اثر تضمین شده بهمنی مرتبه y - زمانی که یک بیت ورودی تغییر می کند، حداقل بیت های خروجی S-box تغییر می کند، پیشنهاد شده است. ویژگی اثر بهمن تضمین شده از مرتبه y از 2 تا 5 ویژگی های انتشار به اندازه کافی خوب جعبه های S را برای هر الگوریتم رمزگذاری ارائه می دهد.

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

  • انتخاب تصادفی (برای S-box های کوچک، می تواند منجر به ایجاد جداول جایگزین ضعیف شود).
  • انتخاب تصادفی و به دنبال آن بررسی انطباق با معیارهای مختلف و رد S-box های ضعیف.
  • انتخاب دستی (برای بلوک های بزرگ S خیلی پر زحمت)؛
  • رویکرد ریاضی، به عنوان مثال، تولید با استفاده از توابع خم شده (این رویکرد در الگوریتم CAST اعمال می شود).

روش زیر برای طراحی تک تک بلوک های S الگوریتم GOST 28147-89 می تواند پیشنهاد شود:

  • هر S-box را می توان با چهار تابع منطقی توصیف کرد، هر یک از توابع باید دارای چهار آرگومان منطقی باشند.
  • این توابع باید به اندازه کافی پیچیده باشند. این شرط پیچیدگی را نمی توان به طور رسمی بیان کرد، با این حال، به عنوان یک شرط ضروری، می توان الزام کرد که توابع منطقی متناظر، که به شکل حداقل (یعنی با حداقل طول بیان ممکن) با استفاده از عملیات منطقی پایه نوشته شده اند، نباید کوتاه تر از مقدار مورد نیاز مشخص؛
  • توابع منفرد، حتی در جداول جایگزینی مختلف مورد استفاده قرار می گیرند، باید به اندازه کافی متفاوت از یکدیگر باشند.

در سال 2011، یک حمله جدید "جلسه بازتابی در وسط" پیشنهاد شد که کمی مقاومت GOST 28147-89 (از 2256 به 2225) را کاهش می دهد. بهترین نتیجه تجزیه و تحلیل رمزگذاری الگوریتم تا سال 2012 باعث کاهش قدرت آن به 2 192 می شود که به اندازه نسبتاً بزرگی از متن رمزی و مقدار داده های از پیش ساخته شده نیاز دارد. علیرغم حملات پیشنهادی، GOST 28147-89 عملاً در سطح فعلی توسعه فناوری رایانه پایدار است.

کد "ماگما" (GOST R 34.12-2015).استاندارد GOST 28147-89 بیش از 25 سال است که در روسیه اجرا می شود. در طول این مدت، دوام کافی و کارایی خوب پیاده سازی نرم افزاری و سخت افزاری، از جمله مواردی که در دستگاه های کم منابع وجود دارد را نشان داده است. اگرچه حملات رمزنگاری پیشنهاد شده است که برآوردهای مقاومت آن را کاهش می دهد (بهترین آنها تا 2192 است)، اما امکان پذیر نیست. بنابراین، تصمیم گرفته شد که الگوریتم GOST 28147-89 در استاندارد رمزگذاری متقارن جدید توسعه یافته گنجانده شود.

در فروشگاه 2015، دو استاندارد ملی رمزنگاری جدید به تصویب رسید: GOST R 34.12-2015 "فناوری اطلاعات. حفاظت از اطلاعات رمزنگاری رمزهای بلوک "و GOST R 34.13-2015" فناوری اطلاعات. حفاظت از اطلاعات رمزنگاری حالت های عملیاتی رمزهای بلوکی "، که از 1 ژانویه 2016 به اجرا در می آیند.

استاندارد GOST R 34.12-2015 شامل شرح دو رمز بلوک با طول بلوک 128 و 64 بیت است. رمز GOST 28147-89 با بلوک های جایگزین غیرخطی ثابت در GOST R 34.12-2015 جدید به عنوان یک رمز 64 بیتی به نام "Magma" گنجانده شده است.

در زیر بلوک های جایگزین ثابت شده در استاندارد آمده است:

مجموعه جعبه‌های S ارائه‌شده در استاندارد بهترین ویژگی‌هایی را ارائه می‌کند که مقاومت الگوریتم رمزنگاری را در برابر تحلیل خطی و افتراقی تعیین می‌کند.

طبق گفته کمیته فنی استانداردسازی "حفاظت رمزنگاری اطلاعات" (TC 26)، رفع بلوک های جایگزین غیرخطی، الگوریتم GOST 28147-89 را یکپارچه تر می کند و به حذف استفاده از بلوک های جایگزین غیرخطی "ضعیف" کمک می کند. علاوه بر این، تثبیت در استاندارد تمام پارامترهای بلند مدت رمز با رویه بین المللی پذیرفته شده مطابقت دارد. استاندارد جدید GOST R 34.12-2015 از نظر اصطلاحی و مفهومی با استانداردهای بین المللی ISO / IEC 10116 "فناوری اطلاعات" مرتبط است. روش های امنیتی حالت‌های عملیاتی برای «رمزهای بلوک بیتی» (ISO / IEC 10116: 2006 فناوری اطلاعات - تکنیک‌های امنیتی - حالت‌های عملیات برای رمزگذاری بلوک‌های n-bit) و سری ISO / IEC 18033 «فناوری اطلاعات. روش ها و وسایل تضمین ایمنی. الگوریتم های رمزگذاری ": ISO / IEC 18033-1: 2005" قسمت 1. عمومی "(ISO / IEC 18033-1: 2005 فناوری اطلاعات - تکنیک های امنیتی - الگوریتم های رمزگذاری - قسمت 1: عمومی) و ISO / IEC 18033-3: 2010 "بخش 3. رمزهای بلوک" (ISO / IEC 18033-3: 2010 (فناوری اطلاعات - تکنیک های امنیتی - الگوریتم های رمزگذاری - قسمت 3: رمزهای بلوکی)).

استاندارد GOST P 34.12-2015 همچنین شامل یک رمز بلوک جدید ("Grasshopper") با اندازه بلوک 128 بیت است. انتظار می رود این رمز در برابر تمام حملات رمزگذاری بلوکی که امروزه شناخته شده اند، قوی باشد.

حالت های عملکرد رمزهای بلوک (جایگزینی ساده، گاما، گاما با بازخورد خروجی، گاما با بازخورد متن رمزی، جایگزینی ساده با درگیری و توسعه یک درج تقلید) در استاندارد جداگانه GOST R 34.13-2015 گنجانده شده است که مطابق با رویه پذیرفته شده بین المللی این حالت ها هم برای رمز ماگما و هم برای رمز جدید Grasshopper قابل اجرا هستند.

  • جابجایی دایره ای به چپ به صورت بیتی با 11 بیت انجام می شود. رمزگشایی طبق همان طرح انجام می شود، اما با برنامه استفاده از کلید متفاوت: از دور اول تا هشتم رمزگشایی - به ترتیب مستقیم: از دور نهم تا سی و دوم رمزگشایی - به ترتیب معکوس: در مقایسه با رمز DES در GOST 28147-89 دارای مزایای زیر است: یک کلید به طور قابل توجهی طولانی تر (256 بیت در مقابل 56 برای رمز DES)، حمله ای که بر روی آن شمارش مجموعه کلیدها با نیروی brute-force در حال حاضر غیرممکن به نظر می رسد. یک برنامه زمانی ساده برای استفاده از کلید، که اجرای الگوریتم را ساده می کند و سرعت محاسبات را افزایش می دهد. طراحی بلوک های S GOST 28147-89. واضح است که طرح الگوریتم GOST 28147-89 بسیار ساده است. این بدان معنی است که بیشترین بار رمزگذاری روی جداول جایگزینی می افتد. مقادیر برگه
  • الگوریتم های رمزگذاری Panasepko S.P: یک کتاب مرجع ویژه. SPb.: BHV-Peter-burg، 2009.
  • Kara O. حملات بازتابی به رمزهای محصول. آدرس: http://eprint.iacr.org/2007/043.pdf
  • استاندارد رمزگذاری روسی: کاهش قدرت. آدرس: http://cryptofaq.ru/index.php/2010-12-23-18-20-21/2010-12-23-18-22-09/90-2011-02-01-07-47- 27
  • Achekseev E. K., Smyshlyaev S. V. GOST 28147-89: "برای دفن او عجله نکنید."

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

در ادامه گزیده‌های کوتاهی از این اثر آمده است که می‌توان آن را به عنوان یک حمله هشداردهنده در بحبوحه استانداردسازی بین‌المللی در نظر گرفت (نویسنده به‌خاطر اغراق‌های مشابه در رابطه با AES شناخته می‌شد، اما کار او سپس تأثیر نظری زیادی بر تحلیل رمز گذاشت، اما منجر به حملات عملی به خود AES نمی شود). اما، شاید، این نیز یک هشدار واقعی در مورد آغاز مرحله "هواپیما در حال فرو رفتن در دم اسپین" باشد، که ممکن است با سقوط استاندارد ملی رمزگذاری به پایان برسد، همانطور که در مورد الگوریتم هش SHA-1 و الگوریتم هش دوفاکتو MD5.

GOST 28147-89 در سال 1989 استاندارد شد و برای اولین بار به استاندارد رسمی حفاظت از اطلاعات محرمانه تبدیل شد، اما مشخصات رمز بسته باقی ماند. در سال 1994، استاندارد از طبقه بندی خارج شد، منتشر شد و به انگلیسی ترجمه شد. بر اساس قیاس با AES (و بر خلاف DES)، GOST مجاز است از اطلاعات طبقه بندی شده بدون محدودیت، مطابق با روشی که در استاندارد روسیه مشخص شده است، محافظت کند. که GOST آنالوگ DES نیست، بلکه رقیب 3-DES با سه کلید مستقل یا AES-256 است. بدیهی است که GOST یک رمز نسبتاً جدی است که معیارهای نظامی را برآورده می کند و با انتظار جدی ترین برنامه ها ایجاد شده است. حداقل دو مجموعه GOST S-box بر اساس برنامه های مورد استفاده توسط بانک های روسیه شناسایی شده است. این بانک ها باید با صدها شعبه ارتباط محرمانه داشته باشند و از میلیاردها دلار در برابر سرقت های جعلی محافظت کنند.

GOST یک رمز بلوکی با ساختار ساده Feistel، با اندازه بلوک 64 بیت، یک کلید 256 بیتی و 32 دور است. هر دور شامل اضافه کردن کلید 2 ^ 32، مجموعه ای از هشت جعبه S 4 بیتی و یک تغییر چرخه ای ساده 11 بیتی است. یکی از ویژگی های GOST توانایی ذخیره بلوک های S به صورت مخفی است که می تواند به عنوان کلید دوم نمایش داده شود که ماده کلید موثر را به 610 بیت افزایش می دهد. یک مجموعه S-box در سال 1994 به عنوان بخشی از مشخصات عملکرد هش GOST-R 34.11-94 منتشر شد و همانطور که Schneier نوشت، توسط بانک مرکزی فدراسیون روسیه استفاده شد. همچنین در RFC4357 در بخش "id-GostR3411-94-CryptoProParamSet" گنجانده شده است. یک اشکال در کدهای منبع در انتهای کتاب اشنایر (به ترتیب S-box) وجود داشت. دقیق ترین پیاده سازی مرجع با منشاء بومی روسی اکنون در کتابخانه OpenSSL یافت می شود. اگر از S-box های مخفی در جایی استفاده شود، می توان آنها را از پیاده سازی نرم افزار و از ریزمدارها استخراج کرد، در واقع، آثار مربوطه منتشر شد.

GOST یک رقیب جدی است

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

جای تعجب نیست که GOST به یک استاندارد اینترنتی تبدیل شده است، به ویژه در بسیاری از کتابخانه های رمزنگاری مانند OpenSSL و Crypto ++ گنجانده شده است و در خارج از کشور مبدأ خود محبوب تر می شود. در سال 2010، GOST برای استانداردسازی ISO به عنوان یک استاندارد رمزگذاری جهانی اعلام شد. تعداد بسیار کمی از الگوریتم ها توانسته اند به استانداردهای بین المللی تبدیل شوند. ISO / IEC 18033-3: 2010 الگوریتم های زیر را توصیف می کند: چهار رمز 64 بیتی - TDEA، MISTY1، CAST-128، HIGHT - و سه رمز 128 بیتی - AES، Camellia، SEED. پیشنهاد می شود GOST به همان استاندارد ISO / IEC 18033-3 اضافه شود.

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

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

نظرات کارشناسان در مورد GOST

هیچ یک از اطلاعات و ادبیات موجود در مورد GOST دلیلی برای باور ناامن بودن رمز ارائه نمی دهد. برعکس، اندازه کلید بزرگ و تعداد دور زیاد، GOST را در نگاه اول برای چندین دهه استفاده مناسب می کند.

هر کسی که با قانون مور آشنا باشد متوجه می شود که از نظر تئوری، کلیدهای 256 بیتی حداقل تا 200 سال امن باقی می مانند. GOST به طور گسترده توسط متخصصان برجسته در زمینه رمزنگاری، شناخته شده در زمینه تجزیه و تحلیل رمز بلوکی، مانند اشنایر، بیریوکوف، دانکلمن، واگنر، بسیاری از دانشمندان استرالیایی، ژاپنی و روسی، کارشناسان رمزنگاری از ISO، و همه محققان مورد تحقیق قرار گرفته است. بیان کرد که همه چیز اینگونه به نظر می رسد که او می تواند یا باید در امان باشد. اگرچه این عقیده به درک گسترده ای رسید که ساختار GOST خود بسیار ضعیف است، به عنوان مثال، در مقایسه با DES، به ویژه، انتشار چندان خوب نیست، با این حال، این همیشه به این دلیل بود که این باید با یک جبران شود. تعداد زیادی دور (32)، و همچنین غیرخطی بودن و انتشار اضافی که با اضافه کردن مدول فراهم می‌شود.

بریوکوف و واگنر نوشتند: "تعداد زیاد دور (32) و ساختار Feistel که به خوبی مطالعه شده است، همراه با جایگشت های متوالی شانون، مبنای محکمی برای امنیت GOST فراهم می کند." در همان اثر می خوانیم: "پس از سرمایه گذاری قابل توجهی از زمان و تلاش، هیچ پیشرفتی در تحلیل رمزی استاندارد در ادبیات باز حاصل نشده است." بنابراین، هیچ حمله قابل توجهی وجود نداشت که امکان رمزگشایی یا بازیابی کلید را در یک سناریوی واقع بینانه که در آن GOST در رمزگذاری با کلیدهای تصادفی مختلف استفاده می‌شود، وجود نداشت. در مقابل، آثار زیادی در مورد حمله به کلیدهای ضعیف در GOST، حملات با کلیدهای مرتبط، حملات به بازیابی جعبه های S مخفی شناخته شده است. در Crypto-2008، هک یک تابع هش بر اساس این رمز ارائه شد. در تمام حملات، مهاجم دارای سطح آزادی قابل توجهی بیشتر از حد معمول است. تا به حال، هیچ حمله رمزنگاری جدی به GOST در برنامه های سنتی رمزگذاری با استفاده از کلیدهای انتخاب شده تصادفی یافت نشده است، که در سال 2010 با عبارت پایانی بیان شد: "علیرغم تلاش های قابل توجه تحلیلگران رمزنگاری در 20 سال گذشته، GOST هنوز انجام نشده است. ترک خورده است» (Axel Poschmann، San Ling و Huaxiong Wang: 256 Bit Standardized Crypto for 650 GE GOST Revisited, In CHES 2010, LNCS 6225, pp. 219-233, 2010).

تحلیل خطی و دیفرانسیل GOST

در کتاب معروف اشنایر می خوانیم: «در برابر تحلیل رمزی دیفرانسیل و خطی، GOST احتمالاً قوی تر از DES است». ارزیابی امنیتی اصلی GOST در سال 2000 توسط Gabidulin و همکاران ارائه شد.نتایج آنها بسیار چشمگیر است: با سطح امنیتی 2 ^ 256 مجموعه، پنج دور برای محافظت از GOST در برابر تحلیل خطی رمز کافی است. علاوه بر این، حتی پس از جایگزینی جعبه‌های S با جعبه‌های یکسان و تنها عملیات رمزنگاری غیرخطی - اضافه کردن mod 2 ^ 32 - رمز همچنان پس از 6 دور از 32 دور در برابر آنالیز رمزنگاری خطی مقاوم است. برای سطح امنیتی 2 ^ 128، محققان (Vitaly V. Shorin، Vadim V. Jelezniakov و Ernst M. Gabidulin: Linear and Differential Cryptanalysis of Russian GOST, Preprint ارسال شده به Elsevier Preprint، 4 آوریل 2001) دوام کافی را در 7 دور فرض کردند. . به گفته آنها، شکستن GOST در بیش از پنج دور "بسیار دشوار" است. علاوه بر این، دو محقق ژاپنی نشان داده اند که یک حمله دیفرانسیل مستقیم کلاسیک با یک مشخصه دیفرانسیل، احتمال بسیار کمی برای عبور از تعداد زیادی دور دارد. بر اساس مطالعه یک مشخصه دیفرانسیل تکراری به اندازه کافی "خوب" برای تعداد محدودی دور (که خود احتمال عبور از 2-11.4 در هر دور را ندارد)، مقدار مجموعه کلیدهای مناسب کمتر از نصف است. . برای یک GOST کامل، چنین حمله ای با یک مشخصه تنها با بخش ناچیزی از کلیدهای مرتبه 2-62 کار می کند (و حتی در این قسمت کوچک احتمال عبور از 2-360 بیشتر نخواهد بود. ).

حملات پیچیده‌تر شامل دیفرانسیل‌های متعددی است که از الگوهای خاصی پیروی می‌کنند، مانند استفاده از جعبه‌های S منفرد که دیفرانسیل صفر دارند در حالی که بیت‌های دیگر دارای تفاوت‌های غیرصفر هستند. ما در مورد حملات تبعیض آمیز بر اساس خواص انتشار ضعیف GOST صحبت می کنیم. بهترین چنین حملاتی در برابر 17 دور GOST کار می کند، به کلید بستگی دارد و دارای یک تمایز بسیار ضعیف از داده های تصادفی در خود خروجی است، به طوری که می توان از آن برای به دست آوردن اطلاعات در مورد کلید استفاده کرد.

لغزش و منحرف کردن حملات

به گفته بیریوکوف و واگنر، ساختار GOST که شامل ترتیب معکوس کلیدهای فرعی در دورهای آخر است، آن را در برابر حملات لغزشی (به اصطلاح "حملات اسلاید") مقاوم می کند. با این حال، به دلیل وجود یک شباهت خود بزرگ در رمز، این امکان حملات وارونگی کلید بر روی ترکیبی از نقاط ثابت و ویژگی‌های «بازتاب» (به اصطلاح «حملات بازتابی») را برای کلیدهای ضعیف خاص فراهم می‌کند. پیچیدگی این حمله 2 ^ 192 و 2 ^ 32 متن ساده منطبق است.

آخرین نتایج

حملات جدید همچنین از بازتاب استفاده می کنند و در واقع GOST را که در کنفرانس FSE 2011 ارائه شد، شکستند. این حملات نیز به طور مستقل توسط نویسنده این مقاله کشف شد. این حمله به 2 ^ 132 بایت حافظه نیاز دارد که در واقع بدتر از حملات کندتر با نیاز به حافظه کمتر است.

بسیاری از حملات خود شباهت جدید علیه همه کلیدهای GOST کار می کنند و به شما امکان می دهند یک GOST تمام عیار را با یک کلید 256 بیتی بشکنید و نه فقط برای کلیدهای ضعیف، همانطور که قبلاً بود. همه این حملات به طور قابل توجهی به حافظه کمتری نیاز دارند و به طور قابل توجهی سریعتر هستند.

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

رمزنگاری جبری و حملات با پیچیدگی کم داده به رمزهای گرد کاهش یافته

حملات جبری به رمزهای بلوکی و جریانی را می توان به عنوان یک مشکل حل یک سیستم بزرگ معادلات جبری بولی که از هندسه و ساختار یک طرح رمزنگاری خاص پیروی می کند، نشان داد. ایده اصلی به شانون برمی گردد. در عمل، برای DES (اولین بار توسط نویسنده این اثر ارائه شد) به عنوان یک روش رمزگذاری رسمی ارائه شد و می تواند 6 دور را تنها در یک متن ساده شناخته شده شکست دهد. دستکاری معادله بر اساس الگوریتم های XL، پایه های گروبنر، روش ElimLin، حل کننده های SAT است.

در عمل، حملات جبری علیه تعداد بسیار کمی از دور رمزهای بلوکی اجرا شده است، اما قبلاً منجر به شکستن رمزهای جریانی شده است، و همچنین موفقیت هایی در شکستن رمزهای فوق سبک برای تجهیزات میکرو وجود دارد. به دلیل دشواری در اندازه حافظه و برآورد هزینه محاسباتی، آنها با سایر حملات ترکیب می شوند.

چگونه GOST را هک کنیم؟

یک حمله جبری به یک GOST کامل با جزئیات بیشتر در این نشریه ارائه شده است. در کار قبلی، نویسنده قبلاً 20 حمله جبری به GOST را ترسیم کرده است و انتظار دارد تعداد زیادی از آنها در آینده نزدیک باشد. حمله پیشنهادی در این کار بهترین آنها نیست، اما مسیری آسان (حداقل برای درک رمزنگاران) برای پیشرفت‌های بعدی برای ایجاد یک روش خاص برای شکستن GOST باز می‌کند.

نتیجه عملی هنوز هم کم است: 2 ^ 64 متن ساده شناخته شده و 2 ^ 64 حافظه برای ذخیره سازی جفت متن ساده / متن رمزی، شکستن GOST 2 ^ 8 را سریعتر از نیروی ساده ساده ممکن می کند. اما از نظر تحلیل رمزی، این بیانیه که "GOST هک شده است" کاملاً منصفانه است.

نتیجه گیری

GOST برای ارائه یک سطح نظامی از امنیت برای 200 سال آینده طراحی شده است. اکثر کارشناسان برجسته ای که GOST را مطالعه کرده اند، به توافق رسیده اند که "علیرغم تلاش های قابل توجه در زمینه رمزنگاری در طول 20 سال، GOST هنوز شکسته نشده است." در سال 2010، GOST به ISO 18033 به عنوان استاندارد جهانی رمزگذاری ارتقا یافت.

اساس ایده ها در مورد تحلیل رمزی جبری بیش از 60 سال پیش آغاز شد. اما تنها در 10 سال گذشته ابزارهای نرم افزاری مؤثری برای حل (جزئی) بسیاری از مسائل NP-complete توسعه یافته اند. تعدادی از رمزهای جریان شکسته شده است. تنها یک رمز بلوک با این روش شکسته شده است - خود KeeLoq ضعیف. در این اثر، نویسنده رمز مهم و در واقع استفاده شده GOST را می شکند. او خاطرنشان می کند که این اولین بار در تاریخ است که یک رمز حالت استاندارد شده توسط رمزنگاری جبری شکسته می شود.

یک حمله ساده "MITM با بازتاب" به GOST قبلاً در کنفرانس FSE 2011 ارائه شده است. در کار در نظر گرفته شده در این مقاله، حمله دیگری فقط برای نشان دادن این واقعیت ارائه شده است که در حال حاضر چند حمله به GOST ظاهر شده است که بسیاری از آنها قبلاً ظاهر شده اند. سریع‌تر هستند و یک حمله جبری به حافظه بسیار کمتری نیاز دارد و فضای تقریباً پایان ناپذیری از فرصت‌ها را برای دشمن برای حمله به رمز به روش‌های مختلف باز می‌کند. همچنین در این مقاله نشان داده شده است که نیازی به استفاده از خاصیت انعکاس برای هک نیست.

نویسنده ادعا می کند که بدیهی است که GOST دارای نقص های جدی است و اکنون سطح دوام مورد نیاز ISO را ارائه نمی دهد. بسیاری از حملات به GOST در چارچوب تأیید پارادایم کاهش پیچیدگی جبری ارائه شده است.

در نهایت محقق به ویژه به برخی از حقایق اشاره می کند که هنوز در دسترس خواننده نیست، اما برای محقق شناخته شده است که در روند استانداردسازی ISO مهم هستند. این حمله فقط یک حمله "گواهینامه" به GOST نیست، که سریعتر از حمله brute force brute force است. در واقع، استانداردسازی GOST اکنون بسیار خطرناک و غیرمسئولانه خواهد بود. این به این دلیل است که برخی از حملات عملی هستند. در عمل، برخی از کلیدهای GOST حتی می توانند رمزگشایی شوند، خواه کلیدهای ضعیف باشند یا کلیدهایی از برنامه های واقعی خصوصی GOST. در اثر قبلی، نویسنده به بررسی دقیق موارد احتمال حملات عملی پرداخته است. به طور قابل توجهی، "این اولین بار در تاریخ است که یک رمز بلوک استاندارد شده جدی طراحی شده برای محافظت از اسرار درجه نظامی و طراحی شده برای محافظت از اسرار دولتی برای دولت ها، بانک های بزرگ و سایر سازمان ها توسط یک حمله ریاضی به خطر می افتد."