Apa iku panggawe angka acak?

Panggawe angka acak (RNG) yaiku sistem sing ngasilake angka acak utawa acak semu. Apa angka sabanjure pancen bisa ditebak gumantung marang jinis generator sing digunakake. Sawetara generator nggunakake proses fisik, saperangan ngitung angkane nganggo algoritma, lan sawetara algoritma dirancang supaya wong sing wis ndeleng asile tetep ora bisa nebak apa sing bakal muncul sabanjure. Katon acak lan ora bisa ditebak iku rong sipat sing beda, lan sabagian gedhe artikel iki ngrembug babagan bedane kasebut.

Panggawe angka acak perangkat keras

Panggawe angka acak perangkat keras (HRNG), sing uga diarani panggawe angka acak sejati (TRNG), njupuk angkane saka proses fisik. Piranti sing paling lawas makarya ing ngarep mripat kita: koin sing diuncalake, dadu sing digulungake, utawa rodha rolet. Hukum mekanika bisa njlentrehake saben obahing piranti kasebut, nanging rodha sing digawe kanthi apik tetep ora bisa ditebak kanthi praktis, amarga beda cilik banget nalika muter wiwitan bisa nuwuhake asil pungkasan sing babar blas beda.

Generator perangkat keras modern ngukur fénoména mikroskopis: derau tembakan (shot noise) lan derau termal ing sirkuit elektronik, gangguan atmosfer, utawa efek kuantum. Iki minangka sumber entropi sing apik — tingkat kahanan ora bisa ditebak sing bisa diukur — nanging sumber fisik ora mesthi sampurna: piranti iki bisa condong, bisa ngalami owah-owahan (drift), lan bisa gagal, saengga kualitase kudu ditaksir lan diawasi, sarta asile kudu diproses luwih lanjut yen dibutuhake, kaya sing dijelasake ing standar NIST SP 800-90B. Sumber perangkat keras digunakake nalika jaminan keamanan dadi babagan sing paling penting — utamane ing kriptografi, ing ngendi piranti iki nyedhiyakake bahan wiwitan sing ora bisa ditebak kanggo kunci ing mburi protokol kayata Transport Layer Security (TLS).

Panggawe angka acak semu

Pilihan liyane saliyane piranti fisik yaiku nggunakake algoritma. Panggawe angka acak semu (PRNG) ngasilake urutan angka sing katon acak nanging sejatine wis ditemtokake kanthi lengkap dening nilai wiwitan sing diarani wiji (seed). Menehi wiji sing padha menyang algoritma sing padha bakal ngasilake urutan sing padha saben wektu. Iki minangka kelemahan nalika asil kudu ora bisa ditebak lan wiji utawa kahanan internal bisa ditebak utawa dibangun maneh, nanging uga dadi kaluwihan nalika asil kudu bisa dibaleni persis — kaya simulasi utawa uji coba sing kudu dilakokake maneh kanthi padha. PRNG uga cepet, murah, lan gampang ditrapake, mula sabagian gedhe piranti lunak ngandelake algoritma iki. Algoritma sing kondhang kalebu generator kongruensial linier (LCG), generator xorshift, lan Mersenne Twister.

Mersenne Twister

Mersenne Twister, sing diterbitake ing taun 1997 dening Makoto Matsumoto lan Takuji Nishimura, minangka salah sawijining panggawe angka acak semu sing paling akeh digunakake lan dadi standar gawan ing akeh basa pamrograman. Jenenge asale saka periode putarane — dawane urutan sadurunge mbaleni maneh — sing ing varian standar MT19937 arupa wilangan prima Mersenne 219937 − 1. Algoritma iki lolos saka sabagian gedhe tes statistik babagan kaaslian acak lan cocog kanggo simulasi. Nanging, algoritma iki ora dirancang kanggo nyimpen wadi: saka 624 asil 32-bit sing runtut, sapa wae bisa mbangun maneh kahanan jerone lan nebak saben nilai sabanjure, mula ora kena digunakake kanggo kunci, tembung sandhi, utawa babagan liyane sing kudu tetep ora bisa ditebak.

