Жоспар №9770

RSA алгоритмі және ашық кілтті криптожүйелердің математикалық негіздері мен қауіпсіздігі

Сұрақ-жауап

Сұрағыңызға жасанды интеллект жауап береді

 МАЗМҰНЫ КІРІСПЕ 2 КІРІСПЕ 2 2 Математикалық негіздемелер 8 2.1 Күрделілік теориясы 8 2.2 Сандар теориясы 12 2.3 Жай сандар генерациясы 17 3 Криптожүйелердің жұмыс істеу принциптері 19 3.1 Криптографиялық кілттерді басқару 20 3.3 Асимметриялық (ашық) әдістемелер мен алгоритмдер 24 4 АШЫҚ КІЛТТІ ҚОЛДАНАТЫН АЛГОРИТМДЕР 28 4.1 Ашық кілтті қолданатын алгоритмдердің қауіпсіздігі 28 4.2 Қол қапшық алгоритмі 29 4.3 RSA алгоритмі 32 4.4 RSA шифрлеу жүйесі 34 4.5 RSA алгоритмінің жұмыс істеу жылдамдығы 38 4.6 RSA қауіпсіздігі 39 4.7 RSA бағдарламалық жабдықтаманың сипаттамасы 47 ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ 78 КІРІСПЕ Евклид пен Диофант, Ферма, Эйлер, Гаусс, Чебышев пен Эрмит Ал, саны шифрленген түрдегі 1978-жылы американдық Р. Ривест, А. Шамир және Л. Адлеман функциясының мәндерін есептейтін әлдеқайда жылдам әдіс бар; кері функциясының мәндерін есетейтін жылдам әдіс бар; функциясының «құпиясы» бар, егер оны анықтасақ, RSA осы жылдар ішінде ұсынылған ашық кілтті қолданатын алгоритмдер Бұл дипломдық жұмыс криптографияның ашық кілтті қолданатын алгоритмдердің бірі Осыған орай дипломдық жұмыстың мақсаты – RSA алгоритмін Жұмыстың мақсаты дипломдық жұмыс барысында шешілген келесі міндеттерді анықтады: Сандар теориясын, оның бөлімдерінің бірі жан сандарды зерттеу. Өте Екілік жүйедегі сандармен жұмыс жасау Ашық және жабық кілттердің құрылымын зерттеу Бір компьютерден екінші бір компьютерге ақпаратты шифрлеп жібергенде, барлық Дипломдық жұмыс кіріспеден, төрт бөлімнен, қорытындыдан, әдебиеттер тізімінен және Қорытынды бөлімінде дипломдық жұмыс тақырыбы бойынша жалпылама қорытындылар жасалған. КРИПТОГРАФИЯ НЕГІЗДЕМЕСІ 1 Криптографияның негізгі түсініктемелері мен тарихы Ақпаратты оны түрлендіру арқылы басқа адам оқи алмайтындай қорғау Криптография тарихын шартты түрде 4 қадамға бөлуге болады: жай криптография ресми криптография ғылыми криптография компьютерлік криптография Жай криптография үшін (XVI ғасыр басына дейінгі кезең) қарсыласты Көптеген қолданылатын шифрлар орын ауыстырулар немесе моноалфавиттік ауыстыру арқылы Ресми криптография қадамы (XVғ.аяғы-XX ғ. басы) криптоанализдің ресми және Көп әліппелі ауыстырудың қарапайым әрі тұрақты әдісі болып XIX Сондай жүйелердің бірі болып 1790-жылы болашақ президент Томас Джефферсонмен Роторлық машиналар практикалық жағынан сұранысқа XX ғасыр басында ие Ғылыми криптографияның айрықша белгісі (XX ғасырдың 30-60-жылдары) – жоғары 60-жылдарда көшбасшы криптографиялық мектептер блоктық сандар жасауға көшті, олар Компьютерлік криптография (XX ғасырдың 70-жылдары) өнімділігі криптожүйелерді таратуға жеткілікті, Криптожүйелердің алғашқы класы болып қолдану кезінде қуатты әрі жинақты DES-тің пайда болуымен криптоанализ байыды, американдық алгоритмдерге шабуыл үшін 70-жылдардың ортасында қазіргі заманғы криптографияда төңкеріс болды – асимметриялық 80-90-жылдары фейстелдік емес шифрлар жасалды (SAFER, RC6), ал 2000-жылы Криптография ақпаратты түрлендіруде математикалық әдістерді іздеу және зерттеумен Қазіргі криптография өзіне 4 үлкен бөлімді қосады: Симметриялық криптожүйелер. Ашық кілтті криптожүйелер. Электрондық қолтаңба жүйелері. Кілттерді басқару. Криптографиялық әдістерді қолданудың негізгі мақсаты – байланыс каналдары Криптографиялық жүйелер қаншалықты қиын және сенімді болғанымен олардың Бастапқы мәтін хабар алушының ашық кілтімен шифрленіп, оған жіберіледі. Біржақты функциялардың көптеген кластары ашық кілтті жүйенің көптүрлілігін тудырады. Бастапқы мәтіннің түрленуі қайтымсыз болу керек және ашық кілт Ашық кілт негізінде жабық кілтті анықтау жаңа технологиялық тұрғыдан Ашық кілтті шифрлеу алгоритмдері кең қолданысқа ие болды. RSA Үлкен сандарды көбейткіштерге жіктеу; Соңғы өрісте логарифмді есептеу; Алгебралық теңдеулердің түбірлерін анықтау. Ашық кілтті криптожүйелерді 3 түрлі мақсатта қолдануға болады: Жіберілген және сақтаудағы мәліметтерді өзіндік қорғау құралы ретінде. Кілттерді үлестіру құралы ретінде. Ашық кілтті жүйелер алгоритмдері дәстүрлі Тұтынушыларды аутентификациялау құралы ретінде. 2 Математикалық негіздемелер 2.1 Күрделілік теориясы Күрделілік теориясы криптографиялық әдістер мен алгоритмдердің әр түрлі есептеу Алгоритмнің күрделілігі Алгоритмнің күрделілігі оның орындалуға керекті есептеулік қуаттарымен есептеледі. Есептемелік Негізінде, есептемелік алгоритмнің күрделілігін О() функциясы арқылы жазады. Бұл Алгоритмдерді олардың уақыттық немесе кеңістіктік күрделілігіне байланысты жіктейді. Егер Күрделілігі О(tf(n)) есептелетін алгоритмдерді экспоненциалдық алгоритмдер деп атайды, мұндағы 3-кесте. n=106 шамасындағы әр түрлі алгоритмдердің уақыт күрделілігіне тәуелділігі Түрі Күрделілігі n=106 үшін операциялар саны Қажет болатын уақыт Тұрақты О(1) 1 1 мкс Сызықтық О(n) 106 1 с Квадраттық О(n2) 1012 11.6 күн Кубтық О(n3) 1018 32000 жыл Экспоненциалдық О(2n) 10301030 Біздің ғаламымыздың өмір сүру уақытынан 10301006 Компьютер үшін уақыттың өлшем бірлігі микросекунд болғандықтан, компьютер тұрақты Шифрленген алгоритмдерді күшпен ашу проблемасын қарастыратып көрейік. Мұндай ашудың Проблеманың күрделілігі Күрделілік теориясы белгілі бір алгоритмді шешудің проблемасын ғана қарастырмайды, Полиноминалды уақыттық алгоритмдер арқылы шешілетін проблемаларды шешілетін проблемалар деп Барлық проблемаларды олардың шешілуіне байланысты сәйкесінше кластарға бөлуге болады. Шешілетін проблемалар класы 3-сурет Ең төменде орналасқан Р класы полиномиальды уақытта шешуге болатын NP-ның криптографиядағы маңызы: көптеген симметриялық алгоритмдер және ашық кілті NP-класына Р класы кіреді, себебі полиномиальды уақытта орындалатын Тьюрингтің Егер барлық NP мәселелер Тьюрингтің детерминацияланған машинасында полиномиальды Ең қызығы нақты NP-мәселелер осы класстың басқа мәселелері секілді Куктың негізқалаушылық жұмысы басылғаннан соң, Орындалушылық мәселесіне эквивалентті мәселелер Келесі болып күрделілік иерархиясында PSPACE класы жүреді. PSPACE класының EXPTIME мәселелер қатары бар. Бұл мәселелер экспоненциалды уақытта 2.2 Сандар теориясы Айыру арифметикасы Айыру арифметикасын барлығымызға мектеп кезінен мәлім. Оны кейде «арифметикалық (10+13) mod 12 = 23 mod 12 = 11 Бұны басқаша 23 пен 11 эквиваленттігі бойынша 12 модулімен 10+13 =11(mod 12) Көбінесе, егер а = b+кn кейбір бүтін к үшін 0-ден n-1-ге дейінгі сандар жиыны n модулі бойынша есептен а mod n операциясы 0 мен n-1 аралығында орналасқан Бұл mod анықтамасы бағдарламалау тілінде көрсетілген анықтамалардан ерекшеленуі мүмкін. Қалдықтар арифметикасы жай арифметикаға өте ұқсас:ол коммутативті және дистрибутивті. (а+b) mod n=((а mod n)+(b mod n)) ) mod (а-b) mod n=((а mod n)-(b mod n)) ) mod (а*b) mod n=(( а mod n)*(b mod n)) ) (а*(b+с)) mod n=(((а*b) mod n)+((а*с) mod n)) mod n mod n есептеу әдетте криптографияда көп қолданылады, себебі дискретті ах mod n. Сондай тәсілдің бірі модуль бойынша көбейтулер санын азайтуға Мысалы, егер сіз а8 mod n есептегіңіз келсе, оны (а*а*а*а*а*а*а) mod n Оның орнына 3 кіші көбейтулер мен 3 кіші модульге ((а2 mod n)2 mod n2) mod n Дәл осылай, a16 mod n =(((а2 mod n)2 mod n)2 mod aх есептеу, мұнда х 2-нің дәрежесі болмайды, аса қиын a25 mod n=(а*а24) mod n=(а*а8*а16) ) mod n=(а*((а2)2)2)(((а2)2)2)2) mod Аралық нәтижелерді ойластырылған сақтаумен енді тек 6 есептеу (((((((а2mod n)*а) 2mod n) 2 mod n) 2 mod Мұндай әдіс қосу тізбегі немесе екілік квадрат пен көбейту Модуль бойынша кері мәндер Кері мән дегеніміз не екендігі естеріңізде ме? 4-1/4 үшін Бұл теңдеу х пен к анықталуына эквивалентті, 4х=7 к+1 Мұнда, х пен к –бүтін сандар. Жалпы есеп мақсаты 1=(а*х) mod n Бұны былай да жазуға болады: а-1=х(mod n) Модуль бойынша кері мәндерді есептеу оңай емес. Кейде оның Жалпы жағдайда, (7) теңдеуінде а мен n сыбайлас жай Эйлер функциясы Кері мәнді есептеудің басқа да әдісі бар, алайда оны Эйлер функциясын φ(n) түрінде жазады, - бұл n модулі Егер n-жай сан болса, онда φ(n) = n-1 Егер мынадай теңдеу белгілі болса, n =рq мұндағы р мен q-жай сандар болса, онда φ(n) =(р-1)(q-1) болады. Бұл сандар кейбір алгоритмдерде ашық кілтпен келеді. Бұның а φ(n) mod n=1 Енді а-1 mod n есептеу қиын емес: х=а φ(n)-1 mod n Мысалы, қандай сан 7 модулі бойынша 5 санына Осылайша 5 санына 7 модулі бойынша кері мән мынаған 56-1 mod 7=55 mod 7=3. Бұл кері мәндерді есептеу тәсілін х мәнін (а*х) mod n= b Эйлер жалпыламасын қолдана отырып, мынаны шешеміз: х= (b* а φ(n)-1) mod n Эвклид алгоритмін қолдана отырып, мынаны табамыз: х= (b* (а-1 mod n)) mod n Жалпы жағдайда кері мәндер алгоритмін есептегенде Эвклид алгоритмі Эйлердің Лежандр символы Лежандр символы L(а,р) егер а – кез келген бүтін L (а, р) =0, егер а р-ға бөлінсе. L (а, р) =1, егер а –р модулі бойынша L (а, р) =-1, егер а –р модулі бойынша L (а, р) = а(р-1)/2 mod р. Немесе келесі алгоритмді қолдануға болады: Егер а=1 болса, онда L(а,р) =1 Егер а жұп болса, онда L(а,р) = L(а/2,р)*(-1)(у2-1)/8 Егер а жұп болмаса, онда L(а,р) = L(р mod Көбейтінділерге жіктеу Көбейтінділерге жіктеу дегеніміз – оның жай көбейтінділерін табу деген 10=2*5 60=2*2*3*5 252601=41*61*101 2113-1=3391*23279*1868569*65993*1066818132868207 Көбейтінділерге жіктеу сандар теориясының ең көне мәселесі болып табылады. Сандардың сандық өрісінің торы – бұл 110 және одан Квадраттық тор – бұл 110 ондық бөліктен кіші сандарды Эллипстік қисық әдісі – 43 бөлікті көбейтінділерді жіктеуде қолданылды. Монте-Карло Поллард әдісі; Үзіліссіз бөлшектер алгоритмі – бұл алгоритм Екілік санау жүйесі Екілік санау жүйесі математиктер мен философтармен компьютерлер шықпас бұрын Екілік санау жүйесі — негізі 2 болатын санау жүйесі. Жүйеде мәндер қаншалықты аз болса, соншалықты жеке элементтер дайындау Элементтің күй элементі аз болған сайын, оның кедергіге шыдамдылығы Қосу мен көбейтуді жасау кестесінің қарапайымдылығы-сандарға қолданылатын қарапайым амал. 2.3 Жай сандар генерациясы Жай сан деп – бірден үлкен және тек бірге, Ашық кілті бар алгоритмдер үшін жай сандар қажет. Олардың Егер әрқайсысына өзінің жай саны керек болса, қор таусылмайды Егер екі адам бірдей жай санды кездейсоқ таңдаса? Ондай Бөліндімен тексеру Бұл көбейтінділерге жіктеудің ең көне тәсілінің әдісі әр жай Көбейтінділерге жіктеудің келесі әдісімен кездейсоқ сандар генерациясы- бұл жай 250 санынан 1 тексеру –қате деп жорамалдайық. Бұл дегеніміз, Lehmann Басқа, одан қарапайым тест Леманнмен тәуелсіз анықталды. Бұл р р –дан кіші кез-келген а санын таңдаңыз. а(р-1)/2 mod р есептеңіз. Егер а(р-1)/2≠1 немесе -1(mod р) болса, онда р жай Егер а(р-1)/2≡1 немесе -1(mod р) болса, онда р Осы тексерісті t рет орындаңыз. Егер есептеу нәтижесінің ықтималдығы 3 Криптожүйелердің жұмыс істеу принциптері Оқиғаны сипаттаудың қалыпты мысалы, криптография есебі туындайтын 1-суретте көрсетілген: Негізгі принцип 1-сурет А мен В 1-суретте – қорғалынған ақпараттың заңды тұтынушылары, Тарихи тұрғыдан қарастырғанда, криптографияда кейбір әскери сөздер бекінді (қарсылас, Криптография қарсылас жіберіліп жатқан ақпаратты қарсылас қағып алмау үшін Жақсы шифр ойлап табу оңай шаруа емес. Сондықтан жақсы 3.1 Криптографиялық кілттерді басқару Криптографияда кілт ұғымы астарында шифрдің ауыстырылатын элементі жатыр, ол Криптографияның негізгі обьектісінің сипаттамасына қайта оралайық. Енді оған сәйкес Кілттерді қолдану мысалы 2-сурет Мұндай байланыс каналын жасау өте оңай және оның ақпарат Кез келген қазіргі заманғы криптографиялық жүйе криптографиялық кілттерді пайдалануға 3.2 Симметриялық (құпиялы) әдістемелер мен алгоритмдер Бұл әдістемеде шифрлеу үшін де, оның шифрын бұзғанда да Симметриялық шифрлеудің алгоритмдері ондай қатты ұзақ емес кілтті Симметриялық құпия кілт қауіпсіз жасалынады, шығарылады, таратылады және сақталынады. Хабар жіберуші мәтін үшін хэш-функциясын есептеу арқылы электрондық қолтаңба Хабар жіберуші шифрлеудің жылдам симметриялық алгоритмдерін қолданады- шифрленген мәтінді Хабар жіберуші ғана шифрленген мәтінді біледі. Симметриялық құпия кілт Хабар алушы дәл сол симметриялық құпия кілт алгоритмін пайдаланады. Хабар алушы электрондық қолтаңбаны мәтіннен бөледі. Хабар алушы басқа электрондық қолтаңбаны алынған мәтін үшін хэш-функциясын Хабар алушы осы екі электрондық қолтаңбаны салыстырады, салыстыру үшін Қазіргі таңда симметриялық әдістемеде қолданылатын құралдар: Kerberos, тордағы ресурстарға қол жеткізу аутентификациясы үшін жасалды. Ол Банкомат жүйелері (ATM Banking Networks). Бұл жүйелер банк иелік 1-кесте. Симметриялық алгоритмдер сипаттамасы Типі Сипаттамасы DES (Data Encryption Standard) Шифрлеу алгоритмдерінің АҚШ-тың үкіметімен белгіленген белгілі стандарты 64 • Электрондық кодтық кітап (ECB-Electronic Code Book ) - • Тізбекті режим (CBC-Cipher Block Chaining), блокты шифрлеу • Шығу бойынша кері байланыс (OFB-Output Feedback), кездейсоқ сандар • Шифратор бойынша кері байланыс (CFB-Cipher Feedback),хабарламалардың аутентификация 3-DES немесе үштік DES 64-биттік блоктық шифратор, DES-ті 3 Каскадтық 3-DES Стандартты үштік DES, оған кері байланыс механизмі Барлық шабуылдарға төзімді. FEAL (Шифрлеудің жылдам алгоритмдері) Блоктық шифратор, DES альтернативасы Бұзылған, алайда жаңа нұсқалары ұсынылып жатыр. IDEA (халықаралық Шифрлеу алгоритмдері) 64-биттік блоктық шифратор, 128-тік кілт, 8 өтілім Жақында ұсынылды; DES-тен күшті деп санауға болатындай толық тексерісті Skipjack АНБ-мен АҚШ үкіметінің жобалары барысында "Clipper" и "Capstone" Осы уақытқа дейін құпиялы болды. 64-биттік блоктық шифратор, 80-биттік RC2 64-биттік блоктық шифратор, айнымалы өлшем кілті. DES-ке қарағанда 1-кестенің жалғасы. Типі Сипаттамасы RC4 Ағынды шифр, байт-ориентирлік, айнымалы өлшемді кілті болады.DES-ке қарағанда RSA Data Security иелік ететін конфиденциалды алгоритм RC5 32, 64 или 128 битті блок өлшемді, 0-ден CAST 64-битті блоктық шифратор, 40 - 64 битті кілттері, Тікелей таңдаудан басқа бұзу әдістері белгісіз. Blowfish 64-битті блоктық шифратор, 448 битті кілттері, 16 өтілімі Бір қолданысқа жарайтын кілттері бар құрылғылар Бұзуға болмайтын шифратор.Кілті келесі осы құрылғыда сақталынатын массивтен таңдалынған 'n' битті болады. Ағынды шифрлар Симметриялық шифрлеудің жылдам алгоритмдері, әдетте оперирленетін битті 3.3 Асимметриялық (ашық) әдістемелер мен алгоритмдер Бұл әдістемеде кілттер бір уақытта жасалынғанмен, олардың шифрлары мен Барлық асимметриялық криптожүйелер кілттердің тікелей таңдаудың обьектісінің шабуылының нәтижесі Асимметриялық шифрлеу алгоритмінде төмен жылдамдықтан құтылу үшін әр хабарлама Асимметриялық криптожүйелерде сеанстық кілт пен асимметриялық кілттер қауіпсіздік деңгейі Асимметриялық кілттерді пайдалану реті: Асимметриялық ашық және құпия кілттер қауіпсіз жасалынады. Құпия асимметриялық Хабар жіберуші мәтін үшін хэш-функциясын есептеу арқылы электрондық қолтаңба Хабар жіберуші шифрлеудің жылдам симметриялық алгоритмдерін қолданады- шифрленген мәтінді Енді сеанстық кілтті тарату мәселесін шешу керек. Хабар жіберуші сертификат беруші орталықтың ашық асимметриялық кілтін алу Хабар жіберуші запрашивает сертификат орталығынан асимметриялық ашық кілтті хабар Хабар алынған соң асимметриялық ашық кілт асимметриялық кілттер Енді асимметриялық алгоритмді қолдану арқылы сеанстық кілтті және хабар Ашифрленген сеанстық кілт шифрленген мәтінге қосылады. Барлық алынған мәліметтер пакеті хабар алушыға жіберіледі. Шифрленген сеанстық Хабар алушы шифрленген сеанстық кілтті алынған пакетті бөліп алады. Енді хабар алушыға сеанстық кілттің шифрын анықтау керек. Хабар алушыда сертификат беру орталығының асимметриялық болу керек. Өзінің асимметриялық құпия кілтін қолдана отырып, хабар алушы сеанстық Хабар алушы дәл сол шифрлеу-шифрды бұзудың симметриялық алгоритмін Хабар алушы электронды қолтаңбаны бастапқы мәтіннен бөледі. Хабар алушы сертификат беру орталығынан хабар жіберушінің асимметриялық ашық Бұл кілт алынған соң, хабар алушы оның шифрын бұзады. Содан кейін мәтіннің хэш-функциясының шифры хабар жіберушінің ашық кілтімен Алынған бастапқы мәтіннің хэш-функциясы қайта тексеріледі. Осы екі хэш-функциялар бастапқы мәтін өзгеріске ұшырамас үшін тексеріледі. Асимметриялық алгоритмдер асимметриялық криптожүйелерде симметриялық сеанстық кілттерді шифрлеу үшін Екі әртүрлі кілт қолданылады – біріншісі барлығына белгілі, екіншісі 2-кесте. Асимметриялық алгоритмдер сипаттамасы Тип Сипаттамасы RSA Асимметриялық шифрлеудің кең қолданылатын алгоритмі, тұрақтылығы үлкен сандар ECC(эллипстік қисықтарға негізделген криптограмма) Алгебралық жүйені қолданады, эллипстік Эль-Гамаль. Диффи-Хеллман нұсқасы, электрондық қолтаңбаны шифрлеу үшін де қолданылады. 4 АШЫҚ КІЛТТІ ҚОЛДАНАТЫН АЛГОРИТМДЕР Ашық кілтті қолданатын криптография тұжырымын Уитфилд Диффи және Мартин 1976-жылдан кейін көптеген ашық кілтті қолданатын криптографиялық алгоритмдер ұсынылған. Әрі өнімді, әрі қауіпсіз болып келетін алгоритмдер көп емес. Будан криптожүйелер оқиғаларды жылдамдатуға мүмкіндік береді: хабарламаны шифрлеуде кездейсоқ 4.1 Ашық кілтті қолданатын алгоритмдердің қауіпсіздігі Криптоаналитиканың ашық кілтке қолданатын кірісінің болуы, оның шифрлеуге кез-келген Егер ашық кілтті қолданатын алгоритм сеансты кілтті шифрлеу үшін 4.2 Қол қапшық алгоритмі Ашық кілтті қолданатын шифрлеуді тарату үшін ең алғашқы алгоритм Қол қапшық мәселесі қиын емес. Әр түрлі салмақта көп (17) bi ноль немесе бір ғана бола алады. Бір Маркл–Хеллмен қол қапшық алгоритмінің негізінде хатты шифрлеу идеясы жатыр. Ашық мәтін 1 1 1 0 0 1 Қол қапшық 156 11 14 20 Шифромәтін 1+5+6+20=32 5+11+14=30 Негізінде қол қапшықтың екі түрлі мәселесі бар: бірін сызықтық Күрт өсетін қол қапшықтар Қол қапшықтың оңай мәселесі деген не? Салмақ тізімі күрт Күрт өсетін қол қапшықтың шешімін табу оңай. Толық салмақты Мысалға, қол қапшықтың толық салмағы – 70, салмақ қатары Күрт өспейтін немесе қалыпты қол қапшықтар қиын мәселені көрсетеді, Жабық кілтті қолдану арқылы ашық кілтті құру Алгоритм жұмысын сандар теориясына тереңдемей қарастырайық: қол қапшықтың 2*31 mod 105=62 3*31 mod 105=93 6*31 mod 105=81 13*31 mod 105=88 27*31 mod 105=102 52*31 mod 105=37 Қорытынды – {62,93,81,88,102,37} Қол қапшықтың күрделі өсу тізбегі жабық кілт болып табылады, Шифрлеу Хатты шифрлеу үшін ең алдымен элемент сандары Мысалға, егер хат бинарлы түрде 011000110101101110 болса, шифрлеудің алдыңғы Хат =011000110101101110 011000 сәйкес 93+81=174 110101 сәйкес 62+93+88+37=280 101110 сәйкес 62+81+88+102=333 Шифромәтінде 174, 280, 333 реті болады. Дешифрлеу Берілген хаттың заңды алушысы жабық кілтті біледі: түпкі күрделі сәйкес 011000 сәйкес 110101 сәйкес 101110 Шифрленген ашық мәтін 011000, 110101, 101110 болып табылады. Практикалық іске асыру Қатар күрт өсетін болмаған жағдайда да, алты элементтен тұратын Бұндай қол қапшықты күшрен ашу пайдасыз жұмыс болып Қол қапшық әдісінің қауіпсіздігі Қол қапшық мәселесіне негізделген криптожүйені миллион машина емес, жұп Қол қапшықтың нұсқалары Меркл–Хеллман жүйесінің ашылуынан кейін қол қапшық негізінде көптеген жүйелер Басқа алгоритмдерді қолданатын басқа идеялар ұсынылған, бірақ олар да Қол қапшықтың нұсқалары қазіргі уақытта қауіпсіз болғпнымен, Char-Rivest қол 4.3 RSA алгоритмі Евклид пен Диофант, Ферма, Эйлер, Гаусс, Чебышев пен Эрмит (18) ал саны шифрленген түрдегі 1978-жылы американдық Р. Ривест, А. Шамир және Л. Адлеман функциясының мәндерін есептейтін әлдеқайда жылдам әдіс бар; кері функциясының мәндерін есетейтін жылдам әдіс бар; функциясының «құпиясы» бар, егер оны анықтасақ, Мерклдың қол қапшық алгоритмінен кейін көп ұзамай алғашқы, нағыз, 4.4 RSA шифрлеу жүйесі және натурал сандар болсын. RSA сұлбаның (19) хатына расшифровка жасау үшін келесі теңдікті шешу жеткілікті болып . Бұл теңдік және (21) Бұндай сан бар, себебі және бұл (22) Яғни, жорамалында (20) салыстырылымның жалғыз шешімі . Егер әр түрлі жәй көбейткіштерден тұратын RSA жүйесінде қабылдануында (1) функция тез арада RSA жүйесінің авторлары санын екі көбейткіштің (24) тең болғаннан кейін, . Яғни, RSA жүйесі арқылы шифрлейтін хат алысуда жеткілікті үлкен Ривест, Шамир және Адлеман өз әдісін мысал ретінде көрсету m=114381625757888867669325779976146612010218296721242362562561842935706935245733897830597123563958705058989075147599290026879543541 және . Бұл екі сан жарияланған, сонымен , Бұл оқиға тек 17 жыл өткеннен кейін ғана, 1994 , Бұл керемет шешім алгоритмнің көбейткіштерге жіктелуінен пайда болған, ол RSA қауіпсіздігі үлкен сандарды көейткіштерге жіктеу қиыншылығына негізделген. Ашық (26) Басқа сөзбен айтқанда, (27) d мен n өзара жай сандар екенін айта кетелік. m хатты шифрлеу үшін алдымен цифрлік блоктарға бөлінеді, кішісі (28) Хатты расшифровка жасау үшін шифрленген (29) Бұл формула хатты қалпына келтіреді. RSA шифрлеуі Ашық кілт: n – p және q екі e – өзара жай Жабық кілт: d = e-1 mod ((p-1)(q-1)) Шифрлеу (31) Дешифрлеу (32) Дәл сол сияқты хат d көмегімен шифрлене алады, ал Қысқаша мысал келтірейік. Егер p=47 және q=71 болса, онда Кілт е ортақ көбейтіндісі болмауы керек. (p-1)(q-1)=46*70=3220 -ні -ға тең деп алайық. Бұл жағдайда Бұл санды есептеуде Эвклидтің кеңейтілген алгоритмі қолданған. d құпиясына Алдымен оны кішкентай блоктарға бөлеміз. Біздің жағдайымызға үш әріпті Бірінші блок түрінде шифрленеді. Келесі блоктарға да осындай операциялар орындалады, хаттың шифромәтіні құрылады: Дешифрлеу үшін дешифрлеу кілтін қолдану арқылы алдындағы тәрізді дәрежеге Осыған ұқсас хаттың қалған бөлігі қалпына келеді. 4.5 RSA алгоритмінің жұмыс істеу жылдамдығы RSA алгоритмінің қолтаңбасын шифрлеу мен оны бұзуда, жасалу "Тез көбейту" әдістері – мысалы, Фурьені тез түрлендіру амалдарына RSA алгоритмі DES-ке және басқа блоқтық шифрларға қарағанда баяу. 3-кесте. Биттік ашық кілтпен қолданатын әр түрлі модуль ұзындықтарына 512 бит 768 бит 1024 бит Шифрлеу Дешифрлеу Жазба Тексеру 0.03с 0.16с 0.16с 0.02с 0.05с 0.48с 0.52с 0.07с 0.08с 0.93с 0.97с 0.08с 4.6 RSA қауіпсіздігі RSA қауіпсіздігі толығымен үлкен сандарды көбейткіштерге жіктеу мәселесіне байланысты. RSA-ны ( p-1)( q-1) мәндерін анықтау арқылы табуға болады. Әрине, криптоаналитик барлық мүмкін d-ларды дұрыс мән іздеп тапқанша Сонымен қатар, р және q жай сандарын көптеген RSA қарсы шифромәтіннің таңдалуымен ашу Кейбір анықтаулар RSA-ның таратылуына қарсы жұмыс жасайды. Олар оның 1-сценарий: Алисаның әңгімелесу линиясын ақырын тыңдай алған Ева Алисаның x= re mod n y= x c mod n t= c mod n есептелінеді. Егер x= re mod n болса, онда r=x d 2-сценарий: Трент- бұл компьютер-нотариус. Егер Алиса құжатты рәсімдегісі келсе, Шындығына келгенде, Мэллори бұл есепті бірнеше тәсілмен шығара алады. 3-сценарий: Ева Алиса оған m3 –ке қол қойғанын қалайды. Демек, RSA алгоритмін ешқашан кездейсоқ құжаттарға қол қою үшін RSA криптожүйесін бұзу тәсілдері RSA-ны бұзудың бірнеше тәсілдері бар. Ең тиімді шабуылы: ашық RSA-ны бұзудың басқа амалы mod n-нен е дәрежесінің түбірлерін Криптожүйеге бағытталған шабуылдар да болады. Мұндай шабуылдар RSA-ны бұзатын Тұрақты сандар және олардың RSA криптожүйесінде қолданылуы RSA алгоритмін сипаттайтын әдебиеттерде n модулін жасау үшін сандар Кілттің ұсынылатын ұзындығы RSA алгоритміндегі кілт өлшемі n модулінің өлшемімен байланысты. p M = (p+q)/2 деп алайық. p < q болса, p = M*( ) болғандықтан, Модульдің оптимальды өлшемі қауіпсіздік талаптарымен анықталады: жоғары өлшемді модуль Қазіргі таңда RSA лабораториясы қарапайым есептер үшін 1024 Әдетте осы жеке кілттердің жарамдылық мерзімі болады. Мерзімі өткен RSA криптожүйесі үшін жай сандар жиыны Эвклидпен 2 мың жыл бұрын дәлелденгендей жай сандардың шексіз Баланстан шығарылған RSA RSA криптожүйеісінің модулі жөніндегі дау жөнді- факторизацияға шабуыл аса Шамир (А. Shamir) RSA-модульды шешудің жаңа әдістерін ұсынды. Шамир Негізгі мәселе оның қолданылуы 1000 есе төмен болуында:енді бір RSA қолдануында кілттік синхронизм орнату кезінде в процедуре RSA тиімділігін шифрлеу кезінде тиімділігн арттыру үшін қолданылатын кең Шамир барлық амалдарды қолдану міндетті емес деген қарапайым ой Баланстан шығарылған RSA және стандартты криптожүйелер көп жадты Дербес компьютер үшін жадтың артуы елеулі салдарға әкеледі. Алайда, Тағы бір кемшілік ашық кілттер жадының 10 есе артуында. Баланстан шығару RSA өнімділігін екі еселеу үшін қолданылады. Мұнда Гилберт (Н.Gilbert), Гупта (D. Gupta), Одлыжко (А. Odlyzko) және и мен е — Бобтың ашық Ал, енді мынадай түрдегі хабарламадан тұратын мысалды қарастырайық «Боб RSA-ның жалпы модулін анықтау RSA-ның қолданылуы кезінде барлық тұтынушыларға бірдей n модулін таратып, m – хабарламаның ашық мәтіні болсын. е1 және с1= mе1mod n с2= mе2mod n Криптоаналитик n, е1, е2, с1, с2 біледі. Енді m-ді rе1 +sе2=1 r-ді теріс сан деп есептей отырып, с1-1 кеңейтілген алгоритмін (с1-1)-r* с2s= m mod n. Бұл жүйелерді анықтаудың екі әдісі белгілі. Біріншісі n-ді көбейткіштерге RSA-ның шифрлеуінің кіші көрсеткішін анықтау RSA-ның шифрленуі мен оның қолын тексеру е үшін Бұл mеmod n≠mе екендігін дәлелдейді. Хабарламаларды шифрлемес бұрын RSA-ны қолдану арқылы шифрлену мен қолын анықтау Хабарламаларды шифрлемес бұрын оған қол қоюдың маңызы зор, алайда mеβ (mod nβ) dА mod nА Боб Алиса оған m емес, m’ жібергенін былай дәлелдей mα=m mod nβ Сонда ол хеβ-ні жаңа дәреже көрсеткіші ретінде көрсете алады, 4.7 RSA бағдарламалық жабдықтаманың сипаттамасы Төменде бағдарлама жұмысының сызбасы көрсетілген. Оған қарап жұмыстың іс-әрекетін Бағдарлама жұмысының жалпы үлгісі 6.Программалық код 6.1 Эллиптикалық криптографияның программдық коды unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, DbChart; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Edit2: TEdit; Label2: TLabel; Edit3: TEdit; Label3: TLabel; Button1: TButton; Grid1: TStringGrid; Edit4: TEdit; Label4: TLabel; DBChart1: TDBChart; Series1: TPointSeries; Button2: TButton; Label5: TLabel; Label6: TLabel; Edit5: TEdit; Button3: TButton; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Label9: TLabel; Label10: TLabel; Edit10: TEdit; Edit11: TEdit; CheckBox1: TCheckBox; CheckBox2: TCheckBox; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label15: TLabel; Edit12: TEdit; Label16: TLabel; Edit13: TEdit; Edit14: TEdit; Edit15: TEdit; Edit16: TEdit; Edit17: TEdit; Edit18: TEdit; Edit19: TEdit; Edit20: TEdit; Label17: TLabel; Button4: TButton; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Button5: TButton; Edit21: TEdit; Edit22: TEdit; Label23: TLabel; Edit23: TEdit; Edit24: TEdit; Label24: TLabel; Button6: TButton; Edit25: TEdit; Edit26: TEdit; Label7: TLabel; Label8: TLabel; Timer1: TTimer; CheckBox3: TCheckBox; CheckBox4: TCheckBox; Grid2: TStringGrid; Button7: TButton; Timer2: TTimer; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit4Change(Sender: TObject); procedure Button3Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure CheckBox3Click(Sender: TObject); procedure CheckBox4Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Var a,b,c,m,t,s:longint; Var aa,bb,i,j,q,w:integer; begin randomize; m:=strtoint(edit4.Text); s:=0; For i:=0 to m-1 do a:=i; b:=a*strtoint(edit1.Text) mod m; c:=a*a*a mod m; b:=(c+b+strtoint(edit2.Text)) mod m; j:=0; for j:=0 to m-1 do begin c:=j; t:=(c*c) mod m; q:=strtoint(edit5.Text)*c mod m; t:=(t+q) mod m; if t=b then s:=s+1; if t=b then Grid1.ColCount:=Grid1.ColCount+1; if t=b then Grid1.cells[s,1]:=inttostr(c); if t=b then Grid1.Cells[s,0]:=inttostr(i); end; Grid2.ColCount:=s+1; end; Edit3.Text:=inttostr(s); DBChart1.BottomAxis.Minimum:=-1; DbChart1.BottomAxis.Maximum:=m; DBChart1.LeftAxis.Minimum:=-1; DBChart1.LeftAxis.Maximum:=m; {q:=1+random(m-1); w:=1+random(m-1); edit10.Text:=Inttostr(Strtoint(Grid1.Cells[0,q])); edit11.Text:=Inttostr(Strtoint(Grid1.Cells[1,q])); edit21.Text:=Inttostr(Strtoint(Grid1.Cells[0,w])); edit22.Text:=Inttostr(Strtoint(Grid1.Cells[1,w])); } end; procedure TForm1.FormCreate(Sender: TObject); Var i,m:integer; begin randomize; m:=strtoint(edit4.Text); Grid1.ColCount:=1; Grid1.Cells[0,0]:='X'; Grid1.Cells[0,1]:='Y'; edit15.Text:=inttostr(2+random(m-2)); edit16.Text:=inttostr(2+random(m-2)); { edit5.Visible:=true; edit6.Visible:=false; edit7.Visible:=false; edit8.Visible:=false; edit9.Visible:=false; edit12.Visible:=false; } end; procedure TForm1.Button2Click(Sender: TObject); Var m,i,aa,bb:integer; begin m:=strtoint(edit4.Text); for i:=1 to Grid1.ColCount-1 do begin aa:=strtoint(Grid1.Cells[i,0]); bb:=strtoint(Grid1.Cells[i,1]); series1.AddXY(aa,bb,'',clblack); end; end; procedure TForm1.Edit4Change(Sender: TObject); Var m:integer; begin randomize; m:=strtoint(edit4.Text); Edit15.Text:=Inttostr(2+random(m-2)); Edit16.Text:=Inttostr(2+random(m-2)); // Grid2.ColCount:=strtoint(edit4.Text)+1; //Grid3.ColCount:=strtoint(edit4.Text)+1; end; procedure TForm1.Button3Click(Sender: TObject); Var lam,x1,y1,x2,y2,x3,y3,i,j,m,t,k,zz:integer; begin m:=strtoint(edit4.Text); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; end; procedure TForm1.CheckBox1Click(Sender: TObject); begin if checkbox1.Checked then DBChart1.Visible:=false; if checkbox1.Checked then Grid2.Visible:=false; end; procedure TForm1.CheckBox2Click(Sender: TObject); begin if checkbox2.Checked then DBChart1.Visible:=true; if checkbox2.Checked then Grid2.Visible:=true; end; procedure TForm1.Button4Click(Sender: TObject); Var lam,x1,y1,x2,y2,x3,y3,i,j,m,t,k,zz:integer; begin edit12.Text:=inttostr(strtoint(edit15.Text)); edit6.Text:=inttostr(strtoint(edit10.Text)); edit8.Text:=inttostr(strtoint(edit10.Text)); edit7.Text:=inttostr(strtoint(edit11.Text)); edit9.Text:=inttostr(strtoint(edit11.Text)); m:=strtoint(edit4.Text); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; edit13.Text:=inttostr(x3); edit14.Text:=inttostr(y3); end; procedure TForm1.Button5Click(Sender: TObject); Var lam,x1,y1,x2,y2,x3,y3,i,j,m,t,k,zz:integer; begin edit12.Text:=inttostr(strtoint(edit16.Text)); edit6.Text:=inttostr(strtoint(edit13.Text)); edit8.Text:=inttostr(strtoint(edit13.Text)); edit7.Text:=inttostr(strtoint(edit14.Text)); edit9.Text:=inttostr(strtoint(edit14.Text)); m:=strtoint(edit4.Text); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; edit23.Text:=inttostr(x3); edit24.Text:=inttostr(y3); edit6.Text:=inttostr(strtoint(edit10.Text)); edit8.Text:=inttostr(strtoint(edit10.Text)); edit7.Text:=inttostr(strtoint(edit11.Text)); edit9.Text:=inttostr(strtoint(edit11.Text)); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=inttostr(x3); Edit9.Text:=inttostr(y3); end; Edit17.Text:=inttostr(x3); Edit18.Text:=inttostr(y3); edit6.Text:=inttostr(strtoint(edit21.Text)); edit8.Text:=inttostr(strtoint(edit23.Text)); edit7.Text:=inttostr(strtoint(edit22.Text)); edit9.Text:=inttostr(strtoint(edit24.Text)); for k:=1 to 1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=inttostr(x3); Edit9.Text:=inttostr(y3); end; Edit19.Text:=inttostr(x3); Edit20.Text:=inttostr(y3); end; procedure TForm1.Button6Click(Sender: TObject); Var lam,x1,y1,x2,y2,x3,y3,i,j,m,t,k,zz:integer; begin edit6.Text:=inttostr(strtoint(edit13.Text)); edit7.Text:=inttostr(strtoint(edit14.Text)); edit8.Text:=inttostr(strtoint(edit13.Text)); edit9.Text:=inttostr(strtoint(edit14.Text)); edit12.Text:=inttostr(strtoint(edit16.Text)); m:=strtoint(edit4.Text); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; Edit6.Text:=inttostr(x3); Edit7.Text:=inttostr(m-y3); Edit8.Text:=inttostr(strtoint(edit19.Text)); Edit9.Text:=inttostr(strtoint(edit20.Text)); m:=strtoint(edit4.Text); for k:=1 to 1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; edit25.Text:=inttostr(x3); edit26.Text:=inttostr(y3); end; procedure TForm1.Timer1Timer(Sender: TObject); Label 10; Var lam,x1,y1,x2,y2,x3,y3,i,j,m,t,k,text,zz:integer; begin begin //edit3.Text:=''; randomize; m:=strtoint(edit4.Text); x1:=Strtoint(edit6.Text); edit8.Text:=inttostr(strtoint(edit6.Text)); y1:=Strtoint(edit7.Text); edit9.Text:=inttostr(strtoint(edit7.Text)); repeat x1:=2+random(m-2); y2:=x1; y1:=m+1; repeat x2:=y1 mod x1; y1:=x1; x1:=x2; until x2=0; until y1=1; //if x11 then goto 10 ; edit12.Text:=inttostr(y2); //edit12.Text:=inttostr(1+strtoint(edit12.Text)); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; text:=x3+y3; if text=0 then edit3.Text:='jkkj'; end; end; procedure TForm1.CheckBox3Click(Sender: TObject); begin if checkbox3.Checked then timer1.Enabled:=true; end; procedure TForm1.CheckBox4Click(Sender: TObject); begin if checkbox4.Checked then timer1.Enabled:=false; end; procedure TForm1.Button7Click(Sender: TObject); Var lam,x1,y1,x2,y2,x3,y3,i,j,m,tt,k,s,t,ss,zz:integer; begin ss:=2; m:=strtoint(edit4.Text); For s:=2 to grid1.ColCount-1 do x1:=strtoint(grid1.cells[s,0]); y1:=strtoint(grid1.cells[s,1]); x2:=strtoint(grid1.cells[s,0]); y2:=strtoint(grid1.cells[s,1]); edit6.Text:=inttostr(x1); edit7.Text:=inttostr(y1); edit8.Text:=inttostr(x1); edit9.Text:=inttostr(y1); For tt:=2 to Grid1.colcount-1 do edit12.Text:=inttostr(tt); edit8.text:=inttostr(strtoint(edit6.text)); edit9.text:=inttostr(strtoint(edit7.text)); for k:=1 to Strtoint(Edit12.Text)-1 do x1:=Strtoint(edit6.Text); x2:=Strtoint(edit8.Text); y1:=Strtoint(edit7.Text); y2:=Strtoint(edit9.Text); if (x1x2) then i:=(m+y2-y1) mod m; j:=(m+x2-x1) mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if (x1=x2) then zz:=y1+y2; if zz=0 then begin x3:=0;y3:=0; end else if y1=y2 then i:=3*x1 mod m; i:=i*x1 mod m; i:=(i+Strtoint(edit1.Text)) mod m; j:=2*y1 mod m; t:=0; repeat t:=t+1; until t*j mod m=1; lam:=i*t mod m; x3:=lam*lam mod m; x3:=(m+m+x3-x1-x2) mod m; y3:=(m+x1-x3) mod m; y3:=lam*y3 mod m; y3:=(m+y3-y1) mod m; end; if y1y2 then x3:=0; y3:=0; end; Edit8.Text:=floattostr(x3); Edit9.Text:=floattostr(y3); end; Grid2.Cells[1,ss-2]:=inttostr(x1); Grid2.Cells[1,ss-1]:=inttostr(y1); Grid2.Cells[0,ss-2]:=inttostr(s-1)+'el'; Grid2.Cells[0,ss-1]:=inttostr(s-1)+'el'; Grid2.Cells[tt,ss-2]:=inttostr(x3); Grid2.Cells[tt,ss-1]:=inttostr(y3); end; Grid2.RowCount:=grid2.RowCount+2; ss:=ss+2; end; end; procedure TForm1.Timer2Timer(Sender: TObject); Var i,j:integer; begin {i:=2+random(grid1.ColCount-3); edit6.Text:=inttostr(Strtoint(Grid1.Cells[i,0])); edit8.Text:=inttostr(Strtoint(Grid1.Cells[i,0])); edit7.Text:=inttostr(Strtoint(Grid1.Cells[i,1])); edit9.Text:=inttostr(Strtoint(Grid1.Cells[i,1])); } end; end. 6.2 RSA криптографияның программдық коды unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) Grid1: TStringGrid; Edit1: TEdit; Edit2: TEdit; Button1: TButton; Edit3: TEdit; Grid2: TStringGrid; Button2: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit4: TEdit; Edit5: TEdit; Label4: TLabel; Label5: TLabel; Edit6: TEdit; Label6: TLabel; Edit7: TEdit; Label7: TLabel; Edit8: TEdit; Button3: TButton; Edit9: TEdit; Label8: TLabel; Button4: TButton; Label9: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); Label 10; Var i,j,k:integer; begin j:=2; k:=0; Grid1.Cells[0,0]:='2'; While k

Мәтінді көшіру үшін белсенді жазылым қажет.

Пайдаланушы ID: 59877

Жарияланған күні: