Təsadüfi ədəd generatoru nədir?

Təsadüfi ədəd generatoru (RNG) təsadüfi və ya psevdotəsadüfi ədədlər hasil edən sistemdir. Növbəti ədədin əvvəlcədən təxmin edilə bilib-bilməməsi generatorun növündən asılıdır. Bəzi generatorlar fiziki prosesə əsaslanır, bəziləri ədədləri alqoritm vasitəsilə hesablayır, bəzi alqoritmlər isə elə qurulub ki, hətta onların əvvəlki nəticələrini görən şəxs belə növbəti dəyəri təxmin edə bilmir. Təsadüfi görünmək və əvvəlcədən təxmin edilə bilməmək fərqli xüsusiyyətlərdir və bu məqalənin əsas hissəsi məhz bu fərqdən bəhs edir.

Aparat təsadüfi ədəd generatorları

Həmçinin həqiqi təsadüfi ədəd generatoru (TRNG) adlanan aparat təsadüfi ədəd generatoru (HRNG) ədədləri fiziki prosesdən əldə edir. Bunların ən qədimlərini adi gözlə izləmək olur: atılan sikkə, diyirlənən zər, rulet çarxı. Klassik mexanika onların hər birini tam təsvir edir, lakin yaxşı hazırlanmış çarx praktikada yenə də təxminedilməzdir, çünki hər fırlanmanın başlanğıcındakı cüzi fərqlər tamamilə fərqli nəticələrə gətirib çıxarır.

Müasir aparat generatorları isə mikroskopik hadisələri ölçür: elektron dövrələrdəki qırma küyü və istilik küyü, atmosfer küyü, kvant effektləri. Bunlar yaxşı entropiya mənbələridir — yəni ölçülə bilən təxminedilməzlikdir — lakin fiziki mənbə təbiəti etibarilə mükəmməl deyil: onda nəticələrin bərabər şansa malik olmaması müşahidə edilə bilər, o, zamanla meyil edə və sıradan çıxa bilər. Buna görə də onun keyfiyyəti qiymətləndirilməli, nəzarətdə saxlanılmalı və lazım gəldikdə nəticələri əlavə emaldan keçirilməlidir; NIST SP 800-90B kimi standartlar məhz bunu təsvir edir. Aparat mənbələrindən zəmanətin ən vacib olduğu sahələrdə — hər şeydən əvvəl kriptoqrafiyada istifadə olunur, burada onlar Nəqliyyat Səviyyəsi Təhlükəsizliyi (TLS) kimi protokolların açarları üçün təxminedilməz ilkin materialı təmin edir.

Psevdotəsadüfi ədəd generatorları

Fiziki qurğunun alternativi alqoritmdir. Psevdotəsadüfi ədəd generatoru (PRNG) zahirən təsadüfi görünən, lakin tamamilə ilkin dəyər (seed) adlanan qiymətlə müəyyən olunan ardıcıllıq yaradır. Eyni alqoritmə eyni ilkin dəyəri versəniz, hər dəfə tamamilə eyni ardıcıllığı əldə edərsiniz. Bu xüsusiyyət nəticənin təxminedilməz olmasının vacib olduğu və ilkin dəyərin yaxud daxili vəziyyətin təxmin edilə və ya bərpa edilə bildiyi hallarda bir zəiflikdir; lakin nəticənin yenidən təkrarlana bilməsinin vacib olduğu yerlərdə — simulyasiya və ya sınaqların dəqiq şəkildə yenidən icra edilməsində — böyük bir üstünlükdür. PRNG-lər həm də sürətli, ucuz və asan tətbiq olunandır, buna görə də əksər proqram təminatı onlara arxalanır. Geniş tanınan alqoritmlər sırasına xətti konqruent generator (LCG), xorshift generatorları və Mersenne Twister daxildir.

Mersenne Twister

1997-ci ildə Makoto Matsumoto və Takuji Nishimura tərəfindən dərc edilmiş Mersenne Twister ən geniş istifadə olunan psevdotəsadüfi ədəd generatorlarından biridir və bir çox proqramlaşdırma dillərində susmaya görə tətbiq olunur. Onun adı dövründən — yəni ardıcıllığın təkrarlanmağa başlamazdan əvvəlki uzunluğundan qaynaqlanır ki, bu da standart variant olan MT19937-də Mersen sadə ədədi 219937 − 1 bərabərdir. O, təsadüfiliyin əksər statistik testlərindən uğurla keçir və simulyasiyalar üçün çox uyğundur. Lakin o, sirləri saxlamaq üçün layihələndirilməmişdir: ardıcıl 624 ədəd 32 bitlik çıxışdan hər kəs onun daxili vəziyyətini bərpa edə və sonrakı bütün dəyərləri təxmin edə bilər, buna görə də o, açarlar, şifrələr və ya təxminedilməz qalmalı olan heç bir məqsəd üçün istifadə edilməməlidir.

Kriptoqrafik cəhətdən təhlükəsiz generatorlar və entropiya

Bir çox tətbiqlər hər iki xüsusiyyətə eyni anda ehtiyac duyur: alqoritmin sürəti və fiziki mənbənin təxminedilməzliyi. Həll yolu kriptoqrafik cəhətdən təhlükəsiz psevdotəsadüfi ədəd generatorudur (CSPRNG). Bu da bir PRNG-dir, lakin elə qurulub ki, onun dəyərlərinin bir hissəsini görmək qalanını təxmin etmək üçün heç bir praktiki imkan vermir; həmçinin o, real entropiya mənbəyindən ilkin dəyərlə təmin edilir və müntəzəm olaraq yenilənir. Fiziki mənbədən gələn ilkin dəyər adi PRNG-ni təhlükəsiz etmir; alqoritm məhz bunun üçün layihələndirilməlidir. İstilik küyü və ya aparat hadisələrinin vaxtı kimi fiziki mənbə az miqdarda həqiqi təsadüfilik təmin edir və CSPRNG ondan daha yüksək sürətlə uzun dəyərlər ardıcıllığı alır. Bu kombinasiya əməliyyat sisteminin onun üzərində işləyən proqramlara təklif etdiyi sistemdir və bu gün praktikada "təsadüfi ədəd generatoru" dedikdə adətən məhz bu nəzərdə tutulur. O, şifrələmə açarları, sessiya identifikatorları və şifrələr yaradır.

Brauzerdə təsadüfi ədədlər

JavaScript veb-səhifəyə təsadüfi dəyərlər əldə etmək üçün iki daxili üsul təqdim edir və onlar fərqli siniflərə aiddir. Math.random() adi PRNG-dir: dil standartı alqoritmin seçimini hər brauzerin öhdəsinə buraxır və təhlükəsizlik barədə heç bir zəmanət vermir — animasiya üçün yararlıdır, lakin kiminsə etiraz edə biləcəyi tiraj üçün tamamilə yararsızdır. Digəri isə Web Crypto API-dir. Onun crypto.getRandomValues() metodu əməliyyat sisteminin entropiyası ilə təmin edilən CSPRNG tərəfindən hasil olunmuş kriptoqrafik cəhətdən güclü təsadüfi dəyərlər qaytarır.

Bizim onlayn təsadüfi ədəd generatorumuz hər tiraj üçün Web Crypto API-dən istifadə edir və ədədlər serverdə deyil, sizin brauzerinizdə hasil edilir. Bu saytdakı digər generatorlar da eyni mənbədən qidalanır — istər zər atın, istər sikkə atın, istərsə də şifrə yaradın.

Təsadüfi bitlərdən diapazonunuzdakı ədədə qədər

Kriptoqrafik cəhətdən təhlükəsiz generator ədalətli püşkatmanın yalnız yarısıdır. O, ilkin bitləri verir, lakin proqram hələ də onları sizin diapazonunuzdakı ədədə çevirməlidir — və məhz burada bərabər olmayan şanslar araya girə bilər. Tutaq ki, mənbə 0 ilə 9 arasındakı dəyərləri bərabər şansla verir və sizə 0 ilə 5 arasında bir ədəd lazımdır. 6-ya böldükdən sonra qalığı götürmək təbii görünür, lakin bu zaman 0, 1, 2 və 3 ədədlərinin hər biri iki yolla alına bildiyi halda, 4 və 5 yalnız bir yolla alına bilər; beləliklə, 0 ilə 3 arasındakı ədədlərin hər birinin 20% şansı olduğu halda, 4 və 5-in hər biri cəmi 10% şansa malik olur. Qeyri-bərabər şansları aradan qaldırmağın yollarından biri uyğun gəlməyən dəyərləri kənara atıb yenidən püşk atmaqdır; təsadüfi ədədlər üzrə materiallar bu barədə ətraflı məlumat verir.

İnsanları təəccübləndirən daha iki məqam var. Təkrarlanmalar tamamilə normaldır: 1 ilə 10 arasındakı tam ədəd müstəqil şəkildə seçildikdə və hər ədəd bərabər ehtimala malik olduqda, indicə çıxan ədədin yenidən çıxma şansı da digərləri kimi 10-da 1 təşkil edir. Təkrarsız seçim fərqli növ seçimdir, daha təsadüfi seçim deyil. Və təkcə ədalətli generator bütün proseduru ədalətli etmir: iştirakçıların siyahısı və cəhdlərin sayı da eyni dərəcədə əhəmiyyətlidir, necə ki müsabiqədə təsadüfi qalibi necə seçmək olar haqqında məqaləmizdə izah olunur.