Kizalishi cha nambari za bahati nasibu ni nini?

Kizalishi cha nambari za bahati nasibu (RNG) ni mfumo unaozalisha nambari za nasibu au za nasibu bandia. Ikiwa nambari inayofuata inaweza kutabiriwa inategemea aina ya kizalishi. Baadhi ya vizalishi hutegemea mchakato wa kimaumbile, vingine hukokotoa nambari zake kwa kanuni ya hesabu, na baadhi ya kanuni zimejengwa ili hata mtu ambaye ameona matokeo yake asiweze kutabiri kitakachofuata. Kuonekana kwa nasibu na kutotabirika ni sifa mbili tofauti, na sehemu kubwa ya makala haya inahusu tofauti hiyo.

Vizalishi vya nambari za bahati nasibu vya maunzi

Kizalishi cha nambari za bahati nasibu cha maunzi (HRNG), ambacho pia huitwa kizalishi halisi cha nambari za bahati nasibu (TRNG), hupata nambari zake kutoka kwa mchakato wa kimaumbile. Vya zamani zaidi hufanya kazi mbele ya macho yetu: sarafu inayorushwa, kete inayotupwa, gurudumu la roulette. Sayansi ya makenika inaeleza kila kimoja kikamilifu, lakini gurudumu lililotengenezwa vizuri bado halitabiriki kiutendaji, kwa sababu tofauti ndogo sana katika jinsi kila mzunguko unavyoanza hukua na kuwa matokeo tofauti kabisa.

Vizalishi vya kisasa vya maunzi hupima matukio madogo sana badala yake: kelele za mfyatuko (shot noise) na kelele za joto katika saketi za kielektroniki, kelele za angahewa, na athari za kwanta. Hivi ni vyanzo vizuri vya entropia — kutotabirika kunakoweza kupimwa — lakini chanzo cha kimaumbile si kikamilifu kiasili: kinaweza kuwa na upendeleo wa nambari, kinaweza kuyumba na kinaweza kushindwa kufanya kazi, kwa hivyo ubora wake lazima utathminiwe na kufuatiliwa, na matokeo yake yachakatwe zaidi inapobidi, kama vile viwango kama NIST SP 800-90B vinavyoeleza. Vyanzo vya maunzi hutumiwa pale ambapo uhakikisho ni muhimu zaidi — hasa katika kriptografia, ambapo hutoa malighafi isiyotabirika ya kuanzia kwa funguo zilizo nyuma ya itifaki kama vile Usalama wa Safu ya Usafirishaji (TLS).

Vizalishi vya nambari za nasibu bandia

Njia mbadala ya kifaa cha kimaumbile ni kanuni ya hesabu. Kizalishi cha nambari za nasibu bandia (PRNG) huzalisha mfuatano unaoonekana wa nasibu lakini huamuliwa kabisa na thamani ya mwanzo inayoitwa mbegu (seed). Ipe kanuni hiyohiyo mbegu ileile na utapata mfuatano uleule kila wakati. Huo ni udhaifu pale ambapo matokeo lazima yasiweze kutabirika na mbegu au hali ya ndani inaweza kukadiriwa au kujengwa upya, na ni nguvu pale ambapo matokeo lazima yaweze kuzalishwa tena — uigaji au jaribio linaweza kuendeshwa tena kwa usahihi kabisa. PRNG pia ni za haraka, za gharama nafuu na rahisi kutekeleza, ndiyo maana programu nyingi hutegemea vizalishi hivi. Kanuni zinazojulikana sana ni pamoja na kizalishi cha mfuatano wa mstari (LCG), vizalishi vya xorshift na Mersenne Twister.

Mersenne Twister

Mersenne Twister, iliyochapishwa mnamo 1997 na Makoto Matsumoto na Takuji Nishimura, ni mojawapo ya vizalishi vya nambari za nasibu bandia vinavyotumiwa zaidi na ndiyo chaguo-msingi katika lugha nyingi za programu. Jina lake linatokana na kipindi chake — urefu wa mfuatano kabla haujajirudia — ambao katika toleo la kawaida, MT19937, ni nambari kuu ya Mersenne 219937 − 1. Inapita majaribio mengi ya takwimu ya unasibu na inafaa vizuri kwa uigaji. Hata hivyo, haikuundwa kutunza siri: kutoka matokeo 624 mfululizo ya biti 32 mtu yeyote anaweza kujenga upya hali yake ya ndani na kutabiri kila thamani inayofuata, kwa hivyo haipaswi kutumiwa kamwe kwa funguo za siri, manenosiri au kitu kingine chochote kinachopaswa kubaki bila kutabirika.

