Жасанды сандар генераторы - Pseudorandom number generator

A жалған кездейсоқ сандар генераторы (PRNG), сондай-ақ а детерминирленген кездейсоқ бит генераторы (DRBG),[1] болып табылады алгоритм қасиеттері реттіліктің қасиеттеріне жуық сандар тізбегін құру үшін кездейсоқ сандар. PRNG-дің бірізділігі шынымен емес кездейсоқ, өйткені ол PRNG деп аталатын бастапқы мәнмен толығымен анықталады тұқым (ол шынымен кездейсоқ мәндерді қамтуы мүмкін). Шынайы кездейсоқтыққа жақын тізбектерді қолдану арқылы жасауға болады аппараттық кездейсоқ сандар генераторлары, жалған кездейсоқ сан генераторлары санның пайда болу жылдамдығымен және олардың қайта жаңғыртылуымен практикада маңызды.[2]

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

Жақсы статистикалық қасиеттер PRNG шығарудың негізгі талабы болып табылады. Жалпы, PRNG-нің мақсатқа сай қолдану үшін кездейсоқтыққа жақын сандарды шығаратындығына сенімді болу үшін мұқият математикалық талдау қажет. Джон фон Нейман PRNG-ді шынымен кездейсоқ генератор ретінде қате түсіндіру туралы ескертті және «кездейсоқ цифрларды шығарудың арифметикалық әдістерін қарастыратын адам, әрине, күнәкар күйде» деп қалжыңдады.[3]

Детерминирленген генераторлармен ықтимал мәселелер

Іс жүзінде көптеген жалпы PRNG-дің нәтижелері көрсетіледі артефактілер бұл олардың статистикалық заңдылықты анықтау сынақтарынан сүрінуіне әкеледі. Оларға мыналар жатады:

  • Кейбір тұқым жағдайлары үшін күтілгеннен қысқа кезеңдер (мұндай жағдайда тұқымдық жағдайларды «әлсіз» деп атауға болады);
  • Үлкен көлемде құрылған сандар үшін біркелкі таралудың болмауы;
  • Бірізді құндылықтардың өзара байланысы;
  • Шығару реттілігінің өлшемді үлестірімі нашар;
  • Белгілі бір шамалар пайда болатын арақашықтықтар кездейсоқ реттіліктің үлестірілімінен өзгеше бөлінеді.

Қате PRNG-де көрсетілген ақаулар байқалмайтыннан (және белгісіз) өте айқынға дейін. Мысал ретінде RANDU ондаған жылдар бойы қолданылған кездейсоқ сандар алгоритмі негізгі компьютерлер. Бұл өте ақаулы болды, бірақ оның жеткіліксіздігі ұзақ уақыт бойы анықталмады.

Көптеген салаларда ХХІ ғасырға дейінгі кездейсоқ іріктеуге негізделген ғылыми жұмыс Монте-Карло имитациялар немесе басқа жолдармен PRNG-ге сенім арту сапасыз PRNG-ді қолдану нәтижесінде сенімділіктен әлдеқайда аз болды.[4] Қазіргі кезде де сақтықты талап етеді, бұл ескертуде көрсетілгендей Халықаралық статистикалық ғылым энциклопедиясы (2010).[5]

Тасталуы керек кең қолданылатын генераторлардың тізімі [жақсы генераторлар тізіміне қарағанда] әлдеқайда көп. Бағдарламалық жасақтама жеткізушілеріне соқыр сеніммен қарамаңыз. Сіздің сүйікті бағдарламалық жасақтаманың әдепкі RNG-ін тексеріп, қажет болса оны ауыстыруға дайын болыңыз. Бұл соңғы ұсыныс соңғы 40 жыл ішінде қайта-қайта жасалған. Мүмкін, таңқаларлықтай, ол 40 жыл бұрынғыдай маңызды болып қала береді.

Көрнекілік ретінде кеңінен қолданылатын бағдарламалау тілін қарастырыңыз Java. 2017 жылғы жағдай бойынша, Java әлі де a-ға сүйенеді сызықтық конгруденциялы генератор (LCG) оның PRNG үшін,[6][7] сапасы төмен - төменде қараңыз.

Үлкен проблемаларды болдырмауға және өте тез жұмыс істеуге мүмкіндік беретін танымал PRNG - бұл Мерсен Твистер (төменде талқыланған), ол 1998 жылы жарық көрді. Басқа да сапалы PRNG, есептеу және статистикалық көрсеткіштер тұрғысынан, осы күнге дейін және одан кейін жасалған; бұларды анықтауға болады Жалған кездейсоқ генераторлардың тізімі.

Сызықтық қайталануларға негізделген генераторлар

20 ғасырдың екінші жартысында PRNG үшін қолданылатын алгоритмдердің стандартты класы құрылды сызықтық конгруденциялы генераторлар. LCG сапасының жеткіліксіз екендігі белгілі болды, бірақ одан да жақсы әдістер қол жетімді болмады. Press et al. (2007) нәтижені осылай сипаттады: «Егер нәтижелері [LCG және басқа қатысты заттарға] байланысты күмән тудыратын барлық ғылыми жұмыстар кітапхана сөрелерінен жоғалып кетсе, әр сөреде сіздің жұдырығыңыздай үлкен алшақтық пайда болар еді».[8]

Жалған кездейсоқ генераторларды салудағы үлкен жетістік - оған негізделген техниканы енгізу болды сызықтық қайталанулар екі элементті өрісте; осындай генераторлар байланысты сызықтық кері байланыс ауысымының регистрлері.

1997 жылғы өнертабыс Мерсен Твистер,[9] атап айтқанда, бұрынғы генераторларға қатысты көптеген мәселелерден аулақ болды. Mersenne Twister 2 кезеңі бар19 937−1 қайталау (≈4.3.)×106001), екендігі дәлелденді тең бөлінді 623 өлшемге дейін (32 биттік мәндер үшін), және оны енгізу кезінде басқа статистикалық негізделген генераторларға қарағанда жылдамырақ жұмыс істеді.

2003 жылы, Джордж Марсаглия отбасын таныстырды xorshift генераторлар,[10] қайтадан сызықтық қайталануға негізделген. Мұндай генераторлар өте жылдам және сызықты емес жұмысымен бірге олар күшті статистикалық тексерулерден өтеді.[11][12][13]

2006 жылы АЛЛА генераторлар отбасы дамыды.[14] WELL генераторлары белгілі бір дәрежеде Mersenne Twister-дің сапасын жақсартады, ол өте кең күйге ие және нөлдік саны бар жай кеңістіктен өте баяу қалпына келеді.

Криптографиялық қауіпсіз псевдоорандалық сандар генераторлары

Жарамды PRNG криптографиялық қосымшалар а деп аталады криптографиялық қауіпсіз PRNG (CSPRNG). CSPRNG-ге қойылатын талап - тұқым туралы білмейтін қарсыласта тек қана болуы керек елеусіз артықшылығы генератордың шығу реттілігін кездейсоқ реттіліктен ажыратуда. Басқаша айтқанда, PRNG тек белгілі бір статистикалық тестілерден өтуі қажет болса, CSPRNG барлық статистикалық тестілерден өтуі керек көпмүшелік уақыт тұқым мөлшерінде. Бұл қасиеттің дәлелі қазіргі заманғы өнер деңгейінен тыс болса да есептеу күрделілігі теориясы, нақты дәлелдер келтірілуі мүмкін төмендету CSPRNG а проблема деп болжануда қиын, сияқты бүтін факторлау.[15] Жалпы, алгоритмді CSPRNG ретінде сертификаттаудан бұрын бірнеше жыл қарау қажет болуы мүмкін.

CSPRNG кейбір сыныптарына келесілер кіреді:

Болуы мүмкін екендігі көрсетілген NSA асимметрия енгізді артқы есік ішіне NIST сертификатталған жалған кездейсоқ сандар генераторы Dual_EC_DRBG.[19]

PRNG алгоритмдерінің көпшілігі тізбекті құрайды біркелкі бөлінген бірнеше сынақтың кез-келгенімен. Бұл теория және практика үшін орталық сұрақ криптография, жоғары сапалы PRNG нәтижесін шынымен кездейсоқ реттіліктен ажыратудың қандай-да бір әдісі бар ма. Бұл параметрде ажыратқыш белгілі PRNG алгоритмі қолданылғанын (бірақ инициализацияланған күйде емес) немесе кездейсоқ алгоритмнің қолданылғанын біледі және екеуін ажырата білуі керек.[20] PRNG-ді қолданатын көптеген криптографиялық алгоритмдер мен хаттамалардың қауіпсіздігі сәйкес PRNG-ді шынымен кездейсоқ реттілікті қолдануды ажырату мүмкін емес деген болжамға негізделген. Бұл тәуелділіктің қарапайым мысалдары ағын шифрлары, ол (көбінесе) жұмыс істейді эксклюзивті немесе - ашық мәтін PRNG шығаратын хабарлама, шығаратын шифрлықмәтін. Криптографиялық адекватты PRNG-ді жобалау өте қиын, өйткені олар қосымша критерийлерге сәйкес келуі керек. Оның кезеңінің мөлшері PRNG-дің криптографиялық жарамдылығының маңызды факторы болып табылады, бірақ жалғыз емес.

BSI бағалау критерийлері

Неміс Ақпараттық қауіпсіздік жөніндегі федералды бюро (Bundesamt für Sicherheit in der Informationstechnik, BSI) детерминирленген кездейсоқ сандар генераторларының сапасының төрт өлшемін белгіледі.[21] Олар осында жинақталған:

  • K1 - кездейсоқ сандардың реттілігі бір-бірінен өзгеше болу ықтималдығы жоғары болуы керек.
  • K2 - сандар тізбегі көрсетілген статистикалық сынақтарға сәйкес «шынымен кездейсоқ» сандардан ерекшеленбейді. Тесттер: монобит тест (тізбектегі бірліктер мен нөлдердің тең сандары), покер тест (. арнайы данасы квадраттық тест ), жүгіреді тест (әр түрлі ұзындықтағы жүгіру жиілігін есептейді), ұзақ мерзімдер тест (кезектіліктің 20 000 битінде 34 немесе одан үлкен ұзындықтың бар-жоғын тексереді) - бастап BSI[21] және NIST,[22] және автокорреляция тест. Шын мәнінде, бұл талаптар биттер тізбегінің қаншалықты жақсы екендігіне тест болып табылады: нөлдер мен олардың теңдіктері бірдей; тізбегінен кейін n нөлдер (немесе бірліктер), келесі ықтималдықтың жартысы бар бір (немесе нөл); және кез-келген таңдалған тізбектегі кезектегі келесі элементтер (лер) туралы ақпарат жоқ.
  • K3 - шабуылдаушы (барлық практикалық мақсаттар үшін) кез-келген берілгендіктен, кезектегі кез-келген алдыңғы немесе болашақ мәндерді немесе генератордың ішкі күйін есептеуі немесе басқаша болжауы мүмкін болмауы керек.
  • K4 - барлық практикалық мақсаттар үшін шабуылдаушы генератордың ішкі күйін, кезектегі кез-келген алдыңғы сандарды немесе ішкі генератордың кез-келген күйін есептеуі немесе болжауы мүмкін болмауы керек.

Криптографиялық қосымшалар үшін тек K3 немесе K4 стандарттарына сәйкес келетін генераторлар ғана қабылданады.

Математикалық анықтама

Берілген

  • - ықтималдықтың таралуы (қайда стандарт болып табылады Борел қойды нақты сызықта)
  • - Borel жиынтығының бос емес жиынтығы , мысалы. . Егер көрсетілмеген, ол да болуы мүмкін немесе , контекстке байланысты.
  • - бос емес жиынтық (Borel жиынтығы міндетті емес). Жиі арасындағы жиынтық Келіңіздер қолдау және оның интерьер; мысалы, егер аралықта біркелкі үлестіру болып табылады , мүмкін . Егер көрсетілмеген, ол қолдаудың кейбір жиынтығы деп қабылданады және контекстке байланысты оның интерьерін қамтиды.

Біз функцияны атаймыз (қайда натурал сандардың жиыны) а үшін жалған кездейсоқ сандар генераторы берілген мәндерді қабылдау егер және егер болса

( ақырлы жиынтықтағы элементтер санын білдіреді .)

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

Ерте тәсілдер

Ұсынған ертедегі компьютерлік PRNG Джон фон Нейман 1946 жылы, ретінде белгілі орта квадрат әдісі. Алгоритм келесідей: кез-келген санды алып, оны квадратқа бөліп, алынған санның ортаңғы цифрларын «кездейсоқ сан» ретінде алып тастаңыз, содан кейін сол санды келесі итерация үшін дән ретінде қолданыңыз. Мысалы, «1111» санын квадратқа бөлгенде «1234321» шығады, оны «01234321» деп жазуға болады, 8 таңбалы сан 4 таңбалы санның квадраты болады. Бұл «кездейсоқ» сан ретінде «2343» санын береді. Бұл процедураны қайталау келесі нәтиже ретінде «4896» береді және т.б. Фон Нейман 10 таңбалы сандарды қолданды, бірақ процесс бірдей болды.

«Орта квадрат» әдісінің проблемасы - барлық тізбектер ақыр соңында қайталанады, кейбіреулері өте тез, мысалы, «0000». Фон Нейман бұл туралы білген, бірақ ол бұл мақсатты өзінің мақсаттары үшін жеткілікті деп тапты және математикалық «түзетулер» қателерді жойғаннан гөрі оларды жасырады деп қорықты.

Фон Нейман аппараттық кездейсоқ сандардың генераторларын жарамсыз деп санады, өйткені егер олар шығарылған өнімді жазбаған болса, кейінірек оларды қателіктерге тексеру мүмкін болмады. Егер олар өз нәтижелерін жазған болса, олар компьютерлердің шектеулі жадын, сөйтіп компьютердің сандарды оқу және жазу қабілетін сарқып алар еді. Егер сандар карточкаларға жазылса, оларды жазуға және оқуға әлдеқайда көп уақыт кететін еді. Үстінде ENIAC ол қолданған компьютер, «орта квадрат» әдісі сандарды оқудан жүз есе жылдам жылдамдықпен шығарды перфокарталар.

Орташа квадрат әдісі содан бері неғұрлым жетік генераторлармен ығыстырылды.

Жақындағы жаңалық - орта квадратты а-мен біріктіру Вейл тізбегі. Бұл әдіс ұзақ мерзім ішінде сапалы өнім шығарады (қараңыз) Орташа алаң Weyl тізбегі PRNG ).

Біртекті емес генераторлар

Ықтималдықтың біркелкі емес үлестірімінен таңдалған сандарды a көмегімен жасауға болады біркелкі үлестіру PRNG және екі үлестірімді байланыстыратын функция.

Біріншіден, біреу керек жинақталған үлестіру функциясы мақсатты тарату :

Ескертіп қой . Кездейсоқ санды қолдану c ықтималдық тығыздығы ретінде «өту» үшін біркелкі үлестіруден аламыз

сондай-ақ

- бұл үлестірімнен кездейсоқ таңдалған сан .

Мысалы, кумулятивтік кері Гаусс таралуы кіріс ретінде диапазоны (0, 1) бар идеалды бірыңғай PRNG бар Гаусс үлестірімімен (тек оң) мәндер тізбегін шығарады; дегенмен

  • Практикалық сандық көріністерді қолданғанда үлестірімнің шексіз «құйрықтарын» ақырғы мәндерге дейін қысқарту керек.
  • Қайталап қайта есептеу сияқты құралдармен қысқартылуы керек алгоритм жылдам ұрпақ үшін.

