АШЫҚ КІЛТТІ ҚОЛДАНАТЫН АЛГОРИТМДЕР
МАЗМҰНЫ
КІРІСПЕ 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
Ашық кілтті қолданатын алгоритмдер
Криптографиялық кілттерді басқару
Ақпаратты қорғаудың криптографиялық жүйелері
Есептеу машиналары мен электрондық құралдар
Криптографиялық кілттермен басқару.RSA алгоритмі
Криптожүйелер
Параллельді алгоритімді ақпараттық қауіпсіздікте қолдану
Ашық кілтті криптожүйелер
Симметриялық кілтпен шифрлау
RSA криптожүйесінде шифрлауға мысал