சீரற்ற எண் உருவாக்கி என்றால் என்ன?

சீரற்ற எண் உருவாக்கி (RNG) என்பது சீரற்ற அல்லது போலி சீரற்ற எண்களை உருவாக்கும் ஒரு அமைப்பாகும். அடுத்த எண் உண்மையில் கணிக்கக்கூடியதா என்பது ஜெனரேட்டரின் வகையைப் பொறுத்தது. சில ஜெனரேட்டர்கள் ஒரு இயற்பியல் செயல்முறையைப் பயன்படுத்துகின்றன, சில அல்காரிதம் மூலம் எண்களைக் கணக்கிடுகின்றன, மேலும் சில அல்காரிதம்கள் அவற்றின் முடிவுகளைப் பார்த்த ஒருவராலும் அடுத்த எண்ணை கணிக்க முடியாதவாறு கட்டமைக்கப்பட்டுள்ளன. சீரற்றதாகத் தோன்றுவதும் கணிக்க முடியாததாக இருப்பதும் வெவ்வேறு பண்புகள்; இந்தக் கட்டுரையின் பெரும்பாலான பகுதி இந்த வேறுபாட்டைப் பற்றியதே ஆகும்.

வன்பொருள் சீரற்ற எண் உருவாக்கிகள்

வன்பொருள் சீரற்ற எண் உருவாக்கி (HRNG), அல்லது உண்மையான சீரற்ற எண் உருவாக்கி (TRNG) என்று அழைக்கப்படுவது, ஒரு இயற்பியல் செயல்முறையிலிருந்து எண்களைப் பெறுகிறது. பழமையானவை நம் கண் முன்னே செயல்படுகின்றன: சுண்டப்படும் நாணயம், உருட்டப்படும் பகடை, ரவுலட் சக்கரம். இயக்கவியல் விதிகள் ஒவ்வொன்றையும் முழுமையாக விளக்குகின்றன; இருப்பினும், நன்கு தயாரிக்கப்பட்ட சக்கரத்தின் முடிவை நடைமுறையில் கணிக்க முடியாது, ஏனெனில் சுழற்சி தொடங்கும் விதத்தில் ஏற்படும் மிகச்சிறிய வேறுபாடுகள் முற்றிலும் மாறுபட்ட முடிவுகளாக மாறுகின்றன.

நவீன வன்பொருள் உருவாக்கிகள் நுண்ணிய இயற்பியல் நிகழ்வுகளை அளவிடுகின்றன: மின்னணு சுற்றுகளில் உள்ள ஷாட் இரைச்சல் மற்றும் வெப்ப இரைச்சல், வளிமண்டல இரைச்சல், குவாண்டம் விளைவுகள். இவை என்ட்ரோபியின் — அளவிடக்கூடிய கணிக்க முடியாத தன்மை — நல்ல ஆதாரங்கள்; ஆனால் ஒரு இயற்பியல் ஆதாரம் இயல்பிலேயே முழுமையானது அல்ல: அது சமமற்ற வாய்ப்புகளைக் கொண்டிருக்கலாம், மாறக்கூடும், அல்லது தோல்வியடையக்கூடும், எனவே அதன் தரம் மதிப்பீடு செய்யப்பட்டு கண்காணிக்கப்பட வேண்டும், மேலும் தேவைப்படும் இடங்களில் அதன் மதிப்புகள் மேலும் செயலாக்கப்பட வேண்டும்; இதைத்தான் NIST SP 800-90B போன்ற தரநிலைகள் விவரிக்கின்றன. பாதுகாப்பு உத்தரவாதம் மிக முக்கியமான இடங்களில் வன்பொருள் மூலங்கள் பயன்படுத்தப்படுகின்றன — குறிப்பாக குறியாக்கவியலில், டிரான்ஸ்போர்ட் லேயர் செக்யூரிட்டி (TLS) போன்ற நெறிமுறைகளின் விசைகளுக்கான கணிக்க முடியாத தொடக்கப் பொருளை இவை வழங்குகின்றன.

போலி சீரற்ற எண் உருவாக்கிகள்

இயற்பியல் சாதனத்திற்கு மாற்றாக அமைவது அல்காரிதம் ஆகும். போலி சீரற்ற எண் உருவாக்கி (PRNG) சீரற்றதாகத் தோன்றும் ஒரு வரிசையை உருவாக்குகிறது, ஆனால் அது விதை (seed) எனப்படும் தொடக்க மதிப்பால் முழுமையாக தீர்மானிக்கப்படுகிறது. அதே அல்காரிதத்திற்கு அதே விதையைக் கொடுத்தால், ஒவ்வொரு முறையும் ஒரே வரிசை முடிவுகளையே பெறுவீர்கள். ஒரு முடிவு கணிக்க முடியாததாக இருக்க வேண்டிய இடத்திலும், விதை அல்லது உள் நிலையை யூகிக்கவோ அல்லது மறுகட்டமைக்கவோ முடிந்தால் அது ஒரு பலவீனமாகும்; ஆனால் முடிவை மீண்டும் உருவாக்க வேண்டிய இடங்களில் அது பலமாகும் — ஒரு உருவகப்படுத்துதல் அல்லது சோதனையை துல்லியமாக மீண்டும் இயக்க முடியும். PRNG-கள் வேகமானவை, குறைந்த செலவுடையவை மற்றும் செயல்படுத்த எளிதானவை, இதனால்தான் பெரும்பாலான மென்பொருள்கள் இவற்றைச் சார்ந்துள்ளன. நேரியல் ஒருங்கமைவு உருவாக்கி (LCG), xorshift உருவாக்கிகள் மற்றும் Mersenne Twister ஆகியவை நன்கு அறியப்பட்ட அல்காரிதம்களில் அடங்கும்.

Mersenne Twister

1997 இல் Makoto Matsumoto மற்றும் Takuji Nishimura ஆகியோரால் வெளியிடப்பட்ட Mersenne Twister, மிகவும் பரவலாகப் பயன்படுத்தப்படும் போலி சீரற்ற எண் உருவாக்கிகளில் ஒன்றாகும், மேலும் பல நிரலாக்க மொழிகளில் இயல்புநிலையாக உள்ளது. அதன் பெயர் அதன் சுழற்சி காலத்திலிருந்து வருகிறது — அந்த வரிசை மீண்டும் தொடங்குவதற்கு முந்தைய நீளம் — இது நிலையான வகையான MT19937 இல், மெர்சென் பகா எண்ணான 219937 − 1 ஆகும். இது பெரும்பாலான புள்ளியியல் சோதனைகளில் தேர்ச்சி பெற்று உருவகப்படுத்துதல்களுக்கு நன்றாகப் பொருந்துகிறது. இருப்பினும், இது ரகசியங்களைப் பாதுகாப்பதற்காக வடிவமைக்கப்படவில்லை: தொடர்ந்து வரும் 624 எண்ணிக்கையிலான 32-பிட் முடிவுகளிலிருந்து எவராலும் அதன் உள் நிலையை மறுகட்டமைத்து, அடுத்தடுத்த ஒவ்வொரு மதிப்பையும் கணிக்க முடியும்; எனவே விசைகள், கடவுச்சொற்கள் அல்லது கணிக்க முடியாததாக இருக்க வேண்டிய எதற்கும் இதைப் பயன்படுத்தக் கூடாது.

கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பான உருவாக்கிகளும் என்ட்ரோபியும்

பல பயன்பாடுகளுக்கு ஒரே நேரத்தில் இரண்டு விஷயங்கள் தேவைப்படுகின்றன: அல்காரிதத்தின் வேகம் மற்றும் இயற்பியல் மூலத்தின் கணிக்க முடியாத தன்மை. இதற்கான தீர்வு கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பான போலி சீரற்ற எண் உருவாக்கி (CSPRNG) ஆகும். இதுவும் ஒரு PRNG தான், ஆனால் அதன் முடிவுகளின் ஒரு பகுதியைப் பார்ப்பதன் மூலம் மற்றவற்றை நடைமுறையில் கணிக்க முடியாதவாறு கட்டமைக்கப்பட்டுள்ளது; மேலும் இது உண்மையான என்ட்ரோபி மூலத்திலிருந்து விதைக்கப்பட்டு, தொடர்ந்து மறுவிதைக்கப்படுகிறது. இயற்பியல் மூலத்திலிருந்து பெறப்படும் விதை ஒரு சாதாரண PRNG-ஐப் பாதுகாப்பானதாக மாற்றிவிடாது; அல்காரிதமும் அதற்கேற்ப வடிவமைக்கப்பட்டிருக்க வேண்டும். வெப்ப இரைச்சல் அல்லது வன்பொருள் நிகழ்வுகளின் நேரம் போன்ற இயற்பியல் மூலம் ஒரு சிறிய அளவிலான உண்மையான சீரற்ற தன்மையை வழங்குகிறது, மேலும் CSPRNG அதிலிருந்து மிக வேகமாக ஒரு நீண்ட மதிப்புத் தொடரைப் பெறுகிறது. இந்த இணைப்பே இயங்குதளம் அதில் இயங்கும் நிரல்களுக்கு வழங்குவதாகும், மேலும் இன்று நடைமுறையில் "சீரற்ற எண் உருவாக்கி" என்று பொதுவாகக் குறிப்பிடப்படுவதும் இதுவேயாகும். இது குறியாக்க விசைகள், அமர்வு டோக்கன்கள் மற்றும் கடவுச்சொற்களை உருவாக்குகிறது.

உலாவியில் சீரற்ற எண்கள்

ஜாவாஸ்கிரிப்ட் ஒரு வலைப்பக்கத்திற்கு சீரற்ற மதிப்புகளைப் பெற இரண்டு உள்ளமைக்கப்பட்ட வழிகளை வழங்குகிறது, மேலும் அவை வெவ்வேறு வகைகளைச் சேர்ந்தவை. Math.random() என்பது ஒரு சாதாரண PRNG: மொழித் தரம் அல்காரிதத்தை உலாவிக்கே விட்டுவிடுகிறது மற்றும் பாதுகாப்பு குறித்து எந்த உத்தரவாதமும் அளிப்பதில்லை — அனிமேஷனுக்கு இது போதுமானது, ஆனால் யாராவது முடிவை மறுக்கக்கூடிய ஒரு போட்டிக்கு இது தகுதியற்றது. மற்றொன்று Web Crypto API ஆகும். அதன் crypto.getRandomValues() முறை, இயங்குதளத்தின் என்ட்ரோபியைக் கொண்டு விதைக்கப்பட்ட CSPRNG மூலம் உருவாக்கப்பட்ட, கிரிப்டோகிராஃபிக் முறையில் வலுவான சீரற்ற மதிப்புகளை வழங்குகிறது.

எங்களின் ஆன்லைன் சீரற்ற எண் உருவாக்கி ஒவ்வொரு தேர்விற்கும் Web Crypto API-ஐப் பயன்படுத்துகிறது, மேலும் எண்கள் சேவையகத்தில் உருவாக்கப்படாமல் உங்கள் உலாவியிலேயே உருவாக்கப்படுகின்றன. நீங்கள் பகடையை உருட்டினாலும், நாணயத்தைச் சுண்டினாலும் அல்லது கடவுச்சொல்லை உருவாக்கினாலும், இந்தத் தளத்தில் உள்ள பிற உருவாக்கிகளும் இதே மூலத்தையே பயன்படுத்துகின்றன.

சீரற்ற பிட்களிலிருந்து உங்கள் வரம்பில் உள்ள ஒரு எண்ணிற்கு

கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பான ஒரு உருவாக்கி என்பது நியாயமான தேர்வின் ஒரு பாதி மட்டுமே. அது மூல பிட்களை வழங்குகிறது, மேலும் நிரல் அவற்றை உங்கள் வரம்பில் உள்ள ஒரு எண்ணாக மாற்ற வேண்டும் — இங்குதான் சமமற்ற வாய்ப்புகள் (modulo bias) ஏற்படக்கூடும். மூலமானது 0 முதல் 9 வரையிலான மதிப்புகளை சம வாய்ப்புகளுடன் வழங்குகிறது மற்றும் உங்களுக்கு 0 முதல் 5 வரையிலான எண் தேவை என்று வைத்துக்கொள்வோம். 6 ஆல் வகுத்த பின் கிடைக்கும் மீதியை எடுப்பது இயல்பானதாகத் தோன்றலாம், ஆனால் 0, 1, 2 மற்றும் 3 ஆகியவை தலா இரண்டு வழிகளில் வரலாம், 4 மற்றும் 5 ஆகியவை ஒரே வழியில் மட்டுமே வர முடியும்; எனவே 0 முதல் 3 வரையிலான ஒவ்வொரு எண்ணிற்கும் 20% வாய்ப்பும், 4 மற்றும் 5 க்கு தலா 10% வாய்ப்பும் மட்டுமே கிடைக்கும். சமமற்ற வாய்ப்புகளை அகற்றுவதற்கான ஒரு வழி, பொருந்தாத மதிப்புகளை நிராகரித்து மீண்டும் தேர்ந்தெடுப்பதாகும்; எங்கள் சீரற்ற எண் வளங்கள் இதனை விரிவாக விளக்குகின்றன.

இன்னும் இரண்டு விஷயங்கள் மக்களை வியப்பில் ஆழ்த்துகின்றன. எண்கள் மீண்டும் வருவது இயல்பானது: 1 முதல் 10 வரையிலான முழு எண் சார்பின்றி தேர்ந்தெடுக்கப்பட்டு, ஒவ்வொரு எண்ணிற்கும் சம வாய்ப்பு இருக்கும்போது, இப்போது தேர்ந்தெடுக்கப்பட்ட எண் மற்ற எண்களைப் போலவே மீண்டும் தேர்ந்தெடுக்கப்படுவதற்கு 10 இல் 1 சம வாய்ப்பைக் கொண்டுள்ளது. மீண்டும் வராத தேர்வு என்பது ஒரு வித்தியாசமான தேர்வு முறையே தவிர, அதிக சீரற்ற தன்மையைக் கொண்டது அல்ல. மேலும் ஒரு நியாயமான உருவாக்கி மட்டுமே முழு செயல்முறையையும் நியாயமானதாக மாற்றிவிடாது: பங்கேற்பாளர்களின் பட்டியல் மற்றும் முயற்சிகளின் எண்ணிக்கையும் சமமாக முக்கியத்துவம் வாய்ந்தவை என்பதை, சீரற்ற முறையில் வெற்றியாளரை எவ்வாறு தேர்ந்தெடுப்பது என்பது பற்றிய எங்கள் கட்டுரை விளக்குகிறது.