הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   איך עובד ראנדומלאי? (https://hosts.co.il/forums/showthread.php?t=81695)

dabi 18-03-10 12:06

איך עובד ראנדומלאי?
 
הרי ברור שהמחשב לא יכול לבד להמציא מפסר ראנדומלאי
זה עובד על איזה נוסחא, אשמח לדעת איך

יניב בן צבי 18-03-10 14:29

זה עובד לפי השעון של המחשב עם נוסחא מסוימת

Shay Ben Moshe 18-03-10 14:39

יניב, לא תמיד משתמשים בשעון של המחשב.
בד"כ לוקחים איזשהו מספר או משהו דינאמי ומבצעים עליו הרבה פעולות מתמטיות מורכבות ככה שיהיה קשה מאוד לנחש את זה מראש.
יש דרך נוספת אבל היא דורשת חומרה וזה לדוגמה להשתמש בתזוזות אדמה בשביל זה, למדוד רעידות אדמה שאותן אנו לא יכולים לנבא ולהשתמש בזה לצורך חישובים.

יניב בן צבי 18-03-10 15:55

נשמע כאילו כתבת את הנוסחא או שאני מתבלבל חח

intercooler3819 18-03-10 16:34

שי יניב דווקא צודק
היום מספרים רנדומלים במחשב קשורים מאוד לשעון של המחשב..

Shay Ben Moshe 18-03-10 17:19

ניצן, זה לא תמיד נכון. יש מקרים שמשתמשים בזה (אני לדוגמה נוהג לקחת timestamp ולעשות לו md5 או משהו כזה) אבל בשיטות הצפנה מורכבות יוצרים איזשהו מספר על ידי פעולות מתמטיות ולאחר מכן מריצים עליו כל פעם פעולות מתמטיות אחרות.
אתה מוזמן לקרוא על זה בויקיפדיה גם =]
מה שחבל בכל העסק הזה שזה לא באמת רנדומאלי, משמע בעזרת חישובים מתמטיים מורכבים אפשר לדעת מה התוצאה תיהיה, לכן לפעמים משתמשים בגורמים שאין לנו שליטה עליהם כמו שציינתי לדוגמה רעשי אדמה, אבל זה ציוד חומרה די יקר.

Daniel 18-03-10 17:23

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 758675)
שי יניב דווקא צודק
היום מספרים רנדומלים במחשב קשורים מאוד לשעון של המחשב..

מספר רנדומלי מוגרל באמצעות seed.

זאת אומרת, יש פונקציה לדוגמא שמקבלת 3 ארגומנטים
קוד:

min, max, seed
(כאשר כמובן ברמה הגבוהה ביותר היא תקבל רק seed, אבל זה כבר משהו אחר - אפשר להתעלם מהסוגריים האלה).


כל עוד min, max ו-seed ישארו אותו הדבר - הפונקציה תוציא תמיד אותו פלט.
כמובן, שאפשר להחליף את ה-seed ועדיין לקבל את אותה התוצאה.

הרעיון הוא שה-seed, כל פעם מוגרל מחדש - על ידי שימוש בשעון הפנימי, בכל מיני הגדרות ודברים שלאנשים ש"מבחוץ" יהיה קשה לנחש.
מה הבעייתיות הגדולה?
נראה דוגמא ב-PHP למען הנוחות.
כדי להגדיר seed ב-PHP משתמשים בפונקציה srand. אגב, אחרי כל שימוש בפונקציה rand (יצירת מספר רנדומאלי, min, max), אוטומטית קוראים לפונקציה srand ללא ארגומנטים - משמע seed רנדומאלי.

נראה דוגמא ב-PHP:
קוד:

srand(100);
var_dump(rand(0,10));

לא משנה כמה פעמים תריצו מחדש - תמיד תגיעו לאותה תוצאה.

בעבר, לפני שאוטומטית נוצר seed רנדומאלי, לעיתים נהגו לעשות משהו הדומה ל-:
קוד:

srand(time());
הבעייתיות עם זה שקל מאוד לחזות את time, ואחרי מספר בדיקות אפשר לדעת מראש מה תיהיה התוצאה.
(אפשר לחשוב לבד איזה השלכות יש לזה).


וזה בקצרה איך שנוצרים מספרים רנדומאליים ודוגמא אחת לניצול לרעה.

yonatan 18-03-10 17:55

השעון היא שיטה אחת , ישנן עוד המון שיטות, למשל שימוש ב PID של התוכנה כמשתנה להוסיף את השעון ולהוסיף עוד ערכים ( אפשר להשתמש בטמפרטורה של המעבד גם כערך אפילו , אין גבול ).

אני ממליץ לעשות בלינוקס

tail -f /dev/psaux >>/tmp/random.txt

ולהזיז את העכבר לכיוונים שונים ( עכבר PS\2 )
:)
יותר ראנדומלי מזה לא תמצא...


כל הזמנים הם GMT +2. הזמן כעת הוא 07:10.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