Uploaded by Firdavs Azamatov

Kriptografiya-2 Loyiha ishi

advertisement
O‘ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA
KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TОSHKЕNT AХBОRОT
TЕХNОLОGIYALARI UNIVЕRSITЕTI
«Kiberxavfsizlik» fakulteti
“Kriptografiya 2” fanidan
LOYIHA ISHI
Bajaruvchilar: Fayzullayev Farxod, Narzullayev Sardor,
Ismatullayev Jamshid, Ismanaliyev Javohir
Ilmiy rahbar: Mardiev U.
TOSHKENT 2023
Topshiriq: Quyida berilgan shifr matni RSA shifrlash algoritmi asosida
rasshifrovkalash.
shifr matn c =
122001231858887188613252475789888442217453455805559371330908830491
0
273991035547326599771339806853708992578501219708124057007937105466
7406215423754484017761674680566866631748114087260565376848486729
213813994907610290739983199882756764523098634545591569286309436479
752649730208273495590375505063815520289059980815455803470776737752
450030275445980792333181058517301097765798206988899694583078909252
693236465845903414545650505746911303613455974565907923646611951500
464818927822777755041502184014014731906147018384021403441791716194
037935127339
21202284703769626553296868459235494147979947394135771
595320448723688871264249487754520100580777635485439035801573349533
110107785113248998366593964318806498644688359523984262144091845620
178716823498841065915321927732942623013649909609807268193949184091
396129053685121767704356574364446986299231024156389146422593561567
624208465861793122561853717368955941960768890514368360300748799642
256043026975030507928281897655728578625302577488315812597816487824
5223052992502106
Modul
qiymati
N
=
161576568432146305407822605195988788423367831773489290174076332113
521363679607546240195027460240509513858989808742833775844501328148
896686607335571077186467172699191870655807123126697642718467380022
525453169592854127254638514649573642026181569381054458981110496782
935446149117820012609966190965416354266154169940483964403517744509
298895261491842431708238017438381902558507620664199347932657618079
354432119435701891621511300974265440859708372450816921618200844969
391722749781316544437220151754178898992546171106782568194794747100
139084377474644269973938692328580102268545122126101079883764692809
227755619814566292469180303288004049276244256149776068993360178140
161708660059348212746565539084136115402589067975751406045610310419
925591716467816197273585893946479096044834598894148149905024867312
865650805528503709002643968384726653628316014207164301543481347346
346973311218232867870670211605403661827750699766653456784676393869
233506995575524443841537793344002949837895535587750274321530576881
4857864433151287
Ochiq kalit: e = 3
Topshiriqni bajarish uchun qilish kerak bo’lgan ketma-ketliklar:
1. Birinchi bo’lib N ni tub ko’paytuvchilarga ajratamiz. Faktorlarga ajratishning
Pollard, Ferma, Leman kabi usullari bor. Biz topshiriqni bajarish davomida
Pollard usulidan foydalanamiz. Pollard usulini quyidagi dastur orqali bajarib
natijani olamiz:
import math
N
=
1615765684321463054078226051959887884233678317734892901740763
3211352136367960754624019502746024050951385898980874283377584
4501328148896686607335571077186467172699191870655807123126697
6427184673800225254531695928541272546385146495736420261815693
8105445898111049678293544614911782001260996619096541635426615
4169940483964403517744509298895261491842431708238017438381902
5585076206641993479326576180793544321194357018916215113009742
6544085970837245081692161820084496939172274978131654443722015
1754178898992546171106782568194794747100139084377474644269973
9386923285801022685451221261010798837646928092277556198145662
9246918030328800404927624425614977606899336017814016170866005
9348212746565539084136115402589067975751406045610310419925591
7164678161972735858939464790960448345988941481499050248673128
6565080552850370900264396838472665362831601420716430154348134
7346973311218232867870670211605403661827750699766653456784676
3938692335069955755244438415377933440029498378955355877502743
215305768814857864433151287
def f(x, n):
return (x ** 2 + 1) % n
def m(a, b):
if a == 0:
return b
return m(b % a, a)
x0 = 2
y0 = 2
d=1
while d == 1:
x0 = f(x0, N)
y0 = f(f(y0, N), N)
d = m(abs(x0 - y0), N)
if d == N:
print("Ko'paytuvchilarga ajramadi")
else:
print("p =", d)
print("q =", N // d)
p=3
q=
538588561440487684692742017319962628077892772578297633913587773711
737878932025154133983424867468365046196632695809445919481671093829
655622024451903590621557242330639568852690410422325475728224600075
084843898642847090848795048831912140087271897936848196603701655943
118153830392733375366553969884721180887180566468279881345059148364
329650871639474772360793391461273008528358735547331159775525393597
848107064785672972071704336580884802865694574836056405394002816564
639075832604388481457400505847262996641820570355941893982649157000
463614591582147566579795641095267007561817073753670266279215642697
425852066048554308230601010960013497587480853832586896644533927133
872362200197827375821885130280453718008630226585838020152034368066
418639054892720657578619646488263653482781996313827166350082891042
885502685095012363342146561282422178761053380690547671811604491156
5777040607762262355673720180122060925023325555115226155879795641116
899852517481461384593111466764994596517852925009144051019229382859
54811050429
2. Keyin esa f(n)=(p-1)*(q-1) ni hisoblaymiz:
f(n)=107717712288097536938548403463992525615578554515659526782
7175547423475757864050308267966849734936730092393265391618891
8389633421876593112440489038071812431144846612791377053808208
4465095145644920015016968779728569418169759009766382428017454
3795873696393207403311886236307660785466750733107939769442361
7743611329365597626901182967286593017432789495447215867829225
4601705671747109466231955105078719569621412957134594414340867
3161769605731389149672112810788005633129278151665208776962914
8010116945259932836411407118837879652983140009272291831642951
3315959128219053401512363414750734053255843128539485170413209
7108616461202021920026995174961707665173793289067854267744724
4003956547516437702605609074360172604531716760403040687361328
3727810978544131515723929297652730696556399262765433270016578
2085771005370190024726684293122564844357522106761381095343623
2089823131554081215524524711347440360244121850046651110230452
3117595912822337997050349629227691862229335299891930357058500
1828810203845876571909622100856
3. Endi esa biz yopiq kalit ni e*d=1modf(n) formula orqali hisoblab topib
olamiz. Ya’ni ochiq kalitni o’sha d ga ko’paytirib N ga qoldiqli bo’lsak, 1
chiqishi kerak.
import math
f=
1077177122880975369385484034639925256155785545156595267827175
5474234757578640503082679668497349367300923932653916188918389
6334218765931124404890380718124311448466127913770538082084465
0951456449200150169687797285694181697590097663824280174543795
8736963932074033118862363076607854667507331079397694423617743
6113293655976269011829672865930174327894954472158678292254601
7056717471094662319551050787195696214129571345944143408673161
7696057313891496721128107880056331292781516652087769629148010
1169452599328364114071188378796529831400092722918316429513315
9591282190534015123634147507340532558431285394851704132097108
6164612020219200269951749617076651737932890678542677447244003
9565475164377026056090743601726045317167604030406873613283727
8109785441315157239292976527306965563992627654332700165782085
7710053701900247266842931225648443575221067613810953436232089
8231315540812155245247113474403602441218500466511102304523117
5959128223379970503496292276918622293352998919303570585001828
810203845876571909622100856
e=3
d = pow(e, -1, f)
print("d =", d)
d
=
7181180819206502462569893564266168374371903634377301785514503649
4898383857603353884531123315662448672826217692774592789264222812
5106207496032602538120828742989774186091803587213896433967637632
8001001131251981904627877983933984425495201163625305824642621382
6887459082420510719031116715540529317962824118290742195770650846
0078864485772867828852633029814391188615030678037811647396441546
3673671914637974760863808972960956057821078464038209260997814085
4052533708875285210111013918464194320067446301732885576076047458
9191976865542667284819455442863422106394188127022676749089431671
5603550389541902632344694213980724109741346812800179967833078051
1011586219271190284516314960026376983442918017370727162401150696
8781117360202712490755224852073190294210104826195317684871310375
9950851028884667771880571806702467933498177895287483765629050147
3784092073022908213932154210360541436830164742316269068294145666
9776740682030154117306085482253313668997528184612414862235332612
869047056667885873469230584381273081400571
4. So’nggi qadamda esa ochiq matnni topamiz:
M=CdmodN formula orqali:
c
=
1220012318588871886132524757898884422174534558055593713309088
304910
2739910355473265997713398068537089925785012197081240570079371
05466
7406215423754484017761674680566866631748114087260565376848486
729
2138139949076102907399831998827567645230986345455915692863094
36479
7526497302082734955903755050638155202890599808154558034707767
37752
4500302754459807923331810585173010977657982069888996945830789
09252
6932364658459034145456505057469113036134559745659079236466119
51500
4648189278227777550415021840140147319061470183840214034417917
16194037935127339
21202284703769626553296868459235494147979947394135771
5953204487236888712642494877545201005807776354854390358015733
49533
1101077851132489983665939643188064986446883595239842621440918
45620
1787168234988410659153219277329426230136499096098072681939491
84091
3961290536851217677043565743644469862992310241563891464225935
61567
6242084658617931225618537173689559419607688905143683603007487
99642
2560430269750305079282818976557285786253025774883158125978164
87824
5223052992502106
d
=
7181180819206502462569893564266168374371903634377301785514503
6494898383857603353884531123315662448672826217692774592789264
2228125106207496032602538120828742989774186091803587213896433
9676376328001001131251981904627877983933984425495201163625305
8246426213826887459082420510719031116715540529317962824118290
7421957706508460078864485772867828852633029814391188615030678
0378116473964415463673671914637974760863808972960956057821078
4640382092609978140854052533708875285210111013918464194320067
4463017328855760760474589191976865542667284819455442863422106
3941881270226767490894316715603550389541902632344694213980724
1097413468128001799678330780511011586219271190284516314960026
3769834429180173707271624011506968781117360202712490755224852
0731902942101048261953176848713103759950851028884667771880571
8067024679334981778952874837656290501473784092073022908213932
1542103605414368301647423162690682941456669776740682030154117
3060854822533136689975281846124148622353326128690470566678858
73469230584381273081400571
N
=
1615765684321463054078226051959887884233678317734892901740763
32113
5213636796075462401950274602405095138589898087428337758445013
28148
8966866073355710771864671726991918706558071231266976427184673
80022
5254531695928541272546385146495736420261815693810544589811104
96782
9354461491178200126099661909654163542661541699404839644035177
44509
2988952614918424317082380174383819025585076206641993479326576
18079
3544321194357018916215113009742654408597083724508169216182008
44969
3917227497813165444372201517541788989925461711067825681947947
47100
1390843774746442699739386923285801022685451221261010798837646
92809
2277556198145662924691803032880040492762442561497760689933601
78140
1617086600593482127465655390841361154025890679757514060456103
10419
9255917164678161972735858939464790960448345988941481499050248
67312
8656508055285037090026439683847266536283160142071643015434813
47346
3469733112182328678706702116054036618277506997666534567846763
93869
2335069955755244438415377933440029498378955355877502743215305
76881
4857864433151287
result = pow(c, d, N)
print("Ochiq matn: ",result)
Ilova
N
=
16157656843214630540782260519598878842336783177348929017407633211352136367960754624019
50274602405095138589898087428337758445013281488966866073355710771864671726991918706558
07123126697642718467380022525453169592854127254638514649573642026181569381054458981110
49678293544614911782001260996619096541635426615416994048396440351774450929889526149184
24317082380174383819025585076206641993479326576180793544321194357018916215113009742654
40859708372450816921618200844969391722749781316544437220151754178898992546171106782568
19479474710013908437747464426997393869232858010226854512212610107988376469280922775561
98145662924691803032880040492762442561497760689933601781401617086600593482127465655390
84136115402589067975751406045610310419925591716467816197273585893946479096044834598894
14814990502486731286565080552850370900264396838472665362831601420716430154348134734697
33112182328678706702116054036618277506997666534567846763938692335069955755244438415377
933440029498378955355877502743215305768814857864433151287
c = 1220012318588871886132524757898884422174534558055593713309088304910
273991035547326599771339806853708992578501219708124057007937105466
7406215423754484017761674680566866631748114087260565376848486729
213813994907610290739983199882756764523098634545591569286309436479
752649730208273495590375505063815520289059980815455803470776737752
450030275445980792333181058517301097765798206988899694583078909252
693236465845903414545650505746911303613455974565907923646611951500
464818927822777755041502184014014731906147018384021403441791716194037935127339
21202284703769626553296868459235494147979947394135771
595320448723688871264249487754520100580777635485439035801573349533
110107785113248998366593964318806498644688359523984262144091845620
178716823498841065915321927732942623013649909609807268193949184091
396129053685121767704356574364446986299231024156389146422593561567
624208465861793122561853717368955941960768890514368360300748799642
256043026975030507928281897655728578625302577488315812597816487824
5223052992502106
def f(x, n):
return (x ** 2 + 1) % n
def m(a, b):
if a == 0:
return b
return m(b % a, a)
x0 = 2
y0 = 2
d=1
while d == 1:
x0 = f(x0, N)
y0 = f(f(y0, N), N)
d = m(abs(x0 - y0), N)
if d == N:
print("Ko'paytuvchilarga ajramadi")
else:
print("p =", d)
print("q =", N // d)
phi = (d - 1) * (N // d - 1)
e=3
d = pow(e, -1, phi)
print("d =", d)
if pow(e * d, 1, phi) != 1:
print("Bunday son mavjud emas")
else:
result = pow(c, d, N)
print("Ochiq matn: ",result)
p=3
q=
538588561440487684692742017319962628077892772578297633913587773711737878932025154133983424867
468365046196632695809445919481671093829655622024451903590621557242330639568852690410422325475
728224600075084843898642847090848795048831912140087271897936848196603701655943118153830392733
375366553969884721180887180566468279881345059148364329650871639474772360793391461273008528358
735547331159775525393597848107064785672972071704336580884802865694574836056405394002816564639
075832604388481457400505847262996641820570355941893982649157000463614591582147566579795641095
267007561817073753670266279215642697425852066048554308230601010960013497587480853832586896644
533927133872362200197827375821885130280453718008630226585838020152034368066418639054892720657
578619646488263653482781996313827166350082891042885502685095012363342146561282422178761053380
690547671811604491156577704060776226235567372018012206092502332555511522615587979564111689985
251748146138459311146676499459651785292500914405101922938285954811050429
d=
718118081920650246256989356426616837437190363437730178551450364948983838576033538845311233156
624486728262176927745927892642228125106207496032602538120828742989774186091803587213896433967
637632800100113125198190462787798393398442549520116362530582464262138268874590824205107190311
167155405293179628241182907421957706508460078864485772867828852633029814391188615030678037811
647396441546367367191463797476086380897296095605782107846403820926099781408540525337088752852
101110139184641943200674463017328855760760474589191976865542667284819455442863422106394188127
022676749089431671560355038954190263234469421398072410974134681280017996783307805110115862192
711902845163149600263769834429180173707271624011506968781117360202712490755224852073190294210
104826195317684871310375995085102888466777188057180670246793349817789528748376562905014737840
920730229082139321542103605414368301647423162690682941456669776740682030154117306085482253313
668997528184612414862235332612869047056667885873469230584381273081400571
Ochiq matn:
477061563963241720676695390879442307264031540841185890034184487353081692955404343355839497218
713852322628704047506929150363948903153591873410995885875834813709833210722516127544321645891
073098773601727575787743615580963596320512207646520156699855255180935165602959968841237554808
753759368789273001392369813067451358834639125255188060794651536410986592279115548948906653415
190023937596322906517632053845138508286949319975285193065732981832309968344576495070183936117
921882788993616178779249888315239525495279343480562954890529869055364246899489739862892667951
753526846242495290844952676331851560336773254088766042215839880706186027597043490341801394801
160018387755102927955276457690361405573569800147645047894395860649881927186675324276616412082
342598254096227841557712010710223764896126437111020416450832056989167744196918880741677520037
698803192514726568313226650076450818396784782946667513248272670611055748171251585307157298282
230065722071352733468806641203576775073790911221626610796491920121671523
Download