نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

مولد اعداد شبه تصادفی. مولد اعداد شبه تصادفی

PRNG های قطعی

PRNG ها (PRNG) مولد اعداد شبه تصادفی هستند. همین اصطلاح اغلب برای توصیف PRBG - مولدهای بیت شبه تصادفی و همچنین رمزهای جریانی مختلف استفاده می شود. PRNG ها، مانند رمزهای جریان، از یک حالت داخلی (از 16 بیت تا چند مگابایت اندازه)، یک تابع برای مقداردهی اولیه حالت داخلی با یک کلید یا دانه ها، یک تابع به روز رسانی حالت داخلی و یک تابع خروجی تشکیل شده اند. PRNG ها به دو دسته محاسباتی ساده، رمزنگاری شکسته و قوی رمزنگاری تقسیم می شوند. هدف کلی آنها تولید دنباله هایی از اعداد است که از اعداد تصادفی قابل تشخیص نیستند.

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

هر PRNG با منابع محدود دیر یا زود گیر می کند. طول چرخه های PRNG به خود ژنراتور بستگی دارد و به طور متوسط ​​حدود 2 (n/2) است که در آن n اندازه حالت داخلی در بیت است، اگرچه ژنراتورهای خطی-همخوان و ژنراتورهای LFSR حداکثر چرخه های مرتبه 2 n دارند. اگر PRNG بتواند به چرخه های خیلی کوتاه همگرا شود، PRNG قابل پیش بینی و غیرقابل استفاده می شود.

اکثر ژنراتورهای ساده حسابی، اگرچه سریع هستند، اما از کاستی های جدی زیادی رنج می برند:

  • دوره/دوره های خیلی کوتاه
  • مقادیر متوالی مستقل نیستند
  • برخی بیت ها نسبت به بقیه "کمتر تصادفی" هستند
  • توزیع تک متغیره غیر یکنواخت
  • برگشت پذیری

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

PRNG با منبع آنتروپی یا RNG

در کنار نیاز موجود به تولید توالی هایی از اعداد تصادفی که به راحتی قابل تکرار هستند، نیاز به تولید اعداد کاملاً غیرقابل پیش بینی یا کاملاً تصادفی نیز وجود دارد. چنین ژنراتورهایی نامیده می شوند "مولد اعداد تصادفی" (مولد اعداد تصادفی) یا به اختصار RNG. از آنجایی که چنین ژنراتورهایی اغلب برای تولید کلیدهای متقارن و نامتقارن منحصر به فرد برای رمزگذاری استفاده می شوند، اغلب از ترکیبی از یک PRNG قوی رمزنگاری و یک منبع خارجی ساخته می شوند. بنابراین، از RNG اکنون مرسوم است که به معنای PRNG های مقاوم در برابر رمزنگاری با منبع خارجی آنتروپی باشد.

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

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

در اینجا چند نمونه از RNG ها با منابع آنتروپی و مولدهای آنها آورده شده است:

  • /dev/تصادفیدر / - منبع آنتروپی: با این حال، فقط در هنگام وقفه های سخت افزاری جمع آوری می شود. PRNG: LFSR، با خروجی هش شده از طریق ; مزایا: موجود در همه یونیکس ها، منبع قابل اعتماد آنتروپی. معایب: برای مدت طولانی "گرم می شود"، می تواند برای مدت طولانی "گیر کند" یا مانند PRNG کار می کند ( /dev/urandom);
  • بومادراناز - منبع آنتروپی: روشهای سنتی (منسوخ)؛ PRNG: AES-256 و حالت داخلی کوچک؛ مزایا: طراحی مقاوم در برابر رمزنگاری انعطاف پذیر. معایب - برای مدت طولانی "گرم می شود"، یک حالت داخلی بسیار کوچک، به قدرت رمزنگاری الگوریتم های انتخاب شده بستگی زیادی دارد، کند است، فقط برای تولید کلید قابل استفاده است.
  • ژنراتوراز لئونید یوریف (لئو یوریف) - منبع آنتروپی: نویز کارت صدا. PRNG: هنوز مشخص نیست. مزایا: به احتمال زیاد منبع خوب و سریع آنتروپی است. معایب - هیچ PRNG مستقل و آشکارا مقاوم در برابر رمزنگاری وجود ندارد، فقط به عنوان یک DLL برای ویندوز در دسترس است.
  • Microsoft CryptoAPI - منبع آنتروپی: زمان فعلی، اندازه هارد دیسک، اندازه حافظه آزاد، شناسه پردازش و نام کامپیوتر NETBIOS. PRNG: هش حالت داخلی 128 بیتی (هش فقط در نسخه های 128 بیتی ویندوز موجود است). مزایا - ساخته شده در ویندوز، "گیر نمی کند"؛ معایب - یک حالت داخلی کوچک، به راحتی قابل پیش بینی؛
  • جاوا SecureRandom - منبع آنتروپی: تعامل بین رشته ها (رشته ها). PRNG: هش حالت داخلی (1024 بیت)؛ مزایا - در جاوا هنوز گزینه دیگری وجود ندارد، یک حالت داخلی بزرگ. معایب: جمع آوری کند آنتروپی، اگرچه در جاوا هنوز گزینه دیگری وجود ندارد.
  • آشوباز Ruptor - منبع آنتروپی: به طور مداوم جمع آوری می شود. PRNG: هش حالت داخلی 4096 بیتی بر اساس نسخه غیر خطی ژنراتور Marsaglia. مزایا: در حالی که سریع ترین از همه، حالت داخلی بزرگ، "گیر نمی کند".

PRNG سخت افزاری

جدا از ژنراتورهای قدیمی شناخته شده LFSR که به طور گسترده به عنوان PRNG های سخت افزاری در قرن گذشته مورد استفاده قرار می گرفتند، متأسفانه اطلاعات کمی در مورد PRNG های سخت افزاری مدرن (رمزهای جریانی) وجود دارد، زیرا اکثر آنها برای اهداف نظامی توسعه یافته اند و مخفی نگه داشته می شوند. تقریباً تمام سخت افزارهای تجاری موجود PRNG ثبت اختراع هستند و همچنین مخفی نگه داشته می شوند. PRNG های سخت افزاری با الزامات سختگیرانه برای مصرف حافظه (اغلب استفاده از حافظه ممنوع است)، سرعت (1-2 چرخه) و مساحت (چند صد سلول FPGA یا ASIC) محدود شده است. با توجه به چنین الزامات سخت افزاری برای PRNG سخت افزاری، ایجاد یک ژنراتور مقاوم در برابر رمزنگاری بسیار دشوار است، بنابراین، تا کنون، تمام PRNG های سخت افزاری شناخته شده شکسته شده اند. نمونه هایی از این ژنراتورها Toyocrypt و LILI-128 هستند که هر دو ژنراتور LFSR هستند و هر دو با استفاده از حملات جبری شکسته شده اند.

به دلیل عدم وجود PRNG های سخت افزاری خوب، سازندگان مجبور به استفاده از رمزهای بلاک بسیار کندتر اما شناخته شده مانند AES و توابع هش مانند

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

دنباله اعداد تصادفی (X n ) با استفاده از برابری تکراری زیر به دست می آید:

X n +1 = (a X n + c) mod m

اگر m، a و c اعداد صحیح باشند، دنباله ای از اعداد صحیح در محدوده 0 X n ایجاد می شود.< m.

انتخاب مقادیر برای a، c و m برای ایجاد یک مولد اعداد تصادفی خوب حیاتی است.

بدیهی است که m باید بسیار بزرگ باشد تا بتوان اعداد تصادفی زیادی تولید کرد. اعتقاد بر این است که m باید تقریباً برابر با حداکثر عدد صحیح مثبت برای این رایانه باشد. بنابراین، معمولا m نزدیک یا مساوی 2 31 است.

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

1. تابع باید یک دوره کامل ایجاد کند، i.e. همه اعداد بین 0 و m قبل از اینکه اعداد تولید شده شروع به تکرار کنند.

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

3. تابع باید به طور موثر بر روی پردازنده های 32 بیتی پیاده سازی شود.

مقادیر a، c و m باید به گونه ای انتخاب شوند که این سه معیار برآورده شوند. مطابق با معیار اول، می توان نشان داد که اگر m اول باشد و c = 0 باشد، برای مقدار معینی از a، دوره ایجاد شده توسط تابع برابر با m-1 خواهد بود. برای محاسبات 32 بیتی، مقدار اول متناظر m = 2 31 - 1 است. بنابراین، تابع تولید اعداد شبه تصادفی:

X n +1 = (a X n) مد (2 31 - 1)

فقط تعداد کمی از مقادیر یک هر سه معیار را برآورده می کند. یکی از این مقادیر a = 7 5 = 16807 است که در خانواده کامپیوترهای IBM 360 استفاده می شد.این مولد به طور گسترده ای مورد استفاده قرار می گیرد و بیش از هزار تست را پشت سر گذاشته است، بیش از همه مولدهای اعداد شبه تصادفی دیگر.

نقطه قوت الگوریتم همگرای خطی این است که اگر عامل و مدول (پایه) به طور مناسب انتخاب شوند، دنباله اعداد حاصل از ترتیبی که تصادفی از مجموعه 1، 2، ...، m- هستند، از نظر آماری قابل تشخیص نیستند. 1. اما بدون توجه به انتخاب مقدار اولیه X 0، هیچ تصادفی در توالی به دست آمده با استفاده از الگوریتم وجود ندارد. اگر مقداری انتخاب شده باشد، اعداد باقیمانده در دنباله از پیش تعریف خواهند شد. این همیشه در تحلیل رمزی در نظر گرفته می شود.



اگر حریف بداند که از الگوریتم همگرای خطی استفاده شده است و اگر پارامترهای آن شناخته شده باشد (a = 7 5 , c = 0, m = 2 31 - 1) آنگاه اگر یک عدد آشکار شود، کل دنباله اعداد مشخص می شود. . حتی اگر حریف فقط بداند که از الگوریتم همگام خطی استفاده شده است، دانستن قسمت کوچکی از دنباله برای تعیین پارامترهای الگوریتم و تمام اعداد بعدی کافی است. فرض کنید که دشمن می تواند مقادیر X 0 , X 1 , X 2 , X 3 را تعیین کند. سپس:

X 1 \u003d (a X 0 + c) mod mX 2 \u003d (a X 1 + c) mod mX 3 \u003d (a X 2 + c) mod m

این برابری ها به ما اجازه می دهد که a، c و m را پیدا کنیم.

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

الگوریتم تولید اعداد شبه تصادفی نامیده می شود الگوریتم BBS(از نام نویسندگان - L. Blum، M. Blum، M. Shub) یا مولد باقیمانده درجه دوم. برای اهداف رمزنگاری، این روش در سال 1986 پیشنهاد شد.

به شرح زیر می باشد. ابتدا دو عدد اول بزرگ 1 عدد صحیح مثبت بزرگتر از یک نامیده می شود ساده، اگر بر عدد دیگری غیر از خودش و یک بخش پذیر نباشد. برای اطلاعات بیشتر در مورد اعداد اول رجوع کنید "مبانی نظریه اعداد مورد استفاده در رمزنگاری کلید عمومی". اعداد p و q اعداد p و q باید هر دو باشند قابل مقایسهبا 3 مدول 4 یعنی در هنگام تقسیم p و q بر 4 باید همان باقیمانده 3 بدست آید سپس عدد M = p * q که عدد صحیح بلوم نامیده می شود محاسبه می شود. سپس یک عدد صحیح تصادفی دیگر x، coprime (یعنی بدون مقسوم علیه مشترک به جز یک) با M انتخاب می شود. x0= x 2 mod M را محاسبه کنید. x 0 عدد شروع مولد نامیده می شود.

در هر مرحله n ام ژنراتور، x n+1 = x n 2 mod M محاسبه می شود. نتیجه گام n یک بیت (معمولا کم اهمیت ترین) x n+1 است. گاهی اوقات بیت های برابری به عنوان نتیجه گرفته می شوند، یعنی تعداد یک ها در نمایش باینری عنصر. اگر تعداد واحدها در ورودی عدد زوج باشد - بیت برابری برابر با 0 در نظر گرفته می شود، فرد - بیت برابری برابر با 1 در نظر گرفته می شود.

مثلا، اجازه دهید p = 11، q = 19 (ما مطمئن می شویم که 11 mod 4 = 3، 19 mod 4 = 3). سپس M = p* q = 11*19=209 . x coprime را به M انتخاب می کنیم: اجازه دهید x = 3 باشد. عدد شروع مولد x 0 را محاسبه کنید:

x 0 = x 2 mod M = 3 2 mod 209 = 9 mod 209 = 9.

ده عدد اول x i را با استفاده از الگوریتم BBS محاسبه کنید. ما کم‌ترین بیت را در نمایش دودویی عدد x i به‌عنوان بیت‌های تصادفی می‌گیریم:

x 1 = 9 2 mod 209 = 81 mod 209 = 81 بیت کم: 1
x 2 \u003d 81 2 mod 209 \u003d 6561 mod 209 \u003d 82 بیت کم: 0
x 3 = 82 2 mod 209 = 6724 mod 209 = 36 بیت کم: 0
x 4 = 36 2 mod 209 = 1296 mod 209 = 42 بیت کم: 0
x 5 = 42 2 mod 209 = 1764 mod 209 = 92 بیت کم: 0
x 6 = 92 2 mod 209 = 8464 mod 209 = 104 بیت کم: 0
x 7 \u003d 104 2 mod 209 \u003d 10816 mod 209 \u003d 157 بیت کم: 1
x 8 \u003d 157 2 mod 209 \u003d 24649 mod 209 \u003d 196 بیت کم: 0
x 9 \u003d 196 2 mod 209 \u003d 38416 mod 209 \u003d 169 بیت کم: 1
x 10 \u003d 169 2 mod 209 \u003d 28561 mod 209 \u003d 137 بیت کم: 1

جالب ترین ویژگی این روش برای اهداف عملی این است که برای به دست آوردن عدد n از دنباله، نیازی به محاسبه تمام n عدد قبلی x i نیست. معلوم می شود که x n را می توان بلافاصله با فرمول به دست آورد

به عنوان مثال، بیایید x 10 را بلافاصله از x 0 محاسبه کنیم:


در نتیجه، ما واقعاً همان مقدار را در محاسبه متوالی دریافت کردیم - 137. محاسبات بسیار پیچیده به نظر می رسند، اما در واقع به راحتی می توان آنها را در یک برنامه یا رویه کوچک جمع کرد و در صورت لزوم از آنها استفاده کرد.

توانایی دریافت xn "مستقیم" استفاده از الگوریتم BBS را برای رمزگذاری جریان، به عنوان مثال، برای فایل های دسترسی تصادفی یا قطعاتی از فایل ها با سوابق پایگاه داده امکان پذیر می کند.

امنیت الگوریتم BBS بر اساس دشواری فاکتورگیری یک عدد بزرگ M است. استدلال می شود که اگر M به اندازه کافی بزرگ باشد، حتی ممکن است مخفی بماند. تا زمانی که M در نظر گرفته نشود، هیچکس نمی تواند خروجی ژنراتور PRNG را پیش بینی کند. این به این دلیل است که اگر فقط n بدانیم، مشکل فاکتورسازی اعداد به شکل n = pq (p و q اعداد اول هستند) به ضرایب از نظر محاسباتی بسیار دشوار است، اگر فقط n بدانیم، و p و q اعداد بزرگی هستند که از چندین ده یا چند ده تشکیل شده اند. صدها بیت (به اصطلاح مشکل فاکتورسازی).

علاوه بر این، می توان ثابت کرد که یک مهاجم، با دانستن برخی از دنباله های تولید شده توسط مولد BBS، نمی تواند بیت های قبلی یا بیت های بعدی را تعیین کند. ژنراتور BBS غیر قابل پیش بینی در جهت چپو در جهت درست. این ویژگی برای اهداف رمزنگاری بسیار مفید است و همچنین به ویژگی های فاکتورگیری عدد M مربوط می شود.

مهمترین اشکال الگوریتم این است که به اندازه کافی سریع نیست، که اجازه نمی دهد در بسیاری از زمینه ها استفاده شود، به عنوان مثال، در محاسبات بلادرنگ، و، متاسفانه، در رمزگذاری جریان.

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

شرایط کلیدی

رمز جریان- رمز جریان.

الگوریتم BBSیکی از روش های تولید اعداد شبه تصادفی است. نام الگوریتم از نام نویسندگان - L. Blum، M. Blum، M. Shub گرفته شده است. این الگوریتم را می توان در رمزنگاری استفاده کرد. برای محاسبه عدد بعدی x n+1 طبق الگوریتم BBS، از فرمول x n+1 \u003d x n 2 mod M استفاده می شود که در آن M \u003d pq حاصلضرب دو عدد اول بزرگ p و q است.

مولد اعداد شبه تصادفی (PRNG)- برخی از الگوریتم ها یا دستگاه هایی که دنباله ای از بیت ها را ایجاد می کند که به نظر تصادفی می رسد.

مولد همگرای خطیاعداد شبه تصادفی یکی از ساده ترین PRNG ها است که از فرمول k i =(a*k i-1 +b)mod c برای محاسبه عدد بعدی k i استفاده می کند، جایی که a، b، c چند ثابت هستند، a k i-1. قبلی است عدد شبه تصادفی.

روش فیبوناچی با تاخیریکی از روش های تولید اعداد شبه تصادفی است. قابل استفاده در رمزنگاری

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

خلاصه ای مختصر

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

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

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

"دانه" داده های اولیه برای فرمول است. برای مثال می تواند زمان سیستم بر حسب میلی ثانیه باشد که دائماً در حال تغییر است. بنابراین، "دانه" دائما متفاوت خواهد بود. یا برنامه نویس می تواند خودش آن را تنظیم کند.

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

این آموزش توابع random()، randrange() و randint() را از ماژول تصادفی پوشش می دهد. توجه داشته باشید که ماژول تصادفی حاوی تابع تصادفی() با همین نام است. اتفاق می افتد.

برای دسترسی به توابع، باید ماژول تصادفی را وارد کنید:

>>> واردات تصادفی

یا توابع فردی را از آن وارد کنید:

>>> از واردات تصادفی تصادفی، random، randint

توابع برای بدست آوردن اعداد تصادفی اعداد صحیح - randint() و randrange()

توابع randint() و randrange() اعداد صحیح شبه تصادفی تولید می کنند. اولین آنها ساده ترین است و همیشه فقط دو آرگومان می گیرد - حدود محدوده عدد صحیح که از آن هر عددی انتخاب می شود:

>>> تصادفی .randint (0 , 10 ) 6

یا (اگر توابع جداگانه وارد شده باشد):

>>> randint(100، 200) 110

در مورد randint()، هر دو مرز در محدوده گنجانده شده است، به عنوان مثال، در زبان ریاضیات، بخش به صورت .

اعداد می توانند منفی باشند:

>>> تصادفی .randint (-100، 10) -83 >>> تصادفی .randint (-100، -10) -38

اما عدد اول باید همیشه کمتر یا حداقل برابر با عدد دوم باشد. یعنی الف<= b.

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

برترین مقالات مرتبط