اعداد تصادفی چیستند و چرا به آن‌ها نیاز داریم؟

اعداد-تصادفی-چیستند

اعداد-تصادفی


زمان مطالعه: 17 دقیقه

یکی از روش‌های مطالعه و تحلیل پدیده‌ها و رویدادها در علوم اجتماعی است که به تبیین علل و موانع بروز و تغییر آن‌ها و همچنین پیامدهایشان می‌پردازد، اعداد تصادفی هستند. در این روش، پژوهشگران سعی می‌کنند با مشاهده و تحلیل دقیق رویدادها و عوامل موثر بر آن‌ها، الگوها و قوانینی را برای فهم بهتر و پیش‌بینی رویدادها ارائه دهند. این علم در بسیاری از حوزه‌های علوم اجتماعی مورد استفاده قرار می‌گیرد، از جمله جامعه‌شناسی، علم سیاسی، روانشناسی اجتماعی و اقتصادسنجی. در این روش، پژوهشگران از داده‌های تاریخی، آماری و اجتماعی استفاده می‌کنند و با استفاده از تکنیک‌های آماری و تحلیلی، روابط علی، علت و معلولی و نتایج مورد انتظار را مورد بررسی قرار می‌دهند. به بیان دقیق‌تر، یک روش تحقیقاتی است که به پژوهشگران کمک می‌کند تا بتوانند پدیده‌های اجتماعی را به صورت علمی تحلیل کرده و درک بهتری از آن‌ها پیدا کنند. با این‌حال، اعداد تصادفی یکی از زمینه‌های اصلی ریاضیات و آمار هستند.

 

اعداد تصادفی (Random Numbers) چیستند؟

اعداد تصادفی، در ریاضیات و آمار، به اعدادی اشاره دارند که به صورت کاملا تصادفی و بدون هیچ الگوی قابل پیش‌بینی به دست می‌آیند. این اعداد بر اساس پدیده‌ای به نام رویداد تصادفی تولید می‌شوند که می‌تواند به صورت طبیعی در طول زمان (مانند شلوغی ترافیک یا تغییرات قیمت در بورس) یا با استفاده از تجربه‌های کنترل شده و دقیق (مانند پرتاب سکه یا انتخاب تصادفی از جعبه) ایجاد شود. اعداد تصادفی معمولا به صورت عددی و با توزیع‌های مختلفی مانند توزیع یکنواخت، توزیع نرمال (گاوسی) و توزیع پوآسون نمایش داده می‌شوند. این اعداد برای مدل‌سازی و شبیه‌سازی پدیده‌های تصادفی در علوم ریاضی، آماری، فیزیک، علم کامپیوتر و بسیاری از حوزه‌های دیگر استفاده می‌شوند. با تولید تعداد زیادی از اعداد تصادفی و تجمیع آن‌ها، می‌توانیم الگوها و رفتارهای تصادفی را بررسی و تحلیل کنیم و نتایجی را به دست آوریم که در پیش‌بینی و تحلیل رویدادها و سیستم‌ها بسیار مفید واقع شوند. به بیان دقیق‌تر، اعداد تصادفی (Random Numbers) مجموعه‌ای از اعداد هستند که به طور تصادفی و بدون الگوی مشخصی انتخاب می‌شوند. اعداد تصادفی در بسیاری از زمینه‌ها استفاده می‌شوند که در این مقاله قصد داریم به طور اجمالی با آن‌ها آشنا شویم.

 

اعداد تصادفی به چند گروه تقسیم می‌شوند؟

