🎲 Tasodifiy raqamlar tasodifiymi?

🎲 Tasodifiy raqamlar tasodifiymi?

Otabek Nurmatov

Python dasturchilarning почти barchasi random modulidan foydalanadi ammo qiziq tomonida shundaki bu kutubxona qanday qilib tasodifiy raqamlarni bizga taqdim qilishini ko'pchiligimiz bilmaymiz. Keling bugun shu haqda gaplashamiz!

random modulini ichiga kirib ko'rsangiz komponentlarning nomlarini ko'rasizu ammo o'zini yo'q. Mana bu dokumentatsiyani o'qisangiz asosiy komponentlarni C dasturlash tilida yozilganiga guvoh bo'lasiz (modulni tez ishlashi uchun C dan foydalanishgan).

Ko'plab dasturlash tillari ushbu tasodifiy sonlarni hosil qilish uchun maxsus algoritmlardan foydalanadi. Qoidalar va ketma-ketliklar asosida hisoblangan sonlar qanday qilib tasodifiy bo'la olishi mumkin? Well bu algoritmlar sizga 100% tasodifiy sonni qaytarmasligini sizga ochiq oydin aytish vaqti keldi.

Siz PRNG ya'ni Pseudorandom number generator orqali yaratilgan soxta tasodifiy sonni olasiz. Python aynan Mersenne Twister tomonidan ishlab chiqilgan PRNGdan foydalanadi. Bundan kelib chiqadigan tushuncha, dasturlash matematika ustiga qurilgan.

Menimcha buncha tushunarsiz gaplardan keyin siz 😅


Random o'zi qanday ishlaydi?

Generator ishga tushishidan oldin unga seed (ya'ni ) nomli qiymat kiritiladi. Biror tasodifiy ketma-ketlikni xosil qilish uchun seedni o'rni katta ya'ni qiymat kiritilmasa tasodifiy ketma-ketlikni osmondan olib qo'yishni imkoni yo'q deyayabman. Dokumentatsiyaning random.seed() bo'limiga tushsangiz u yerda:

Agar seed kiritilmasa ishlab turgan tizim vaqti (ya'ni kompyuteringizdagi minut yoki sekunddagi raqamni nazarda tutayabdi) olinadi. Tizim vaqti (system clock)ning qiymati 1970 yil 1 yanvardan hozirgacha o'tgan sekundlar orqali hisoblanadi (e.g.1659338238.1275926).  Ko'rib turganingizdek soxta tasodifiy sonni xosil qilish uchun haqiqiy son kerak bo'ladi.

Aytishlaricha soxta tasodifiy raqamlar xavfsizlik muammolarini keltirib chiqarar ekan. Qanaqa xavfsizlik muammosi?

Siz Veb-ilova bor va siz u yerdagi klientlarning parollar, tokenlar va ... larini ximoyalash uchun encrypt ya'ni shiriflashingiz kerak. Shiriftlash uchun esa siz SECRET_KEYdan foydalanasiz (to'liqroq linklar orqali o'qib chiqing). Ko'p xollarda shu kalitlarni PRNGdan foydalanib yaratishlariga guvoh bo'lishimiz mumkin. Kimdir boshida kiritilgan seedni qiymatini aniqlay olsa sizning secret_keyingizni topish muammo bo'lmay qoladi ya'niki agar seedni aniqlay olsa random modul orqali secret_keyni aniqlash juda oson bo'lib qoladi.

Qolaversa seedning qiymatiga qarab tasodifiy raqamlarning qaytalanishi ham o'zgarib borar ekan. Misol uchun seed sifatida 800 kiritsangiz 1 000ta tasodifdan so'ng aniq qaytib keladi agar 8 000 kiritsangiz 10 000 tasodifdan so'ng sonlar o'zini takrorlaydi. Qancha kattaroq seed berilsa shunchalik ishonchlilashadi.

Foydali bo'lgan bo'lsa izohga o'z fikrizni yoki izhorlaringizni so'kib-so'kib yozishingiz mumkin!

Oldik☕️

Bollar biz yutamiz!

Fikrlar uchun kanal: @otabeknurmatov_1

Texnik kanal: @unotech_log

Report Page