Ұқсас пікірлер сияқты басқа біркелкі емес үлестірімдерді құруға қолданылады Рэли және Пуассон.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Баркер, Элейн; Баркер, Уильям; Берр, Уильям; Полк, Уильям; Smid, Miles (шілде 2012). «Негізгі басқаруға арналған ұсыныс» (PDF). NIST Арнайы жарияланым 800-57. NIST. Алынған 19 тамыз 2013.
  2. ^ «Жалған кездейсоқ генераторлар». Хан академиясы. Алынған 2016-01-11.
  3. ^ Фон Нейман, Джон (1951). «Кездейсоқ сандарға байланысты қолданылатын әр түрлі әдістер» (PDF). Ұлттық стандарттар бюросы қолданбалы математика сериясы. 12: 36–38.
  4. ^ Press et al. (2007), 7 тарау
  5. ^ L'Ecuyer, Pierre (2010). «Бірыңғай кездейсоқ сандардың генераторлары». Ловрикте, Миодраг (ред.) Халықаралық статистикалық ғылым энциклопедиясы. Спрингер. б. 1629. ISBN  3-642-04897-8.
  6. ^ Кездейсоқ (Java Platform SE 8), Java Platform Standard Edition 8 Documentation.
  7. ^ Random.java кезінде OpenJDK.
  8. ^ Press et al. (2007) §7.1
  9. ^ Мацумото, Макото; Нишимура, Такуджи (1998). «Mersenne twister: 623 өлшемді тең бөлінген біртекті жалған кездейсоқ сандар генераторы» (PDF). Модельдеу және компьютерлік модельдеу бойынша ACM операциялары. ACM. 8 (1): 3–30. дои:10.1145/272991.272995.
  10. ^ Марсаглия, Джордж (шілде 2003). «Xorshift RNGs». Статистикалық бағдарламалық қамтамасыз ету журналы. 8 (14).
  11. ^ С.Вигна. «xorshift * / xorshift + генераторлары және PRNG атысы».
  12. ^ Vigna S. (2016), «Marsaglia's xorshift генераторларын эксперименттік зерттеу», Математикалық бағдарламалық жасақтамадағы ACM транзакциялары, 42; дои:10.1145/2845077.
  13. ^ Vigna S. (2017), «Marsaglia's xorshift генераторларын одан әрі талқылау», Есептеу және қолданбалы математика журналы, 315; дои:10.1016 / j.cam.2016.11.006.
  14. ^ Паннетон, Франсуа; Л'Экуйер, Пьер; Мацумото, Макото (2006). «2 модуль бойынша сызықтық қайталануларға негізделген ұзақ мерзімді генераторлар жетілдірілген» (PDF). Математикалық бағдарламалық жасақтамадағы ACM транзакциялары. 32 (1): 1–16. дои:10.1145/1132973.1132974.
  15. ^ Ән. RSA-ға криптаналитикалық шабуылдар. Springer, 2007. б. 73. ISBN  978-0-387-48741-0.
  16. ^ Нильс Фергюсон, Брюс Шнайер, Тадаёси Кохно (2010). «Криптографиялық инженерия: жобалау принциптері және практикалық қолдану, 9.4 тарау: генератор» (PDF).CS1 maint: бірнеше есімдер: авторлар тізімі (сілтеме)
  17. ^ Клаус Поммеренинг (2016). «IV.4 Perfect кездейсоқ генераторлар». Криптология. uni-mainz.de. Алынған 2017-11-12. MICALI-SCHNORR генераторы
  18. ^ Пасс, Рафаэль. «Дәріс 11: Голдрейх-Левин теоремасы» (PDF). COM S 687 Криптографияға кіріспе. Алынған 20 шілде 2016.
  19. ^ Мэттью Грин. «Dual_EC_DRBG көптеген кемшіліктері».
  20. ^ Катц, Джонатан; Ехуда, Линделл (2014). Қазіргі заманғы криптографияға кіріспе. CRC баспасөз. б. 70.
  21. ^ а б Шиндлер, Вернер (2 желтоқсан 1999). «Детерминирленген кездейсоқ сандарды генераторлар үшін функционалдық сыныптар және бағалау әдістемесі» (PDF). Anwendungshinweise und Interpretationen (AIS). Bundesamt für Sicherheit in der Informationstechnik. 5-11 бет. Алынған 19 тамыз 2013.
  22. ^ «Криптографиялық модульдерге қойылатын қауіпсіздік талаптары». FIPS. NIST. 1994-01-11. б. 4.11.1 Қуатты сынау. Архивтелген түпнұсқа 2013 жылғы 27 мамырда. Алынған 19 тамыз 2013.

Библиография

Сыртқы сілтемелер