اعداد تصادفی معمولا به دو دسته اصلی تقسیم می‌شوند: اعداد تصادفی گسسته و اعداد تصادفی پیوسته. اعداد تصادفی گسسته به اعدادی اشاره دارند که مجموعه‌ شمارش‌پذیری را دارند، به عبارت دیگر، می‌توانند تنها مقادیر صحیح خاصی را بپذیرند. مثال‌هایی از اعداد تصادفی گسسته شامل تعداد دفعاتی که یک سکه پرتاب می‌شود، تعداد خروجی‌ها در یک بازی تاس و تعداد مشتریان در یک صف در یک فروشگاه است. این اعداد به صورت مجموعه‌ای از نقاط ناپیوسته مشخص می‌شوند و معمولا با استفاده از توزیع‌های گسسته مانند توزیع پوآسون نمایش داده می‌شوند. نوع دوم اعداد تصادفی پیوسته هستند. اعداد تصادفی پیوسته به اعدادی اشاره دارند که می‌توانند به صورت پیوسته در یک بازه‌ مشخص از مقادیر حقیقی بگیرند. این اعداد تصادفی بر اساس توزیع‌های پیوسته مانند توزیع نرمال (گاوسی)، توزیع یکنواخت و توزیع نمایی مدل‌سازی می‌شوند. مثال‌هایی از اعداد تصادفی پیوسته شامل درجه حرارت، زمان بین وقوع دو رویداد در یک سیستم و مقدار یک متغیر پیوسته در یک آزمایش علمی هستند.

دسته بندی اعداد تصادفی به دو دسته‌ گسسته و پیوسته، به ما کمک می‌کند تا بتوانیم مدل‌های مناسبی را برای تحلیل و پیش‌بینی رویدادها و سیستم‌های تصادفی ایجاد کنیم. هر دسته از اعداد تصادفی ویژگی‌ها و الگوهای خاص خود را دارد که با استفاده از روش‌های آماری و تحلیلی می‌توان آن‌ها را بررسی و مورد استفاده قرار داد. علاوه بر این دسته‌بندی مذکور، ما دسته‌بندی دیگری نیز برای اعداد تصادفی داریم. اعداد تصادفی واقعی (True Random Numbers) که این اعداد از پدیده‌های طبیعی به دست می‌آیند و غیر قابل پیش‌بینی هستند. به عنوان مثال، اعداد تصادفی واقعی می‌توانند از تغییرات ذرات یا تداخل کوانتومی بدست آیند. اعداد تصادفی واقعی بسیار تصادفی هستند، اما تولید آن‌ها دشوار و هزینه‌بر است.  

نوع دوم اعداد تصادفی مصنوعی (Pseudo-Random Numbers) هستند که این اعداد با استفاده از الگوریتم‌های ریاضی تولید می‌شوند. اعداد تصادفی مصنوعی هرچند شبیه به اعداد تصادفی واقعی نیستند، اما برای بیشتر کاربردهای عملی کافی هستند. این الگوریتم‌ها بر اساس یک مقدار شروع (Seed) عمل می‌کنند و اغلب از زمان کنونی یا مقادیر متغیر دیگری به عنوان مقدار شروع استفاده می‌شود تا تکراری شدن نتایج جلوگیری شود.

 

اعداد تصادفی و تاریخچه تولید

اعداد تصادفی، اعدادی هستند که به طور ظاهری بدون هیچ الگوی قابل تشخیصی تولید می‌شوند. این اعداد به صورتی انتخاب می‌شوند که هیچ اطلاعات قبلی نتواند نشان دهد که عدد بعدی چه مقداری خواهد بود. در عمل، اعداد تصادفی به صورت مصنوعی تولید می‌شوند تا از آن‌ها در برنامه‌ها و محاسباتی که نیاز به خصوصیت تصادفی دارند، استفاده کنیم. الگوریتم‌های تولید اعداد تصادفی، مجموعه قوانین و روش‌هایی هستند که برای تولید اعداد تصادفی استفاده می‌شوند. این الگوریتم‌ها به صورت ریاضی و محاسباتی طراحی می‌شوند و می‌توانند اعداد تصادفی با خواص مورد نظر را تولید کنند. تاریخچه تولید اعداد تصادفی به قدمت طولانی در ریاضیات و علوم کامپیوتر برمی‌گردد. یکی از اولین الگوریتم‌های تولید اعداد تصادفی، الگوریتم تولید اعداد تصادفی خطی متعامد (LCG) است که در پاسخ قبلی توضیح داده شد. این الگوریتم در دهه 1950 توسط دانشمندانی مانند جان فون نویمن (John von Neumann) و نیکولاس متروپولیس (Nicholas Metropolis) معرفی شد. از آن زمان به بعد، الگوریتم‌های تولید اعداد تصادفی پیچیده‌تر و ارتقای یافته‌تری طراحی شدند. الگوریتم‌های مبتنی بر جریان‌های تصادفی، ماشین‌های تصادفی سخت‌افزاری، و مدل‌های ریاضی برای تولید اعداد تصادفی استفاده می‌شوند.

روش‌های مدرن برای تولید اعداد تصادفی شامل الگوریتم‌های مبتنی بر توابع هش (hash-based), جنراتورهای مبتنی بر فشرده‌سازی (compression-based), جنراتورهای مبتنی بر توابع درهم‌ساز (cryptographic hash functions) و سایر ترکیبات این روش‌ها است. این الگوریتم‌ها معمولا از سیستم‌های فیزیکی خاص، مانند نوسانات هسته اتمی، ورودی‌های کاربر و غیره برای ایجاد ورودی‌های تصادفی استفاده می‌کنند. در کل، تاریخچه تولید اعداد تصادفی به تدریج با پیشرفت روش‌های ریاضی و محاسباتی، نیازهای مختلف برنامه‌ها و محاسبات، و پیشرفت تکنولوژی توسعه یافته است.

 

الگوریتم مولد تصادفی مارسن توئیستر (Mersenne Twister)

الگوریتم مولد تصادفی مارسن توییستر (Mersenne Twister) یکی از الگوریتم‌های پرکاربرد و قوی در تولید اعداد تصادفی است. این الگوریتم در سال ۱۹۹۷ توسط ماکوتو ماتسوموتو (Makoto Matsumoto) و تاکومی نیشیمورا (Takuji Nishimura) ارائه شد. مزیت اصلی الگوریتم مارسن توئیستر نسبت به الگوریتم‌های دیگر تولید اعداد تصادفی، کیفیت بالا و دوره طولانی آن است. الگوریتم مارسن توییستر اعداد تصادفی با یک دوره بسیار بزرگ تولید می‌کند (حدود ۲^۱۹۹۳۷ – ۱) که این حرف به این معنا است که بعد از تولید ۲^۱۹۹۳۷ عدد تصادفی، الگوریتم به نقطه شروع خود برمی‌گردد و دنباله اعداد تکرار می‌شود. عملکرد الگوریتم مارسن توییستر بر اساس توابع خطی و نوسانات خیلی زیاد کار می‌کند. این الگوریتم از یک آرایه بزرگ از اعداد صحیح ۳۲ بیتی به عنوان حالت استفاده می‌کند و با استفاده از توابع خطی و نوسانات، اعداد تصادفی را تولید می‌کند.

الگوریتم مارسن توییستر به دلیل دوره طولانی، فراوانی بالا و توزیع یکنواختی که اعداد تصادفی تولید شده دارند، در بسیاری از برنامه‌ها و شبیه‌سازی‌ها استفاده می‌شود. با این حال، باید توجه داشت که الگوریتم مارسن توییستر قابل پیش‌بینی است و در برخی موارد، امنیت کافی را برای کاربردهای رمزنگاری که نیاز به اعداد تصادفی امن دارند، فراهم نمی‌کند. در چنین حالت‌هایی، باید از الگوریتم‌های تولید اعداد تصادفی کریپتوگرافیک استفاده کرد. الگوریتم مارسن توییستر با استفاده از یک آرایه بزرگی از اعداد صحیح 32 بیتی که به آن “دسته” (state) می‌گویند، اعداد تصادفی را تولید می‌کند. این دسته از اعداد به صورت تکاملی به‌روزرسانی می‌شود و با استفاده از عملیات ریاضی پیچیده، اعداد تصادفی با کیفیت بالا تولید می‌شوند. الگوریتم مارسن توییستر در برنامه‌نویسی رایج است و در زبان‌های برنامه‌نویسی مختلف پیاده‌سازی شده است. این الگوریتم دارای دوره بلندتری نسبت به الگوریتم‌های مولد تصادفی قدیمی‌تر است و معمولا قادر به پاسخ‌گویی به نیازها در زمینه تولید اعداد تصادفی در برنامه‌های شبیه‌سازی، بازی‌های رایانه‌ای، رمزنگاری و سایر کاربردها است.

 