Vizalishi vilivyo salama kwa njia ya kriptografia na entropia

Mifumo mingi inahitaji mambo yote mawili kwa pamoja: kasi ya kanuni ya hesabu na kutotabirika kwa chanzo cha kimaumbile. Jibu lake ni kizalishi salama cha nambari za nasibu bandia kwa njia ya kriptografia (CSPRNG). Bado ni PRNG, lakini kimejengwa kwa namna ambayo kuona sehemu ya matokeo yake hakutoi njia ya kivitendo ya kutabiri mengine, na hupewa mbegu, na kupewa mbegu mpya mara kwa mara, kutoka kwa chanzo cha entropia halisi. Mbegu kutoka kwa chanzo cha kimaumbile haifanyi PRNG ya kawaida kuwa salama; kanuni yenyewe lazima iwe imeundwa kwa kusudi hilo. Chanzo cha kimaumbile kama vile kelele za joto au mpangilio wa matukio ya maunzi hutoa kiasi kidogo cha unasibu halisi, na CSPRNG hupata kutoka kwake, kwa kasi zaidi sana, mfuatano mrefu wa thamani. Mchanganyiko huu ndio ambao mfumo wa uendeshaji hutoa kwa programu zinazoendeshwa juu yake, na ndio kile ambacho "kizalishi cha nambari za bahati nasibu" humaanisha kwa vitendo leo. Huzalisha funguo za usimbaji fiche, tokeni za vipindi na manenosiri.

Nambari za nasibu kwenye kivinjari

JavaScript huipa ukurasa wa wavuti njia mbili zilizojengwa ndani ili kupata thamani za nasibu, na zinatoka katika makundi mawili tofauti. Math.random() ni PRNG ya kawaida: kiwango cha lugha huachia kanuni hiyo kwa kila kivinjari na hakiahidi chochote kuhusu usalama — inafaa kwa uhuishaji, haifai kwa droo ambayo mtu anaweza kuipinga. Nyingine ni Web Crypto API. Njia yake ya crypto.getRandomValues() hurejesha thamani za nasibu zilizo thabiti kwa njia ya kriptografia, zikizalishwa na CSPRNG iliyopewa mbegu kwa entropia ya mfumo wa uendeshaji.

Kizalishi chetu cha nambari za bahati nasibu mtandaoni hutumia Web Crypto API kwa kila droo, na nambari huzalishwa kwenye kivinjari chako badala ya kwenye seva. Chanzo hichohicho huendesha vizalishi vingine kwenye tovuti hii, iwe unatupa kete, unatupa sarafu au unatengeneza nenosiri.

Kutoka biti za nasibu hadi nambari katika masafa yako

Kizalishi kilicho salama kwa njia ya kriptografia ni nusu tu ya droo ya haki. Hutoa biti ghafi, na programu bado inapaswa kuzigeuza kuwa nambari katika masafa yako — na hapa ndipo upendeleo wa mabaki (modulo bias) unavyoweza kujipenyeza. Tuseme chanzo kinatoa thamani 0 hadi 9 kwa fursa sawa na unahitaji nambari kutoka 0 hadi 5. Kuchukua baki baada ya kugawanya kwa 6 kunaonekana kuwa jambo la asili, lakini 0, 1, 2 na 3 zinaweza kujitokeza kwa njia mbili kila moja na 4 na 5 kwa njia moja tu, hivyo kila moja ya nambari 0 hadi 3 ina nafasi ya 20%, na 4 na 5 zina 10% tu kila moja. Njia moja ya kuondoa fursa hizi zisizo sawa ni kutupa thamani ambazo hazilingani na kuchagua tena; nyenzo za nambari za bahati nasibu huangazia hili kwa kina.

Mambo mengine mawili huwashangaza watu. Kujirudia ni jambo la kawaida: nambari kamili kutoka 1 hadi 10 inapochaguliwa kwa kujitegemea na kila nambari ikiwa na fursa sawa, nambari iliyotoka punde ina fursa ileile ya 1 kati ya 10 ya kutokea tena kama nambari nyingine yoyote. Droo isiyo na marudio ni aina tofauti ya droo, si droo ya nasibu zaidi. Na kizalishi cha haki pekee hakifanyi utaratibu mzima kuwa wa haki: orodha ya washiriki na idadi ya majaribio ni muhimu vilevile, kama makala yetu kuhusu jinsi ya kuchagua mshindi wa shindano kwa nasibu inavyoeleza.