بے ترتیب نمبر جنریٹر کیا ہے؟

بے ترتیب نمبر جنریٹر (RNG) ایک ایسا نظام ہے جو بے ترتیب یا سیوڈو رینڈم نمبرز تیار کرتا ہے۔ اگلا نمبر واقعی پہلے سے معلوم کیا جا سکتا ہے یا نہیں، اس کا دارومدار جنریٹر کی قسم پر ہوتا ہے۔ کچھ جنریٹرز کسی طبعی عمل (physical process) پر انحصار کرتے ہیں، کچھ اپنے نمبرز کا حساب الگورتھم سے لگاتے ہیں، اور کچھ الگورتھم اس طرح بنائے جاتے ہیں کہ ان کے پچھلے نتائج کو دیکھ کر بھی اگلا نمبر نہیں جانا جا سکتا۔ بے ترتیب نظر آنا اور واقعی غیر متوقع ہونا دو الگ الگ خصوصیات ہیں، اور اس مضمون کا زیادہ تر حصہ اسی فرق کے بارے میں ہے۔

ہارڈویئر رینڈم نمبر جنریٹرز

ایک ہارڈویئر رینڈم نمبر جنریٹر (HRNG)، جسے حقیقی رینڈم نمبر جنریٹر (TRNG) بھی کہا جاتا ہے، اپنے نمبرز کسی طبعی عمل سے حاصل کرتا ہے۔ سب سے پرانے طریقے ہماری آنکھوں کے سامنے کام کرتے ہیں: اچھالا جانے والا سکہ، پھینکا جانے والا ڈائس یا رولیٹ وہیل۔ اگرچہ میکانکس کا علم ان میں سے ہر ایک کی مکمل وضاحت کرتا ہے، پھر بھی اچھی ساخت کا پہیہ عملی طور پر غیر متوقع رہتا ہے، کیونکہ ہر بار گھومنے کے آغاز میں ہونے والا معمولی سا فرق بالکل مختلف نتائج پیدا کرتا ہے۔

اس کے برعکس جدید ہارڈویئر جنریٹرز خوردبینی مظاہر کی پیمائش کرتے ہیں: الیکٹرانک سرکٹس میں تھرمل اور شاٹ شور (noise)، ماحولیاتی شور، یا کوانٹم اثرات۔ یہ اینٹروپی (entropy) کے اچھے ذرائع ہیں — یعنی ایسی غیر متوقع صورتحال جس کی پیمائش کی جا سکے — لیکن کوئی بھی طبعی ذریعہ فطرتی طور پر بے عیب نہیں ہوتا: اس میں غیر مساوی رجحان پیدا ہو سکتا ہے، وقت کے ساتھ تبدیلی آ سکتی ہے اور وہ خراب بھی ہو سکتا ہے، اسی لیے اس کے معیار کی جانچ اور نگرانی ضروری ہے، اور ضرورت پڑنے پر نتائج کو مزید پروسیس کیا جاتا ہے، جیسا کہ NIST SP 800-90B جیسے معیارات میں بیان کیا گیا ہے۔ ہارڈویئر ذرائع وہاں استعمال کیے جاتے ہیں جہاں گارنٹی سب سے زیادہ اہمیت رکھتی ہے — خاص طور پر کرپٹوگرافی میں، جہاں وہ سیکیورٹی پروٹوکولز جیسے کہ Transport Layer Security (TLS) کی سیکیورٹی کیز کے لیے غیر متوقع بنیادی مواد فراہم کرتے ہیں۔

سیوڈو رینڈم نمبر جنریٹرز

کسی طبعی آلے کا متبادل ایک الگورتھم ہے۔ ایک سیوڈو رینڈم نمبر جنریٹر (PRNG) ایک ایسی ترتیب پیدا کرتا ہے جو بظاہر بے ترتیب نظر آتی ہے لیکن وہ مکمل طور پر ایک ابتدائی قدر پر منحصر ہوتی ہے جسے سیڈ (seed) کہا جاتا ہے۔ ایک ہی سیڈ کو اسی الگورتھم میں داخل کریں تو ہر بار وہی ترتیب سامنے آئے گی۔ یہ اس جگہ ایک کمزوری ہے جہاں نتیجہ غیر متوقع ہونا لازمی ہو اور سیڈ یا اندرونی حالت کا اندازہ لگایا جا سکے، لیکن یہ وہاں ایک خوبی ہے جہاں نتائج کو دوبارہ دہرانا ضروری ہو — مثلاً کسی سائنسی نقالی (simulation) یا سافٹ ویئر ٹیسٹ کو ہو بہو دوبارہ چلانا۔ PRNGs تیز رفتار، کم خرچ اور لاگو کرنے میں آسان بھی ہوتے ہیں، اسی لیے زیادہ تر سافٹ ویئر ان پر انحصار کرتے ہیں۔ معروف الگورتھمز میں لکیری کانگریونشل جنریٹر (LCG)، xorshift جنریٹرز اور Mersenne Twister شامل ہیں۔