الگوریتم خطی میانگین متحرک (Linear Congruential Generator)

الگوریتم خطی میانگین متحرک (Linear Congruential Generator) یکی از روش‌های ساده و پرکاربرد در تولید اعداد تصادفی در علم کامپیوتر است. این الگوریتم بر اساس یک تابع خطی با پارامترهای خاص عمل می‌کند و با استفاده از یک بذر اولیه (seed)، دنباله‌ای از اعداد تصادفی تولید می‌کند. فرمول عمومی الگوریتم خطی میانگین متحرک به صورت زیر است:

Xn+1 = (a * Xn + c) mod m

در این فرمول:

– Xn نشان‌دهنده‌ی عدد تصادفی قبلی در دنباله است.

– Xn+1 نشان‌دهنده‌ی عدد تصادفی بعدی در دنباله است.

– a، c و m پارامترهای ثابتی هستند که توسط کاربر یا برنامه‌نویس انتخاب می‌شوند.

پارامتر a (ضریب ضرب) تعیین کننده‌ی اثر عملیات ضرب در تولید اعداد تصادفی است. پارامتر c (ثابت افزایش) تعیین کننده‌ی مقداری ثابت است که به عدد تصادفی قبلی اضافه می‌شود. پارامتر m (ماژول) نیز تعیین کننده‌ مقداری ثابت است که عملیات ماژول با آن انجام می‌شود. این عملیات باعث می‌شود که اعداد تولید شده در بازه‌ی مشخصی قرار بگیرند و توزیع تصادفی آن‌ها بر اساس این بازه تنظیم شود.

با استفاده از الگوریتم خطی میانگین متحرک، می‌توان به صورت سریع و ساده دنباله‌ای از اعداد تصادفی تولید کرد. با انتخاب مناسب پارامترها، می‌توان اعداد تولید شده را با توزیع یکنواخت تقریبا تصادفی در بازه‌ مورد نظر قرار داد. با این حال، باید توجه داشت که الگوریتم خطی میانگین متحرک ممکن است در برخی موارد، مشکلاتی مانند تکرارپذیری زودرس دنباله یا کیفیت توزیع تصادفی پایینتر را به همراه داشته باشد. از الگوریتم خطی میانگین متحرک در برنامه‌نویسی، شبیه‌سازی‌ها، بازی‌ها و بسیاری از حوزه‌های دیگری که نیاز به تولید اعداد تصادفی سریع و ساده دارند، استفاده می‌شود. با این حال، در برنامه‌ها و سیستم‌هایی که نیاز به اتولید اعداد تصادفی با خواص امنیتی مانند بررسی امنیتی یا رمزنگاری، الگوریتم‌های دیگری با کیفیت و خصوصیات مورد نیاز معمولا ترجیح داده می‌شوند. الگوریتم خطی میانگین متحرک از سه پارامتر اصلی تشکیل شده است:

– مقدار فعلی (Seed)، که مقدار اولیه اولیه برای توالی اعداد تصادفی است.

– ضریب ضربی (Multiplier)، که یک عدد صحیح است و برای تولید اعداد تصادفی جدید استفاده می‌شود.

– ثابت افزایشی (Increment)، که نیز یک عدد صحیح است و به طور مستقل با مقدار فعلی جمع می‌شود.

برای استفاده از الگوریتم خطی میانگین متحرک، ابتدا باید مقادیر اولیه مناسبی برای مولفه‌های  Seed، Multiplier، Increment  و Modulus  انتخاب شود. همچنین، برای اطمینان از تولید اعداد تصادفی با توزیع یکنواخت، باید مقادیر پارامترها به درستی تنظیم شوند.