Generator sing aman sacara kriptografis lan entropi

Akeh aplikasi mbutuhake rong babagan bebarengan: kacepetan algoritma lan kahanan sing ora bisa ditebak saka sumber fisik. Wangsulane yaiku panggawe angka acak semu sing aman sacara kriptografis (CSPRNG). Piranti iki tetep arupa PRNG, nanging dirancang supaya ndeleng saperangan asile ora menehi cara praktis kanggo nebak sisa angka liyane, lan diwenehi wiji, sarta diwenehi wiji anyar kanthi ajeg, saka sumber entropi nyata. Wiji saka sumber fisik ora ndadekake PRNG biyasa dadi aman; algoritmane dhewe kudu dirancang khusus kanggo iku. Sumber fisik kayata derau termal utawa wektu kedadeyan perangkat keras nyedhiyakake sethithik kahanan acak sejati, lan saka iku CSPRNG ngasilake urutan nilai sing dawa kanthi luwih cepet. Gabungan iki sing disedhiyakake sistem operasi kanggo program-program sing mlaku ing jerone, lan dadi apa sing umume diarani "panggawe angka acak" ing praktik saiki. Piranti iki ngasilake kunci enkripsi, token sesi, lan tembung sandhi.

Angka acak ing browser

JavaScript menehi rong cara bawaan ing kaca web kanggo entuk nilai acak, lan kekarone kalebu ing jinis sing beda. Math.random() minangka PRNG biyasa: standar basa masrahake algoritmene marang saben browser lan ora njamin babagan keamanan — cocog kanggo animasi, nanging ora pantes kanggo undian sing bisa ditentang dening wong liya. Cara liyane yaiku Web Crypto API. Metodhe crypto.getRandomValues() ngasilake nilai acak sing kuwat sacara kriptografis, sing diasilake dening CSPRNG sing nampa wiji saka entropi sistem operasi.

Panggawe angka acak online kita nggunakake Web Crypto API kanggo saben undian, lan angkane diasilake ing browser sampeyan, dudu ing server. Sumber sing padha uga ngobahake generator liyane ing situs iki, apa sampeyan arep nggulungake dadu, nguncalake koin, utawa nggawe tembung sandhi.

Saka bit acak dadi angka ing rentang sampeyan

Generator sing aman sacara kriptografis mung setengah saka undian sing adil. Piranti iki nyedhiyakake bit mentah, lan program kudu ngowahi bit kasebut dadi angka ing rentang sampeyan — lan ing kene iki condong bisa mlebu. Upamane sumber ngasilake nilai 0 nganti 9 kanthi kemungkinan sing padha lan sampeyan mbutuhake angka saka 0 nganti 5. Njupuk sisa sawise dibagi 6 katon lumrah, nanging angka 0, 1, 2, lan 3 banjur bisa muncul liwat rong cara, dene 4 lan 5 mung liwat siji cara, saengga saben angka 0 nganti 3 duwe kemungkinan 20%, dene 4 lan 5 mung 10% saben angka. Salah siji cara kanggo ngilangi rasa condong iki (modulo bias) yaiku mbuwang nilai sing ora cocog lan ngulang undian; panduan panggawe angka acak nerangake babagan iki kanthi luwih rinci.

Ana rong perkara maneh sing asring ngagetake wong. Pengulangan iku lumrah: nalika angka wutuh saka 1 nganti 10 diundhi kanthi mandhiri lan saben angka duwe kemungkinan sing padha, angka sing nembe metu duwe kemungkinan 1 saka 10 sing padha kanggo muncul maneh kaya angka liyane. Undian tanpa pengulangan minangka jinis undian sing beda, dudu luwih acak. Lan generator sing adil dhewe ora ndadekake kabeh tata cara dadi adil: dhaptar peserta lan cacahe nyoba uga padha wigatine, kaya sing dijelasake ing panduan kita babagan cara milih pemenang undian kanthi acak.