مولّد اعداد شبه تصادفی (انگلیسی: Pseudorandom number generator)، که به مولد قطعی (deterministic) اعداد شبه تصادفی نیز، معروف است، الگوریتمی است که دنبالهای از اعداد را که با تقریب خوبی تصادفی هستند، تولید میکند.
در واقع دنبالهٔ تولیدشده، واقعاً تصادفی نیست، بلکه بهطور کامل قابل پیشبینی، و از روی حالت اولیهٔ الگوریتم، قابل محاسبه است.
مولدهای اعداد تصادفی، مهم و کاربردی هستند. علت کاربرد گستردهٔ آنها، توانایی تولید دوبارهٔ اعداد تولیدشدهٔ قبلی و سرعت بالای تولید است. برای همین، از این الگوریتمها در شبیهسازیها (مثلاً روش مونتکارلو)، رمزنگاری، و بازیهای کامپیوتری بسیار استفاده میشود. بیشتر الگوریتمهای رمزنگاری نیاز دارند که خروجیشان غیرقابل پیشبینی باشد و این امر جز با استفاده از اعداد شبه تصادفی، میسر نمیشود.
در حالت کلی، بررسیهای دقیق ریاضی لازم است تا تضمین شود که الگوریتمی، اعدادی تولید میکند که تا حد معقولی تصادفی هستند. جان فُون نُویمان به سوءبرداشت از الگوریتمهای تولیدکنندهٔ اعداد تصادفی، اشاره کردهاست و هشدار داده که همواره باید به تفاوت آنها توجه کرد.
تجربه نشان میدهد خروجیهای تولیدشده، به علت خطاهای موجود، راضیکننده نیستند و تعداد کمی از تستهای آماری را به خوبی میگذرانند. میتوان به تعدادی از این نقصها، اشاره کرد؛
مولدهای اعداد شبه تصادفی نقصهای زیادی داشتند از نقصهایی که زیاد قابل توجه نبود گرفته تا نقصهای بسیار آشکار. برای مثال RANDU که یک الگوریتم تولید اعداد تصادفی است که دههها برای رایانه هایmainframe استفاده میشد. این الگوریتم نقصهای فراوانی داشت، با این وجود برای مدت بسیاری طولانی این نقصها کشف نشدند.
در بسیار از زمینهها، تحقیقاتی قبل از قرن بیست و یکم صورت گرفت که در آنها به انتخاب تصادفی یا شبیهسازی مونت کارلو متکلی بودهاند یا به روشهای دیگر وابسته به PRNGها بودند. در این موارد اطمینان بسیار کمتر از حالتی است که از PRNG (مولدهای اعداد شبه تصادفی)های بی کیفیت استفاده شود. حتی امروزه، برای احتیاط لازم است، هشداری که در زیر نشان داده شدهاست که در دایرةالمعارف بینالمللی علوم آماری ۲۰۱۰ آمدهاست را نیز جدی گرفت.
مواردی از مولدهایی که باید بلااستفاده شوند و دور ریخته شوند بسیار بیشتر از مولدهایی های خوب است؛ بنابراین به فروشندگان نرام افزار بدون آگاهی اعتماد نکنید. RNG پیش فرض نرمافزار مورد علاقهٔ تان را بررسی کنید. همچنین در صورت نیاز برای تعویض آن آماده باشید. این توصیه بارها طی ۴۰ سال اخیر صورت گرفتهاست. امروز بهطور شگفتآوری همان اندازه مرتبط و لازم است.
برای درک بهتر، زبانهای برنامهنویسی را که بهطور گسترده استفاده میشود را درنظر بگیرید. از سال ۲۰۱۷، جاوا هنوز برای تولید اعداد تصادفی، به یک مولد خطی سازگار (LCG)که کیفیت پایینی دارد، متکی است.
یکی از مولدهای اعداد شبه تصادفی شناخته شده برای جلوگیری از بروز مشکلات بنیادی و همچین داشتن قابلیت اجرای نسبتاً سریع، مرسن توئیستر (در ادامه مورد بحث است) بود که در سال ۱۹۹۸ منتشر شد. سایر مولدهای تولید اعداد شبه تصادفی که کیفیت بالاتری در جهات محاسبات و کارایی آماری داشتند، قبل و بعد از این تاریخ توسعه یافتند. این موارد را لیست مولدهای اعداد شبه تصادفی یافت.
در نیمهٔ دوم قرن بیستم، الگوریتمهای کلاس استانداری که برای PRNGها استفاده میشد، مولدهای سازگار خطی را تشکیل میداد. کیفیت LCGها کافی نبود اما روشهای بهتری نیز وجود نداشت.Press et al در سال ۲۰۰۷ نتایج را اینگونه توصیف میکند: «اگر تمامی مقالات عملی ای که به علت LCGها و موارد مرتبط در شک و شبه هستند، ناپدید شوند، در هر قفسهٔ کتابخانهها شکافهای بزرگی بهوجود خواهد آمد.»
هنگامی پیشرفت اصلی در ساخت مولدهای اعداد شبه تصادفی بهوجود آمد که تکنیکهای مبتنی بر بازگشت خطی پدیدآمدند. چنین ژنراتورها مربوط به رجیسترهای تغییر فیدبک خطی هستند.
هنگامی پیشرفت اصلی در ساخت مولدهای اعداد شبه تصادفی بهوجود آمد که تکنیکهای مبتنی بر بازگشت خطی پدیدآمدند. آنها مولدهایی هستند که دارای ثبات (رجیستر)های تغییر بازخورد خطی اند.
بهطور ویژه اختراع مرسن چرخان، در سال ۱۹۹۷، از بسیار از مشکلات مولدهای پیشین جلوگیری کرد. مرسن چرخان دوره ای از تکرار (≈۴٫۳×106001)را دارد که ثابت شدهاست در ۶۲۳ بعد (برای اعدا ۳۲ بیتی) توزیع شدهاست. در آن زمان این شیوه از سایر مولدهای آماری سریع تر بود.
در سال ۲۰۰۳، جورج Marsaglia خانوادهٔ مولدهای xorshift را که مجدداً بر اساس بازگشت خطی بود معرفی کرد. چنین مولدهایی بسیار سریع هستند و به همراه عملیاتهای غیرخطی آزمایشهای آماری قوی و سختی را پشت سر گذاشتند.
در سال ۲۰۰۶ خانوادهٔ مولدهای WELL توسعه یافتند. مولدهای خانوادهٔ well کیفیت مرسن توئیستر را در برخی جنبهها بهبود دادند. Mersenne Twister دارای فضای حالتی بسیار بزرگ و سرعت بازیابی کمی بود که این بازیابی کند در فضاهای حالتی که تعداد زیادی صفر داشتند رخ میداد.
PRNG مناسب برای کاربردهای رمزنگاری، یک PRNG با رمزنگاری ایمن (CSPRNG) نامیده میشود. یک الزام برای CSPRNG این است که طرفی که seed را نداند، تنها شانس بسیار ناچیزی برای تشخیص و تمایز توالی خروجی مولد از یک دنباله تصادفی دارد. به عبارت دیگر، در حالی که یک PRNG فقط باید آزمونهای آماری را پشت سر بگذارد، یک CSPRNG باید تمام آزمونهای آماری محدود شده به زمان چند جمله ای را در اندازه seed را بگذراند. گرچه اثبات این خاصیت فراتر از توانایی فعلی نظریه پیچیدگی محاسباتی است، اما ممکن است با کاهش CSPRNG به مسئله ای که فرض بر آن است که از لحاظ محاسباتی سخت است، مانند فاکتورسازی عدد صحیح، شواهد محکمی بدست آید. بهطور کلی، ممکن سالها بررسی برای اینکه یک الگوریتم به عنوان CSPRNG تأیید شود، مورد نیاز باشد.
برخی از کلاسهای CSPRNG شامل موارد زیر است:
نشان داده شدهاست که به احتمال زیاد آژانس امنیت ملی آمریکا یک درپشتی نامتقارن به NIST قرار داده بود. NIST مولد اعداد شبه تصادفی Dual_EC_DRBG را گواهی میکند.
اکثر الگوریتمهای PRNG توالیهایی تولید میکنند که به طور یکنواخت توسط آزمونهای گوناگون توزیع میشوند. این یک سؤال بدون پاسخ است، و یک موضوع اصلی برای تئوری و عمل رمزنگاری است که آیا راهی برای تمایز خروجی یک PRNG با کیفیت بالا از یک دنباله واقعاً تصادفی وجود دارد؟ در این تنظیم، تشخیص دهنده میداند که یا از الگوریتم شناخته شده PRNG استفاده شدهاست (اما نه وضعیتی که با آن آغاز شد) یا از یک الگوریتم واقعاً تصادفی استفاده شدهاست، و باید بین این دو تفاوت قایل شود. امنیت اکثر الگوریتمهای رمزنگاری و پروتکلهای با استفاده از PRNG برفرض آن بناشده اند که تشخیص استفاده از PRNG مناسب از استفاده از یک توالی واقعاً غیرممکن است. سادهترین نمونههای این وابستگی، رمزنگاریهای جریانی هستند، که (اغلب) با یای انحصاری بین متن ساده (رمزنشده) پیام و خروجی PRNG کار میکنند و متن رمزشده را تولید میکنند. طراحی PRNGهای مناسب از نظر رمزنگاری بسیار دشوار است زیرا آنها باید معیارهای بیشتری را رعایت کنند. اندازه دورهٔ تناوب آنها یک عامل مهم تعیین میزان مناسب بودن رمزنگاری یک PRNG است، اما به تنهایی کافی نیست.
دفتر امنیت اطلاعات فدرال آلمان (Bundesamt für Sicherheit in der Informationstechnik , BSI) چهار معیار برای ارزیابی کیفیت مولدهای اعداد تصادفی قطعی تعیین کردهاست. این موارد به صورت زیر خلاصه میشوند:
برای کاربردهای رمزنگاری، فقط مولدهایی که موارد K3 و K4 را رعایت کنند، قابل قبول میباشند.
داده شده (در صورتی که)
ما یک تابع (جایی که مجموعه اعداد صحیح مثبت است) را یک مولد عدد شبه تصادفی برای به طوری که مقادیر را میگیرد مینامیم اگر و تنها اگر
( نشان دهنده تعداد اعضای مجموعه متناهی S است)
میتوان نشان داد که اگر مولد عدد شبه تصادفی برای توزیع یکنواخت بر روی بازهٔ باشد و اگر تابع توزیع تجمعی برای توزیع توزیع احتمالی داده شده باشد، سپس مولد اعداد شبه تصادفی برای است، به طوری که صدک است، یعنی . بهطور شهودی، یک توزیع دلخواه میتواند توسط یک توزیع استاندارد یکنواخت شبیهسازی شود.
یکی از روشهای اولیهٔ مبتنی بر کامپیوتر، به وسیلهٔ فُون نویمان در سال ۱۹۴۶ ارائه شد. این روش به روش «میان-مربع» (Middle-Square) معروف است («میانِ مربع» یا «مربعِ میانی» خوانده نشود)؛ یک عدد دلخواه در نظر گرفته، آن را به توان ۲ برسانید (مربع کنید)، ۴ رقم میانی آن را به عنوان یک عدد تصادفی جدید در نظر بگیرید و آن را بهعنوان عدد بعدی در الگوریتم استفاده کنید و به این کار ادامه دهید.
مثلاً با شروع از عدد ۱۱۱۱، عدد ۱۲۳۴۳۲۱ حاصل میشود، که اگر آن را به صورت هشت رقمی بنویسیم، ۰۱۲۳۴۳۲۱ به دست میآید. عدد ۲۳۴۳ به عنوان یک عدد تصادفی به دست میآید. با تکرار این عمل روی ۲۳۴۳ به ۴۸۹۶ به عنوان عدد تصادفی بعدی خواهیم رسید. میتوان همین روند را ادامه داد. اگر در روش اصلی از اعداد ۵ رقمی استفاده میشد، روند کاملاً مشابه میبود.
در این الگوریتم، پس از تعدادی مرحله به عددی تکراری خواهیم رسید. مشکل اینجاست که بهازای بعضی از اعداد ورودی، این اتفاق به سرعت میافتد. فون نویمان از این مشکل مطلع بود، اما روش ارائهشده برای کاربرد موردنظر، کافی بود.
فون نویمان، تولیدکنندههای سختافزاری اعداد تصادفی را غیرمناسب میدانست. چراکه اگر خروجیهای تولیدشده ذخیره نمیشد، بعداً امکان بازتولید آنها و تستکردن خطا وجود نداشت. در حالتی هم که خروجیها را ذخیره میکردند، حافظه به هدر میرفت. اگر اعداد تولیدشده روی کارت پانچ ذخیره میشد، زمان خواندن و نوشتن آنها طولانی میشد، درحالیکه استفاده از روش «میان-مربع» سرعتی صدها برابر بیشتر از سرعت خواندن و نوشتن از کارت پانچ داشت.
از آن زمان، روش مربع میانی توسط مولدهای دقیق تر تعویض شد.
یک نوآوری تازه ترکیب مربع میانه با دنباله Weyl میباشد. این روش در مدت زمان طولانی تولید خروجی به کیفیت بالا دست میابد (رجوع کنید به توالی PRNG دنباله میدانی Weyl).
تعداد انتخاب شده از توزیع احتمال غیر یکنواخت را میتوان با استفاده از یک توزیع PRNG یکنواخت و تابعی که مربوط به این دو توزیع باشد، تولید کرد.
اعداد انتخاب شده از یک توزیع احتمالاتی غیریکنواخت میتواند توسط یک توزیع یکنواخت PRNG و یک تابع که دو توزیع را به هم مرتبط کند، تولید شود.
ابتدا به تایع توزیع تجمعی نیاز داریم توزیع هدف (تابع F توزیع تجمعی f است):
توجه داشته باشید که . با استفاده از عدد تصادفی c که از توزیع یکنواخت آمدهاست، به عنوان چگالی احتمال، دریافت میکنیم:
در نتیجه
عددی است که بهطور تصادفی از توزیع انتخاب شدهاست.
بهطور مثال، وارونه توزیع گاوسی تجمعی با یک PRNG یکنواخت ایدهآل با دامنه (۰، ۱) که ورودی توالی از مقادیر (فقط مثبت) با توزیع گاوسی را تولید میکند. با این حال
ملاحظات مشابهی برای تولید توزیعهای غیر یکنواخت دیگر مانند ریلی و پواسون صورت میگیرد.
This article uses material from the Wikipedia فارسی article مولد اعداد شبه تصادفی, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). محتوا تحت CC BY-SA 4.0 در دسترس است مگر خلافش ذکر شده باشد. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki فارسی (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.