الگوریتم خطی میانگین متحرک به دلیل سادگی پیاده‌سازی، مناسب برای برنامه‌های ساده و کاربردهایی است که نیازمند دستیابی به اعداد تصادفی سریع هستند. این الگوریتم بر پایه یک توالی بازگشتی خطی از معادلات ریاضی کار می‌کند. اگر مقادیر مناسبی برای پارامترها انتخاب نشوند، این احتمال وجود دارد تا الگوریتم خطی میانگین متحرک بازه‌های تکراری (repetitive sequences)  از اعداد تصادفی تولید کند و به عنوان یک مولد تصادفی پیشرفته محسوب نشود. نکته مهمی دیگری که باید به آن دقت کنید این است که الگوریتم خطی میانگین متحرک دارای محدودیت‌ها و مشکلاتی است که از جمله آنها می‌توان به دوره کوتاه، کیفیت تصادفی نامطلوب در بعضی موارد و برهمکنش پارامترها اشاره کرد. بنابراین، در برنامه‌های حساس که امنیت مقوله مهمی است و کاربردهایی که نیاز به اعداد تصادفی با خواص بالاتر دارند، استفاده از الگوریتم‌های مولد تصادفی پیشرفته‌تر و امن‌تر توصیه می‌شود مانند الگوریتم مولد تصادفی مارسن توئیستر (Mersenne Twister).

 

Cryptographically Secure Random Generators

مولد تصادفی امن رمزنگاری شده  (Cryptographically Secure Random Generators)، الگوریتم‌ها و مکانیزم‌هایی هستند که برای تولید اعداد تصادفی با خواص امنیتی بالا و مقاومت در برابر حملات رمزنگاری و پیش‌بینی استفاده می‌شوند. این مولد‌های تصادفی برای برنامه‌ها و سیستم‌هایی که نیاز به اعداد تصادفی با خواص امنیتی قوی دارند، بسیار مهم هستند. اعداد تصادفی مورد استفاده در رمزنگاری و امنیت اطلاعات باید یکسری ویژگی‌ها را داشته باشد. اولین مورد تصادفی بودن است. اعداد تولید شده باید به طور واقعی تصادفی باشند و نباید قابل پیش‌بینی باشند. به بیان دقیق‌تر، هیچ الگوی قابل تشخیص یا رابطه قابل پیش‌بینی بین اعداد تولید شده وجود نداشته باشد. مورد بعد یکنواختی است. اعداد تولید شده باید با توزیع یکنواخت بین بازه‌های مختلف توزیع شوند. به عبارت دیگر، احتمال برابری برای هر عدد در بازه توزیع باید وجود داشته باشد. مورد غیر قابل پیش‌بینی بودن آن‌ها است. با داشتن یک بخش از توالی تولید شده، باید بسیار سخت باشد تا برای شخصی که توالی نمونه را دارد، توالی بعدی قابل پیش‌بینی نباشد.

همچنین، باید در برابر حملات رمزنگاری پایداری زیادی داشته باشند. اعداد تولید شده باید مقاوم در برابر حملات مختلف رمزنگاری باشند، از جمله حملات تحلیل تکراری، حملات با تحلیل برهمکنش پارامترها و حملات با استفاده از الگوریتم‌های قابل پیش‌بینی. برای اطمینان از تولید اعداد تصادفی امن، مولد‌های تصادفی امن رمزنگاری شده از منابع تصادفی قوی و قابل اعتماد برای تولید اعداد تصادفی استفاده می‌کنند، مانند جریان‌های تصادفی فیزیکی مانند نویزها ، دقت زمانی سیستم‌های فیزیکی، یا الگوریتم‌های رمزنگاری قوی که توالی‌های تصادفی تولید می‌کنند. به عنوان مثال، یکی از مولد‌های تصادفی امن رمزنگاری شده معروف، الگوریتم تولیدکننده تصادفی رمزنگاری ایمن (Cryptographically Secure Pseudo-Random Generator) است. این الگوریتم با استفاده از یک کلید رمزنگاری ورودی، توالی‌های تصادفی طولانی تولید می‌کند که دارای خواص امنیتی بالا هستند. این توالی‌ها می‌توانند برای تولید کلید‌های رمزنگاری، ایجاد مقادیر رندم در پروتکل‌های امنیتی و سایر استفاده‌های مرتبط با امنیت اطلاعات استفاده شوند. مولد‌های تصادفی امن رمزنگاری شده مهمترین نقشه را در امنیت رمزنگاری و سیستم‌های امنیتی دارند، زیرا اعداد تصادفی ضعیف می‌توانند به شکستن الگوهای رمزنگاری و امنیتی منجر شوند که آسیب جدی به امنیت سیستم‌ها وارد می‌کنند. بنابراین، استفاده از مولد‌های تصادفی امن رمزنگاری شده اهمیت زیادی دارند.

 