Mersenne Twister

Mersenne Twister، جسے 1997 میں ماکوتو ماتسوموتو اور تاکوجی نیشیمورا نے شائع کیا تھا، سب سے زیادہ استعمال ہونے والے سیوڈو رینڈم نمبر جنریٹرز میں سے ایک ہے اور بہت سی پروگرامنگ زبانوں میں ڈیفالٹ ہے۔ اس کا نام اس کے دورانیے (period) سے ماخوذ ہے — یعنی ترتیب کے دہرائے جانے سے پہلے کی لمبائی — جو کہ معیاری شکل MT19937 میں مرسین پرائم 219937 − 1 کے برابر ہے۔ یہ بے ترتیبی کے بیشتر شماریاتی ٹیسٹوں میں پورا اترتا ہے اور سائنسی نقالی کے لیے موزوں ہے۔ تاہم، یہ راز چھپانے کے لیے نہیں بنایا گیا: 32 بٹ کے مسلسل 624 نتائج سے کوئی بھی اس کی اندرونی حالت کو دوبارہ تیار کر سکتا ہے اور آنے والی ہر قدر کی پیشین گوئی کر سکتا ہے، اس لیے اسے سیکیورٹی کیز، پاس ورڈز یا کسی بھی ایسی چیز کے لیے استعمال نہیں کیا جانا چاہیے جس کا غیر متوقع رہنا ضروری ہو۔

کرپٹوگرافک طور پر محفوظ جنریٹرز اور اینٹروپی

بہت سی ایپلی کیشنز کو دونوں چیزوں کی ایک ساتھ ضرورت ہوتی ہے: الگورتھم کی رفتار اور کسی طبعی ذریعے کی غیر متوقع صلاحیت۔ اس کا حل ایک کرپٹوگرافک طور پر محفوظ سیوڈو رینڈم نمبر جنریٹر (CSPRNG) ہے۔ یہ بھی ایک PRNG ہی ہوتا ہے، لیکن اس طرح تیار کیا جاتا ہے کہ اس کے نتائج کے کچھ حصے کو دیکھ کر باقی نتائج کا اندازہ لگانے کا کوئی عملی طریقہ ممکن نہیں ہوتا، اور اسے حقیقی اینٹروپی کے ذریعے باقاعدگی سے نئی بنیاد (reseed) فراہم کی جاتی ہے۔ کسی طبعی ذریعے سے حاصل کردہ سیڈ اکیلے ہی کسی عام PRNG کو محفوظ نہیں بناتا؛ بلکہ الگورتھم کا اس مقصد کے لیے خصوصی طور پر ڈیزائن ہونا ضروری ہے۔ تھرمل شور یا ہارڈویئر کے واقعات کا وقت حقیقی بے ترتیبی کی ایک چھوٹی مقدار فراہم کرتا ہے، اور CSPRNG اس سے کہیں زیادہ تیزی سے اقدار کی ایک طویل ترتیب حاصل کرتا ہے۔ یہ وہی امتزاج ہے جو ایک آپریٹنگ سسٹم اس پر چلنے والے پروگراموں کو پیش کرتا ہے، اور آج کل عملی طور پر "بے ترتیب نمبر جنریٹر" کا عام طور پر یہی مطلب لیا جاتا ہے۔ یہ خفیہ کاری کیز (encryption keys)، سیشن ٹوکنز اور پاس ورڈز تیار کرتا ہے۔

براؤزر میں بے ترتیب نمبرز

