Uploaded by Khumoyun Abdurazokov

tarjima

advertisement
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
Download