چرا از اعداد تصادفی استفاده می کنیم؟

اعداد تصادفی در علم و فناوری بسیار مهم هستند و در بسیاری از زمینه‌ها استفاده می‌شوند. دلایل استفاده از اعداد تصادفی را می‌توان این‌گونه شرح داد که در بسیاری از حوزه‌ها نیاز است تا وضعیت‌ها و رفتارهای تصادفی را شبیه‌سازی کنیم. به طور مثال، در شبیه‌سازی حرکت ذرات، رفتار بازارهای مالی، تحلیل ریسک، طراحی بازی‌ها و آزمایشات علمی، استفاده از اعداد تصادفی برای تولید ورودی‌ها و رفتارهای تصادفی بسیار مهم است. اعداد تصادفی در رمزنگاری و امنیت اطلاعات نقش بسیار مهمی دارند. برای تولید کلیدهای رمزنگاری قوی، اعداد تصادفی بسیار بزرگ و قابل پیش‌بینی نیاز است. همچنین، در الگوریتم‌های مبتنی بر رمزنگاری، استفاده از اعداد تصادفی برای ایجاد مقادیر تصادفی و افزودن عناصر ناپیش‌بینی به رمزنگاری و رمزگشایی اهمیت دارد.

در آزمون فرضیه‌ها، طراحی آزمایش‌ها و تحلیل آماری، استفاده از اعداد تصادفی برای تعیین نمونه‌ها، تقسیم بندی تصادفی، تولید داده‌های تصادفی و سایر فرآیندهای تصادفی بسیار رایج است. اعداد تصادفی به ما کمک می‌کنند تا روش‌های آماری را بر روی داده‌ها اعمال کنیم و نتایج قابل اعتمادی را بدست آوریم.

در حوزه هنر، اعداد تصادفی می‌توانند در ایجاد الگوها، ساختن طرح‌های تصادفی، تولید صداها و تصاویر تصادفی و حتی در طراحی بازی‌ها و اثرهای ویژه مورد استفاده قرار گیرند. از طرفی، استفاده از اعداد تصادفی در برخی موارد نیازمندی‌های خاص خود را دارد. به طور مثال، برای کاربردهایی که نیاز به اعداد تصادفی در حوزه امنیت دارند، اعداد تصادفی باید درست و قابل پیش‌بینی نباشند تا بتوان از آنها برای تولید کلیدها و رشته‌های رمزنگاری استفاده کرد. به طور کلی، استفاده از اعداد تصادفی به ما کمک می‌کند تا واقعیت‌ها و وضعیت‌های تصادفی را در مدل‌ها و سیستم‌ها نمایش دهیم، امکان آزمون و تحلیل آماری را فراهم کنیم، امنیت و رمزنگاری را تقویت کنیم و خلاقیت و تنوع را در هنر و سرگرمی ارتقا دهیم.

 

بهترین الگوریتم ریاضی برای تولید اعداد تصادفی

بهترین الگوریتم ریاضی برای تولید اعداد تصادفی به ویژه اعداد تصادفی بین 0 و 1، به عنوان اعداد تصادفی متوالی یا پیوسته، به نام “الگوریتم تولید اعداد تصادفی خطی متعامد (Linear Congruential Generator)” معروف است. این الگوریتم بسیار ساده و کارآمد است و در بسیاری از برنامه‌ها و سیستم‌ها مورد استفاده قرار می‌گیرد. اجازه دهید برای درک بهتر موضوع، یکبار دیگر توضیح کوتاهی در ارتباط با الگوریتم‌های پر کاربرد داشته باشیم. الگوریتم تولید اعداد تصادفی خطی متعامد (LCG) با استفاده از یک دنباله بازگشتی ساده تعداد تصادفی را تولید می‌کند. این دنباله بازگشتی به صورت زیر تعریف می‌شود:

