O’ZBEKISTON RESPUBLIKASI RAQAMLI
TEXNOLOGIYALARI VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TОSHKЕNT AХBОRОT TЕХNОLОGIYALARI UNIVЕRSITЕTI
«Kriptologiya» kafеdrasi
INDIVIDUAL LOYIHA
Mavzu: Ochiq kalitli
modulini ishlab chiqish.
shifrlash
algoritmlari
dasturiy
“Axborot xavfsizligi” yo`nalishi
Bajardi:070-21 Kiber xavfsizlik guruh talabasi
Abbosov Mirzohid
Ilmiy rahbar:_______________________
Toshkеnt – 2025
1
MUNDARIJA
KIRISH
1. Ochiq kalitli shifrlash algoritmlari
2.
1.1 Ochiq kalitli shifrlash algoritmlari..........................................
5
1.2 RSA shifrlash algoritmi………………...….…...............................
8
1.3 El-Gamal shifrlash algoritmi…………………...…......... .......... ....
10
Ochiq kalitli shifrlash algoritmlari dasturiy ta’minotini
ishlab chiqish
2.1 RSA shifrlash algoritmi dasturini ishlab chiqish.......………...…
12
2.2 El-Gamal shifrlash algoritmi dasturi ishlab chiqish.............…....
14
2.3 RSA va El-Gamal shifrlash algoritmlari dasturiy modulini ishlab
chiqish…………….....................................................................
15
XULOSA.....................................................................................................
17
FOYDALANILGAN ADABIYOTLAR………...……………….…..
18
ILOVA..........................................................................................................
19
2
Kirish
Ochiq kalitli kriptotizimlar bundan 32 yil muqaddam AQSH olimlari U.
Diffi va M. Xellman tomonidan kashf etilgan boʻlib, ular katta sonli chekli
toʻplamlarda bir tomonlama funksiyalardan foydalanishga asoslangan. U. Diffi va
M. Xellmanning 1976-yilda bosilib chiqqan “Kriptologiyada yangi yoʻnalishlar”
maqolasida ilgari surilgan “maxfiy kalitni uzatishni talab etmaydigan amaliy
bardoshli maxfiy tizimlarni tuzish mumkin” degan fikri kriptologiyada Ochiq
kalitli
kriptotizimlarning yuzaga kelishi hamda ularning rivojlanish davrining
boshlanishiga sabab boʻldi.
Ochiq kalitli
kriptotizimlarning yuzaga kelishi simmetrik
tizimlarda yechilmay qolgan maxfiy shifrlash kalitlarini tarqatish va elektron
raqamli imzo tizimlarini yaratish hamda qator zamonaviy masalalarni yechish
imkoniyatini berdi. Ochiq kalitli
kriptotizimlar simmetrik kriptotizimlarga
nisbatan oʻnlab marta katta uzunlikdagi (512, 1024, 2048, 4096 bitli) kalitlardan
foydalanadi va shu sabab yuzlab marta sekinroq ishlaydi. Ochiq kalitli
kriptotizimlarning matematik asosida bir tomonlama oson hisoblanadigan
funksiyalar (modul boʻyicha diskret darajaga oshirish funksiyasi, egri chiziqli
elliptik funksiya va sh.k.) yotadi. Ochiq kalitli
kriptotizimlar axborot
xavfsizligining barcha muammolarini yechib berishga qodir hisoblanadi.
Ochiq kalitli kriptotizim mohiyati har bir foydalanuvchi uchun
birini bilgan holda ikkinchisini topish, yechilishi murakkab boʻlgan masala bilan
bogʻliq kalitlar juftligini yaratishdan iborat. Bu juftlikni tashkil etuvchi kalitlardan
biri ochiq (oshkora), ikkinchisi maxfiy (shaxsiy) deb eʼlon qilinadi. Ochiq kalit
oshkora eʼlon qilinadi, maxfiy kalit faqat uning egasigagina maʼlum boʻladi. Biror
foydalanuvchining ochiq kalitini bilgan holda uning maxfiy kalitini topishning
amaliy jihatdan mumkin emasligi, yechilishi murakkab boʻlgan masalaning hal
etilishini talab qilishi bilan kafolatlanadi.
3
Bir tomonli funksiyalarni aniqlanish taʼrifida nazariy jihatdan teskarisi
mavjud boʻlmagan funksiyalar emas balki, berilgan funksiyaga teskari boʻlgan
funksiyaning qiymatlarini hisoblash amaliy jihatdan maqsadga muvofiq boʻlmagan
funksiyalar tushiniladi. Shuning uchun maʼlumotning ishonchli muhofazasini
taʼminlovchi ochiq kalitli kriptotizimlarga muhim boʻlgan quyidagi talablar
qoʻyiladi:
Dastlabki ochiq maʼlumotni shifrmaʼlumot koʻrinishiga oʻtkazish birtomonli
jarayon va shifrlash kaliti bilan shifrmaʼlumotni ochish-deshifrlash mumkin emas,
yaʼni shifrlash kalitini bilish shifrmaʼlumotni deshifrlash uchun yetarli emas.
Ochiq kalitning maʼlumligiga asoslanib, mahfiy kalitni zamonaviy fan va texnika
yutuqlari yordamida aniqlash uchun boʻladigan sarf-harajatlar hamda vaqt
maqsadga muvofiq emas. Bunda, shifrni ochish uchun bajarilishi kerak boʻladigan
eng kam miqdordagi amallar sonini aniqlash muhimdir.
4
1. Ochiq kalitli shifrlash algoritmlari
1.1 Ochiq kalitli shifrlash algoritmlari
Kriptografik
sistema
qanchalik
murakkab
va ishonchli algoritmga
asoslangan bo„lmasin, uning amaliy qo„llanishida kelib chiqadigan nozik masala,
ya‟ni kriptosistemalardan foydalanuvchilarga kalitlarni taqsimlash masalasi muhim
bo„lib qolaveradi. Haqiqatan ham, axborotlar tizimida maxfiy aloqani ta‟minlovchi
kriptografik sistema foydalanuvchilarining o„zaro aloqasi uchun kalit ularning biri
orqali yaratilgan bo„lib, ikkinchisiga maxfiy holda etkazilishi lozim bo„ladi.
Bundan kelib chiqadiki, umuman olganda, kalitni etkazish (uzatish) uchun ham
yana boshqa kriptosistemadan foydalanishga to„g„ri keladi. Bu masalani echish
uchun klassik hamda zamonaviy fan va texnika yutuqlariga, xususan, algebra fani
yutuqlariga asoslangan holda ochiq kalitli kriptosistemalar yaratish yo„nalishi
vujudga keldi. Ochiq kalitli kriptosistemalarning mohiyatini quyidagilar tashkil
etadi.
Axborotlar tizimi kriptosistemasidan foydalanuvchilarning har biri ma‟lum
qoida bilan bog„langan ikkita kalitni yaratadi (tuzadi).
Bu tuzilgan (yaratilgan) kalitlardan biri ochiq e‟lon qilinadi, ikkinchisi esa
sir (maxfiy) saqlanadi.
Dastlabki ochiq kalit bilan shifrlanib, tegishli foydalanuvchiga uzatiladi,
bunda shifrlangan matnni (kriptogrammani) bu ochiq kalit bilan deshifrlash
imkoniyati yo„q, ya‟ni shifrlangan matnni bu ochiq kalit bilan ochish imkoniyati
yo„q.
Uzatilgan (etkazilgan) kriptogramma faqat kriptogrammaning haqiqiy
egasigagina ma‟lum bo„lgan ikkinchi maxfiy kalit bilan deshifrlanadi.
5
Ochiq kalitli kriptosistemalar teskarisi mavjud bo„lmagan yoki teskarisini
hozirgi zamonaviy fan va texnika yutuqlaridan foydalangan holda qoplanmaydigan
darajada juda katta moddiy sarf-xarajatlar bilan hamda keragidan ko„p vaqt
sarflash bilan aniqlanadigan funksiyalarga yoki algoritmlarga asoslanadi. SHunday
funksiyalar yoki algoritmlarni quyidagi xossaga ega bo„lishi maqsadga muvofiq:
berilgan x qiymatdaf(x) funksiyaning qiymati y etarli darajada oson hisoblanadi,
ammo
biror
noma‟lum xqiymatda
funksiyaning
qiymati
y=f(x) ma‟lum
bo„lsa, x qiymatni topishning ham moddiy jihatdan ham vaqt nuqtai nazaridan
etarli darajadagi imkoniyati yo„q.
Ochiq kalitli kriptosistemalar algoritmlari ularning asosini tashkil etuvchi bir
tomonli funksiyalar bilan farqlanadi. Ammo har qanday bir tomonli funksiya ham
ochiq kalitli kriptosistemalar yaratish uchun va ulardan amaldagi axborotlar
tizimida maxfiy aloqa xizmatini o„rnatish algoritmini qurish uchun qulaylik
tug„dirmaydi.
Bir tomonli funksiyalarni aniqlash ta‟rifida nazariy jihatdan teskarisi mavjud
bo„lmagan funksiyalar
emas,
balki berilgan funksiyaga teskari bo„lgan
funksiyaning qiymatlarini hisoblash amaliy jihatdan maqsadga muvofiq bo„lmagan
funksiyalar tushunilishi ta‟kidlangan edi. SHuning uchun ma‟lumotning ishonchli
muhofazasini ta‟minlovchi ochiq kalitli kriptosistemalarga muhim bo„lgan
quyidagi talablar qo„yiladi:
Dastlabki ochiq matnni shifrmatn ko„rinishida o„tkazish bir tomonli jarayon
va shifrlash kaliti bilan shifrmatnni ochish – deshifrlash mumkin emas, ya‟ni
shifrlash kalitini bilish shifrmatnni deshifrlash uchun etarli emas.
Ochiq kalitning ma‟lumligiga asoslanib, maxfiy kalitni zamonaviy fan va
texnika yutuqlari yordamida aniqlash uchun bo„ladigan sarf-xarajatlar hamda vaqt
6
maqsadga muvofiq emas. Bunda, shifrni ochish uchun bajarilishi kerak bo„ladigan
eng kam miqdordagi amallar sonini aniqlash muhimdir.
Ochiq kalitli shifrlash algoritmlaridan axborotlar tizimida ma‟lumotlarning
maxfiyligini ta‟minlashda zamonaviy ilg„or uslub sifatida foydalanib kelinmoqda.
Ochiq kalitli kriptosistemalarni yaratishning RSA algoritmi johon standarti sifatida
qabul
qilingan.
Bu
haqida
keyingi
bo„limlarda
alohida
to„xtalamiz.
Umuman olganda, zamonaviy ochiq kalitli kriptosistemalar quyidagi tipdagi
akslantirishlarga (funksiyalarga) tayanadi:
1. Katta sonlarni tub ko„paytuvchilarga yoyish;
2. Chekli sonli maydonlarda logarifmlarni hisoblash;
3. Algebraik tenglamalarning ildizlarini hisoblash;
Shu erda ta‟kidlash lozimki, ochiq kalitli kriptosistemalar algoritmlaridanquyidagi
maqsadlarda foydalaniladi:
Saqlanuvchi
va
uzatiladigan
ma‟lumotlarning
maxfiyligi
muhofazasini
ta‟minlovchi mustaqil vosita sifatida.
Kalitlar taqsimotining muhofazasini ta‟minlovchi vosita sifatida. Ochiq
kalitli kriptosistemalar algoritmlari an‟anaviy kriptosistemalar algoritmlariga
nisbatan murakkab bo„lib, undan ko„proq kalitlarni taqsimlashda foydalaniladi.
So„ngra katta hajmdagi ma‟lumotlarni uzatishda soddaroq bo„lgan sistemalardan
foydalaniladi.
Autentifikatsiya, ya‟ni ma‟lumotlarning haqiqiyligini aniqlash uslublari vositasi
sifatida. Bu haqida «Elektron imzo» bo„yicha batafsil to„xtalamiz.
quyida nisbatan ommaviylashgan ochiq kalitli kriptosistemalarni qisqa ko„rib
o„tamiz.
7
1.2 RSA shifrlash algoritmi.
RSA shifrlash algoritmi. Diffi va Xelman kritografiya sohasida yangicha
yondashishni targ„ib qilib, ochiq kalitli kriptotizimlarning barcha talablariga javob
beradigan kriptografik algoritm yaratish taklifi bilan chiqdi. Birinchilardan bo„lib
bunga javoban 1978 yil Ron Rayvets (Ron Rivest), Adi Shamir (Adi Shamir) va
Len Adlmen (Len Adlmen)lar shu vaqtgacha tan olingan va amaliy keng qo„llanib
kelingan ochiq kalitli shifrlash algoritm sxemasini taklif qildi va bu algoritm
ularning nomi sharafiga RSA algoritmi deb ataldi. RSA algoritmi faktorlash
murakkabligiga asoslangan shifrlash algoritmi hisoblanadi.
Rayvest,
Shamir
va
Adlmen
tomonidan
yaratilgan
sxema
daraja
ko„rsatkichiga asoslangan. Ochiq matn bloklarga ajratilib shifrlanadi, har bir blok
ba‟zi berilgan n sonidan kichik bo„lgan ikkilik qiymatga ega bo„ladi. Bundan kelib
chiqadiki blok uzunligi log2 (n) dan kichik yoki teng bo„lishi kerak. Umuman
olganda amaliyotda blok uzunligi 2k ga teng deb olinadi, bu yerda 2k < n≤ 2k+1.
Ochiq matn - M bloki va shifrlangan matn - С bloki uchun shifrlash va deshifrlash
quyidagi formula bilan hisoblanishi mumkin.
M=Me mod(n), M=Cd mod(n)= (Me )dmod(n)=Med mod(n)
Jo„natuvchi ham, qabul qiluvchi ham n ni qiymatini bilishi kerak.
Jo„natuvchi e ni qiymatini, qabul qiluvchi esa faqat d ni qiymatini bilishadi. Ushbu
sxema ochiq kalitli shifrlash algoritmi hisoblanadi, KU={e,n}- ochiq kalit va
KR={d,n}-maxfiy kalit hisoblanadi. Bu algoritm ochiq kalit yordamida shifrlanishi
uchun, quyidagi talablar bajarilishi kerak.
1. Shunday e, d va n qiymatlar mavjud bo„lish kerakki, barcha M <n uchun
Med= M mod ( n) tenglik o„rinli bo„lishi kerak.
2. Barcha M < n uchun Me va Cd ni hisoblash oson bo„lishi kerak.
3. Amaliy jihatdan e va n ni bilmasdan turib d ni qiymatini bilish mumkin
bo„lmasligi kerak.
8
Birinchi shartga binoan quyidagi munosabatni topish kerak
Med = M mod (n)
Eyler funksiyasiga asosan: har qanday ikkita p va q tub son va har qanday n
va m butun sonlar uchun, n=pq va 0 <m < n, va ixtiyoriy k butun son uchun
quyidagi munosabat bajariladi.
mk
(n) +1
Bu yerda
= m k (p-1) (q-1) +1=m mod(n),
( ) Eyler funksiyasi bo„lib, n dan kichik va n bilan o„zaro tub
bo„lgan musbat butun son. Eyler funksiyasi
( ) bilan o„zaro tub bo‟lgan e son
tanlab olinadi va talab qilinayotgan munosabat quyidagi shart asosida bajariladi.
ed=k ( )+1
Bu quyidagi munosabat bilan ekvivalent:
ed=1 mod ( )
d=e-1 mod ( ) e va d, ( )modul bo„yicha o„zaro teskari son, ya‟ni
gcd( ( ) e) = 1.
Yuqorida keltirilgan parametrlar asosida RSA sxemasini quyidagicha
tasniflash mumkin:
1. p va q - tub sonlar (maxfiy, tanlab olinadi);
2. n=pq (ochiq hisoblanadi);
3. shunday e, gcd( ( ) e) = 1, 1 < e, ( )(ochiq, tanlab olinadi);
4. d=e-1 mod ( ) (maxfiy hisoblanadi).
Maxfiy kalit {d,n} dan, ochiq kalit esa {e,n} dan iborat bo„ladi. Faraz
qilaylik, A foydalanuvchi ochiq kalitini e‟lon qildi va B foydalanuvchi unga M
xabarni jo„natishi kerak. B foydalanuvchi C=M e mod(n), hisoblab C ni jo„natadi.
Shifrlangan matnni qabul qilgan A foydalanuvchi M=Cd mod(n),
yordamida
deshifrlab dastlabki ochiq matnga ega bo„ladi.
Quyida keltirilgan misolda RSA algoritmini amaliy qo„llash ko„rsatilgan.
1. Ikkita tub son tanlab olinadi, p=7 va q=17;
9
2. n=p*q=7*17 hisoblanadi;
3. Eyler funksiyasi hisoblanadi ( )= (p - l)(q-1) = 96;
4. Eyler funksiyasi
( )= 96 bilan o‟zaro tub bo‟lgan va undan kichkina
bo‟lgan e tanlab olinadi; bu misolda e=5;
5. de=1mod 96 va d<96 shartni qanoatlantiruvchi d soni topiladi. d=77,
77*5=385=4*96+1;
Natijada ochiq kalit KU={5,119} va yopiq kalit KR={77,119} hosil bo„ladi.
Bu misolda ochiq matn qiymati M=19 olingan. Shifrlash formulasiga ko„ra ochiq
matn qiymati ochiq kalit qiymati yordamida darajaga ko„tarilib, n modul bo„yicha
qiymati olinadi, ya‟ni 19 soni 5 darajaga ko‟tariladi, natijada 2476099 hosil
bo„ladi. Natijani 119 ga bo‟lsak, qoldiq 66 ga teng bo‟ladi. 19 5 = 66 mod 119 va
shuning uchun ham shifrlangan matn 66 ga teng bo‟ladi. Deshifrlash uchun esa
shifrlangan matn qiymati maxfiy kalit qiymati yordamida darajaga ko‟tarilib, n
modul bo‟yicha qiymati olinadi, ya‟ni 6677 = 19 mod 119 amalni hisoblaymiz va
dastlabki ochiq matn qiymatiga ega bo„lamiz, ya‟ni 19 ga.
1.3 El-Gamal shifrlash algoritmi.
Ushbu ochiq kalitli shifrlash algoritmi diskert logarifmlash muammosiga
asoslangan bo‟lib, kalitlar uzunligi teng bo‟lgan holda bardoshliligi RSA algoritmi
bardoshligiga teng.
Kalit
generatori.
El-Gamal
algoritmida
kalit
generatori
quyidagi
bosqichlardan iborat:
1. p – tub son tanlanadi;
2. g<p shartni qanoatlantiruvchi g butun son tanlanadi;
3. maxfiy kalit sifatida a<p shartni qanoatlantiruvchi butun son
tanlanadi;
4. ochiq kalit sifatida y = ga mod p hisoblanadi;
10
5. ochiq kalitlar jufti (y, g, p) ma‟lumotni shifrlovchi tomonlarga yoki
ixtiyoriy odamlarga tarqatiladi.
Shifrlash qoidasi: Biror foydalanuvchi (A) maxfiy kalit a sonini tanlab
oladi va y = ga mod p bo„lgan ochiq kalitni hisoblaydi. Agarda foydalanuvchi A
bo‟lsa, boshqa foydalanuvchi B - maxfiy ma‟lumotni jo„natuvchi bo‟lsa, u holda B
tomon p sonidan kichik bo„lgan biror kriptotizim uchun talab etiluvchi sonni tanlab
olib,
y1 = gk (mod p) va y2 = (m* yk )(mod p),
sonlarini hisoblaydi. Bu yerda k EKUB( k, p -1) =1 shartni qanoatlantiruvchi
butun son. So‟ngra (B) (y1>y2) ma‟lumotlarini (A)ga jo‟natadi.
Deshifrlash qoidasi: O„z navbatida (A) bu shifrlangan ma‟lumotni qabul
qilib, quyidagi
(y2 * yp-1-a mod p) = m
bo„lgan hisoblash bilan ma‟lumotning ochiq matnini tiklaydi.
Misol. A tomon o‟zining maxfiy kaliti asosida ochiq kalit juftini hosil kiladi
va uni B tomonda yuboradi. Olingan qiymatlar quyidagilar: g=3; p=31; a=4;
y=(g^a)modp=(3^4)mod31=19. Bu yerda (p,g,y) - ochiq kalitlar jufti va a maxfiy
kalit.
Shifrlash. Bu bosqich A tomonning ochiq kalitlari orqali B foydalanuvchi
tomonidan amalga oshiriladi. Ochiq ma‟lumot sifatida M=CDEF (2,3,4,5 alifbodani o‟rni) olinib, EKUB(k, p-1) =1 shartni qanoatlantiruvchi k=7 tanlandi.
Shundan so‟ng quyidagilar hisoblanadi:
r=(g^k)modp=(3^7)mod31=17;
C1=m*y^k=2 *(19^7)mod31=14;
C2= m*y^k =3 *(19^7)mod31=21;
C3= m*y^k =4*(19^7)mod31=28;
C4= m*y^k =5*(19^7)mod31=4;
11
Shundan so‟ng C1,C2,C3,C4 lardan iborat S va r A tomonga yuboriladi.
Deshifrlash. Bu jarayon maxfiy kalitga ega bo‟lgan A tomondan amalga oshiriladi
va ochiq matn olinadi:
M1=C1 *r^(p-1 -a)modp=14*17^(31-1 -4)mod31=2;
M2= C2 *r^(p-1 -a)modp =21*17^(31-1 -4)mod31=3;
M3= C3 *r^(p-1 -a)modp =28* 17^(31-1 -4)mod31=4;
M4=C4 *r^(p-1 -a)modp=4 * 17^(31-1 -4)mod31=5.
2. Ochiq kalitli shifrlash algoritmlari dasturiy ta’minotini ishlab
chiqish
2.1 RSA shifrlash algoritmi dasturini ishlab chiqish
Dastur natijasi:
2.1.1-rasm. Qabul qiluvchi qismi
Qabul qiluvchi tomon „re’ ni dasturga kiritadi va p va q tub sonlarni probel
bilan kiritadi. Dastur unga f(N) = (p-1)(q-1) ni hisoblab e ni kiritishini so‟raydi. e
kiritilgandan so‟ng dastur maxfiy kalit d ni hisoblab ko‟rsatadi va e va n ochiq
kalitlar juftligini xabar yuboruvchiga jo‟natishni so‟raydi.
12
2.1.2-rasm. Yuboruvchi qismi va rasshifrovkalash
Xabar yuboruvchi „se‟ ni kiritadi dasturga va Ochiqmatnni ham kiritadi.
Yuboruvchidan olgan e va n larni kiritib shifrmatnni olamiz.
Keyingi qadamda Qabul qiluvchi p va qlarni, keyin esa e ni kiritadida
so‟ngida shifrmatnni ham kiritadi, qarabsizki ochiq matn tayyor.
13
2.2 El-Gamal shifrlash algoritmi dasturi
Dastur natijasi:
2.2.1-rasm. Kalitlarni generatsiya qilish
Kalitlarni generatsiya qilishimiz uchun 0 ni kiritamiz. p va g larni qo‟lda kiritamiz
va a maxfiy kalitni ham kiritamiz natijada y, g, p larni bizga qaytaradi.
2.2.2-rasm. Shifrlash
Shifrlashni amalga oshirishimiz uchun 1 ni kiritamiz. Ochiqmatn va pastidan
generatsiya qilib olgan kalitlarimizni kiritamiz. Aytgancha k ni ham kiritib
ketamiz. Bizga shifrmatn va r ni qaytaradi.
14
2.2.3-rasm. Rasshifrovkalash
Navbat deshifrlashga. 2 ni kiritamiz va shifrmatnni
va so‟ngida r, p, a
parametrlarni kiritib natijada ochiqmatnga ega bo‟lamiz.
2.3 Umumiy dasturiy modul
RSA algoritmi, El-Gamal algoritmi va Faktorizatsiyalash muammosini
bartaraf etuvchi algoritmlarni bir dasturga yig‟ib chiqdim.
Natijasi:
2.3.1-rasm. RSA algoritmi
15
2.3.2-rasm. El-Gamal algoritmi
2.3.3-rasm. Rasshifrovkalash (El-Gamal)
16
RSA va El-Gamal shifrlash algoritmlarining qiyosiy tahlili
Algoritm
Kamchiligi
Ustunligi Tezligi
RSA
Kalit uzunligi Yo‟q
Muammo
Tez
Faktorizatsialash Kalitni
katta
El-Gamal
Qo’llanilishi
shifrlashda
Kalit uzunligi Yo‟q
RSA
katta
nisbatan sekin
ga Diskret
logarifmlash
Kalitni
shifrlashda
Xulosa
Ushbu bobda biz Ochiq kalitli kriptosistemalar algoritmlari ularning asosini
tashkil etuvchi bir tomonli funksiyalar bilan farqlanishi va Ochiq kalitli shifrlash
algoritmlaridan axborotlar tizimida ma‟lumotlarning maxfiyligini ta‟minlashda
zamonaviy ilg„or uslub sifatida foydalanib kelinyotganini hamda Ochiq kalitli
shifrlash algoritmlari an‟anaviy kriptosistemalar algoritmlariga nisbatan murakkab
bo„lib, undan ko„proq kalitlarni taqsimlashda foydalanilishi haqida ma‟lumotlar
berdik. Ochiq kalitli shifrlash algoritmlaridan axborotlar tizimida ma‟lumotlarning
maxfiyligini ta‟minlashda zamonaviy ilg„or uslub sifatida foydalanib kelinmoqda.
Dasturga qo‟shimcha qilib faktorizatsiyalash muammosini bartaraf etuvchi
algoritmlarni ham qo‟shib chiqdim.
17
Foydalanilgan adabiyotlar:
1. INFORMATION SECURITY, Mark Stamp, the United States of America
2011
2. INTRODUCTION TO MODERN CRYPTOGRAPHY, Jonathan Katz
Yehuda Lindell, University of Maryland College Park, MD, USA 2015
3. Axborot xavfsizligini ta‟minlashning kriptografik usullari va ularning
qo‟llanilishi, Akbarov Davlatali Yigitaliyevich “O‟zbekiston Markasi”
nashriyoti 2009.
18
Ilova
RSA dastur kodi:
# from random import randint
# Global o'zgaruvchilar
alifbo = 'abcdefghijklmnopqrstuvwxyz'
secret = []
# No'malum koeffitsientni topish
def find_num(k, m, r):
x = 0
while x * k % m != r: x += 1
return x
# Shifrlash funksiyasi
def encrypt(text, e, n):
global secret
result = ''
for char in text:
if not char.isalpha() and char == ' ':
result += char
secret += char
else:
x = alifbo.index(char.lower())
secret.append(str(x))
sym = alifbo[x % 26]
result += sym
return result
# Rasshirovkalash funksiyasi
19
e % n
def decrypt(d, n):
global secret
result = ''
for num in secret:
if not num.isdigit() and ' ': result += num
else:
sym = alifbo[int(num)
d % n]
result += sym
return result
# def mutual_prime(fx):
#
prime_nums = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,
47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
#
e = prime_nums[randint(0, 24)]
#
if e < fx: return e
#
else: return mutual_prime(fx)
while True:
selection
=
input('Siz
xabar
yuboruvchimisz
(se)
yoki
qabul
ochiq
kalitlarni
qiluvchimisz (re)?\t')
# Jo'natuvchi tomon
if selection == 'se':
print('Yaxshi, Siz xabar yuboruvchisiz')
text = input('Xabarni kiriting:\t')
e,
n
=
map(int,
input('Iltimos
e
va
kiriting: \t').split())
input_text = encrypt(text, e, n)
print(f"Shifrlangan xabar:\t{input_text}")
# Qabul qiluvchi tomon
20
n
elif selection == 're':
print('Yaxshi, Siz qabul qiluvchi tomonsiz')
# p_a = [3, 5, 7, 11, 13, 17, 19, 23, 29]
# p_b = [31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83,
89, 97, 101]
# p, q = p_a[randint(0, 8)], p_b[randint(0, 15)]
p, q = map(int, input('p va q ni kiriting:\t').split())
n = p * q
fx = (p-1) * (q-1)
# e = mutual_prime(fx)
e = int(input(f"{fx} dan kichik va {fx} bilan o'zaro tub son
kiriting:\t"))
de = find_num(e, fx, 1)
print(f"Maxfiy kalit d = {de}")
print(f"e = {e}, n = {n}. Ochiq kalitlarni yuboring")
encrypted_text = input(f'Shifrmatnni kiriting:\t')
decrypted_text = decrypt(de, n)
print(f'Ochiq matn:\t{decrypted_text}')
# secret :)
else:
secret.clear()
El-Gamal dastur kodi:
# El-Gamal encryption algorithm
def key_generate(p, g, a):
return g**a % p, g, p
def encrypt(c, y, g, p):
k = int(input('k = '))
r = g**k % p
21
new_c = ''
for i in c:
new_c += str(i * y**k % p) + ' '
return new_c.strip(), r
def decrypt(c, r, p, a):
new_c = ''
for i in c:
new_c += str(i * r**(p-a-1) % p) + ' '
return new_c.strip()
def main():
x = input('Operatsiani kiriting\n0->kalit generatsiya qilish\n1>shifrlash\n2->deshifrlash\nTanlang: ')
if x == '0':
p = int(input('p ni kiriting:\t'))
g = int(input('g ni kiriting:\t'))
a = int(input('a maxfiy kalitni kiriting:\t'))
y, g, p = key_generate(p, g, a)
print(f'y = {y}, g = {g}, p = {p}')
elif x == '1':
c = list(map(int, input('Ochiq matnni kiriting(butun sonlar
ko`rinishida)\t').split()))
y, g, p = map(int, input('y, g, p larni kiriting:\t').split())
shifrmatn, r = encrypt(c, y, g, p)
print(f'shifrmatn -> {shifrmatn} va r = {r}')
elif x == '2':
c = list(map(int, input('Shifrmatnni kiriting\t').split()))
r, p, a = map(int, input('r, p, a larni kiriting:\t').split())
ochiqmatn = decrypt(c, r, p, a)
print(f'Ochiqmatn -> {ochiqmatn}')
22
else:
print("Noto'g'ri kiritish")
main()
quest = input('Davom ettrimoqchimisz(yes/no)?\t')
if quest == 'yes':
main()
else:
print('Dastur yakunlandi')
if name == 'main':
main()
RSA, El-Gamal va faktorizatsiyalash dasturlari kodlari bir modulda.
from
math
from
import
sqrt,
time
#
gcd
import
sleep
Factorization
#
Check
def
number
is
isPrime(n:
if
n
for
i
if
n
prime
or
int)
<
in
algorithms
2:
range(2,
%
i
->
bool:
return
False
int(sqrt(n))
==
0:
+
return
return
#
Check
def
1):
False
True
number
is
check_sqr(sum:
return
not
integer
int)
sqrt(sum)
->
==
23
or
not
bool:
int(sqrt(sum))
#
My
algorithm
def
my_algorithm(n):
for
i
in
range(2,
if
int(sqrt(n))
not
if
1):
isPrime(i):
n
p,
+
%
q
continue
i
=
==
n
0:
//
i,
i
break
return
p,
#
q
Ferma
algorithm
def
ferma(n):
for
i
in
sum
=
range(2,
n):
+
i*i
n
if
check_sqr(sum):
x,
y
=
int(sqrt(sum)),
i
break
return
x
-
#
y,
x
+
Pollard
def
algorithm
fx(x,
return
r,
(x*x
def
+
%
N
r,
=
return
N):
r)
fy(y,
y
y
N):
fx(y,
(y*y
r,
+
N)
r)
%
N
def
pollard(n):
x,
y
=
2,
2
while
x,
True:
y
print(f'|
=
fx(x,
{x}
|
p
if
print(f'N
1,
{y}
|
=
p
n),
1,
n)
EKUB({y-x},
{n})
|')
gcd(y-x,
n)
1:
continue
==
=
fy(y,
{p}
x
{n//p}')
break
#
print("Assalomu
alaykum!\nN
sonini
24
faktorlash
uchun
qaysi
faktorlash
algoritmidan
foydalanmoqchisiz?\n")
def
main_factor():
print("Ferma
[0]\nPollard
k
[1]\nYangi
algoritm
=
n
=
if
[2]")
input('Tanlang:\t')
int(input('N
ni
kiriting:\t'))
k
==
'0':
p,
q
print(f'N
=
elif
=
ferma(n)
{p}
x
{q}')
k
==
'1':
k
==
'2':
pollard(n)
elif
p,
q
=
print(f'N
=
my_algorithm(n)
{p}
x
{q}')
algoritm
dasturga
kiritilmagan')
else:
print('Kechirasz
boshqa
main_factor()
q
=
input('Dasturni
if
to`xtatmoqchimisz?(yes/no)\t')
q
==
'yes':
print('Dastur
yakunlandi')
main()
else:
main_factor()
#
RSA
#
from
random
#
import
Global
alifbo
o'zgaruvchilar
=
'abcdefghijklmnopqrstuvwxyz'
secret
=
#
No'malum
def
[]
koeffitsientni
topish
m,
r):
find_num(k,
x
while
=
x
*
k
%
m
return
#
randint
0
!=
r:
x
+=
1
x
Shifrlash
25
funksiyasi
def
encrypt_RSA(text,
e,
n):
global
secret
result
=
for
''
char
if
not
in
char.isalpha()
and
text:
char
==
'
':
result
+=
char
secret
+=
char
else:
x
=
alifbo.index(char.lower())
**
e
%
n
secret.append(str(x))
sym
=
alifbo[x
result
%
26]
+=
sym
return
result
#
Rasshirovkalash
def
funksiyasi
decrypt_RSA(d,
n):
global
secret
result
=
for
''
num
if
not
in
num.isdigit()
and
'
secret:
':
result
+=
num
**
d
%
n]
else:
sym
=
alifbo[int(num)
result
+=
sym
return
result
#
def
#
mutual_prime(fx):
prime_nums = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
59,
61,
67,
71,
73,
#
e
#
if
79,
=
#
e
else:
83,
97,
101]
prime_nums[randint(0,
24)]
<
89,
fx:
return
def
return
e
mutual_prime(fx)
main_RSA():
selection = input('Siz xabar yuboruvchimisz (se) yoki qabul qiluvchimisz
(re)?\t')
#
if
Jo'natuvchi
selection
tomon
==
26
'se':
print('Yaxshi,
Siz
text
=
xabar
yuboruvchisiz')
input('Xabarni
kiriting:\t')
e, n = map(int, input('Iltimos e va n ochiq kalitlarni kiriting:
\t').split())
input_text
=
encrypt_RSA(text,
print(f"Shifrlangan
#
qiluvchi
tomon
==
're':
selection
print('Yaxshi,
#
p_a
Siz
=
n)
xabar:\t{input_text}")
Qabul
elif
e,
[3,
qabul
5,
7,
qiluvchi
11,
13,
17,
tomonsiz')
19,
23,
29]
# p_b = [31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
101]
#
p,
p,
q
q
=
=
p_a[randint(0,
map(int,
input('p
n
=
fx
=
-
q
kiriting:\t').split())
ni
*
dan
kichik
q
(q
=
int(input(f"{fx}
15)]
*
1)
e
=
p_b[randint(0,
p
(p
#
e
va
8)],
-
1)
mutual_prime(fx)
va
{fx}
bilan
o'zaro
tub
son
kiriting:\t"))
de
=
find_num(e,
print(f"Maxfiy
print(f"e
=
kalit
{e},
encrypted_text
n
=
=
decrypted_text
{n}.
fx,
d
=
Ochiq
kalitlarni
input(f'Shifrmatnni
=
decrypt_RSA(de,
print(f'Ochiq
1)
{de}")
yuboring")
kiriting:\t')
n)
matn:\t{decrypted_text}')
#
secret
:)
else:
quest
=
if
input('Davom
quest
ettrimoqchimisz(yes/no)?\t')
==
'yes':
main_RSA()
else:
print('Dastur
yakunlandi')
secret.clear()
main()
27
#
El-Gamal
def
encryption
algorithm
key_generate_el(p,
return
g**a
def
g,
%
p,
encrypt_el(c,
k
=
r
a):
g,
p
y,
g,
p):
int(input('k
=
'))
g**k
%
p
=
new_c
=
for
''
i
new_c
+=
in
str(i
*
return
y**k
c:
%
p)
+
'
'
new_c.strip(),
def
decrypt_el(c,
r
r,
new_c
p,
a):
=
for
''
i
new_c
+=
in
str(i
*
r**(p-a-1)
c:
%
p)
+
return
'
'
new_c.strip()
def
main_elgamal():
x
=
input('Operatsiani
kiriting\n0->kalit
generatsiya
qilish\n1-
>shifrlash\n2->deshifrlash\nTanlang:
if
')
x
==
'0':
p
=
int(input('p
ni
kiriting:\t'))
g
=
int(input('g
ni
kiriting:\t'))
kalitni
kiriting:\t'))
a
=
int(input('a
y,
g,
print(f'y
p
=
=
{y},
elif
maxfiy
key_generate_el(p,
g
=
{g},
x
c
=
g,
p
=
==
list(map(int,
a)
{p}')
'1':
input('Ochiq
matnni
kiriting(butun
sonlar
input('y,
p
kiriting:\t').split())
ko`rinishida)\t').split()))
y,
g,
p
=
shifrmatn,
map(int,
r
=
print(f'shifrmatn
->
elif
c
=
r,
p,
a
ochiqmatn
g,
larni
encrypt_el(c,
{shifrmatn}
y,
va
r
g,
=
p)
{r}')
x
==
'2':
list(map(int,
input('Shifrmatnni
kiriting\t').split()))
=
map(int,
=
input('r,
p,
a
decrypt_el(c,
28
larni
kiriting:\t').split())
r,
p,
a)
print(f'Ochiqmatn
->
{ochiqmatn}')
else:
print("Noto'g'ri
kiritish")
main_elgamal()
quest
=
input('Davom
if
ettrimoqchimisz(yes/no)?\t')
quest
==
'yes':
main_elgamal()
else:
print('Dastur
yakunlandi')
main()
print("Assalomu
alaykum
qaysi
amalni
bajarmoqchisiz?")
def
main():
print(f"RSA
algoritmi
muammosini
[1]\nEl-Gamal
hal
algoritmi
etuvchi
q
algoritmlar
=
if
[2]\nFaktorizatsiyalash
[0]")
input('Tanlang:\t')
q
==
'1':
q
==
'2':
q
==
'0':
main_RSA()
elif
main_elgamal()
elif
main_factor()
else:
print("Noto'g'ri
quest
=
kiritish")
if
input('Davom
ettrimoqchimisz(yes/no)?\t')
quest
==
'yes':
main()
else:
print('Dastur
yakunlanmoqda...')
sleep(3)
if
__name__
==
main()
29
'__main__':
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )