КЕЗДЕЙСОҚ САНДАР ГЕНЕРАТОРЫМЕН БАҒДАРЛАМАЛАУ ЕРЕКШЕЛІКТЕРІ



Жұмыс түрі:  Курстық жұмыс
Тегін:  Антиплагиат
Көлемі: 28 бет
Таңдаулыға:   
ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ҒЫЛЫМ ЖӘНЕ БІЛІМ МИНИСТРЛІГІ
Алматы облысы Алакөл ауданы

Секциясы: математика

Тақырыбы: КЕЗДЕЙСОҚ САНДАР ЖӘНЕ ОЛАРДЫ ГЕНЕРАЦИЯЛАУ

Мектеп: Үшарал қаласындағы педагог М.Мыңбайұлы атындағы орта мектебі мектеп жасына дейіңгі шағын орталығы бар КММ

Автор: Баяхмет Гүлім 11 Б сынып оқушысы

Жетекшісі: математика пәні мұғалімі Толеубекова А.Е.

2020-2021 оқу жылы

МАЗМҰНЫ

КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..4

І КЕЗДЕЙСОҚ САНДАР ЖӘНЕ ОЛАРДЫ ГЕНЕРАЦИЯЛАУ
1. Кездейсоқ сандар генераторы және олардың түрлері ... ... ... ... ... ... ... ... ... .5
2. Ақиқат кездейсоқ сандар және жалған кездейсоқ сандардың генераторлары..8
3. Кездейсоқ сандар генераторының құралдары ... ... ... ... ... ... .. ... ... ... ... ... ... 9

ІІ КЕЗДЕЙСОҚ САНДАРДЫҢ ҚОЛДАНЫЛУ АЙМАҚТАРЫ ... ... ... ... ... .
1. Кездейсоқ сандардың ғылым мен техникада қолданылуы ... ... ... ... ... ... . ... ...13
2. Күнделікті өмірде кездейсоқ сандардың қолданылуы ... ... ... ... ... ... . ... ... ...15

ІІІ КЕЗДЕЙСОҚ САНДАР ГЕНЕРАТОРЫМЕН БАҒДАРЛАМАЛАУ ЕРЕКШЕЛІКТЕРІ
1.Turbo Pascal тілінде кездейсоқ сандар генераторын қолдану негіздері ... ... ...16
2.С++ объектілі бағытталған бағдарламалау тілінде кездейсоқ сандар генераторымен бағдарламалау мүмкіндіктері ... ... ... ... ... .. ... ... ... ... ... ... ... ... ..1 9
3. С# бағдарламалау тілінде кездейсоқ сандармен ойын бағдарламаларын модельдеу үлгісі ... ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .22
4.Delphi интегралды ортасында кездейсоқ сандар генераторымен қосымша құру ерекшеліктері ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 25

ҚОРЫТЫНДЫ ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 29

ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ... 30

КІРІСПЕ

Әлемдегі барлық процесс кездейсоқтықтан немесе алдын ала қарастырылған жоспар не болмаса заңдылық негізінде өтіп жатады. Кездейсоқ оқиғалар - әркез өмірімізде кездесетін жайттардын бірі болып саналады. Ғылымдардың көбісі бұрыннан кездейсоқ оқиғалардың заңдылықтарын зерттеумен айналысып келген болатын. Иә, онысы рас, кездейсоқ оқиғалардың өз заңдылықтары да бар және оларды біліп-тану біз үшін маңызды. Себебі, кездейсоқ оқиғанын заңдылығын біле отырып, лотерея ұтысынан бастап ғылыми тәжірибенің статистикалық өңдеуіне дейін жетуге болады. Нақты алғанда өміріміздің кез - келген саласында кездейсоқ сан қолданамыз.
Кездейсоқ сандар генераторы -- кездейсоқ сандар беретін құрылым немесе бағдарлама. Әдетте, кездейсоқ сандар генераторы - бағдарламалау тілдерінде стандартты функциялар мен процедуралар құрамына кіретін бағдарлама.
Ғылыми жобаның өзектілігі - біздің өміріміздің барлық саласында қандай да бір процестен тәуелді кездейсоқ сандарды қолдану қажеттілігінің деңгейі мен оны қолдану тиімділігі. Сол кездейсоқ сандарды қажеттілікке сай өндіретін құрылымдардың әр алуандығы және кездейсоқ сандарды өндіретін генераторлардың жұмыс жасау принциптері.
Ғылыми жоба мақсаты - сандарды кездейсоқ өндіретін генераторлардың жұмыс жасау негіздерін ашу, кездейсоқ сандар генераторының қолдану аймақтарына шолу жасау және Turbo Pascal, C++, C# бағдарламалау тілдерінде кездейсоқ сандар генераторымен бағдарламалау ерекшеліктеріне зерттеу жүргізу, Delphi интегралды ортасында кездейсоқ санмен жұмыс жасайтын қарапайым қосымшалар үлгісін моделдеу.
Ғылыми жоба міндеті - Кездейсоқ сандар генераторының түрлерін ажырату; Кездейсоқ сандардың ғылым мен техникада және күнделікті өмірде қолданылатын тұстарын зерттеу жұмыстарын жүргізу; Turbo Pascal тілінде кездейсоқ сандар генераторын қолдану негіздерін талдау; С++ объектілі бағытталған бағдарламалау тілінде кездейсоқ сандар генераторымен бағдарламалау мүмкіндіктерін зерттеу; С# бағдарламалау тілінде кездейсоқ сандармен ойын бағдарламаларын модельдеу үлгісін жасау; Delphi интегралды ортасында кездейсоқ сандар генераторымен қосымша құру ерекшеліктерін көрсету;
Ғылыми жобаның зерттеу объектісі - Turbo Pascal тілінде, С++ объектілі бағытталған бағдарламалау тілінде, С# бағдарламалау тілінде және Delphi интегралды ортасында кездейсоқ сандар генераторын іске қосу және онымен бағдарламалауды ұйымдастыру

КЕЗДЕЙСОҚ САНДАР ЖӘНЕ ОЛАРДЫ ГЕНЕРАЦИЯЛАУ

КЕЗДЕЙСОҚ САНДАР ГЕНЕРАТОРЫ ЖӘНЕ ОЛАРДЫҢ ТҮРЛЕРІ

Кездейсоқ сандардың аппараттық генераторы - өтіп жатқан физикалық процесс параметрлері негзінде кездейсоқ сандар тізбегін генерациялайтын құрылғы. Кездейсоқ сандардың аппараттық генераторы - жай жұмыс жасайды немесе аралас тізбек өндіреді. Мұндай генераторларды қолдану пәндік обылыстың және генератордың өзінің құралдарынан тәуелді. Кездейсоқ сандар генераторын қолдану деңгейі әртүрлі, яғни қарапайым ойыншықтан күрделі шифрлауға дейін. Сәйкесінше генераторға қойылатын талап та күшейеді.
Кілтті генерациялау үшін бізге кездейсоқ сандарды генерациялауыш (random number generator - RNG) керек. Жақсы кездейсоқтықтың генерациясы - расында да көптеген криптографиялық операциялардың ең қажетті және сонымен қатар аса ауыр бөліктерінің бірі.
Біз кездейсоқтықтың өзімен расында нені білдіретінін онша толық қарастырмаймыз. Осы терминнің көптеген әдемі математикалық анықтамалары бар, бірақ олардың бәрі бұл жобада қарастыру үшін өте ауыр. Ал формальсыз емес жағынан егер де қолданушы кездейсоқтықпен күресу үшін белсенді әрекеттер қолданатын болса да, кездейсоқтықты қаскүнем үшін болжамсыз мәліметтер мәндері ретінде анықтауға болады.
Көптеген криптографиялық функцияларға жақсы кездейсоқ сандардың генераторлары керек. Біз А және Б қолданушыларға белгілі кілт бар деп жорамалдадық. Бұл кілт бір жерде шығарылу керек. Кілттерді таңдау үшін кілттерді басқару жүйесі кездейсоқ сандардың генераторын қолданады. Егер генератор онша мықты болмаса, нашар кілт алынады. Тап осы жағдай Netscape шолушысының ерте нұсқаларының бірінде болды.
Кездейсоқтықтың өлшемі энтропия (entropy) деп аталады. Мен бұл жерде осы сұрақтың математикалық бөліктерін келтіріп жатпаймын, жай ғана энтропияның не екенін түсіндіру үшін барлығын жасауға тырысамын. Егер бізде мүлде кездейсоқ түрмен таңдалатын 32-биттік сөз болса, онда оның 32 бит энтропиясы болады. Егер де 32-биттік сөз әрқайсысының шығу ықтималдығы 25%-ға тең тек 4 мән қабылдай алатын болса, онда бұл сөз тек 2 бит энтропияға ие болады. Энтропия мәндегі биттің санын емес, осы мәнде сіздің қаншаға сенімсіз екендігіңізді көрсетеді. Көбірек суреттеу үшін энтропияны қысудың тамаша алгоритімін қолдану кезінде мәнді беру үшін керек биттің орташа саны ретінде қарастыруға болады. Назар аударыңыздар, мәннің энтропиясы осы мән туралы қанша білетініңізге байланысты. 32-биттік кездейсоқ сөздің 32 бит энтропиясы бар. Енді осы сөздің мәні туралы келесілер нақты белгілі деп қарастырайық: сөздің 18 биті 0-ге тең, ал 16 бит - 1-ге тең. Бұндай талаптарға жуықтап 2[28,8] мән қанағаттандырады, осыдан шығатыны, сөздің энтропиясы тек 28,8 битті құрайды. Басқа сөзбен айтқанда, неғұрлым мән туралы көбірек білсек, соғұрлым оның энтропиясы аз болады.
Кездейсоқ үлестірілуі бір қалыпты болмайтын мәндер үшін энтропияны есептеп шығару біраз қиындау.
Тамаша әлемде ақиқат кездейсоқ сандарды қолданған дұрыс болар еді. Өкінішке орай, біздің әлем тамаша емес және онда шындығында кездейсоқ мәліметтер табу өте қиын.
Кәдімгі компьютерлерде энтропияның бірнеше көздері бар. Осындай көздердің мысалы ретінде көбінесе перненің дәл басылу уақыты мен тышқанның орын ауыстыруының дәл уақыты келтіріледі. Кезінде кейбір ғалымдар қатты дискіге жету уақытының оның корпусының ішіндегі турбуленттікпен шақырылған тербелістерінің кездейсоқтығына зертеулер жүргізген. Осы барлық энтропиялардың көздері күмән туғызады, өйткені кейбір нақты жағдайларда қаскүнем кездейсоқтықтың көзінің үстінен есептеулер жүргізуі немесе осы көзге әсер етуі мүмкін.
Көптеген өңдеушілер әр түрлі көздерден алынуы мүмкін энтропияның санына оптимистік көзбен қарайды. Біз перненің бір басылуы кезінде уақытқа байланысты 1-2 байт кездейсоқ мәліметтерді шығарған бағдарламалық қамтамасыздандырылуды көрдік. Өкінішке орай, біз бұл оптимистікпен келіспейміз. Перненің кәсіби машинстпен басылу уақытын бірнеше миллисекундқа дейінгі дәлдікпен болжауға болады. Ал перненің басылу уақытын өлшеуге болатын пернетақтаны сканерлеу жиілігін дәлдік шектейді. Басылып жатқан мәліметтерді де, тіпті қолданушы жай ғана бірінші кездескен пернелерді басатын болса, кездейсоқтық деп атауға болмайды. Одан әрі жаманы, әрқашан қаскүнемде кездейсоқ оқиғалар туралы қосымша ақпараттың бар болуының қаупі болады. Пернені басқан кезде шығатын дыбыстарды әрбір перненің басылу уақытын анықтауға мүмкіндік беретіндіктен микрофонға жазып алуға болады. Энтропияның ана не мына мәліметтерде бар санын бағалағанда өте сақ болыңыздар. Анығында, біз өте ақылды және белсенді қаскүнеммен кездесіп отырмыз.
Өзін кездейсоқ түрде ұстайтын көптеген физикалық процестер бар. Мысалы, кванттық физиканың заңдары бойынша кейбір бөлшектердің жүрісі толық кездейсоқтық болып табылады. Осы кездейсоқ жүрісті өзіміздің жүйеде қолдану үшін есептеп шығарсақ жақсы болар еді. Техникалық жағынан бұл әрине мүмкін. Өкінішке орай, қаскүнемдерде бұл жерде де өздерінің жолдары болады. Біріншіден, ол болжанатындай етіп кванттық бөлшектердің жүрісіне ықпал тигізуі мүмкін. Екіншіден, ол жай ғана біздің өлшеулерді ұрлап кете алады. Егер қаскүнем өлшеулерді алатын болса, онда мәліметтер бәрібір кездейсоқ болып қалады, бірақ, оның ойынша, ешқандай да энтропияға ие болмайды (егер қаскүнем дәл мәнді білетін болса, онда ол мән оған энтропия болып саналмайды). Мүмкін, қаскүнем біздің құралдардың көрсетулерін өзгертетін күшті радиосәуле шығара алады. Тіпті біз кванттық физиканың заңдарын қолданатын бірнеше шабуылдарды суреттей аламыз. Мысалы, біз өлшейін деп жатқан кездейсоқтықты бұзу үшін Эйнштейн-Подольский-Розен породоксы қолданылуы мүмкін. Осыған ұқсас пікірлер энтропияның басқа да көздеріне, мысалы, резистордың жылу кедергілері немесе жартылай өткізгіштіктік стабилитрондағы туннел әсері қолданылады.
Кейбір қазіргі заманғы компьютерлерде енгізілген ақиқат кездейсоқ сандардың генераторлары бар. Бұл, сөзсіз оларға жеке генераторларды қолдану алдында түбегейлі артықшылықтар береді, өйткені, кейбір шабуылдардың кейбір түрлерінің орындалуына айтарлықтай кедергі жасайды. Әйтсе де мұндай кездейсоқ сандар генераторы әлі де операциялық жүйеге қол жетерліктей болады, сондықтан қосымшалар қауіпсіз мәліметтер алу үшін оған толық сенуі керек.
Ақиқат кездейсоқ сандарды алудың қиындығынан басқа, оларды практикада қолданудың басқа да бірнеше мәселелері бар. Біріншіден, олар әрқашан қол жететіндей болмайды. Егер кездейсоқ сандар пернені басу уақытының негізінде шығарылатын болса, қолданушы кенеттен жазуды тоқтататын болса, сіз ешқандай мәлімет алмайсыз. Егер сіздің қосымшаңыз пернетақтасы жоқ компьютерге орнатылған Web-сервер болатын болса, бұл нағыз мәселе болуы мүмкін. Осыған ұқсас тағы бір мәселе ақиқат кездейсоқ сандардың көлемі әрқашан шектеулілігімен байланысты. Егер сізге үлкен көлемді кездейсоқ сандар керек болса, көптеген қосымшаларға мүлде қолайсыз болатын олар шығарылғанша тосуға тура келеді.
Екінші мәселе кездейсоқ сандардың физикалық генераторлары секілді ақиқат кездейсоқ сандардың көздері сынып қалуы немес бет қайтару мүмкіндігінде. Кей кездерде генератордың іс-әрекеті болжамды болуы мүмкін. Өйткені ақиқат кездейсоқ сандардың генераторы күрделірек, олар компьютердің классикалық компоненттеріне қарағанда тез істен шығуы мүмкін. Егер сіздің жүйеңіз ақиқат кездейсоқ сандардан тікелей тәуелді болса, ол бет қайтарған уақытта сіздің жолыңызда үлкен кедергілер болады.
Және үшінші мәселе - ол нақты физикалық оқиғалардан алына алатын энтропиияның бағалану қиындығы. Бірақ егер кездейсоқ сандардың генераторы ретінде белгіленген, арнайы осыған жасалған құрал қолданылмайтын болса, алынып жатқан энтропияның санын анықтау өте қиын болады.
Ақиқат кездейсоқ сандардың орнына жақсы құрал ретінде жалғанкездейсоқ сандар қолданылады. Шындығында, жалғанкездейсоқ сандар жалпы кездейсоқ болып саналмайды. Олар детерминантты алгоритмнің көмегімен кейбір бастапқы сандардың (seed) негізінде табылады. Бастапқы санды біле отырып келесі барлық жалғанкездейсоқ сандарды болжауға болады. Классикалық жалғанкездейсоқ сандардың генераторлары (pseudorandom number generator - PRNG) ақылды қаскүнемнен ешқалай сақтандырылмаған. Олар шабуылдарды тоқтату үшін емес, статистикалық бұрмалауларды жою үшін жасалынған. Дональд Кнуттың (Donald Knuth) The Art of Computer Programming кітабының екінші томында кездейсоқ сандардың генераторларының толық суреттемесі жазылған, бірақ олардың барлығы статистикалық кездейсоқтыққа қатысты зерттелген. Біз қарсыластың кездейсоқ сандардың шығаруына қолданылатын алгоритмді білетіндігінен бастауымыз керек. Алгоритммен шығарылған бірнеше жалғанкездейсоқ сандарды біле отырып қаскүнем кейбір алдыңғы (немесе өткендегі) кездейсоқ сандардың биттерін болжай ала ма? Көптеген классикалық жалғанкездейсоқ сандардың генераторлары үшін жауап ақиқат болуы мүмкін. Жалғанкездейсоқ сандардың криптографиялық генераторларына бұл мүмкін емес жағдай.
Криптографиялық жүйенің контексінде жалғанкездейсоқ сандардың генераторларына одан да гөрі қатаң сұранымдар келтіріледі. Егер қаскүнем генератормен құрылған кездейсоқ сандардың толық қатарын білетін болса да, ол онда қалған кездейсоқ сандар туралы қандай да бір ақпаратты болжауға мүмкіндігі болмауға тиіс. Біз бұндай жалғанкездейсоқ сандардың генераторларын криптографикалық мықты деп атаймыз. Жалғанкездейсоқ сандардың классикалық генераторлары керегі жоқ болғандықтан, әрі қарай біз тек криптографикалық мықты генераторлар туралы айтатын боламыз.
Сіздің бағдарламалық кітапханаңызда бар жай кездейсоқ функцияларды ұмытыңыздар. Олардың біреуі де криптографиялық жүйелерде қолдануға жарамайды. Көптеген бағдарламалық кітапханалар жеңіл статистикалық тесттерден де өте алмайтын жалғанкездейсоқ сандардың генераторларымен беріледі.

АҚИҚАТ КЕЗДЕЙСОҚ САНДАР ЖӘНЕ ЖАЛҒАН КЕЗДЕЙСОҚ САНДАРДЫҢ ГЕНЕРАТОРЛАРЫ

Ақиқат кездейсоқ сандарды біз тек жалғанкездейсоқ сандардың генераторларына кіріс беретін бастапқы сандарды табу үшін ғана қолданамыз. Бізде бастапқы сан табылғаннан кейін генератор өмірге кездейсоқ (толығырақ жалғанкездейсоқ) сандардың кез-келген санын шығара алады. Керек болған жағдайда біз ақиқат кездейсоқ сандарды кездейсоқ сандардың генераторының бастапқы санына қоса аламыз. Бұл, егер қаскүнем қандай да бір түрмен бастапқы санды біліп алған болса да, ақырғының шығыс мәліметтері ешқашан толық болжамды болмайтындығына кепілдік бере алады.
Ақиқат кездейсоқ сандар жалғанкездейсоқ сандардан гөрі жақсырақ деген теориялық ой бар. Кейбір криптографиялық хаттамалар үшін ақиқат кездейсоқ сандарды қолдану кезінде шабуылдың белгілі кейбір түрлері мүмкін болмайтындығын дәлелдеуге болады. Мұндай хаттама сөзсіз қорғалған (unconditionally secure) деп аталады. Егер де жалғанкездейсоқ сандардың генераторларын қолданатын болсақ, хаттама қаскүнем бұл генераторды бұза алмайды деген шарт болған жағдайда ғана қауіпсіз болады. Мұндай хаттама есептеулер бойынша қорғалған (computationally secure) деп аталады. Бұл айырмашылықтың толық білетін теоретиктер үшін ғана мағынасы болады. Барлық криптографиялық хаттамалар көбіне арқашан есептеуіш жақындалуға негізделген. Бұндай жақындалудың нақты бір шабуыл түріне байланысты шығарылуы жақсы жақсаруға әкелмейді. Сонымен қатар, сөзсіз сақталуды қамтамасыз етуге қажетті ақиқат кездейсоқ сандардың шығаруы соншалықты қиын, мұндай сандарды қолдану әрекеті жүйенің қауіпсіздігін тек бұзуы мүмкін. Ақиқат кездейсоқ сандардың генераторының кез-келген нашар орны қауіпсіздіктің жоғалуына әкеліп соғады. Басқа жағынан қарағанда, егер ақиқат кездейсоқ сандарды жалғанкездейсоқ сандардың генераторына бастапқы санды табу үшін ғана қолдансақ, онда өзімізге әр түрлі энтропиялардың көздерін қолдануды жасай алу, сөзсіз, біздің расында да қауіпсіз жүйені құруымыздың мүмкіндіктерін көтереді.



КЕЗДЕЙСОҚ САНДАР ГЕНЕРАТОРЫНЫҢ ҚҰРАЛДАРЫ
Генератор белгіленген ұзындықтың кейбір жағдайын кез келген ұзындықтың шығыс мәліметтеріне ауыстырады. Өзінің мәні бойынша генератор - бұл тек қана есептеуіш жағдайында жұмыс жасайтын блоктық шифр. Еске салайық, есептеуіш жағдайы немесе CTR мәліметтердің біз шығыстар ретінде қолданатын кездейсоқ ағынын генерациялайды. Егер қолданушы немесе қосымша кездейсоқ мәліметтер сұрайтын болса, генератор өзінің алгоритмін қосып жалғанкездейсоқ мәліметтер шығарады. Енді қаскүнем генератордың күйін кезекті сұраныстан кейін алуға мүмкіндігі болсын деп есептейік. Егер генератормен берілген алдыңғы нәтижелер дескридитацияланбаса жақсы болар еді. Ол үшін әрбір сұраныстан кейін тағы 256 бит жалғанкездейсоқ мәліметтерді генерациялаймыз және оларды шифрлаудың жаңа кілті ретінде қолданамыз. Ескі кілт осы кезде алдыңғы сұраныстар туралы ақпараттың шығуын болдыртпау үшін жойылады.
Генерацияланған мәліметтер статистикалық кездейсоқтыққа ие болуы үшін бір мезгілде аса көп мәліметтерді генерациялап керегі жоқ. Расында да, ақиқат кездейсоқ мәліметтерде блоктың мәндері қайталануы мүмкін, ал есептеуіш режиміндегі шығыс мәліметтері ешқашан қайталанатын блоктарды шығармайды. Бұл мәселені шешудің бірнеше жолдары бар. Мысалы, практика жағынан блогтың ақиқат кездейсоқ кезегінен статистикалық ауытқуын болдырмайтын тексті шифрлаудың блогының тек бір жартысын қолдануға болады. Блогтық шифрлаудың орнына екінің бірі ретінде жалғанкездейсоқ функцияны (pseudorandom function) қолдануға болады, бірақ бізге әлі жақсы зерттелген және тиімді ұсыныстар кездескен жоқ. Осы жағдайда жасауға болатындардың ең оңайы - ол бір сұранысқа берілетін кездейсоқ мәліметтердің байт санын шектеу. Бұл ақиқат кездейсоқ кезектіктен статистикалық ауытқуын қиындатады.
Генератор өзі өте пайдалы модуль болып табылады. Ол көптеген орындауларда тек Fortuna ЖКСГ (жалған кездейсоқ сандар генераторы) компоненті ретінде ғана емес, сонымен қатар оның интерфейсінің бөлігі ретінде қолданылуы мүмкін деп есептейміз. Мысалға Монте-Карло әдісімен модельдеуді орындайтын бағдарламаны алсақ. Біз бұл моделдеу кездейсоқ болуын қалаймыз делік. Онымен қоса, біз керек болған кезде керекті есептеулерді (мысалы, отладка немесе тексеру үшін) жасауға болатындай болуы керек. Ол үшін бағдарлама басында бір рет операциялық жүйенің орнатылған кездейсоқ сандар генераторын шақыруға болады. Оның көмегімен біз кездейсоқ бастапқы санды аламыз. Бұл сан бағдарламаның шығыс мәліметтерінің бөлігі ретінде алынуы мүмкін, одан кейін біздің генератормен моделдеуге керекті қалған кездейсоқ мәліметтерді есептеуге қолданылуы мүмкін. Генератордың шығыс бастапқы санын біле отырып барлық есептеулердің дұрыстығын бақылап отыруға болады. Ол үшін бағдарламаны тағы да сол кіріс мәліметтерімен және бастапқы сандарымен жіберу жеткілікті. Ал отладка үшін моделдеудің сол бір ғана процесі қайта-қайта жіберіле алады, сонымен қатар, оның әрекеті әрқашан біркелкі болады - тек бастапқы кіріс саны өзгеріссіз болғандай.
Енді генератордың жұмысын толығырақ қарастырайық.
Біз кілт пен есептеуіштің мәндерін генераторға бастапқы санның берілмегенін білдіретіндей нөлге тең деп аламыз.
функция InitiaizeGenerator
выход G Генератор күйі.
К кілтінің және С есептеуішінің мәндерін нолге тең деп қоямыз.
(К, С)(0, 0)
Күйді құрамыз.
G (K, C)
Return G
Reseed функциясы генератордың күйін туынды ұзындықты кіріс жолдың көмегімен жаңартады. Бұл деңгейде кіріс жолы нені құрайтыны бізге керек емес. Кіріс жолының бар кілттің көмегімен тиянақты араласқанын дәләел беру үшін кэштау фукнциясын қолданамыз.
функция Reseed
вход: G Генератордың күйі; осы функциямен өзгереді.
s Жаңа немесе қосымша бастапқы сан.
Кэштау функциясының көмегімен жаңа кілтті есептеп шығарамыз.
K SHAd - 256(K s)
Есептеуіштің мәнін ол нолге тең болмағандай етіп бір мәнге көбейтеміз және генераторға бастапқы санның берілгені туралы белгі қоямыз. Берілген жағдайда С 16-байттық бүтін сан ретінде, байттың мәні онша емесі бірінші жазылатындай форматта берілген түрінде қарастырылады.
С С + 1
Бұл жерде С есептеуішінің мәні бүтін сан ретінде қарастырылады. Кейінірек ол ашық текстің блогы ретінде берілетін болады. Бір мәннің басқаға ауысуына мәні онша емесі бірінші жазылатын бүтін санның жазу форматы туралы келісімді қолданатын боламыз. Ашық тексттің блогы дегеніміз - 16 байттан: p0, ... , p15 тұратын блок. Ол бүтінсанды мәнге сәйкес келеді

Осы келісімді қолдана отырып біз С-ті 16-байттық жол ретінде де, бүтін сан ертінде де қарастыра аламыз.
Келесі функция кездейсоқ мәліметтердің блоктарының берілген санын генерациялайды. Бұл жалғанкездейсоқ сандардың генераторының өзімен ғана қолданылатын ішкі функция. Генератордан тыс кез келген объект бұл функцияға доступы болмауы керек.
функция GenerateBlocks
вход: G Генератор күйі; осы функциямен өзгереді.
k Генерациялауға керекті блоктардың саны.
выход: r 16к байт ұзындықты жалғанкездейсоқ жол.
assert C != 0
Бос жолдан бастаймыз.
r Euro
Оған керекті блоктар санын қосамыз.
for i = 1, ... , k do
r r E (K, C)
C C + 1
od
return r
Сіздер ойлағандай, Е (К, С) - бұл кірісіне К кілті берілетін және С ашық текст блогы берілетін блоктық шифрдың шифрлау функциясы. Басында GenerateBlocks функциясы С мәні нолге тең еместігін тексереді (бұл берілген генератордың кірісіне әлі ешқашан бастапқы сан берілмегенін білдірер еді). Цикл басталмас бұрын r айнымалысына бос жол меншіктеледі, содан кейін оған кезекпен әрбір келесі есептелінген блок қосылып отырады. Осындай түрмен құрылған жол функцияның шығыс мәні болып табылады.
Аккумулятор ақиқат кездейсоқ мәліметтерді әр түрлі энтропия көздерінен жинап генератордың бастапқы санын жаңартуда қолданады.
Біздің айналамызда бірнеше энтропия көздері бар дегеннен бастаймыз. Әрбір көз кез келген уақытта энтропиясы бар оқиғаны генерациялай алады. Бізді энтропияның көзі не болып ненің қолданылатыны қызықтырмайды. Бізге кем дегенде бір көздің қаскүнемге болжамды болмайтындай мәліметтерді генерацияласа жеткілікті. Біз қаскүнемнің қалай әрекет ететінін білмегендіктен барлық болжамсыз болып саналатын мәліметтерді энтропия көздеріне айналдырудың мәні бар. Жеке жағдайларда жаман емес кездейсоқ мәліметтердің көздері ретінде пернені басу және тышқанның ауысу уақытын ұсынуға болады. Мүмкіндігінше көбірек уақыттық энтропия көздерін табуға тырысыңыздар. Сіз пернені басудың дәл уақытын, тышқанды ауыстырудың және пернесінің басу дыбыстарын, сонымен бірге, қатты дискілердің және принтерлердің жауаптарын қолдана (мүмкін болса бір мезгілде) аласыз. Егер қаскүнем кейбір көздерден мәліметтерді көшіріп алса немесе болжап алса, қорқынышты емес; ең негізгісі, ол барлық көздерге осыны жасай алмаса жеткілікті.
Энтропия көздерін жасау құрастырушыдан көп уақыт пен күшті сұрауы мүмкін. Заң бойынша, энтропия көздері операциялық жүйенің аппараттық қамтамасыздандыруының драйверлеріне енгізілуі керек. Бұны қолданушы деңгейінде жүзеге асыру практика жағынан мүмкін емес.
Әрбір көзді біз оның 0-ден 255-ке дейінгі аралықта орналасқан ерекше номерінің көмегімен анықтаймыз. Құрастырушылар көдердің номерінің қалай - статистикалық немесе динамикалық болатынын өздері шешеді. Әрбір оқиғаның мәліметтері өзімен реттелген байттарды береді. Энтропия көздері тек болжауға болмайтын оқиға мәліметтерінен тұруы керек. Мысалы, уақыт туралы ақпарат дәл таймердің көп мәні бар екі немесе төрт байтымен берілуі мүмкін. Бұл мәліметтерге жыл, ай немесе күнді енгізудің мәні жоқ - қаскүнем оларды былай да біледі.
Біз әр түрлі көздерден жиналған оқиғалардың конкатенациясын орындаймыз. Осындай конкатенацияның нәтижесінде алынған жол оқиғаларды ерекше түрде кодтайтынына кепілдік беру үшін оны қатты структуралау керек. Әрбір оқиға үш немесе одан көп мәліметтер байтымен кодталады. Біріншісі кездейсоқ мәліметтердің көздерінің номерінен тұрады; екіншісі - қосымша мәліметтер байтының санынан тұрады; келесі байттар көздерден алынған мәліметтерден тұрады.
Жалғанкездейсоқ сандар генераторы бірінші рет іске қосылғанда, ол өзінің күйін жаңарту үшін мәліметтерді ешқайдан ала алмайды - өйткені бастапқы санның файлы әлі жоқ. Мысалы, жаңа сатылып алынған алдымен операциялық жүйесі компьюетрді алайық. Қазіргі заманғы операциялық жүйелер орнатылғаннан кейін бірнеше администрациялық криптографиялық кілттерді генерациялайды. Ол үшін оларға жалғанкездейсоқ сандардың генераторы керек. Өндірістік процесті жеңілдету үшін барлық компьютерлер бірдей етіліп шығарылады және бірдей мәліметтермен жүктеледі. Жаңа компьютерлерде бастапқы санның файлы әлі жоқ, сол себептен онымен біз қолдана алмаймыз. Біз энтропия көздері бір немесе бірнеше жаңаруларды орындау үшін жеткілікті кездейсоқ оқиғаларды генерациялап биткенше тоса тұрар едік, бірақ ол өте көп уақыт алар еді. Оған қоса, біз жай ғана қашан жүйеде жақсы криптографиялық кілттерді генерациялайтын жеткілікті энтропия жиналайтынын билмейміз.
Егер де орнатушы бағдарлама операциялық жүйені тікелей кескіндеу процесінде бастапқы санның файлын генерацияласа жақсы болар еді. Мысалы, ол жаңа бастапқы санның файлын әрбір орнату жүріп жатқан машинаға генерациялау үшін жеке компьютерде орнатылған генераторды қолдана алар еді. Оның орнына орнату бағдарламасы біраз бастапқы энтропияны жинау үшін қолданушыны тышқанмен қозғасын деп сұрай алар еді. Шешімді қабылдау нақты қоршаған ортаның ерекшеліктеріне байланысты, бірақ бастапқы энтропияның берілуінсіз ешқалай өте алмаймыз. Кейбір өте маңызды криптографиялық кілттердің операциялық жүйе орнатылып болғаннан кейін, энтропия аккумуляторы генератордың күйін түзу жаңарту үшін жеткілікті кездейсоқ оқиғаларды жинап үлгермей тұрып бірден генерациялануы әбден мүмкін.

КЕЗДЕЙСОҚ САНДАРДЫҢ ҒЫЛЫМ МЕН ТЕХНИКАДА ҚОЛДАНЫЛУЫ

Кездейсоқ сандардың аппараттық генераторы - өтіп жатқан физикалық процесс параметрлері негзінде кездейсоқ сандар тізбегін генерациялайтын құрылғы. Мұндай құрылғылар жұмысы фотоэлекрлік эффектілер, жылылық шулар секілді кванттық құбылыстардағы энтропияның сенімді көзі ретінде қолдануға негізделген. Кванттық процеске негізделген кездейсоқ сандар генераторы көбіне арнайы күшейткіштен және түрлендіргіштен тұрады. Күшейткіш өтіп жатқан физикалық құбылыс нәтижесінде алынған өте әлсіз сигналдарды күшейтеді. Түрлендіргіш сигналдарды цифрлық түрге түрлендіреді.
Кездейсоқ сандардың аппараттық генераторы - жай жұмыс жасайды немесе аралас тізбек өндіреді. Мұндай генераторларды қолдану ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Кездейсоқ сандар генераторлары
Сандарды спираль бойынша орналастыру
Компьютердің құрылымын және оның даму тарихын, принциптерін зерттеу
Python бағдарламалау тілін оңай үйрен
Жергілікті есептеу торабы
Жергілікті есептеу торабын жобалау
Деректер тасымалдау ортасына қатынас құру әдісі
Криптографиялық интерфейс
Паскаль тілі туралы жалпы түсінік
Дельфиде логикалық ойын бағадарламасын құру
Пәндер