X_{n+1} = (a * X_n + c) mod m

در فرمول بالا:

– X_n: تعداد تصادفی قبلی در دنباله

– X_{n+1}: تعداد تصادفی بعدی در دنباله

– a، c و m: پارامترهای ثابتی که برای تولید دنباله استفاده می‌شوند

در این الگوریتم، اعداد تصادفی به صورت متوالی تولید می‌شوند و به عنوان خروجی الگوریتم استفاده می‌شوند. اعداد تصادفی تولید شده بین 0 و 1 قرار می‌گیرند، اما با استفاده از عملیات ساده می‌توان آنها را به بازه‌های دیگری تبدیل کرد. مقادیر پارامترهای a، c و m باید به گونه‌ای انتخاب شوند که دنباله تولید شده دارای خواص تصادفی مناسبی باشد و بتواند دوره‌های طولانی از اعداد تصادفی متناوب تولید کند. انتخاب نادرست پارامترها می‌تواند باعث تکرارپذیری و قابل پیش‌بینی بودن دنباله اعداد تصادفی شود.

البته، برای برخی کاربردها، مانند رمزنگاری و امنیت، الگوریتم‌های پیچیده‌تر و اعداد تصادفی با خصوصیات خاص مورد نیاز هستند. معمولا در این موارد از الگوریتم‌های مبتنی بر جریان‌های تصادفی (stream ciphers) و یا ترکیباتی از الگوریتم‌های مختلف استفاده می‌شود. بنابراین، استفاده از الگوریتم تولید اعداد تصادفی خطی متعامد (LCG) ممکن است برای برنامه‌ها و سیستم‌هایی که به اعداد تصادفی با خواص متببخشید، الگوریتم تولید اعداد تصادفی خطی متعامد (LCG) که در پاسخ قبلی ذکر شده است، در واقع یکی از الگوریتم‌های ساده‌تر و کلاسیک برای تولید اعداد تصادفی است. اما بهترین الگوریتم ریاضی برای تولید اعداد تصادفی در کاربردهای حساس و بحث امنیتی، ممکن است متفاوت باشد.

در کاربردهای حساس به امنیت، به خصوص در رمزنگاری و امنیت ارتباطات، استفاده از الگوریتم‌های تولید اعداد تصادفی با خصوصیات امنیتی بالا اهمیت دارد. یکی از الگوریتم‌های معروف و استاندارد در این زمینه، الگوریتم تولید اعداد تصادفی “Fortuna” است. الگوریتم Fortuna یک الگوریتم بازیابی‌پذیر است که از یک ساعت تصادفی (entropy source) و الگوریتم‌های تولید اعداد تصادفی متعدد استفاده می‌کند. این الگوریتم با استفاده از یک ساعت تصادفی قوی و روش‌هایی برای جمع‌آوری و تقویت انبوهی از داده‌های تصادفی، اعداد تصادفی با کیفیت بالا تولید می‌کند.

Fortuna شامل یک مولد اعداد تصادفی اصلی به همراه مولدهای فرعی است که به طور همزمان کار می‌کنند. مولد اصلی از ساعت تصادفی برای جمع‌آوری ورودی‌های تصادفی استفاده می‌کند و مولدهای فرعی از این ورودی‌ها برای تولید اعداد تصادفی استفاده می‌کنند. Fortuna همچنین از یک الگوریتم بازیابی‌پذیر استفاده می‌کند تا در صورت بروز خطا یا تهدیدهای امنیتی، به سرعت به حالت اولیه بازگردد. مهمترین ویژگی Fortuna این است که اعداد تصادفی تولید شده در طول زمان قابل پیش‌بینی نیستند و با کمک روش‌های امنیتی، امکان حدس زدن یا بازسازی داده‌های تصادفی قبلی تولید شده توسط الگوریتم را به حداقل می‌رساند. به طور کلی، استفاده از الگوریتم Fortuna یا الگوریتم‌های مشابه، که از زمان‌های تصادفی و روش‌های تقویت داده‌های تصادفی استفاده می‌کنند، در مورد امنیتی بهتر است.

5/5 - (1 امتیاز)

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *