Machine Translated by Google Federal aloqa agentligi "Sibir davlat telekommunikatsiya va informatika universiteti" Federal davlat byudjeti oliy ta'lim muassasasi (SibSUTI) PMiK bo'limi boshliq himoyaga qabul qilinadi. kafedrasi: prof., d.t.s. ______________________ Fionov A.N. BITIRUV MALAKALI ISH BAKALAVR GOST R 34.12 -2015 blokli shifrni joriy qilish va tadqiq qilish Tushuntirish eslatmasi Talaba Fakultet Nazoratchi Fomin Sergey Sergeevich IVT (230100) Fionov Andrey Nikolaevich Novosibirsk, 2016 yil /…………………/ PBV-33 guruhi /………………………/ Machine Translated by Google Machine Translated by Google Mundarija 1. GOST nima? ................................................ . ............................................. 4 1.1 GOST R 34.12-2015 ......................................... ...................................... 4 1.2 Tarix ................................................... ................................................................ ................................. 5 1.3 Kriptografik zaifliklar ................ ................................................................ ............. ..... 6 1.4 GOST shifrini standart sifatida tasdiqlash ......................................... ......... ........ 9 1.5 Ochiq resurslar bo'yicha nashr ........................... ................... ......................... o‘n 2. Kerakli ta’riflar ................................................. .............................. 12 3. Algoritm Chigirtka ................................................. ...................................... o'n uch 3.1 Umumiy ................................................ ...................... ................................................. .... o'n uch 3.2 Nazariy qism................................................. ................ ................................................ .... o'n to'rt 3.3 Amalga oshirishning kontseptual asoslari ................................................ ...................... 17 3.4 Kerakli qo'llab-quvvatlovchi ma'lumotlar ................................................... ................. ..... o'n sakkiz 3.5 Dumaloq kalitlarni yaratish ...................................... ............ ................. o'n to'qqiz 3.5.1 Takrorlanuvchi doimiy C ni hisoblash funksiyasi ...................................... ...... 19 3.5.2 F tipidagi konvertatsiya 3.5.3 Kalitni kengaytirish funksiyasi ................................................ . ...................... 20 ................................................ . ............... 21 3.6 Shifrlash ................................................... .... ................................................. 23 3.6.1 X tipidagi konvertatsiya ................................................ . ................... 23 3.6.2 S turini konvertatsiya qilish ...................................... ................................................................ 24 .. 3.6.3 R turini konvertatsiya qilish ................................................ . ................... 25 3.6.4 L tipidagi konvertatsiya 3.6.5 ................................................ . ...................... 26 LSX tipidagi konvertatsiya ...................................... ................................... ................................ .... 27 3.6.6 Shifrlash funksiyasi ............................................. .. ................................. 28 3.7 Shifrni ochish ............... ... ................................................... .. ............................... 29 3.7.1 S tipidagi teskari konvertatsiya ...................................... ...................... 29 3.7.2 R tipidagi teskari konvertatsiya ................................................ . ... o'ttiz 3.7.3 L tipidagi teskari konvertatsiya ................................................ . ... 31 3.7.3 LSX turini teskari konvertatsiya qilish ......................................... ................... ...... 32 2 Machine Translated by Google 3.7.4 Shifrni ochish funksiyasi...................................... .. ...................... 33 4. Ishlash rejimlari ................................................ ................................................. 34 4.1 ECB rejimi................................................. ................................................ . .. 34 4.2 Gamma rejimi ............................................. ................................................................ 35 4.3 Fikr-mulohazalarni masshtablash rejimi ...................................... ................ ...... 36 4.4 Qo'shish simulyatsiyasi rejimi ................................................ ................ ................. 37 5. Kirish-chiqish interfeysini amalga oshirish ......................................... ...... .............. 38 6. Statistik tadqiqotlar ................................................... ......................... 39 6.1 "Kitoblar to'plami" algoritmi ...................................... ... ................................... 39 6.2 Chiqish ketma-ketligini muqobil o'zgartirish ......... 40 6.3 Qidiruvga asoslangan algoritmlarning xarakteristikalari ............................................... 41... 6.4 Xulosa .................................................. . ................................................ .. ...... 43 7. Xulosa ................................................... ................................................ . .... 44 Adabiyotlar ro'yxati ................................................ ............................................... 45 3 Machine Translated by Google 1. GOST nima? 1.1 GOST R 34.12-2015 2016 yil 1 yanvardan boshlab Rossiya Federatsiyasida yangi milliy kriptografik standartlar kuchga kiradi: GOST R 34.12-2015 “Axborot texnologiyalari. Axborotni kriptografik himoya qilish. Blok shifrlari” va GOST R 34.13-2015 “Axborot texnologiyalari. Axborotni kriptografik himoya qilish. "Axborot texnologiyalari va aloqa tizimlari" ochiq aktsiyadorlik jamiyati ("InfoTeKS" OAJ) ishtirokida Rossiya Federal xavfsizlik xizmatining Axborotni himoya qilish va maxsus aloqalar markazi tomonidan ishlab chiqilgan blokli shifrlarning ishlash rejimlari. Blok shifr - xavfsiz aloqa tarmoqlari yoki Internet axborot va telekommunikatsiya tarmog'ida uzatiladigan ma'lumotlarni himoya qilish uchun mustaqil kriptografik algoritm sifatida yoki boshqa kriptografik algoritmlar va protokollarning bir qismi sifatida ishlatilishi mumkin bo'lgan muhim kriptografik mexanizmdir. GOST 28147-89 kriptografik o'zgartirish algoritmi dasturiy ta'minot va apparat ta'minotida o'zini yaxshi isbotlaganligini va o'z xususiyatlariga ko'ra himoyalangan ma'lumotlarning maxfiylik darajasiga cheklovlar qo'ymasligini hisobga olib, GOSTni kiritish maqsadga muvofiq deb hisoblanadi. R 34.12-2015 “Axborot texnologiyalari. Axborotni kriptografik himoya qilish. Blok shifrlari" blok o'lchami 64 bit bo'lgan ushbu shifrning tavsifi, o'zgarmas chiziqli bo'lmagan almashtirish bloklari bilan ("Magma" shifr). Chiziqli bo'lmagan almashtirish bloklarini tuzatish standartda tavsiflangan algoritmni yanada yaxlit qiladi va "zaif" chiziqli bo'lmagan almashtirish bloklaridan foydalanishni yo'q qilishga yordam beradi. Standart shuningdek, blok o'lchami 128 bit bo'lgan almashtirish tarmog'ining yangi blokli shifrini (Grasshopper shifrini) o'z ichiga oladi. Ushbu turdagi shifr yaxshi o'rganilgan va kriptografik tahlil qilish va kerakli xususiyatlarni asoslash nuqtai nazaridan nisbatan sodda. Blok uzunligi 128 bit bo'lgan blokli shifr blokli shifrlarga hozirda ma'lum bo'lgan barcha hujumlarga chidamli bo'lishi kutilmoqda. N-bit blokli shifrning ishlash rejimlari (oddiy almashtirish rejimi, gamma rejimi, chiqish fikr-mulohazasi bilan gamma rejimi, shifrlangan matnli fikr-mulohazali gamma rejimi, oddiy rejim 4 Machine Translated by Google ulanish bilan almashtirish va immit qo'shimchalarini yaratish tartibi) alohida milliy standart GOST R 34.13-2015 “Axborot texnologiyalari. Axborotni kriptografik himoya qilish. Blok shifrlarining ishlash rejimlari” qabul qilingan xalqaro amaliyotga mos keladi. 1.2 Tarix Kriptografiya sohasidagi standartlashtirish tarixi odatda 1973-1974 yillarda ishlab chiqilgan Ma'lumotlarni shifrlash standarti (DES) AQSh milliy standarti (FIPS 46-3) sifatida qabul qilingan 1977 yildan boshlab hisoblanadi. IBM kompaniyasining Lucifer kriptografik algoritmi. Ushbu shifr Feistel tarmog'i deb ataladigan bo'lib, u zaif hisoblash resurslariga ega qurilmalarda amalga oshirish uchun juda qulay bo'lgan konstruktsiya edi, chunki har bir iteratsiyada ma'lumot blokining faqat yarmi iterativ kalit va ba'zi bir murakkablik funktsiyasi yordamida o'zgartiriladi va qo'shimcha ravishda , shifrni hal qilish algoritmi teskari tartibda olingan takrorlanuvchi kalitlarga ega algoritm shifrlashdir. DES algoritmining kirish ma'lumotlar blokining uzunligi 64 bit, kaliti esa 56 bit edi. Axborot va telekommunikatsiya sohasining jadal rivojlanishi va buning natijasida qayta ishlangan axborot hajmining ortishi kirish blokining 64 bitli uzunligi katta hajmdagi ma'lumotlarni qayta ishlash uchun etarli emasligiga olib keldi. har qanday blokli shifr uchun bitta kalitda qayta ishlangan kirish bloklarining maksimal mumkin bo'lgan sonining chegarasi tug'ilgan kunning klassik muammosi bilan belgilanadi va kirish vektorlarining umumiy sonining kvadrat ildizi tartibida. Hozirgi vaqtda 80-yillarda ishlab chiqilgan GOST 28147–89. O'tgan asrda kam resursli (engil) qurilmalarda, xususan, singapurlik mutaxassislarning ishida juda samarali bo'lib chiqdi [2], GOST shartli eshiklar soni bo'yicha zarur ekanligi ko'rsatildi. amalga oshirish uchun (darvoza ekvivalentlari - GE), hatto kichikroq kalit uzunliklari bilan ham ko'plab zamonaviy kam resursli shifrlardan ustundir (1-rasmga qarang). 5 Machine Translated by Google Shakl 1. Shartli eshiklar sonining histogrammasi. 1.3 Kriptografik zaifliklar Agar biz kriptografik kuch haqida gapiradigan bo'lsak, chorak asrdan ko'proq vaqt davomida GOST 28147–89 da tavsiflangan kriptografik algoritm kriptografiya sohasidagi ko'plab mahalliy va xorijiy mutaxassislar tomonidan tahlil qilingan. GOST 28147- algoritmini kriptografik tahlil qilishning eng mashhur natijalaridan biri. 89 tasi Takanori Isobe [3] va Itai Dinur, Orr Dunkelman, Adi Shamir [3] asarlaridir. Ushbu maqolalarda aytilishicha, GOST 28147–89 algoritmining xavfsizligini kalitlar to'plamining to'liq ro'yxati bilan solishtirganda kamaytirish mumkin, ammo buzg'unchiga ma'lum bo'lgan juda ko'p sonli ochiq matn va shifrlangan matn juftlari mavjud bo'lsa (Isobe uchun 232 va 264 uchun). Dinur, Dunelman va Shamir). Qayta ishlangan ma'lumotlarning bunday hajmlari bilan har qanday blokli shifrni beqaror deb hisoblash kerak va kriptografik tahlilning ushbu usullari amalda qo'llanilmaydi. GOSTning asosiy muammolari kalitlarni yaratish va almashtirish jadvallari nuqtai nazaridan standartning to'liq emasligi bilan bog'liq. GOSTda "zaif" kalitlar va almashtirish jadvallari mavjud deb ishoniladi[4], ammo standart "zaif" kalitlarni tanlash va saralash mezonlarini tavsiflamaydi. 2010 yil oktyabr oyida Xalqaro standartlashtirish tashkilotining (ISO / IEC JTC 1 / SC 27) 1-qo'shma texnik qo'mitasining yig'ilishida GOST ISO / IEC 18033-3 xalqaro blok shifrlash standartiga kiritish uchun nomzod qilib ko'rsatildi. Shu munosabat bilan, 2011 yil yanvar oyida o'zgartirish tugunlarining sobit to'plamlari shakllantirildi va tahlil qilindi 6 Machine Translated by Google kriptografik xususiyatlar. Biroq, GOST standart sifatida qabul qilinmagan va tegishli almashtirish jadvallari nashr etilmagan [5]. Shunday qilib, mavjud standart almashtirish jadvallarini (S-boxes) yaratish algoritmini belgilamaydi. Bir tomondan, bu qo'shimcha maxfiy ma'lumot bo'lishi mumkin (kalitdan tashqari), boshqa tomondan, bu bir qator muammolarni keltirib chiqaradi: • algoritmning kriptografik kuchini oldindan bilmasdan aniqlash mumkin emas almashtirish jadvallari; • Turli ishlab chiqaruvchilarning algoritmlarini amalga oshirishda turli almashtirish jadvallaridan foydalanish va bir-biriga mos kelmasligi mumkin; • zaif jadvallarni ataylab taqdim etish qobiliyati rossiya Federatsiyasining litsenziyalovchi organlari tomonidan o'zgartirishlar; • Tugunlar almashtirilmaydigan almashtirish jadvallaridan foydalanishning potentsial imkoniyati (standartda taqiqlanmagan), bu esa shifr kuchining keskin pasayishiga olib kelishi mumkin. GOSTning chiziqli va differentsial kriptoanaliz kabi keng qo'llaniladigan usullarga chidamli ekanligiga ishoniladi. Oxirgi sakkiz turda ishlatiladigan kalitlarning teskari tartibi slayd hujumidan va aks ettirish hujumidan himoya qiladi. Rostovtsev A. G., Maxovenko E. B., Filippov A. S., Chechulin A. A. [4] oÿz ishlarida algebraik maqsad funksiyasini qurish va uning ekstremumini topishga qisqartiriladigan kriptoanaliz turini taÿriflagan. Zaif kalitlar sinflari aniqlandi, xususan, siyrak kalitlar (0 yoki 1 sezilarli ustunlik bilan) zaif ekanligi ko'rsatildi. Mualliflarning fikriga ko'ra, ularning usuli har qanday holatda ham to'liq ro'yxatga olishdan ko'ra yaxshiroqdir, ammo raqamli hisob-kitoblarsiz. 2011 yil may oyida taniqli kriptoanalist Nikolas Kurtua ushbu shifrga hujum mavjudligini isbotladi, uning murakkabligi kalitlarni to'g'ridan-to'g'ri sanab o'tish murakkabligidan 28 (256) baravar kam, agar 264 ochiq matn/shaxsiy matn mavjud bo'lsa. juftlar [6]. Ushbu hujumni juda yuqori hisoblash murakkabligi tufayli amalda amalga oshirib bo'lmaydi. Bundan tashqari, 264 ta ochiq matn/xususiy matn juftligini bilish, kalitni hisoblamasdan, shifrlangan matnlarni o'qishga imkon beradi. Ko'pgina boshqa hujjatlarda faqat ma'lum bir taxminlar ostida qo'llanilishi mumkin bo'lgan hujumlar tasvirlangan, masalan, ma'lum turdagi kalitlar yoki almashtirish jadvallari, dastlabki algoritmning ba'zi o'zgarishlari yoki hali ham erishib bo'lmaydigan hajmdagi xotira yoki hisoblashni talab qiladi. Alohida kalitlar yoki almashtirish jadvallaridagi zaif tomonlardan foydalanmasdan amaliy hujumlar mavjudmi, ochiq savol bo'lib qolmoqda. 7 Machine Translated by Google Aniqlangan zaifliklarga qaramay, GOST shifrlash Keyinchalik yangi Grasshopper algoritmi bilan birgalikda GOST R 34.12-2015 standartining bir qismi sifatida nashr etildi, chunki u quyidagi afzalliklarga ega: • shafqatsiz hujumning befoydaligi (XSL hujumlari hisobga olinmaydi, chunki ularning samaradorligi hozircha to'liq isbotlanmagan); • Amalga oshirish samaradorligi va shunga mos ravishda zamonaviy kompyuterlarda yuqori unumdorlik; • GOSTning barcha to‘rtta algoritmida yolg‘on ma’lumotlarning kiritilishidan himoyalanish (taqlid kiritishni ishlab chiqish) va bir xil shifrlash siklining mavjudligi. Shifrlash tezligi quyidagi o'qishlar asosida baholanishi mumkin (2rasmga qarang). Shakl 2. GOST 28147-89 algoritmi orqali shifrlash ko'rsatkichlari sakkiz Machine Translated by Google 1.4 GOST shifrini standart sifatida tasdiqlash 2015 yil 19 iyunda Texnik jihatdan tartibga solish va metrologiya bo'yicha Federal agentligining 749-st va 750-sonli buyruqlari bilan tasdiqlangan GOST R 34.12-2015 va GOST R 34.13-2015 milliy standartlari bloklangan shifrlash algoritmlari va algoritmlarini belgilaydi. ularning ishlash rejimlari, asosiy rus kriptografik standartlarini yangilash jarayoni[7] . 2016 yilda Rossiyada shifrlash standartlari yangilanadi. Yangi kriptografik standartlar Rossiyada kelasi yilning 1 yanvaridan kuchga kiradi[8]. Yangilangan axborot xavfsizligi usullari, ya'ni GOST R 34.122015 va GOST R 34.13-2015 maxsus FSB markazi tomonidan InfoTeKS OAJ bilan birgalikda ishlab chiqilgan. 2016-yil 1-yanvardan joriy etilgan standartlarda qo‘llaniladigan muhim kriptografik mexanizm – blokli shifr ikki xil usulda qo‘llanilishi mumkin: mustaqil ravishda yoki boshqa kriptografik algoritmlarning bir qismi sifatida. Xavfsiz aloqa kanallari yoki axborot va telekommunikatsiya Internet tarmoqlari orqali uzatiladigan ma'lumotlarni himoya qilishga qaratilgan boshqa kriptografik algoritmlar va protokollarning bir qismi bo'lgan blokli shifr. Yangilangan tizimda global o'zgarishlarni yoqtirmaydigan konservativ foydalanuvchilarni xursand qiladigan yana bir plyus bor allaqachon tanish bo'lgan GOST 28147-89 algoritmi yangilangan GOST R 34.12-2015 kriptografik standartlariga kiritilgan. Ushbu qaror GOST 28147-89 apparat va dasturiy ta'minotni amalga oshirishda mukammal ishlash ko'rsatganligi asosida qabul qilindi. Shuningdek, ushbu kriptografik o'zgartirish algoritmining muhim afzalligi shundaki, u turli darajadagi maxfiylik darajasidagi himoyalangan ma'lumotlarga cheklovlarni o'z ichiga olmaydi. Ushbu shifrning blok o'lchami 64 bit, chiziqli bo'lmagan almashtirish bloklari Magma shifrida o'rnatiladi. Chiziqli bo'lmagan almashtirish bloklarini o'rnatish tufayli qabul qilingan standartda tavsiflangan algoritm muhim xususiyatga ega bo'ladi - u iloji boricha birlashtiriladi, bu "zaif" ni istisno qiladigan chiziqli bo'lmagan almashtirish bloklarini katta muvaffaqiyat bilan ishlatishga imkon beradi. bloklar. Joriy qilingan shifrlash standarti, shuningdek, blok hajmi 128 bit bo'lgan Grasshopper blok shifrini ham o'z ichiga oladi. Yangi shifrning turi "o'zgartirish-o'zgartirish tarmog'i" sifatida belgilanadi - bu to'qqiz Machine Translated by Google shifrlashning bir turi qiyosiy soddalikni birlashtiradi: kerakli xususiyatlarni soddalashtirilgan asoslash va kriptografik tahlil. 128 bitli shifr blokining uzunligi qo'shimcha himoyani ta'minlaydi va kutilganidek, barcha zamonaviy vositalardan foydalangan holda blokli shifrlarga qilingan har qanday hujumlarga qarshi turish imkonini beradi. Xalqaro amaliyotga muvofiq, n-bitli blokli shifrning ishlash rejimlari GOST R 34.13-2015 maxsus milliy kriptografik standartiga ajratilgan. 1.5 Ochiq resurslar bo'yicha nashr Eng batafsil tavsif yuqorida qayd etilgan GOST R 34.13-2015 standartida keltirilgan [9]. Ushbu hujjat rasmiy bo'lganligi sababli, siz u erda ishlash uchun zarur bo'lgan barcha ish rejimlarini, shifrlangan xabarni yaratish tamoyillarini va algoritmlar uchun kerakli parametrlarni topishingiz mumkin. Algoritmlarni tahlil qilish uchun ushbu standartni batafsilroq o'rganish kerak, shuning uchun quyidagi manba - "Vikipediya" ochiq ensiklopediyasi nafaqat tavsifni, balki asosiy ma'lumotlarni, matematik nazariyani, shuningdek, barcha ma'lumotlarni batafsil tahlil qilishni ta'minlaydi. GOST kripto algoritmidan foydalangan holda shifrlash rejimlari [10][11 Tahlil nafaqat yuzaki darajada ishlashni talab qiladi - kriptografik barqarorlik bo'yicha tadqiqot olib borilishi sababli, dastur kodiga kirish kerak. Bu shifr bilan ishlashning eng past darajasi va shuning uchun u keyingi empirik tajribalarni har tomonlama ko'rib chiqish va tushuntirish imkonini beradi. Ma'lumotnomani amalga oshirish "Standartlashtirish bo'yicha texnologiya qo'mitasi" portalida mavjud. Axborotni kriptografik himoya qilish” [12]. Ushbu amalga oshirishdagi "Magma" va "Grasshopper" shifrlari yuqori darajadagi C++ tilida yozilgan. Biz tahlil qilish uchun mos yozuvlar ilovasidan foydalanamiz, lekin avval quyida ko'rsatiladigan algoritmlarning spetsifikatsiyasi va ularning ishlash tamoyillarini ko'rib chiqamiz. Ko'rinib turibdiki, algoritmni nazariy jihatdan tahlil qilmasdan turib, amalda u bilan ishlash mumkin emas. Quyidagi ma'lumot manbalari shifrlar qanday ishlashini o'rganadi va ko'rsatadi: o'n Machine Translated by Google ÿ Chigirtka GOSTda o'tirdi [13] . Nashr muallifi shifrning ishlashini Galua maydoni, Feystel tarmog‘i kabi matematik formulalar va tushunchalar, shuningdek kriptografik atamalar orqali o‘z misolida tushuntirib beradi. ÿ Yana bir bor shifrlash haqida GOST 28147-89 [14] . Amalga oshirish misollari keltirilgan, boshqa narsalar qatori, KeePass parol menejerida Magma shifridan foydalanilganligi ta'kidlangan. Ushbu misol ushbu maqola muallifi algoritmlarda o'zgaruvchilarning eng funktsional turlaridan foydalanishni taklif qilganligi sababli eslatib o'tilgan, bu aslida nima uchun standartda ishlatilganligini tushuntiradi. ÿ GOST 28147-89 [15] . Eng to'liq va batafsil "Magma" shifrining ishining tavsifi. ÿ ECB rejimida GOST R 34.12-2015 ning bosqichma-bosqich ishi. Sarlavha maqolaning mazmunini o'z ichiga oladi. "Chigirtka" shifrining ishi ko'rsatilgan. ÿ GOST 28147-89 shifrlash algoritmi, uni Intel x86 platformali kompyuterlar uchun ishlatish va amalga oshirish [17] . Ushbu maqola muallifi GOST shifr bilan 4 yil davomida ishlagan, bu unga o'rganilayotgan shifrlarning o'zgartirishlarini ko'rib chiqish va fikr yuritish huquqini beradi. ÿ MPI texnologiyasidan foydalangan holda zamonaviy kriptotizimlarning xavfsizlik tahlili [18]. Hujjat GOST shifrini qanday buzish mumkinligini nazariy asoslash sifatida foydali bo'ladi. o'n bir Machine Translated by Google 2. Kerakli ta’riflar • Shifrlash xabarning asl ma’nosini yashirish usulidir yoki uni buzadigan boshqa hujjat original tarkib. • Deshifrlash shifrlashning teskari jarayonidir. Kalitga asoslangan shifrlangan matn asl nusxaga aylantiriladi. • Kriptografik tizim T oilasi hisoblanadi ochiq matn konvertatsiyalari. Bu oila a'zolari indekslangan yoki k bilan belgilangan; k parametri kalit. K kalit maydoni mumkin bo'lgan qiymatlar to'plamidir kalit. Kalit odatda bir qator harflardir alifbo. • Kriptografik quvvat shifrning belgilovchi xususiyatidir kalit mavjud bo'lmaganda shifrni ochishga chidamliligi (kriptotahlil). • Holat (shakl) – baytlarning matritsasi (ikki o‘lchovli massiv). • Dumaloq (dumaloq) - Davlat (shakl) bo'yicha transformatsiya siklini takrorlash. Takrorlashlar soni kalitning uzunligiga bog'liq bo'lsa, uzunligi qancha uzun bo'lsa kalit, ko'proq takrorlash. • Dumaloq kalit - noyob kalit har bir alohida turda qo'llaniladi. • S-Box (almashtirish jadvali) - xaritalashni belgilaydigan jadval bir baytdan ikkinchisiga (bijektiv xaritalash). • Teskari qidirish jadvali - S-Box ga o'xshash, belgilaydi teskari displey. • "Grasshopper" algoritmi - GOST R 34.12-2015, simmetrik blok shifrlash algoritmi. Davlatlararo 2016 yil 1 yanvardan boshlab Rossiya Federatsiyasi standarti. • "Magma" algoritmi - GOST 28147-89, davlatlararo standart 1990 yilda joriy qilingan simmetrik shifrlash. 12 Machine Translated by Google 3. Grasshopper algoritmi 3.1 Umumiy ma'lumot "Grasshopper" (Kuznechik, Kuznyechik) blokli shifrlash blok o'lchami 128 bit va kalit uzunligi 256 bit bo'lgan simmetrik blokli shifrlash algoritmi bo'lib, Feistel tarmog'i yordamida ishlab chiqariladi. Ushbu shifr standart GOST R 34.12-2015 “Axborot texnologiyalari. Axborotni kriptografik himoya qilish. Blok shifrlari" 2015 yil 19 iyundagi 749-son buyrug'i bilan. [1] Standart 2016 yil 1 yanvardan kuchga kirdi. [2]. Shifr Rossiya Federal xavfsizlik xizmatining Axborotni himoya qilish va maxsus aloqa markazi tomonidan "Axborot texnologiyalari va kommunikatsiya tizimlari" OAJ (OAJ InfoTeKS) ishtirokida ishlab chiqilgan. Standartlashtirish bo'yicha texnik qo'mitasi tomonidan kiritilgan TC 26 "Axborotni kriptografik himoya qilish" [3]. Algoritm 256 bitli kalit (Master Key) va kirish ma'lumotlari (Kirish qiymati) bilan ishlaydi. Kirish ma'lumotlari 128 bit hajmida berilgan. Algoritmning natijasi shifrlangan matn blokidir (Output Value). Malumot sifatida, natijalarni tekshirish uchun test qiymatlari mavjud - ikkala funktsiyalar va butun algoritm. Tekshirish qiymati shifrlash natijasiga mos keladigan qiymatdir. o'n uch Machine Translated by Google 3.2 Nazariy qism GOST 28147-89 dan farqli o'laroq, yangi shifr Feistel tarmog'i emas, balki shunday deb ataladi. SP-tarmoq: Har bir tur chiziqli bo'lmagan o'zgartirish, chiziqli o'zgartirish va kalitlash operatsiyasidan iborat bo'lgan bir nechta bir xil turlardan iborat transformatsiya. Feistel tarmog'idan farqli o'laroq, SP tarmog'idan foydalanganda uning yarmi emas, balki butun kirish bloki o'zgartiriladi. Bunday tuzilma ba'zan AESga o'xshash (AESga o'xshash) deb ham ataladi, ammo ikkinchisidan farqli o'laroq, Chigirtka bir qator o'ziga xos xususiyatlarga ega: • chiziqli transformatsiyani foydalanishda amalga oshirish mumkin siljish registrlari; • kalitlarni tozalash Feistel tarmog'i yordamida amalga oshiriladi, bunda funktsiya sifatida asl algoritmni dumaloq o'zgartirish qo'llaniladi. Grasshopper kirish blokining uzunligi 128 bit, kaliti 256 bit. Shifrlash bir xil turdagi bir nechta turlarni ketma-ket qo'llashga asoslangan bo'lib, ularning har biri uchta transformatsiyani o'z ichiga oladi: dumaloq kalit bilan qo'shish, almashtirish bloki bilan o'zgartirish va transformatsiya. chiziqli Keyingi turning 128-bitli kirish vektori asta-sekin qo'shiladi dumaloq kalit: Chiziqli bo'lmagan transformatsiya har bir 8-ga qo'llaniladi. belgilangan 128-bitli kirish vektorining bit subvektori almashtirishlar: Chiziqli transformatsiya odatdagidek blokli shifrlarda - matritsada, balki LFSR - chiziqli shifrda ham amalga oshirilishi mumkin. o'n to'rt Machine Translated by Google 16 marta harakatlanadigan fikr almashish registr. Registrning o'zi kamaytirilmaydigan Galois maydoni moduli orqali amalga oshiriladi 8-darajali polinom: Dumaloq o'zgarishlarni quyidagicha tasvirlash mumkin: Keling, asosiy kalitdan dumaloq kalitlarni yaratish tartibini ko'rib chiqaylik. Birinchi ikkita asosiy kalitni yarmiga bo'lish orqali olinadi. Bundan tashqari, navbatdagi dumaloq tugmachalarni yaratish uchun Feistel tarmog'ining 8 ta iteratsiyasi qo'llaniladi, bu erda, o'z navbatida, algoritmning chiziqli transformatsiyasidan o'tgan hisoblagich ketma-ketligi dumaloq kalitlar sifatida ishlatiladi: Kalitni o'chirish raundini quyidagicha ifodalash mumkin: o'n besh Machine Translated by Google Va dumaloq kalitlarni yaratishning butun tartibi quyidagicha: Natijada bitta 128-bitli kirish blokining shifrlanishi quyidagi tenglama bilan tavsiflanadi: Va blok diagramma shaklida uni quyidagicha ifodalash mumkin: o'n olti Machine Translated by Google Shifrni ochish asosiy o'zgarishlarni teskari o'zgartirish orqali amalga oshiriladi va ularni teskari tartibda qo'llash: 3.3 Amalga oshirishning kontseptual asoslari Grasshopper shifrini amalga oshirish uchun nima kerakligini aniqlash kerak: ÿ Tekshirish ma’lumotlari. ÿ ichida iterativ konstantani aniqlash funksiyasini yaratish kalit kengaytmasi. ÿ Bir qator transformatsiyalarni amalga oshirish uchun funktsiya yaratish kalit kengaytmasi. ÿ xor amalini bajaruvchi funksiya yaratish. ÿ Blokda almashtirish amalini bajaradigan funksiya yaratish almashtirishlar. ÿ LFSRni amalga oshiradigan funktsiyani yaratish. ÿ Iterativ siljishni bajaradigan funksiya yaratish. ÿ Oldingi barcha transformatsiyalarni bajaradigan funktsiyani yaratish ÿ SP-tarmog'ida N sonli turlarni bajaradigan funktsiyani yaratish va aynan shu funksiya umuman shifrlash funksiyasi bo'ladi. algoritm. ÿ Tegishli funksiya-davrlar bilan o'xshash funksiya-dekoderni yaratish. ÿ Chaqiriladigan funksiya sifatida shifrlashga kirishni ta'minlash. 17 Machine Translated by Google 3.4 Kerakli qo'llab-quvvatlovchi ma'lumotlar Nochiziqli bijektiv transformatsiya: Ikkilik to'plamning teskari chiziqli bo'lmagan bijektiv transformatsiyasi vektorlar: L tipidagi konversiyada ishlatiladigan koeffitsientlar: Sinov va nazorat qiymatlari: o'n sakkiz Machine Translated by Google 3.5 Dumaloq kalitlarni yaratish 3.5.1 C iterativ konstantasini hisoblash funksiyasi “funcy” funksiyasining prototipi: /** @brief Compute C iteratsiya konstantasi * * @param[in] doimiy sonining soni * @param[out] chiqish iteratsiyasi doimiysi * @param[in] chop etish jurnali funksiyasi * @return 0, agar barcha konvertatsiya muvaffaqiyatli bo'lsa * @return -1 xatolik yuz bergan bo'lsa */ int DLL_IMPORT funcC(imzosiz belgilar raqami, imzosiz belgilar* chiqishi, chop etilgan_bayt_massivni chop etish); Funksiya ta'rifi "func": int DLL_IMPORT funcC(imzosiz belgilar raqami, imzosiz belgilar* chiqishi, chop etish_bayt_massivi chop etish) { unsigned char tempI[16]; if(!output)//kirish ma'lumotlarini tekshirish { if(chop etish) print("funcC: ichki xato!", 0, 0); qaytish -1; } memset( templ, 0, 15); tempI[15] = raqam; funcL (tempI, chiqish, chop etish);//turi konvertatsiya L qaytish 0; } Funcci funksiyasining tavsifi: 1) Kirish ma'lumotlarini tekshirish va o'zgaruvchilarni ishga tushirish. 2) Kiritilgan raqamga L tipidagi konvertatsiyani amalga oshirish, bundan tashqar konversiyalar uchun massivning yuqori baytiga yoziladi. o'n to'qqiz Machine Translated by Google 3.5.2 Turni o'zgartirish F Funksiya prototipi "funcF": /** @brief Transform F * * @param[in] inputKey Oldingi iteratsiyada olingan kalitlar juftligidan birinchi kalit * @param[in] inputKeySecond Oldingi iteratsiyada olingan kalitlar juftligidan ikkinchi kalit * @param[in] iterationConst Iteratsiya doimiysi * @param[out] ] outputKey Birinchi kalit * @param[out] outputKeySecond Ikkinchi tugma * @param[in] chop etish jurnali funksiyasi * Agar barcha konvertatsiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT funcF(insigned char* inputKey, unsigned char* inputKeySecond, unsigned char* iterationConst, unsigned char* outputKey, unsigned char* outputKeySecond, printout_byte_array chop); FuncF funktsiyasi ta'rifi: int DLL_IMPORT funcF(insigned char* inputKey, unsigned char* inputKeySecond, unsigned char* iterationConst, unsigned char* outputKey, unsigned char* outputKeySecond, printout_byte_array print) { unsigned char temp1[16];//asosiy kalitning birinchi qismi unsigned char temp2[16];//bosh kalitning ikkinchi qismi if(!inputKey || !inputKeySecond || !iterationConst || !outputKey || !outputKeySecond)//check ma'lumotlarni kiritish { if(chop etish) print("funcF: ichki xato!", 0, 0); qaytish -1; } //iterationConst - C tipidagi konvertatsiyadan olingan hisoblagich ketma-ketligi funcLSX(inputKey, iterationConst, temp1, print);//LSX tipidagi konvertatsiya funcX(temp1, inputKeySecond, temp2, chop etish);//X tipidagi konvertatsiya memcpy(outputKeySecond, inputKey, 16); memcpy (outputKey, temp2, 16); if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcF: kiritish tugmasi: ", inputKey, 16); print("funcF: kiritish tugmasi: ", inputKeySecond, 16); print("funcF: iterration const: ", iterationConst, 16); print("funcF: chiqish tugmasi: ", outputKey, 16); print("funcF: chiqish tugmasi: ", outputKeySecond, 16); } qaytish 0; } FuncF funksiyasining tavsifi: 1) kiritilgan ma'lumotlarni tekshirish. 2) Kirish asosiy kalitida LSX tipidagi konvertatsiyani amalga oshirish, natija temp1 o'zgaruvchisiga joylashtiriladi. 3) Temp1 da X tipidagi konvertatsiyani amalga oshirish natijasida natija joylashtiriladi temp2 o'zgaruvchisi. 4) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 20 Machine Translated by Google 3.5.3 Kalitni kengaytirish funksiyasi “ExpandKey” funksiyasining prototipi: /** @qisqa kalit ochish * * @param[in] masterKey Master kaliti * @param[out] tugmalari oÿrnatilgan kalitlar majmuasi * @param[in] chop etish jurnali funksiyasi * Agar barcha konvertatsiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT ExpandKey(imzosiz char* masterKey, imzosiz char* kalitlari, printout_bayt_massivni chop etish); "ExpandKey" funktsiyasining ta'rifi: int DLL_IMPORT ExpandKey (imzosiz belgilar* masterKey, imzosiz belgilar* tugmalari, chop etish_bayt_massivi chop etish) { unsigned char C[16];//itatsiya doimiy imzosiz char temp1[16];//original asosiy kalitning birinchi qismi unsigned char temp2[16];// asl asosiy kalitning ikkinchi qismi unsigned char j, i;/ / yordamchi iteratorlar if( !masterKey || !tugmalar)//test kiritish { if(chop etish) print("ExpandKey: ichki xato!", 0, 0); qaytish -1; } memcpy(kalitlar, masterKey, 16); memcpy(kalitlar + 16, masterKey + 16, 16); if(chop etish)//kerak bo'lsa, boshqaruv qiymatlarini chiqaring { print("ExpandKey: asosiy kalit: ", masterKey, 16); print("ExpandKey: chiqish kaliti: ", tugmalar, 16); print("ExpandKey: chiqish kaliti: ", tugmalar + 16, 16); } for(j = 0; j < 4; ++j)//1 dan 8, 9..16, 17..24, 25..32 bayt kalit qiymatlari { memcpy(temp1, tugmalar + j * 2 * 16, 16); memcpy(temp2, tugmalar + (j * 2 + 1) * 16, 16); for( i = 1; i < 8; ++i )//8 Feistel tarmoq iteratsiyasi { funcC(j*8+i, C, chop etish); funcF(temp1, temp2, C, temp1, temp2, chop etish); } funcC(j*8+8, C, chop etish); funcF(temp1, temp2, C, temp1, temp2, chop etish); memcpy(kalitlar + (j * 2 + 2) * 16, temp1, 16); memcpy(kalitlar + (j * 2 + 3) * 16, temp2, 16); agar (chop etish) { print("ExpandKey: chiqish kaliti: ", tugmalar + (j * 2 + 2) * 16, 16); print("ExpandKey: chiqish kaliti: ", tugmalar + (j * 2 + 3) * 16, 16); } } qaytish 0; } 21 Machine Translated by Google “ExpandKey” funksiyasining tavsifi: 1) o'zgaruvchilar deklaratsiyasi: 1.1) C - takrorlanish konstantasi. 1.2) temp1, temp2 - asosiy kalitni ikki qismga bo'lish. 1.3) j, i yordamchi iteratorlar. 2) kiritilgan ma'lumotlarni tekshirish. 3) O'zgaruvchilarni initsiallashtirish. 4) Agar kerak bo'lsa, kalitni ikki qismga bo'lish natijalarini chiqaring. 5) Maqsad 256 bitli kalitni olish bo'lgan tsiklni tashkil qilish. 6) Barcha keyingi harakatlar tsikl kontekstida sodir bo'ladi. 7) Muayyan bit joyida ikkita kalitni ishga tushirish chiqish kalitining yakuniy qiymatining ketma-ketligi. 8) Feystel tarmog'ining 8 ta takrorlanish sikli: 8.1) Iteratsion konstantani hisoblash. 8.2) Hisoblangan konstanta yordamida F tipidagi ikkita kalit orqali konvertatsiya qilish. 8.3) Eslatma: tugmachalarning bit ketma-ketligi qat'iy belgilangan. 9) 32 bitli hisoblangan kalitlarni 256 bitli chiqishga qo'yish kalit. o'n) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. Yaratilgan barcha funktsiyalar tufayli shifrlash dasturining tanasida ExpandKey funksiyasidan foydalanish mumkin va zarur, bunday belgilangan funktsiya sizga kirish ma'lumotlari uchun umumiy hajmi 256 bitli yumaloq kalitlarni yaratishga imkon beradi. algoritmning ajralmas qismidir. 22 Machine Translated by Google 3.6 Shifrlash 3.6.1 Konvertatsiya turi X Funksiya prototipi “funcX”: /** @qisqa X transformatsiyasi * * @param[in] transformatsiya kiritishi * @param[in] b transformatsiya kiritishi * @param[out] ma’lumotlar natijasini o‘zgartirish parametri * @param[in] chop etish jurnali funksiyasi * @return 0, agar barcha transformatsiya muvaffaqiyatli bo‘lsa * @ return -1 agar xatolik yuz bergan bo'lsa */ int DLL_IMPORT funcX (imzosiz belgi* a, imzosiz belgilar* b, imzosiz belgilar* eskirgan ma'lumotlar, chop etilgan_bayt_massivni chop etish); FuncX ta'rifi: int DLL_IMPORT funcX(imzosiz belgilar* a, imzosiz belgilar* b, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned int i; if(!a || !b || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcX: ichki xato!", 0, 0); qaytish -1; } for(i = 0; i < 16; ++i) //bit boÿyicha qoÿshish modulining 16 tsikli 2(xor operatsiyasi) { eskirgan ma'lumotlar[i] = a[i] ^ b[i]; } /* if(chop etish) //Nazorat natijalarini tekshirish uchun { print("funcX: a: ", a, 16); print("funcX: b: ", b, 16); print("funcX: natija: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } FuncX funksiyasining tavsifi: 1) kiritilgan ma'lumotlarni tekshirish. 2) xor operatsiyasi orqali kirish ma'lumotlarini o'zgartirishning 16 tsikli. 3) Agar kerak bo'lsa, transformatsiya natijalarini ko' 23 Machine Translated by Google 3.6.2 Turni konvertatsiya qilish S Funksiya prototipi “funcS”: /** @brief Transform S * * @param[in] maÿlumotlarni oÿzgartirish kiritish parametri * @param[out] maÿlumotlar natijasini oÿzgartirish parametri * @param[in] chop etish jurnali funksiyasi * Agar butun konversiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT funcS(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etilgan_bayt_massivni chop etish); "funcS" funktsiyasi ta'rifi: int DLL_IMPORT funksiyalari(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { size_t i = 0; if(!indata || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcS: ichki xato!", 0, 0); qaytish -1; } for(i = 0; i < 16; ++i)//16 almashtirish bloki {{ outdata[i] = kPi[indata[i]]; } /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcS: kiritish: ", ma'lumotlar, 16); print("funcS: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } FuncS funksiyasining tavsifi: 1) kiritilgan ma'lumotlarni tekshirish. 2) blok yordamida kirish ma'lumotlarini o'zgartirishning 16 tsikli almashtirishlar. 3) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 24 Machine Translated by Google 3.6.3 Turni o‘zgartirish R Funksiya prototipi “funcR”: /** @brief R transformatsiyasi * * @param[in] ma'lumotlarni o'zgartirish kiritish parametri * @param[out] ma'lumotlar natijasini o'zgartirish parametri * @param[in] chop etish jurnali funksiyasi * @return 0, agar barcha transformatsiya muvaffaqiyatli bo'lsa * @return -1 xatolik yuz bergan bo'lsa */ int DLL_IMPORT funcR (insigned char* indata, unsigned char* outdata, printout_byte_array print); "funcR" funktsiyasi ta'rifi: int DLL_IMPORT funcR(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { size_t i; belgilanmagan belgilar summasi = 0; if(!indata || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcR: ichki xato!", 0, 0); qaytish -1; } for(i = 0; i < 16; ++i)//16 konvertatsiya sikllari LFSR { summa ^= multTable[indata[i]*256 + kB[i]]; } outdata[0] = summa;//shift past memcpy(outdata+1, indata, 15); /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcR: kiritish: ", ma'lumotlar, 16); print("funcR: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } FuncR funksiyasining tavsifi: 1) S-transformani bayt-bayt o'qish. 2) Har bir o'qilgan bayt 256 ga ko'paytiriladi. 3) Oldingi , bu erda pozitsiya natijadir amalning jadval jadvalidagi sonning o'rnini topish.h. 4) Jadvaldan raqamni o'qish va unga kB[16] massivdagi koeffitsientni qo'shish, bundan tashqari, koeffitsientning massivdagi o'rni joriy iteratsiya soni bilan aniqlanadi. 5) Baytlarni bir-biriga qo'shish moduli 2. 6) Barcha 128 bitni eng muhim bitga siljitish. 7) Olingan son o'qilgan bayt o'rniga yoziladi o'n oltilik shakl. 25 Machine Translated by Google 3.6.4 Turni o‘zgartirish L Funksiya prototipi “funcL”: /** @brief Transform L * * @param[in] maÿlumotlarni oÿzgartirish kiritish parametri * @param[out] maÿlumotlar natijasini oÿzgartirish parametri * @param[in] chop etish jurnali funksiyasi * Agar butun konversiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT funcL(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etilgan_bayt_massivni chop etish); "funcL" funktsiyasi ta'rifi: int DLL_IMPORT funcL(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned char tmp[16]; int i = 0; if(!indata || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcL: ichki xato!", 0, 0); qaytish -1; } memcpy (tmp, ma'lumotlar, 16); for(i = 0; i < 16; ++i) { funcR (tmp, eskirgan ma'lumotlar, chop etish); memcpy (tmp, eskirgan ma'lumotlar, 16); } /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcL: kiritish: ", ma'lumotlar, 16); print("funcL: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } “funcL” funksiyasining tavsifi: 1) Kirish ma'lumotlarini tekshirish va o'zgaruvchilarni ishga tushirish. 2) registrni o'zgartirish va qayta yozishning 16 tsikli. 3) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 26 Machine Translated by Google 3.6.5 "funcLSX" LSX turini o'zgartirish funktsiyasi prototipi: /** @brief LSX transformatsiyasi * * @param[in] transformatsiya kiritishi * @param[in] b transformatsiya kiritishi * @param[out] ma’lumotlar natijasini o‘zgartirish parametri * @param[in] chop etish jurnali funksiyasi * @return 0, agar barcha transformatsiya muvaffaqiyatli bo‘lsa * @ return -1 xatolik yuz bergan bo'lsa */ int DLL_IMPORT funcLSX(imzosiz belgilar* a, imzosiz belgilar* b, imzosiz belgilar* eskirgan maÿlumotlar, chop etilgan_bayt_massivni chop etish); FuncLSX funktsiyasi ta'rifi: int DLL_IMPORT funcLSX(imzosiz belgilar* a, imzosiz belgilar* b, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned char temp1[16]; unsigned char temp2[16]; if(!a || !b || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcLSX: ichki xato!", 0, 0); qaytish -1; } funcX(a, b, temp1, chop etish); funcS (temp1, temp2, chop etish); funcL (temp2, eskirgan ma'lumotlar, chop etish); /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcLSX: a: ", a, 16); print("funcLSX: b: ", b, 16); print("funcLSX: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } FuncLSX funksiyasining tavsifi: 1) kiritilgan ma'lumotlarni tekshirish. 2) Kirish ma'lumotlarida X turini o'zgartirishni amalga oshirish, natijani (uning o'lchami 16 bayt = 128 bit, kirish blokining o'lchamiga mos keladi) vaqtinchalik o'zgaruvchiga joylashtirish. 3) Oldingi natija bo'yicha S turini o'zgartirishni amalga oshirish operatsiyalar, hisoblangan transformatsiyani temp2 o'zgaruvchisiga joylashtirish. 4) Oldingi operatsiya natijasi bo'yicha L tipidagi konversiyani amalga oshirish, hisoblangan konvertatsiyani eskirgan o'zgaruvchiga (kirish parametri) joylashtirish. 5) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 27 Machine Translated by Google 3.6.6 Shifrlash funksiyasi “Encrypt_14” funksiyasining prototipi: /** @brief Blok shifrlashni amalga oshiring * * @param[in] plainText Manba bloki * @param[out] chipherText Shifrlangan blok * @param[in] tugmalari Kengaytirilgan kalitlar * @param[in] chop jurnali funksiyasi * @param[in] print_uint jurnali funksiyasi * @return 0 agar barcha konvertatsiya muvaffaqiyatli bo'ldi * @return -1 xatolik yuz bergan bo'lsa */ int DLL_IMPORT Encrypt_14(insigned char* plainText, unsigned char* chipherText, unsigned char* kalitlari, printout_byte_array print, printout_uint_array print_uint); “Encrypt_14” funksiyasining ta’rifi: int DLL_IMPORT Encrypt_14(insigned char* plainText, unsigned char* chipherText, unsigned char* kalitlari, printout_byte_array print, printout_uint_array print_uint) { unsigned char xTemp[16]; unsigned char yTemp[16]; int i; (void)print_uint; if(!plainText || !chipherText || !keys) { if(chop etish) print("Encrypt_14: ichki xato!", 0, 0); qaytish -1; } memcpy(xTemp, tekis matn, 16); for(i = 0; i < 9; ++i) { funcLSX(xTemp, tugmalar + 16*i, yTemp, chop etish); memcpy(xTemp, yTemp, 16); } funcX(yTemp, tugmalar+9*16, chipherText, chop etish); agar (chop etish) { for(i = 0; i < 10; ++i) { print("Encrypt_14: kalit: ", kalitlar, 16); += 16 tugmalari; } print("Encrypt_14: oddiy matn: ", tekis matn, 16); print("Encrypt_14: chipher text: ", chipherText, 16); } qaytish 0; } “Encrypt_14” funksiyasining tavsifi: 1) Kirish ma'lumotlari bo'yicha LSX turini o'zgartirishni 9 marta bajarish c bilan tegishli iteratsiya kaliti. 2) Yakuniy 10-raundda X turini konvertatsiya qilish. 28 Machine Translated by Google 3.7 Shifrni ochish 3.7.1 “funcReverseS” funksiyasi prototipi S tipidagi teskari konvertatsiya: /** @brief Transformatsiya S transformatsiyasiga teskari * * @param[in] maÿlumotlarni oÿzgartirish kiritish parametri * @param[out] maÿlumotlar natijasini oÿzgartirish parametri * @param[in] chop etish jurnali funksiyasi * Agar butun konversiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT funcReverseS(imzosiz char* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etilgan_bayt_massivni chop etish); FuncReverseS funktsiyasi ta'rifi: int DLL_IMPORT funcReverseS(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned int i; if(!indata || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcReverseS: ichki xato!", 0, 0); qaytish -1; } for(i = 0; i < 16; ++i) outdata[i] = kReversePi[indata[i]]; /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcReverseS: kiritish: ", ma'lumotlar, 16); print("funcReverseS: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } “funcReverseS” funksiyasining tavsifi: 1) kiritilgan ma'lumotlarni tekshirish. 2) blok yordamida kirish ma'lumotlarini o'zgartirishning 16 tsikli almashtirishlar. 3) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 29 Machine Translated by Google 3.7.2 Teskari turdagi konvertatsiya R Funksiya prototipi “funcReverseR”: /** @brief R transformatsiyasiga teskari transformatsiya * * @param[in] maÿlumotlarni oÿzgartirish kiritish parametri * @param[out] maÿlumotlar natijasini oÿzgartirish parametri * @param[in] chop etish jurnali funksiyasi * Agar butun konversiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT funcReverseR(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etilgan_bayt_massivni chop etish); FuncReverseR funksiya ta'rifi: int DLL_IMPORT funcReverseR (imzosiz belgilar* maÿlumotlar, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned char tmp[16]; belgilanmagan belgilar summasi = 0; unsigned int i; if(!indata || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcReverseR: ichki xato!", 0, 0); qaytish -1; } memcpy(tmp, ma'lumotlar+1, 15); tmp[15] = ma'lumotlar[0]; for(i = 0; i < 16; ++i) { summa ^= multTable[tmp[i]*256 + kB[i]]; } memcpy (o'chirilgan ma'lumotlar, tmp, 15); eskirgan ma'lumotlar[15] = yig'indi; /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcReverseR: kiritish: ", ma'lumotlar, 16); print("funcReverseR: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } “funcReverseR” funksiyasining tavsifi: 1) S-transformani bayt-bayt o'qish. 2) Har bir o'qilgan bayt 256 ga ko'paytiriladi. 3) Sonning jadval jadvalidagi o'rnini topish.h . 4) Jadvaldan raqamni o'qish va unga kB[16] massivdagi koeffitsientni qo'shish, bundan tashqari, koeffitsientning massivdagi o'rni joriy iteratsiya soni bilan aniqlanadi. 5) Baytlarni bir-biriga qo'shish moduli 2. 6) Barcha 128 bitni eng muhim bitga siljitish. 7) Olingan son o'qilgan bayt o'rniga yoziladi o'n oltilik shakl. o'ttiz Machine Translated by Google 3.7.3 L tipidagi funktsiya prototipini teskari konvertatsiya qilish "funcReverseL": /** @brief L ga teskari o'zgartiring * * @param[in] maÿlumotlarni oÿzgartirish kiritish parametri * @param[out] maÿlumotlar natijasini oÿzgartirish parametri * @param[in] chop etish jurnali funksiyasi * Agar butun konversiya muvaffaqiyatli boÿlsa @return 0 * Agar xatolik yuz bergan boÿlsa @return -1 */ int DLL_IMPORT funcReverseL(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish); "funcReverseL" funktsiyasi ta'rifi: int DLL_IMPORT funcReverseL(imzosiz belgilar* maÿlumotlari, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned char tmp[16]; unsigned int i; if(!indata || !outdata)//bo'sh kiritilgan ma'lumotlar bo'lsa, funksiyadan favqulodda chiqishni yarating { if(chop etish) print("funcReverseL: ichki xato!", 0, 0); qaytish -1; } memcpy (tmp, ma'lumotlar, 16); for(i = 0; i < 16; ++i) { funcReverseR(tmp, eskirgan ma'lumotlar, chop etish); memcpy (tmp, eskirgan ma'lumotlar, 16); } /* if(chop etish)//Nazorat natijalarini tekshirish uchun { print("funcReverseL: kiritish: ", ma'lumotlar, 16); print("funcReverseL: chiqish: ", eskirgan ma'lumotlar, 16); } */ qaytish 0; } “funcReverseL” funksiyasining tavsifi: 1) Kirish ma'lumotlarini tekshirish va o'zgaruvchilarni ishga tushirish. 2) registrni o'zgartirish va qayta yozishning 16 tsikli. 3) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 31 Machine Translated by Google 3.7.3 LSX tipidagi funktsiya prototipini teskari konvertatsiya qilish "funcReverseLSX": /** @brief LSX konvertatsiyasiga teskari aylantirish * * @param[in] transformatsiya kiritishi * @param[in] b transformatsiya kiritishi * @param[out] ma’lumotlar natijasini o‘zgartirish parametri * @param[in] chop etish jurnali funksiyasi * @return 0, agar barcha transformatsiya muvaffaqiyatli bo‘lsa * @ return -1 xatolik yuz bergan bo'lsa */ int DLL_IMPORT funcReverseLSX(imzosiz belgilar* a, imzosiz belgilar* b, imzosiz belgilar* eskirgan maÿlumotlar, chop etilgan_bayt_massivni chop etish); FuncReverseLSX funktsiyasi ta'rifi: int DLL_IMPORT funcReverseLSX(imzosiz belgilar* a, imzosiz belgilar* b, imzosiz belgilar* eskirgan maÿlumotlar, chop etish_bayt_massivi chop etish) { unsigned char temp1[16]; unsigned char temp2[16]; if(!a || !b || !ma'lumotlardan tashqari) { if(chop etish) print("funcReverseLSX: ichki xato!", 0, 0); qaytish -1; } funcX(a, b, temp1, chop etish); funcReverseL(temp1, temp2, chop etish); funcReverseS(temp2, eskirgan ma'lumotlar, chop etish); agar (chop etish) { print("funcReverseLSX: a: ", a, 16); print("funcReverseLSX: b: ", b, 16); print("funcReverseLSX: chiqish: ", eskirgan ma'lumotlar, 16); } qaytish 0; } “funcReverseLSX” funksiyasining tavsifi: 1) kiritilgan ma'lumotlarni tekshirish. 2) Kirish ma'lumotlarida X turini o'zgartirishni amalga oshirish, natijani (uning o'lchami 16 bayt = 128 bit, kirish blokining o'lchamiga mos keladi) vaqtinchalik o'zgaruvchiga joylashtirish. 3) Natija bo'yicha ReverseL tipidagi konvertatsiyani amalga oshirish oldingi operatsiya, hisoblangan transformatsiyani temp2 o'zgaruvchisiga joylashtirish. 4) Natija bo'yicha ReverseS tipidagi konvertatsiyani amalga oshirish oldingi operatsiya, hisoblangan transformatsiyani eskirgan o'zgaruvchiga joylashtirish (kirish parametri). 5) Agar kerak bo'lsa, transformatsiya natijalarini ko'rsating. 32 Machine Translated by Google 3.7.4 Shifrni ochish funksiyasi “Decrypt _14” funksiyasining prototipi: /** @brief Blokni dekodlashni amalga oshirish * * @param[in] chipherText Shifrlangan blok * @param[out] plainText Shifrlangan blok * @param[in] tugmalari Kengaytirilgan kalitlar * @param[in] chop jurnali funksiyasi * @param[in] print_uint jurnali funksiyasi * @return 0 agar barcha konvertatsiya muvaffaqiyatli bo'ldi * @return -1 xatolik yuz bergan bo'lsa */ int DLL_IMPORT Decrypt_14(insigned char* chipherText, unsigned char* plainText, unsigned char* kalitlari, printout_byte_array print, printout_uint_array print_uint); Decrypt_14 funktsiyasi ta'rifi: int DLL_IMPORT Decrypt_14(insigned char* chipherText, unsigned char* plainText, unsigned char* kalitlari, printout_byte_array print, printout_uint_array print_uint) { unsigned char xTemp[16]; unsigned char yTemp[16]; int i; (void)print_uint; if(!plainText || !chipherText || !keys) { if(chop etish) print("Decrypt_14: ichki xato!", 0, 0); qaytish -1; } memcpy(xTemp, chipherText, 16); for(i = 0; i < 9; ++i) { funcReverseLSX(xTemp, tugmalar+(9-i)*16, yTemp, chop etish); memcpy(xTemp, yTemp, 16); } funcX(yTemp, tugmalar, tekis matn, chop etish); agar (chop etish) { for(i = 0; i < 10; ++i) { print("Decrypt_14: kalit: ", kalitlar, 16); += 16 tugmalari; } print("Decrypt_14: chipher text : ", chipherText, 16); print("Decrypt_14: oddiy matn: ", tekis matn, 16); } qaytish 0; } “Decrypt _14” funksiyasining tavsifi: 1) Kirish ma'lumotlarini tekshirish va o'zgaruvchilarni ishga tushirish. 2) Tegishli iteratsiya kaliti bilan kirish ma'lumotlarida c ReverseLSX tipidagi konvertatsiyani 9 marta bajarish (har bir iteratsiyada 256 bitli umumiy kalitning bir qismi ishlatiladi). 3) Yakuniy 10-raundda X turini konvertatsiya qilish. 4) Agar kerak bo'lsa, shifrlash natijalarini chiqaring. 33 Machine Translated by Google 4. Ishlash rejimlari 4.1 ECB rejimi Elektron kod kitobi (ECB) rejimi simmetrik blokli shifrdan foydalanish variantlaridan biri bo'lib, unda har bir ochiq matn bloki shifrlangan matn bloki bilan almashtiriladi. GOST 28147-89 da u oddiy almashtirish rejimi deb ataladi. Shifrlashni quyidagicha ta'riflash mumkin: blok raqamlari qayerda va mos ravishda shifrlangan matn va ochiq matn bloklari va blok shifrlash funktsiyasi. Shifrni ochish shunga o'xshash: ECB rejimida shifrlash 34 Machine Translated by Google 4.2 Gamma rejimi Qimor - bu oddiy matnga tasodifiy raqamlar ketma-ketligini "qo'yish" dan iborat bo'lgan simmetrik shifrlash usuli. Tasodifiy sonlar ketmaketligi shifrlash uchun gamma va ketma-ketlik deb ataladi va ma'lumotlarni shifrlash uchun ishlatiladi. Yig'ish odatda qandaydir cheklangan maydonda amalga oshiriladi. Masalan, Galois maydonida GF(2) yig’indisi “eksklyuziv OR (xor)” amali shaklini oladi. 35 Machine Translated by Google 4.3 Teskari aloqani masshtablash rejimi Shifrlangan fikr-mulohaza rejimi, shifrlangan fikr-mulohaza rejimi (CFB) nosimmetrik blokli shifrdan foydalanish variantlaridan biri bo‘lib, unda ochiq matnning keyingi blokini shifrlash uchun unga 2-modul qo‘shiladi, natijada qayta shifrlangan (blokli shifr) shifrlanadi. blok. Shifrlashni quyidagicha ta'riflash mumkin: blok raqamlari qaerda, ishga tushirish vektori (sinxronizatsiya xabari) va mos ravishda shifrlangan matn va ochiq matn bloklari va blokli shifrlash funktsiyasi. Shifrlangan matnni qayta aloqa rejimida shifrlash 36 Machine Translated by Google 4.4 Simulyatsiya yaratish rejimi Simulyatsiya qilingan kiritish uzunligi 1 dan 32 bitgacha. Uning rivojlanishi quyidagi sxema bo'yicha amalga oshiriladi. Oddiy matn 64 bitli bloklarga bo'lingan. Oxirgi agar kerak bo'lsa blok nollar bilan to'ldiriladi. Birinchi blok GOST 28147-89 oddiy almashtirish rejimida xabar bilan bir xil kalit bilan shifrlangan, lekin 32 o'rniga 16 tsikldan foydalangan shuningdek holda modul 2 bitli natija ikkinchi blokga qo'shiladi va shifrlanadi.vaNatija uchinchi blokga qo'shiladi ... va hokazo. Olingan blokning dastlabki 32 biti imitatsion qo'shimchani tashkil qiladi. Shifrning spetsifikatsiyasi taqlid qo'shimchasi sifatida foydalanishni va xohlagancha kamroq bitlarni nazarda tutadi, lekin bundan ortiq emas. Emulyatsiya odatda xabar oxirida yuboriladi va uni shifrlash/ parchalashdan alohida yoki jarayonda hisoblash mumkin. undan. 37 Machine Translated by Google 5. Kirish-chiqish interfeysini amalga oshirish Kirish va chiqish ishlab chiqish muhitining konsol rejimida amalga oshiriladi, bu exe formatidagi chiqish bajariladigan fayl mavjudligini nazarda tutadi. Ishga tushirish argument kalitlarisiz amalga oshiriladi. Ishga tushgandan so'ng, foydalanuvchidan quyidagi amallardan birini tanlash so'raladi: • Shifrlash/parchalash fayl, belgilangan foydalanuvchi; • Keyingi tahlil uchun test ketma-ketligi; • Tanlangan kriptoalgoritmni batafsil chiqarish. Malumot ilovasi rejimni faqat konsolning chiqish oqimida amalga oshirganligi sababli, faylga chiqishni ham amalga oshirish kerak edi. Buning uchun fayl binar rejimda ochiladi, ma'lumotlar ikkilik ketma-ketlik sifatida ham yoziladi. Umuman olganda, yuqorida tavsiflangan so'rovlar foydalanuvchi kriptoalgoritm oldiga qo'yishi mumkin bo'lgan vazifalarni qondiradi. Agar kerak bo'lsa, x ni dasturning bosh funksiyasiga kerakli funktsiya chaqiruvini qo'shish orqali to'ldirish mumkin. 38 Machine Translated by Google 6. Statistik tadqiqotlar 6.1 "Kitoblar to'plami" algoritmi Algoritm buyruq satridan bs.exe bajariladigan faylni ishga tushirish orqali ishga tushiriladi, ishga tushiriladigan fayl formati: bs [-f fayl nomi] [-n soni] [-w soni] [-b soni] [-u raqami] [-q] Parametrlarni terib bo'lmaydi, ya'ni holatda ulardan bir yoki bir nechtasining yo'qligi, agar mavjud bo'lsa, standart qiymat almashtiriladi. Variantlar ma'lum bir tartibda bo'lishi kerak (-b variantidan tashqari). Ishlatilgan parametrlar: -f fayl nomi. Sinov qilinadigan fayl nomini belgilaydi. U aniq tuzilmaga ega bo'lmagan oqimdan o'qilishi kerak. Namuna hajmi fayl hajmiga qarab aniqlanadi (agar -n varianti belgilanmagan bo'lsa. Bu eng qulay sinov rejimidir. -n num Fayldan o'qiladigan bitlar sonini belgilaydi yoki boshqa kirish oqimi. Agar aniqlanmagan bo'lsa, o'qish faylning oxirigacha boradi. -w num So'z uzunligini belgilaydi - 1 dan 32 gacha. -b raqami. So'zlar orasidagi bo'shliqlar uzunligini belgilaydi. -u raqam. Yuqori chegarani belgilaydi, standart qiymat u = 2^(w/2). . -q. Agar aniqlangan bo'lsa, faqat x^2 qiymati chiqariladi. 39 Machine Translated by Google 6.2 Chiqish ketma-ketligini muqobil o'zgartirish Umuman olganda, chiqish ketma-ketligi o'qilishi mumkin va keyingi mumkin bo'lgan operatsiyalar uchun maqbul bo'lishi kerak (masalan, raqamli imzo qo'yish). Grasshopper shifrining chiqish ketma-ketligi 128 bitdan, Magma - 64 bitdan iborat. Quyidagi muammo paydo bo'ladi: yuqorida aytib o'tilgan algoritmning spetsifikatsiyasidan "Kitoblar to'plami" faqat 32 bitga (yoki undan kam) teng bo'lgan so'z uzunligi bilan ishlaydi. Xo'sh, qanday qilib 128 (yoki 64) bitni 32 bitli bloklar ketma-ketligiga aylantirasiz? Dam olish kuni keyingi ketma-ketlik taqdim etdi ichida shakl umumiy uzunligi 128 belgidan iborat o'n oltilik raqamlar. Ularni 32 bitli bloklarga bo'lish kerak. Shunga ko'ra, har 8 ta belgi bizga kerak bo'lgan blokdir. Hammasi bo'lib 16 ta shunday blok mavjud. Biroq, bu bizga kerak bo'lgan barcha konvertatsiyalar emas - 8 belgidan iborat blok butun songa aylantirilishi kerak. Keyingi ish uchun butun son kerak. Bu maqsad uchun int turi mos keladi, chunki uning o'lchami 4 bayt, ya'ni 32 bit, bu bizga kerak bo'lgan narsadir. Bundan tashqari, raqamni belgilar shaklida ko'rsatish va natijada olingan belgilarni faylga yozish mantiqiy bo'ladi. Kitoblar to'plami algoritmi ushbu faylni to'g'ri qayta ishlashga qodir bo'ladi. Nima uchun int128 turini aniqlash va u bilan ishlash mantiqiy emasligini eslatib o'tish kerak. Xuddi shu sababga ko'ra, bu vazifa qiyinlashadi - "Kitoblar to'plami" 32 bitdan uzunroq so'z bilan ishlay olmaydi va biz yana 128 bitli raqamni bloklashimiz kerak, keyin esa 32 bitda amalga oshirilishi mumkin bo'lgan o'zgarishlarni amalga oshirishimiz kerak. bit raqami. Shubhasiz - ma'lumotlar turini o'qilishi mumkin bo'lgan blokning o'lchami bilan bir xil o'lchamga o'rnatish to'g'risida qaror maqbul tanlov va amaliy xususiyatga ega. fitnes. Shunday qilib, shifrni tahlil qilish uchun tadqiqot algoritmiga o'z ishini bajarishga imkon beradigan ketma-ketlikni amalga oshirish kerakligi aniqlandi. Keling, ushbu o'zgarishlarni amalga oshirishga imkon beradigan funktsiyani yarataylik. Yaratilgan funksiyaning sxematik ishi 3-rasmda ko'rish mumkin. 40 Machine Translated by Google Shakl 3. “ConvertToArray32” funksiyasining ishlashi … 128 belgi 512 bit … 128 belgi = 128 belgilar 32 bit 32 bit 32 bit 32 bit 32 bit 32 bit 32 bit 32 bit … … BookStack algoritmi 6.3 O'rganishga asoslangan algoritmlarning xarakteristikalari 1 000 000 ta mahsulot 10 000 000 ta mahsulot 41 Machine Translated by Google 4-rasm. x^2 ning 1 000 000 elementdagi turlar soniga bog'liqligi So'z uzunligi 16 bitga teng bo'lgan 10 000 000 elementni o'rganish natijasi So'z uzunligi 32 bitga teng bo'lgan 15 000 000 elementni o'rganish natijasi 42 Machine Translated by Google 6.4 Xulosalar Olingan natijalarga asoslanib, quyidagi xulosalar chiqarish mumkin: ÿ “Grasshopper” shifrlash yetarli kriptografik quvvatga ega. ÿ x ^ 2 qiymati qanchalik katta bo'lsa, uning ehtimoli shunchalik yuqori bo'ladi tahlil qilingan ketma-ketlik tasodifiy emas. ÿ (x^2 > 6) sharti bo'yicha - tahlil qilingan ketma-ketlikni ko'rib chiqing tasodifiy bo'lmagan. 43 Machine Translated by Google 7. Xulosa Ushbu ishda GOST 34.12 - 2015 standarti amalga oshirildi.Ushbu standart kodni nazarda tutadi - "Grasshopper". Shifr C va C++ tillarida tadqiq qilingan va yozilgan. Ish jarayonida ba'zi qiyinchiliklarga duch keldi, ammo ularning barchasi bartaraf etildi va keyin standartni muvaffaqiyatli amalga oshirishga to'sqinlik qilmadi. Standart joriy etilgandan va tegishli adabiyotlar o'rganilgandan so'ng, standart "Kitoblar to'plami" algoritmi orqali statistik tadqiqotlar o'tkazilib, ma'lum natijalarni berdi, ular ham o'rganildi va ishlab chiqildi. Belgilangan barcha vazifalar to‘liq bajarildi. 44 Machine Translated by Google Adabiyotlar ro'yxati 1) http://www.infotecs.ru/press/news/15/14508/ InfoTeKS (Axborot texnologiyalari va kommunikatsiya tizimlari OAJ) VPN yechimlari va kriptografik axborotni himoya qilish vositalarining dasturiy va apparat vositalarini ishlab chiqaruvchi yetakchi hisoblanadi. 2) A. Poschmann, S. Ling, H. Vang, 650 GE uchun 256 bit standartlashtirilgan kripto - GOST qayta ko'rib chiqildi, CHES 2010, LNCS 6225, pp. 219-233, 2010 yil. 3) T. Isobe. To'liq GOST blok shifriga bitta kalitli hujum, LNCS v. 6733, b. 290–305. Springer, 2011 yil. 4) Rostovtsev A.G., Maxovenko E.B., Filippov A.S., Chechulin A.A. GOST 28147-89 barqarorligi to'g'risida // Axborot xavfsizligi muammolari. Kompyuter tizimlari. - 2003. - S. 75-83. 5) Standartlashtirish bo'yicha texnik qo'mitasi (TC 26) "Axborotni kriptografik himoya qilish" Shifrlash algoritmini xalqaro standartlashtirish faoliyati to'g'risida GOST 28147-89. 6) http://eprint.iacr.org/2011/211 Nikolas T. Kurtua. Xalqaro standartlashtirish nuqtai nazaridan GOST 28147-89 xavfsizlikni baholash 7) http://protect.gost.ru/document.aspx?control=7&id=200990 Federal agentligi texnik tartibga solish va metrologiya 8) https://cryptostore.ru/article/novosti/novye_standardy_shifrovaniya_v_2016_godu/ cryptostore.ru. Elektron imzo va shifrlash uchun hamma narsa. 9) http://www.tc26.ru/standard/gost/GOST_R_3413-2015.pdf ROSSIYA FEDERATSIYASI MILLIY STANDARTI GOST R 34.13ÿ 2015 y. 10) ru.wikipedia.org/wiki/GOST_28147-89 Vikipediya, bepul ensiklopediya. GOST 28147-89 11) en.wikipedia.org/wiki/Grasshopper_(cipher) Vikipediya, bepul ensiklopediya. Chigirtka (shifr) 12) http://www.tc26.ru/standard/gost/PR_GOSTR_bch_v6.zip ROSSIYA FEDERATSIYASI MILLIY STANDARTI GOST R 34.13ÿ 2015 yil 13) https://habrahabr.ru/post/266359/ Chigirtka GOSTda o'tirdi. Habrahabr. 14) https://habrahabr.ru/post/256843/ GOST 28147-89 shifrlash haqida yana bir bor. Habrahabr. 15) https://habrahabr.ru/post/80967/ GOST 28147-89. Habrahabr. 16) https://habrahabr.ru/post/269601/ Asta-sekin ish GOST R 34.12-2015 ECB rejimida. Habrahabr. 17) http://www.enlight.ru/crypto/articles/vinokurov/gost_i.htm Shifrlash algoritmi GOST 28147-89, uni Intel x86 platformasi kompyuterlari uchun ishlatish va amalga oshirish, muallif: Andrey Vinokurov. 18) http://www.scienceforum.ru/2016/pdf/24203.pdf MPI TEXNOLOGIYASINI FOYDALANISH ZAMONAVIY KRÿPTOSIZMALAR XAVFSIZLIGINI TAHLILI. Ischukova E.A., Alekseev D.M. Janubiy federal universitetining muhandislik-texnologiya akademiyasi, Taganrog 45