ماشین‌حساب‌های ریاضی
تولیدکننده عدد


تولیدکننده عدد

با ابزار آنلاین تولیدکننده عدد تصادفی، به‌سرعت اعداد تصادفی بسازید. امکان تعیین دامنه، تکرار و مرتب‌سازی؛ انتخابی ایده‌آل برای قرعه‌کشی، بازی‌ و آمار.

گزینه‌ها

اعداد تصادفی

48, 9, 49, 11, 17, 22, 16, 37, 45, 41, 4, 36, 43, 10, 28, 27, 47, 25, 21, 33

در محاسبه شما خطایی رخ داد.

آخرین به‌روزرسانی: ۱۳ خرداد ۱۴۰۵

فهرست مطالب

  1. کاربرد تولیدکننده‌های عدد تصادفی
  2. تفاوت بین یک دنباله تصادفی و غیرتصادفی
  3. انواع تولیدکننده‌های عدد تصادفی
  4. تولیدکننده گوگل
  5. روش هم‌نهشتی خطی
  6. تولیدکننده‌های عدد تصادفی سخت‌افزاری مدرن
    1. QRBG121
    2. چراغ‌های لاوا
    3. هات‌بیتس (HotBits)
    4. نوسانات کوانتومی خلأ
    5. تولیدکننده نانولوله کربنی
    6. مکعب‌ها و بنیاد مرز الکترونیکی (EFF)
    7. تولیدکننده عدد تصادفی کوانتومی از یک گوشی هوشمند نوکیا

تولیدکننده عدد

تولیدکننده عدد تصادفی (RNG) ابزاری است که در هر زمان دلخواه، یک عدد کاملاً تصادفی را در اختیار شما قرار می‌دهد؛ به گونه‌ای که هیچ الگوی قابل‌پیش‌بینی بر اساس اعداد قبلی نداشته باشد. این اعداد معمولاً از طریق الگوریتم‌های نرم‌افزاری یا دستگاه‌های سخت‌افزاری پیشرفته تولید می‌شوند.

کاربرد تولیدکننده‌های عدد تصادفی

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

به‌طور کلی، تولید عدد تصادفی برای کد کپچا (CAPTCHA)، رمزگذاری داده‌ها، تولید نمک (Salt) برای ذخیره امن رمزهای عبور، ساخت پسوردهای قدرتمند، بر زدن کارت‌ها در کازینوهای آنلاین، تصمیم‌گیری‌های تصادفی یا قرعه‌کشی، نمونه‌برداری آماری و شبیه‌سازی‌ها استفاده می‌شود.

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

تفاوت بین یک دنباله تصادفی و غیرتصادفی

فرض کنید با این دنباله از اعداد روبه‌رو هستیم: 1 , 2 , 3 , 4 , 5. آیا می‌توان این اعداد را تصادفی دانست؟

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

فرض کنید اعداد بالا با فشردن کلیدهای ردیف بالای کیبورد به ترتیب تایپ شده‌اند. در این حالت، مشخص می‌شود که این ترکیب اصلاً تصادفی نیست، زیرا پس از عدد 5، با احتمال بسیار بالایی می‌توان پیش‌بینی کرد که عدد بعدی 6 خواهد بود.

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

شرط اساسی برای عملکرد صحیح و منصفانه یک سیستم قرعه‌کشی یا تولیدکننده عدد تصادفی این است که شانس بیرون آمدن هر عدد در سیستم کاملاً برابر باشد. این موضوع نشان‌دهنده استقلال کامل عامل تصادفی است؛ به این معنا که اعداد تولید شده قبلی یا بعدی، هیچ تأثیری روی عدد فعلی نخواهند داشت.

به عنوان مثال، اگر یک تاس شش‌وجهی را برای اولین بار بیندازید، شانس آمدن هر عدد از 1 تا 6 کاملاً برابر است. فارغ از اینکه چه عددی رو شده است، در پرتاب دوم، صدمین یا هزارمین بار نیز، شانس آمدن همان عدد تغییری نخواهد کرد.

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

مؤسسه ملی استانداردها و فناوری آمریکا (NIST) مجموعه‌ای به نام "بسته آزمون‌های آماری برای تولیدکننده‌های عدد تصادفی و شبه‌تصادفی در کاربردهای رمزنگاری" ارائه کرده است. این بسته شامل 15 آزمون آماری دقیق است که هدف آن، ارزیابی میزان تصادفی بودن بیت‌های تولید شده توسط سیستم‌های سخت‌افزاری یا نرم‌افزاری می‌باشد.

انواع تولیدکننده‌های عدد تصادفی

به طور کلی دو نوع تولیدکننده عدد تصادفی (RNG) وجود دارد: تولیدکننده‌های عدد تصادفی واقعی (TRNG) و تولیدکننده‌های عدد شبه‌تصادفی (PRNG). نوع واقعی (TRNG) برای تولید اعداد از پدیده‌های فیزیکی استفاده می‌کند، در حالی که نوع شبه‌تصادفی (PRNG) بر پایه الگوریتم‌های ریاضی کار می‌کند.

یک الگوریتم تولیدکننده عدد تصادفی واقعی با استفاده از دستگاه‌های سخت‌افزاری کار می‌کند که فرایندهای فیزیکی و میکروسکوپی را برای تولید اعداد تصادفی به کار می‌گیرند؛ پدیده‌ای که در اصطلاح «آنتروپی» (Entropy) نامیده می‌شود. آنتروپی، نماد هرج‌و‌مرج خالص و فیلترنشده در طبیعت است.

تولیدکننده‌های عدد تصادفی واقعی از پدیده‌های فیزیکی زیر بهره می‌برند:

  • رادیواکتیویته،
  • نویز حرارتی،
  • نویز الکترومغناطیسی،
  • مکانیک کوانتومی، و موارد دیگر.

سیستم‌های TRNG به طور معمول در زیرساخت‌های امنیتی حساس در سراسر جهان و در سیستم‌های پیشرفته رمزنگاری مورد استفاده قرار می‌گیرند.

این تولیدکننده‌ها از منابع آنتروپی برای جمع‌آوری داده‌های تصادفی استفاده می‌کنند تا به مقدار اولیه یا همان «بذر» (Seed) مورد نیاز سیستم دست یابند.

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

یک PRNG از یک مقدار اولیه (بذر) ثابت استفاده می‌کند و تمام اعداد شبه‌تصادفی بعدی را بر اساس همان مقدار می‌سازد. اما یک تولیدکننده عدد تصادفی واقعی، همواره اعداد خود را از یک منبع کاملاً تصادفی و باکیفیت بالا که ریشه در آنتروپی‌های فیزیکی دارد، تأمین می‌کند.

تولید اعداد شبه‌تصادفی نقاط ضعف خاص خود را دارد. این اعداد کارآمد هستند زیرا برای افراد عادی کاملاً تصادفی به نظر می‌رسند؛ اما اگر کسی مقدار اولیه (Seed) یک توالی PRNG را بداند، به راحتی می‌تواند تمام اعداد بعدی را پیش‌بینی کند.

علاقه‌مندان به اسپیدران (Speedrun) در بازی‌های ویدیویی معمولاً از این نقطه ضعف استفاده می‌کنند که به آن «دستکاری PRNG» می‌گویند. آن‌ها بازی را به شیوه‌ای کاملاً قابل‌پیش‌بینی انجام می‌دهند تا بتوانند مراحل را در سریع‌ترین زمان ممکن به پایان برسانند. خوشبختانه این موضوع در بازی‌ها مشکل امنیتی خطرناکی ایجاد نمی‌کند.

اما در شرایطی خاص، غیرقابل‌پیش‌بینی بودن این اعداد به شدت حیاتی است؛ مانند زمان ایجاد کلیدهای امنیتی.

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

در این گونه مواقع حساس، استفاده از روش‌های امن‌تر و غیرقابل نفوذتر برای دستیابی به اعداد تصادفی، یعنی استفاده از تولیدکننده عدد تصادفی واقعی (TRNG) کاملاً ضروری است.

تولیدکننده گوگل

گوگل نیز ابزار اختصاصی خود را بر پایه زبان جاوا اسکریپت برای تولید اعداد تصادفی ارائه کرده است. این ابزار آنلاین برای قرعه‌کشی‌های خانوادگی یا بازی با دوستان بسیار کاربردی است. برای دسترسی به آن کافی است عبارت "تولیدکننده عدد تصادفی" یا "Random Number Generator" را در گوگل جستجو کنید.

روش هم‌نهشتی خطی

یکی از معروف‌ترین الگوریتم‌ها برای ساخت تولیدکننده‌های عدد شبه‌تصادفی، الگوریتم «مولد هم‌نهشتی خطی» (Linear Congruential Generator) است. این روش در کاربردهای ساده استفاده می‌شود و از نظر رمزنگاری مقاوم نیست. دریک هنری لمر در سال 1949 این روش را معرفی کرد.

برای پیاده‌سازی تولید عدد با این الگوریتم، باید چهار پارامتر زیر را مشخص کنیم:

m > 0، پیمانه (Modulo)

0 ≤ a ≤ m، ضریب

0 ≤ c ≤ m، افزایش‌دهنده

0 ≤ X₀ ≤ m، مقدار اولیه (بذر)

دنباله اعداد تصادفی از طریق فرمول زیر به دست می‌آید:

Xₙ₊₁ = (aXₙ + c) mod m

باید توجه داشت که کارایی این روش به شدت به انتخاب دقیق پارامترها بستگی دارد.

به عنوان مثال، برای مقادیر زیر:

X₀ = 3, a = 4, c = 5, m = 6

ما به یک دنباله کوتاه و تکراری می‌رسیم:

3, 5, 1, 3, 5, 1

که اصلاً تصادفی به نظر نمی‌رسد.

اما اگر پارامترها را به شکل زیر تغییر دهیم:

X₀ = 2, a = 85, c = 507, m = 1356

پراکندگی نتایج بسیار پیچیده‌تر و غیرقابل‌پیش‌بینی‌تر می‌شود. بنابراین در این الگوریتم باید اعداد را با دقت و حساسیت بالایی انتخاب کرد:

2، 677، 1100، 443، 194، 725، 1112، 107، 110، 365، 344، 1271، 62، 353، 680، 1355، 422، 1121، 872، 47، 434، 785، 788، 1043، 1022، 593، 740، 1031، 2، 677، 1100، 443، 194، 725، 1112، 107، 110، 365، 344، 1271، 62، 353، 680، 1355، 422، 1121، 872، 47، 434، 785، 788، 1043، 1022، 593، 740، 1031، 2، 677، 1100، 443، 194، 725، 1112، 107، 110، 365...

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

ضعف مولدهای هم‌نهشتی خطی اولین بار توسط جیم ریدز در سال 1977 و سپس توسط جوآن بویار در سال 1982 کشف و شکسته شد. او همچنین توانست مولدهای درجه دوم و سوم را نیز بشکند. به این ترتیب، ناکارآمدی این الگوریتم‌ها برای اهداف رمزنگاری کاملاً اثبات شد. با این وجود، مولدهای مبتنی بر این روش هنوز هم در زمینه‌های غیر امنیتی مانند شبیه‌سازی‌ها کاربرد گسترده‌ای دارند، چرا که کارایی و سرعت بالایی داشته و در تست‌های تجربی عملکرد آماری مطلوبی از خود نشان می‌دهند.

تولیدکننده‌های عدد تصادفی سخت‌افزاری مدرن

QRBG121

در این دستگاه، تولید اعداد تصادفی بر پایه قوانین فیزیک کوانتومی، انتشار فوتون‌ها در نیمه‌رساناها و تشخیص تک‌تک آن‌ها استوار است. در این فرایند، فوتون‌ها به صورت کاملاً تصادفی و مستقل از یکدیگر ردیابی می‌شوند و از فواصل زمانی بین تشخیص فوتون‌ها برای تولید بیت‌های تصادفی استفاده می‌شود.

چراغ‌های لاوا

دفتر مرکزی شرکت کلودفلر (Cloudflare) در سانفرانسیسکو، از روشی خلاقانه به نام «چراغ‌های لاوا» برای تولید اعداد تصادفی استفاده می‌کند. این چراغ‌ها شامل ظروف شیشه‌ای پر از روغن شفاف و پارافین نیمه‌شفاف هستند. پارافین در حالت عادی کمی سنگین‌تر از روغن است، اما با گرم شدن سبک‌تر شده و به سمت بالا حرکت می‌کند.

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

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

هات‌بیتس (HotBits)

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

نوسانات کوانتومی خلأ

برخلاف ریشه کلمه‌اش ("vacuus" به معنای خالی)، خلأ هرگز کاملاً خالی نیست. بر اساس اصل عدم قطعیت هایزنبرگ، در فضای خلأ ذرات مجازی به صورت مداوم به وجود می‌آیند و از بین می‌روند.

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

در طیف نور پراکنده شده، خطوطی ظاهر می‌شوند که به دلیل غیرقابل‌پیش‌بینی بودن نوسانات خلأ، هر بار ساختاری کاملاً متفاوت و تصادفی به خود می‌گیرند.

تولیدکننده نانولوله کربنی

این روش ترکیبی هوشمندانه از فناوری نانو و بهره‌گیری از نویز حرارتی است.

پژوهشگران موفق به ساخت یک تولیدکننده عدد تصادفی شده‌اند که از سلول‌های حافظه استاتیک دسترسی تصادفی (SRAM) چاپ‌شده با جوهرهای مخصوص حاوی نانولوله‌های کربنی نیمه‌رسانا استفاده می‌کند. این سلول حافظه برای تولید بیت‌های کاملاً تصادفی، نوسانات ناشی از نویز حرارتی را اندازه‌گیری می‌کند.

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

مکعب‌ها و بنیاد مرز الکترونیکی (EFF)

این بنیاد روشی ساده اما به شدت کارآمد برای ساخت رمزهای عبور فوق‌امنیتی با استفاده از یک ابزار فیزیکی معرفی کرده است: تاس!

برای مثال، شما پنج تاس را به طور همزمان پرتاب کرده و اعداد روی آن‌ها را یادداشت می‌کنید. فرض کنید از چپ به راست به این ترتیب رسیده‌اید: 63131. سپس به وب‌سایت EFF مراجعه کرده و در لیست طولانی کلمات آن‌ها، کلمه معادل با کد 63131 را پیدا می‌کنید (برای مثال کلمه "turbofan").

شما می‌توانید این فرایند را چند بار دیگر (مثلاً پنج بار) تکرار کنید. در نهایت ممکن است به یک عبارت عبور پنج کلمه‌ای مانند "turbofan purge unfitting try pruning" برسید. اگر با تکنیک‌های تصویرسازی ذهنی آشنا باشید، به خاطر سپردن چنین عباراتی بسیار ساده‌تر از پسوردهای پیچیده خواهد بود و امنیت بی‌نظیری نیز به همراه دارد.

تولیدکننده عدد تصادفی کوانتومی از یک گوشی هوشمند نوکیا

در سال 2014، محققان دانشگاه ژنو موفق به ساخت یک تولیدکننده عدد تصادفی کوانتومی (QRNG) شدند که صرفاً با استفاده از دوربین یک گوشی هوشمند نوکیا N9 کار می‌کرد.

دوربین این گوشی تعداد فوتون‌هایی را که به هر پیکسل برخورد می‌کرد، شمارش می‌کرد. به عنوان منبع نور نیز از یک لامپ LED استاندارد استفاده شد. هر پیکسل در این دوربین 8 مگاپیکسلی توانست در یک بازه زمانی بسیار کوتاه، حدود 400 فوتون را ردیابی کند. در نهایت، مجموع تعداد فوتون‌های ثبت شده در تمامی پیکسل‌ها، به یک دنباله غیرقابل‌پیش‌بینی از اعداد تصادفی تبدیل شد.