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