جاوا اسکرپٹ کسی ویب پیج کو بے ترتیب اقدار حاصل کرنے کے دو بلٹ ان طریقے فراہم کرتا ہے، اور ان کا تعلق الگ الگ کلاسوں سے ہے۔ Math.random() ایک عام PRNG ہے: زبان کا معیار اس کے الگورتھم کو براؤزر کی صوابدید پر چھوڑ دیتا ہے اور سیکیورٹی کا کوئی وعدہ نہیں کرتا — یہ کسی اینیمیشن کے لیے تو ٹھیک ہے، لیکن کسی ایسے مقابلے کی قرعہ اندازی کے لیے غیر موزوں ہے جس پر تنازع ہو سکے۔ دوسرا طریقہ Web Crypto API ہے۔ اس کا فنکشن crypto.getRandomValues() کرپٹوگرافک طور پر مضبوط رینڈم اقدار واپس کرتا ہے، جو ایک ایسے CSPRNG سے تیار ہوتی ہیں جس کی بنیاد آپریٹنگ سسٹم کی اینٹروپی پر رکھی جاتی ہے۔

ہمارا آن لائن بے ترتیب نمبر جنریٹر ہر قرعہ اندازی کے لیے Web Crypto API کا استعمال کرتا ہے، اور تمام نمبرز سرور کے بجائے آپ کے براؤزر میں تیار ہوتے ہیں۔ یہی نظام اس سائٹ کے دیگر ٹولز کو بھی چلاتا ہے، چاہے آپ ڈائس رولر استعمال کریں، سکہ اچھالنا منتخب کریں یا نیا پاس ورڈ بنانے کے لیے مضبوط پاس ورڈ جنریٹر پر جائیں۔

بے ترتیب بٹس سے مطلوبہ حد کے نمبر تک

ایک کرپٹوگرافک طور پر محفوظ جنریٹر منصفانہ انتخاب کی صرف نصف شرط ہے۔ یہ خام بٹس فراہم کرتا ہے، اور پروگرام کو انہیں آپ کی مطلوبہ حد میں نمبر کے طور پر تبدیل کرنا ہوتا ہے — اور یہیں پر غیر مساوی امکانات (modulo bias) داخل ہو سکتے ہیں۔ فرض کریں کہ ذریعہ 0 سے 9 تک کے اعداد مساوی امکان کے ساتھ دیتا ہے اور آپ کو 0 سے 5 کے درمیان ایک عدد کی ضرورت ہے۔ 6 سے تقسیم کرنے کے بعد باقی بچنے والا عدد (remainder) لینا ایک فطری طریقہ معلوم ہو سکتا ہے، لیکن اس صورت میں 0، 1، 2 اور 3 میں سے ہر ایک دو طریقوں سے حاصل ہو سکتا ہے جبکہ 4 اور 5 صرف ایک طریقے سے؛ لہٰذا 0 سے 3 تک کے ہر عدد کا امکان 20% ہو جاتا ہے اور 4 اور 5 کا صرف 10%۔ اس غیر مساوی رجحان کو دور کرنے کا ایک طریقہ یہ ہے کہ جو اقدار حد میں نہ آئیں انہیں خارج کر دیا جائے اور دوبارہ نمبر چنا جائے؛ ہمارے بے ترتیب نمبر مواد میں اس کی تفصیل بیان کی گئی ہے۔

دو اور باتیں لوگوں کو حیران کرتی ہیں۔ نمبرز کا دہرایا جانا بالکل معمول کی بات ہے: جب 1 سے 10 تک کا کوئی پورا عدد آزادانہ طور پر منتخب کیا جائے اور ہر نمبر کا امکان برابر ہو، تو جو نمبر ابھی منتخب ہوا ہے اس کے دوبارہ آنے کا امکان بھی دیگر تمام نمبرز کی طرح 10 میں سے 1 ہی ہوتا ہے۔ بغیر تکرار کے قرعہ اندازی ایک مختلف نوعیت کا عمل ہے، کوئی زیادہ بے ترتیب انتخاب نہیں۔ اور تنہا ایک منصفانہ جنریٹر پورے عمل کو منصفانہ نہیں بناتا: شرکاء کی فہرست اور کوششوں کی تعداد بھی اتنی ہی اہمیت رکھتی ہے، جیسا کہ ہماری گائیڈ برائے مقابلے کا فاتح کیسے منتخب کریں میں واضح کیا گیا ہے۔